我一直在与Altera的Quartus II和terASIC DE10板一起研究Verilog。我取得了一些进展,但现在发生了意外情况。
为了进行调试,我通过开关驱动LED,并且在两者之间插入了一个模块。switch-module-led
模块代码如下,每次in_clock_counter [0]更改时,变量to_led的值都会更新。
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值发生了变化。
我缺少什么吗?
谢谢您的帮助:)
通过将多位向量传递到posedge
灵敏度列表,您可能会混淆该工具。这是一件非常不寻常的事情,所以我不会相信像这样的综合工具链。
在FPGA中使用逻辑输出作为时钟信号还有其他复杂性。因为您的模块很琐碎,但这不太可能成为您的直接问题,但可能会导致您遇到麻烦。您应该考虑在那里使用普通时钟信号,并创建逻辑来检查计数器的值。
还请考虑,如果该模块可以在仿真中工作,则该错误可能不在此模块中。
并且系统按预期工作
很高兴您能正常工作。
这不是创建恒定时钟频率所必需的PLL模块吗?我是这样认为的。
不,最好,最稳定的时钟是振荡器发出的。PLL允许您从该时钟产生不同的频率(通常以外的频率:2分频,3分频等)
例如,有些可以让您像23/3倍的时钟一样奇怪。因此频率也更高。 (实际上这是3GHz处理器从那里获取时钟的地方。)但是,抖动规范总是比您的晶振更糟。
但是该代码仍应在PLL时钟下工作,因此我怀疑还有其他问题。我建议您看一下综合网表(示意图)。并检查所有连接在哪里。