【问题标题】:Driving an LED from a switch从开关驱动 LED
【发布时间】: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


【解决方案1】:

将多位向量传递给posedge 敏感度列表可能会混淆该工具。这是一件非常不寻常的事情,所以我不会相信合成工具链有这样的东西。

在 FPGA 中使用逻辑输出作为时钟信号还有其他复杂性。这不太可能是您的直接问题,因为您的模块是微不足道的,但可能会给您带来麻烦。您应该考虑在那里使用正常的时钟信号,并创建逻辑来检查计数器的值。

还要考虑如果这个模块在模拟中工作,那么这个bug可能不在这个模块中。

【讨论】:

  • 嗨@贾斯汀,感谢您的贡献。我在编译器上有一个警告,说 posedge 将在 32 位计数器的第一位上计时。我认为这是可以做到的,但我很乐意修改。将 posedge 的输入连接到 PLL 的输出不起作用。连接 FPGA 参考时钟 CLOCK_50 的输入就可以了。这让我感到困惑,因为该块非常简单,而我想要实现的目标几乎是平庸的。
【解决方案2】:

系统按预期工作

很高兴你得到它的工作。

它不是创建恒定时钟频率所必需的 PLL 模块吗?我是这么想的。

不,最好、最稳定的时钟是直接来自振荡器的时钟。
PLL 允许您从该时钟产生不同的频率(除了通常的:2 分频、3 分频等)

例如,有些允许您制作像 23/3 倍时钟这样奇怪的东西。因此频率也更高。 (事实上​​,这就是 3GHz 处理器获取时钟的地方。)但是抖动规格总是比你的晶体差。

但该代码仍然应该在 PLL 时钟下工作,所以我怀疑还有其他问题。我建议你看看综合网表(示意图)。并检查所有连接的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多