“三段式”状态机的Verilog HDL 代码模板如下:
//状态调转
always @(posedge clk) begin
if (!rst_n)
state <= idle;
else
state <= next_state;
end
//下一状态的计算
always @(*) begin ///原本的always @(state) begin,发现老是调不通,状态不跳转,把state改成*后 就行了。
case(state) ///原因是三个always是分别独立的,上一个state的变化没有触发,这个always的执行,所以用*
s0: next_state = ; //触发always里的状态变化
s1: next_state = ;
...
endcase
end
//输出逻辑的处理
always @(posedge clk) begin
case(state)
s0: begin
out1 <= ;
out2 <= ;
...
end
s1: begin
out1 <= ;
out2 <= ;
...
end
...
end
end
//状态调转
always @(posedge clk) begin
if (!rst_n)
state <= idle;
else
state <= next_state;
end
//下一状态的计算
always @(*) begin ///原本的always @(state) begin,发现老是调不通,状态不跳转,把state改成*后 就行了。
case(state) ///原因是三个always是分别独立的,上一个state的变化没有触发,这个always的执行,所以用*
s0: next_state = ; //触发always里的状态变化
s1: next_state = ;
...
endcase
end
//输出逻辑的处理
always @(posedge clk) begin
case(state)
s0: begin
out1 <= ;
out2 <= ;
...
end
s1: begin
out1 <= ;
out2 <= ;
...
end
...
end
end