Advertisement
kekellner

Lab07 - Ej02 - FSM

Oct 11th, 2021 (edited)
2,123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  module FSM_moore(input A, B, clk, reset, output reg Q, output [1:0] state);
  2.     reg [1:0] state, next_state;
  3.     parameter S0 = 2'b00, S1 = 2'b01, S2 = 2'b10;
  4.  
  5.     // Nube combinacional para calcular el estado futuro
  6.     always @ (A or B or state) begin
  7.         case (state)
  8.             S0:
  9.                 if (A == 1)
  10.                     next_state <= S1; // No incluimos 'begin' y 'end' porque sólo es 1 instrucción dentro del 'case'
  11.                 else
  12.                     next_state <= S0;
  13.             S1:
  14.                 if (B == 1)
  15.                     next_state <= S2;
  16.                 else
  17.                     next_state <= S0;
  18.             S2:
  19.                 next_state <= S0;
  20.             default: next_state <= S0; // Incluímos el 'default' para que la sintetización sea lógica combinacional y no secuencial
  21.         endcase
  22.     end
  23.  
  24.     // Banco de flip flops
  25.     always @ (posedge clk or posedge reset) begin
  26.  
  27.         if (reset == 1)
  28.             state <= S0;
  29.         else
  30.             state <= next_state;
  31.     end
  32.  
  33.     // Nube combinacional para calcular la salida
  34.     always @ (state) begin
  35.         case (state)
  36.             S0: Q <= 0;
  37.             S1: Q <= 0;
  38.             S2: Q <= 1;
  39.             default: Q <= 0;
  40.         endcase
  41.     end
  42.  
  43. endmodule
  44.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement