2015-02-08 29 views
-2

我想一个FSM中的状态机@(posedge时钟)分配到寄存器和复位= 1。然而,声明:状态< = 2'b00;根本无法设置状态= 2'b00。我通过调试来检查这个语句状态< = 2'b00确实已经被越过了。我真的不知道问题出在哪里。奇怪的问题<=运算符的Verilog

我遇到在其他情况下类似的问题当某些寄存器不能被分配使用“< =”的值,但是一些可以是在相同的总阻塞。

,可能用不了值这些寄存器仅仅显示为2'bxx如果他们有两位。

有谁知道什么可能导致此问题?

+1

请问您可以发布您的代码吗? – e19293001 2015-02-09 02:21:57

回答

0

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

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

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

理想代码是,

总是@(posedge时钟) 如果(复位== 1) 状态< = 2'b00;

0

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

谢谢。