除了elsif
Lars Asplund 建议在他的评论中使用“count”的类型转换:
count <= std_logic_vector(unsigned(count) + 1);
或使用包 numeric_std_unsigned (仅限 VHDL -2008)而不是 numeric_std。
注意1
代替'1'
和类型转换。 numeric_std_unsigned 不需要这些,它有一个带有以下签名的“+”添加运算符函数:
[STD_ULOGIC_VECTOR,STD_ULOGIC return STD_ULOGIC_VECTOR]
使用包 numeric_std 你还可以count
一个无符号的而不是 std_logic_vector 并转换为 LED 分配 -
EXT_LED <= std_logic_vector(count);
Also, count
不需要在过程敏感列表中:
process(EXT_CLK)
流程中没有分配的值count
除时钟沿外均使用。
使用第一个建议和缩进修改代码(这有助于显示敏感度列表不需要count
:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity counter is
port (
EXT_RST : in std_logic;
EXT_CLK : in std_logic;
EXT_LED : out std_logic_vector(7 downto 0)
);
end counter;
architecture fast of counter is
signal count : std_logic_vector(7 downto 0);
begin
process(EXT_CLK)
begin
if (EXT_RST = '1') then
count <= "00000000";
elsif rising_edge(EXT_CLK) then
count <= std_logic_vector(unsigned(count) + 1);
end if;
end process;
EXT_LED <= count;
end fast;
本文将进行分析、阐述和模拟。
这就提出了一个问题:如何EXT_RST
and EXT_CLK
如果您实际综合您的设计,则可以得出这些结果。如果它们来自按钮(特别是时钟),即使使用可能老化并随后弹跳的薄膜开关,去抖也可能是必要的。