Facebook
From tudy, 11 Months ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 182
  1. `timescale 1ns / 1ps
  2.  
  3.  
  4. module moore(
  5.     input clock,
  6.     input in_50,
  7.     input in_100,
  8.     input reset,
  9.     output reg cioco
  10.     );
  11.    
  12.  
  13. localparam Q0 = 3'b000;
  14. localparam Q50 = 3'b001;
  15. localparam Q100 = 3'b010;    
  16. localparam Q150 = 3'b011;
  17. localparam Q200 = 3'b100;
  18. localparam Q250 = 3'b101;
  19. localparam Q300 = 3'b110;  
  20. localparam Q350 = 3'b111;
  21.  
  22. reg [2:0] state, state_next;
  23.  
  24.  
  25. always @(posedge clock) begin
  26.     if(reset == 1)
  27.         state <= Q0;
  28.     else
  29.         state<=state_next;
  30. end
  31.  
  32. always @(*) begin
  33.  
  34.     state_next=state;
  35.    
  36.     case(state_next)
  37.         Q0: begin
  38.        
  39.         if(in_50==0 && in_100==0)
  40.             state_next=Q0;
  41.         else
  42.             if(in_50==1 && in_100==0)
  43.                 state_next=Q50;
  44.             else
  45.                 if(in_50==0 && in_100==1)
  46.                     state_next=Q100;
  47.                 else
  48.                     state_next=Q150;
  49.         end
  50.        
  51.         Q50: begin
  52.        
  53.         if(in_50==0 && in_100==0)
  54.             state_next=Q50;
  55.         else
  56.             if(in_50==1 && in_100==0)
  57.                 state_next=Q100;
  58.             else
  59.                 if(in_50==0 && in_100==1)
  60.                     state_next=Q150;
  61.                 else
  62.                     state_next=Q200;
  63.         end
  64.        
  65.         Q100: begin
  66.        
  67.         if(in_50==0 && in_100==0)
  68.             state_next=Q100;
  69.         else
  70.             if(in_50==1 && in_100==0)
  71.                 state_next=Q150;
  72.             else
  73.                 if(in_50==0 && in_100==1)
  74.                     state_next=Q200;
  75.                 else
  76.                     state_next=Q250;
  77.         end
  78.  
  79.         Q150: begin
  80.                
  81.                 if(in_50==0 && in_100==0)
  82.                     state_next=Q150;
  83.                 else
  84.                     if(in_50==1 && in_100==0)
  85.                         state_next=Q200;
  86.                     else
  87.                         if(in_50==0 && in_100==1)
  88.                             state_next=Q250;
  89.                         else
  90.                             state_next=Q300;
  91.                 end
  92.        
  93.         Q200: begin
  94.        
  95.         if(in_50==0 && in_100==0)
  96.             state_next=Q200;
  97.         else
  98.             if(in_50==1 && in_100==0)
  99.                 state_next=Q250;
  100.             else
  101.                 if(in_50==0 && in_100==1)
  102.                     state_next=Q300;
  103.                 else
  104.                     state_next=Q350;
  105.         end
  106.        
  107.         Q250: begin
  108.        
  109.         if(in_50==0 && in_100==0)
  110.             state_next=Q0;
  111.         else
  112.             if(in_50==1 && in_100==0)
  113.                 state_next=Q50;
  114.             else
  115.                 if(in_50==0 && in_100==1)
  116.                     state_next=Q100;
  117.                 else
  118.                     state_next=Q150;
  119.         end
  120.        
  121.         Q300: begin
  122.        
  123.         if(in_50==0 && in_100==0)
  124.             state_next=Q50;
  125.         else
  126.             if(in_50==1 && in_100==0)
  127.                 state_next=Q100;
  128.             else
  129.                 if(in_50==0 && in_100==1)
  130.                     state_next=Q150;
  131.                 else
  132.                     state_next=Q200;
  133.         end
  134.        
  135.         Q350: begin
  136.        
  137.         if(in_50==0 && in_100==0)
  138.             state_next=Q100;
  139.         else
  140.             if(in_50==1 && in_100==0)
  141.                 state_next=Q150;
  142.             else
  143.                 if(in_50==0 && in_100==1)
  144.                     state_next=Q200;
  145.                 else
  146.                     state_next=Q250;
  147.         end
  148. endcase
  149.  
  150. end
  151.  
  152.  
  153. always @(*) begin
  154.  
  155. if(state==Q250 || state==Q300 || state==Q350)
  156.     cioco=1;
  157. else
  158.     cioco=0;
  159.  
  160. end
  161.  
  162.    
  163.    
  164. endmodule
  165.