奇怪的问题< = verilog中的运算符

时间:2015-02-08 22:36:03

标签: verilog

我正在尝试将状态分配给FSM机器中的寄存器@(posedge clk)和reset = 1.但是,语句:state< = 2'b00;根本无法设置state = 2'b00。我通过调试检查了这个语句状态< = 2'b00确实已经被移除了。我真的不知道问题出在哪里。

在某些寄存器无法使用“< =”分配值时,我在其他情况下遇到了类似的问题,但有些寄存器可能在同一块寄存器中。

如果它们有两位,那些无法取值的寄存器只显示为2'bxx。

有人知道可能导致问题的原因吗?

2 个答案:

答案 0 :(得分:0)

看看你的解释,我想你的代码是这样的。

总是@(posedge clk和reset = 1) 州< = 2'b00;

这些是你正在犯的错误。 1.灵敏度列表不能是边沿触发信号和电平触发信号的组合。 2.对于条件操作,您应该使用“==”,而不是“=”。

您的操作的理想代码是,

总是@(posedge clk)    if(reset == 1)       州< = 2'b00;

答案 1 :(得分:0)

我实际使用的方法与我在代码中使用时钟和重置信号的方式相同。但是,我的问题是我在always块的开头重置了状态。然后,在同一个always块内的case语句中,我使用了默认情况将状态恢复到任意状态。这个错误我仍然有点困惑。但是,无论如何,在我删除此默认语句后,一切都恢复正常。

感谢。