Tengo la tarea de construir un detector de secuencia
Aquíestáelcódigo:
/*ThisdesignmodelsasequencedetectorusingMealyFSM.*Wheneverthesequence1101occurs,outputgoeshigh.*Overlappingsequencesareallowed.*/modulefirstFSM(inputwireclk,inputwirerst,inputwiresequence,outputregtick);//Statedeclarationslocalparama=2'b00;localparamb=2'b01;localparamc=2'b10;localparamd=2'b11;//SignalsregpresentState;regnextState;//Stateassignmentsalways@(posedgeclk,posedgerst)beginif(rst)presentState<=a;elseif(clk)presentState<=nextState;end//Nextstatelogicalways@*begin//DefaultorunassignedstatesremainsamenextState=presentState;tick=1'b0;case(presentState)a:if(sequence)nextState=b;b:beginif(sequence)nextState=c;elsenextState=a;endc:if(~sequence)nextState=d;d:beginif(sequence)begintick=1'b1;nextState=b;endelsenextState=a;enddefault:begintick=1'b0;nextState=a;endendcaseendendmodule
Aquíestáelbancodepruebas
'timescale1ns/1nsmodulefirstFSMTest;//Signalsregclk,rst;regsequence;wiretick;//Initialiseregportsinitialbeginclk=1'b0;sequence=1'b0;end//Setinitialresetinitialbeginrst=1'b1;#30rst=1'b0;end//Setoccuranceofsequenceinitialbegin#30sequence=1'b1;#20sequence=1'b0;#20sequence=1'b0;#20sequence=1'b1;#20sequence=1'b1;#20sequence=1'b0;#20sequence=1'b1;#20sequence=1'b0;#20sequence=1'b1;end//InitialiseuutfirstFSMuut(.clk(clk),.rst(rst),.sequence(sequence),.tick(tick));always#10clk=~clk;endmodule
Aquíestálasalida
Como puede ver, la secuencia 1101 ocurre después de la línea amarilla.
Pero no importa lo que haga, la salida no es alta. Estoy bastante seguro de que el diseño y la tb son correctos. Entonces, ¿dónde está el error?
(¿Estos y otros verilog Q se adaptan mejor al desbordamiento de pila o EE? Por favor, migre si cree que esto no pertenece aquí)
Gracias.