我正在尝试将状态分配给FSM机器中的寄存器@(posedge clk)和reset = 1.但是,语句:state< = 2'b00;根本无法设置state = 2'b00。我通过调试检查了这个语句状态< = 2'b00确实已经被移除了。我真的不知道问题出在哪里。
在某些寄存器无法使用“< =”分配值时,我在其他情况下遇到了类似的问题,但有些寄存器可能在同一块寄存器中。
如果它们有两位,那些无法取值的寄存器只显示为2'bxx。
有人知道可能导致问题的原因吗?
答案 0 :(得分:0)
看看你的解释,我想你的代码是这样的。
总是@(posedge clk和reset = 1) 州< = 2'b00;
这些是你正在犯的错误。 1.灵敏度列表不能是边沿触发信号和电平触发信号的组合。 2.对于条件操作,您应该使用“==”,而不是“=”。
您的操作的理想代码是,
总是@(posedge clk) if(reset == 1) 州< = 2'b00;
答案 1 :(得分:0)
我实际使用的方法与我在代码中使用时钟和重置信号的方式相同。但是,我的问题是我在always块的开头重置了状态。然后,在同一个always块内的case语句中,我使用了默认情况将状态恢复到任意状态。这个错误我仍然有点困惑。但是,无论如何,在我删除此默认语句后,一切都恢复正常。
感谢。