VL21 根据状态转移表实现时序电路
点击进入题目
用三段式解法,之前图省事,中间部分nstate的赋值,一般都在always后面的括号直接写(*)
,这次试着加入变量,结果理解不到位漏写state
,特此记录
`timescale 1ns/1ns
module seq_circuit(
input A ,
input clk ,
input rst_n,
output wire Y
);
parameter s0=0,s1=1,s2=2,s3=3;
reg [1:0]state,nstate;
always @(posedge clk or negedge rst_n)begin
if(!rst_n)
state <=0;
else
state <= nstate;
end
always @(A or state)begin//此处容易漏写
case(state)
s0:nstate=A?s3:s1;
s1:nstate=A?s0:s2;
s2:nstate=A?s1:s3;
s3:nstate=A?s2:s0;
default:nstate=s0;
endcase
end
assign Y=(state==s3)?1:0;
endmodule