/*+FHDR--------------------------------------------------------
file name: counter4.v
Author: Clarke.Lee
E-mail: clarke.lee@163.com
--------------------------------------
Keywords: Counter
//-FHDR---------------------------------------------------------*/
module counter4(clk,
reset,
cout,
out);
input clk;
input reset;
output cout;
output [1:0] out;
reg cout;
reg [1:0] out;
reg [1:0] counter;
always@(posedge clk)
if(!reset)
begin
out <= 0;
counter <= 0;
end
else if(counter<4)
begin
cout <= 0;
counter <= (counter + 1);
out <= counter;
end
else
begin
out <= 0;
counter <= 0;
cout <= 1;
end
endmodule
如此设计的状态机仿真后没有cout送出,原因是两位的counter是不能表示4的,所以这个状态机变成了“无限状态机”。
有限状态机是由寄存器组和组合逻辑构成的硬件时序电路,其状态(即由寄存器组的1和0的组合状态所构成的有限个状态)只可能在同一时钟跳变沿的情况下才能从一个状态转向另一个状态,究竟转向哪一状态还是留在原状态不但取决于各个输入值,还取决于当前所在状态。
究竟应该怎么设计模4的状态机呢?
改进了一下:
/*+FHDR--------------------------------------------------------
file name: counter4.v
Author: Clarke.Lee
E-mail: clarke.lee@163.com
--------------------------------------
Keywords: Counter
//-FHDR---------------------------------------------------------*/
module counter4(clk,
reset,
cout,
out);
input clk;
input reset;
output cout;
output [1:0] out;
wire cout;
wire [1:0] out;
reg [1:0] counter;
assign cout = ~(out[1]|out[0]);
assign out = counter;
always@(posedge clk or negedge reset)
if(!reset)
begin
counter <= 0;
end
else if(counter<3)
begin
counter <= (counter + 1);
end
else
begin
counter <= 0;
end
endmodule