【发布时间】:2020-03-27 17:04:36
【问题描述】:
我一直在使用 Altera 的 Quartus II 和 terASIC DE10 板来研究 Verilog,但现在发生了一些意想不到的事情。
为了调试,我是通过一个开关来驱动一个LED,在两者之间,我插入了一个模块: switch-module-led
模块代码如下,变量to_led的值会随着in_clock_counter[0]的变化而更新。
module in_out (
input [31:0] in_clock_counter,
input from_switch,
output reg to_led
);
always @ (posedge in_clock_counter)
begin
if (from_switch)
to_led <= 1'b1;
else
to_led <= 1'b0;
end
endmodule
我希望如果我按下开关,LED 会亮起。但这种情况并非如此。 使用 Simulation Waveform Editor 我可以看到 LED 值发生了变化。我做错了什么?
【问题讨论】:
-
首先检查 1/ 引脚分配是否正确。 2/ 如果还是不行。删除时钟,只需切换到输出(这是在您假设的时钟不存在的情况下)
-
嗨@Oldfart,非常感谢你再次帮助我。 LED 被分配到正确的引脚:我仔细检查了它,但值得一试。如果我写一个简单的'assign to_led = from_switch',当按键被按下时,LED实际上会亮起。我的目标是通过 if 语句设置输出,因此仅将输入值分配给输出是不够的。可能是因为两者都是 wire 类型的?
-
我尝试的另一种方法是在 if 语句中有一个 reg 变量,然后将 reg 变量分配给输出。这也不起作用。我发现模拟实际上显示了所需的输出,但电路板没有。我有很多东西要学!
-
好吧,我 am 变老了:我完全错过了时钟作为矢量出现(正如 Justin N 所指出的那样)。做到这一点,你的成功机会就会增加 3100% 还要遵循贾斯汀的建议:不要使用派生时钟。
-
嗨@Oldfart,我理解您对用作时钟的向量的担忧,我同意:编译器给了我一些警告。我连接了从 PLL 块出来的时钟,但没有成功。我使用 PLL 模块来获得较低的频率速率,比原始时钟频率低十倍。然后我直接从 CLOCK_50 引脚连接时钟,这是系统时钟,系统按预期工作。我有点困惑:创建恒定时钟频率不是必需的 PLL 块吗?我是这么想的。感谢您的帮助!
标签: verilog intel-fpga