Estoy tratando de implementar un contador de 8 bits que realiza tanto BCD (Binary Code decimal) como una secuencia de código gris. Si el control de entrada = 0, el circuito contará en BCD y si el control de entrada = 1, el circuito contará en secuencia de código gris. Aquí está mi implementación:
module grayBCDcounter(
input clk, control,
output reg [2:0] y1,
);
reg [2:0] state // there will be 8 states: 1st state :000
// 2nd state: 001, 3rd state: 010 and so on
// my last state will be 111
parameter s0=3'b000, s1=3'b001, s2=3'b010, s3=3'b011,
s4=3'b100, s5=3'b101, s6=3'b110, s7=3'b111;
always @ (posedge clk)
begin
case(state)
s0: state <= s0;
s1: state <= s1;
s2: if (control == 0)
begin
state <= s2;
end
else if(control ==1)
begin
state <= s3;
end
s3: // and so on
endcase
end
always @ (posedge clk)
begin
if (state == s0)
begin
y1 <= 0;
end
else if(state == s1)
begin
y1 <= 1;
end
else if // so on
end
end
endmodule
Cuando la variable de control es 0, quiero ejecutar s0, s1, s2, s3, s4, s5, etc., como puede ver (BCD), y cuando la variable de control es 1, quiero ejecutar s0, s1 , s3, s2, s6, s7, s5, s4 respectivamente (código gris)
Cuando ejecuto un caso de prueba en él, de alguna manera solo se imprime s0 y parece ser constante durante la ejecución. Mi conjetura es que el estado nunca sale de s0.
¿Algún consejo sobre cómo debo implementar los códigos?