最近折腾状态机,发现一个小任务对于两段式状态机写法是不可能完成的。这个小任务很简单,先看用一段式状态机实现的代码:
module test(
clk,rst_n,
din,dout
);
input clk;
input rst_n;
input din;
output[3:0] dout;
parameter IDLE = 3'd0;
parameter STA1 = 3'd1;
//一段式写法
reg[2:0] cstate;
reg[3:0] cnt;
always @(posedge clk or negedge rst_n)
if(!rst_n) cstate <= IDLE;
else begin
case(cstate)
IDLE: begin
cnt <= 4'd0;
if(din) cstate <= STA1;
else cstate <= IDLE;
end
STA1: begin
cnt <= cnt+1'b1;
if(cnt == 4'd10) cstate <= IDLE;
else cstate <= STA1;
end
default: cstate <= IDLE;
endcase
end
assign dout = cnt;
endmodule
同样的,用三段式状态机也能够实现这个功能:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)