Verilog:通过开关驱动LED。听起来平庸,但

问题描述 投票:0回答:2

我一直在与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值发生了变化。

我缺少什么吗?

谢谢您的帮助:)

verilog intel-fpga
2个回答
1
投票

通过将多位向量传递到posedge灵敏度列表,您可能会混淆该工具。这是一件非常不寻常的事情,所以我不会相信像这样的综合工具链。

在FPGA中使用逻辑输出作为时钟信号还有其他复杂性。因为您的模块很琐碎,但这不太可能成为您的直接问题,但可能会导致您遇到麻烦。您应该考虑在那里使用普通时钟信号,并创建逻辑来检查计数器的值。

还请考虑,如果该模块可以在仿真中工作,则该错误可能不在此模块中。


0
投票

并且系统按预期工作

很高兴您能正常工作。

这不是创建恒定时钟频率所必需的PLL模块吗?我是这样认为的。

不,最好,最稳定的时钟是振荡器发出的。PLL允许您从该时钟产生不同的频率(通常以外的频率:2分频,3分频等)

例如,有些可以让您像23/3倍的时钟一样奇怪。因此频率也更高。 (实际上这是3GHz处理器从那里获取时钟的地方。)但是,抖动规范总是比您的晶振更糟。

但是该代码仍应在PLL时钟下工作,因此我怀疑还有其他问题。我建议您看一下综合网表(示意图)。并检查所有连接在哪里。

© www.soinside.com 2019 - 2024. All rights reserved.