Помимо elsif
Ларс Асплунд предложил использовать в своем комментарии преобразования типов для `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 и преобразовать для назначения светодиода -
EXT_LED <= std_logic_vector(count);
Кроме того, 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
и EXT_CLK
, если вы действительно синтезируете свой дизайн. Если они от кнопок (особенно часов), дребезг может быть необходим даже для мембранных переключателей, которые могут стареть и позже отскакивать.
person
Community
schedule
13.10.2015
elseif
не является ключевым словом VHDL. - person wjl   schedule 13.10.2015else if
, я получаю еще больше ошибок: S - person josepchappa   schedule 13.10.2015