我现在正在学习 VHDL,我有一个非常简单的家庭作业 - 我需要构建一个同步 BCD 计数器,它会从 0 计数到 9,当它达到 9 时,会回到 0。我想尝试一下所以我决定不以(至少我看到的方式)传统方式(使用 if、elseif)来编写代码,而是使用 when-else 语句(主要是因为 counter 是从 0 到 9 并且必须一旦达到 9 就回到 0)。
library IEEE;
use IEEE.std_logic_1164.all;
Entity sync_counter is
port (rst, clk: in std_logic);
end Entity;
Architecture implement of sync_counter is
signal counter: integer range 0 to 10;
Begin
counter <= 0 when (rst = '1') else
counter + 1 when (clk='1' and clk'event) else
0 when (counter = 10);
end Architecture;
所以一切都编译了,但在模拟中,最初计数器从 0 跳到 2,但在一个周期 (0-9 - 0) 之后它表现正常,这意味着计数器从 0 到 1 应该是这样。如果您强制 rst = '1',则相同。
模拟图像:
为什么一开始就从0跳到2?
谢谢你。