gpt4 book ai didi

VHDL整数范围包括在内? FPGA 与仿真的区别

转载 作者:行者123 更新时间:2023-12-05 00:23:02 24 4
gpt4 key购买 nike

我是 FPGA 的新手。我一直在做一些简单的测试,但发现了一个我不完全理解的问题。

我有一个 50MHz 的时钟源。

我有一个信号定义为:

SIGNAL ledCounter : integer range 0 to 25000000 := 0;

当 ledCounter 达到 25,000,000 时,我切换 LED 并重置计数器。这直接在 FPGA 上工作得很好。
IF (rising_edge(CLK)) THEN
ledCounter <= ledCounter + 1;

IF (ledCounter = 25000000) THEN
ledCounter <= 0;
toggle <= not toggle;
LED(0) <= toggle;
END IF;
END IF;

在 ModelSim 中运行时,当计数器达到 25000000 时出现错误。为了在模拟器中运行,我必须将范围定义为:
SIGNAL ledCounter : integer range 0 to 25000001 := 0;

有没有人对为什么会发生这种情况有任何见解?代码在 FPGA 上运行良好,但在没有上述修改的情况下无法在模拟器中运行。

编辑:modelsim 错误是非描述性的:由于 fatal error ,无法继续。 HDL 调用序列。停在 C:/Users/robert/Documents/fpga/testsim/test.vhd 20 Process line__17

最佳答案

发生这种情况是因为行 ledCounter <= ledCounter + 1 发生在比较之前。即使 ledCounter 的值实际上不会达到 25000001,由于被以下语句覆盖,此时它计划到达它,导致模拟错误。您可以通过在 else 分支中移动增量来轻松解决它:

IF (rising_edge(CLK)) THEN
IF (ledCounter = 25000000) THEN
ledCounter <= 0;
toggle <= not toggle;
LED(0) <= toggle;
ELSE
ledCounter <= ledCounter + 1;
END IF;
END IF;

这样, ledCounter 永远不会被安排为 25000001 并且不会发生错误。请注意,这两个代码的行为完全相同。

关于VHDL整数范围包括在内? FPGA 与仿真的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28995316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com