这是一个实践问题,我认为这是正确的方法。当x = 0时,我不知道要找出什么。我是一个verilog hdl新手,因此不确定这是否是一个有效的状态机模块。请指出任何错误。
Module SM(input x, clk, output z)
reg[1:0] s, next_s;
always @(posedge clk)
s <= next_s;
always @(x,s) begin
if (x == 1)begin
next_s <= s + 1'b1;
else
next_s <= ?????
end
end
assign z = ~{s[0],s[1]};
endmodule
答案 0 :(得分:0)
几个笔记:
always@ (*)
作为组合逻辑,而不是手动指定灵敏度列表。 <=
),但在组合块中阻塞分配(=
)。z
的作业不正确(您可能想要s[1] == s[0]
)x==1
时递减,在x==0
时递增,而在x==1
情况下递增,并且没有为x==0
增加任何内容{1}}。否则,它看起来不错!