【发布时间】:2013-11-21 02:21:39
【问题描述】:
我正在用 verilog 制作一个状态机,以根据用户输入实现某些算术函数。但是,我遇到了障碍。我的第一个 always 块,即处理我的重置并保持正确状态的块,没有按预期运行;它没有正确更新状态。代码如下:
always @ (posedge CLOCK_50 or negedge RESET) begin
if(RESET == 1'b0)
STATE <= BASE;
else
STATE <= NEXT_STATE; // this always block, and specifically this line, is //not executing correctly.
end
这是文件在复位时的一般输出,然后在 SW = 0000 的情况下按下三个按钮 (KEY[1]):
编辑:添加了实际 CLOCK_50 和 RESET 信号的波形
至于我的问题,我只想知道我在这部分代码中做错了什么。我想不出它有这样的行为的理由。感谢您提供的任何帮助。
EDIT2:FFS,我将块更改为否定 CLOCK_50,现在它正在工作。如果你能告诉我,我真的很想知道为什么。
【问题讨论】:
-
您的波形上的
CLOCK_50在哪里?我只看到一个名为CLOCK的信号。 -
抱歉,只是从测试台到模块实例化的名称不同。它们是相同的信号。
-
如果您显示实际时钟并在波形上正确重置(实际在模块内的那些),我会更有信心。除了没有连接时钟或重置之外,我看不出任何原因为什么
STATE在时钟上升时不采用NEXT_STATE的值。 -
好的,我会制作一个新的波形。
-
@Tim 在 OP 中确定新波形。
标签: verilog