Полагаю, ваша проблема возникает на вашей доске, а не в симуляции. Если я ошибаюсь, мой ответ не тот, который вы ожидаете.
Этот способ инициализации полезен только при моделировании:
signal code : std_logic_vector(7 downto 0) := "01010101"; --start code
Синтез не будет учитывать ваше значение инициализации (поэтому я не рекомендую вам использовать его, кроме как на испытательном стенде). Если вы хотите инициализировать сигнал, я советую использовать сброс.
Примечания:
- Вы должны поместить KEY в список чувствительности и вывести эту строкувашего процесса:
LEDR(7 downto 0)<=code;
- Ваш процесс выводит защелки, это не запрещено, но вы должны быть осторожны с этим
РЕДАКТИРОВАТЬ: Какдобавить сброс
library IEEE;
use IEEE.std_logic_1164.all;
entity pass_sys is
port(
RST : in std_logic;
SW : in std_logic_vector(7 downto 0);
KEY : in std_logic_vector(3 downto 0);
LEDR : out std_logic_vector(17 downto 0);
LEDG : out std_logic_vector(17 downto 0)
);
end pass_sys;
architecture func of pass_sys is
signal code : std_logic_vector(7 downto 0);
begin
LEDR(7 downto 0)<=code;
process(SW, code, KEY)
begin
if RST = '1' then
LEDG <= (others => '0');
code <= "01010101";
elsif (SW = code) then
LEDG(0)<='1';
LEDG(1)<=not KEY(1);
if (KEY(1) = '0') then
code<=SW;
end if;
else
LEDG(0)<='0';
end if;
end process;
end func;
Контакт RST вашего компонента может быть подключен к аналоговому сигналу вашей карты (POWER_GOOD, ALIM_ON, DONE, ...) или ксигнал pll_locked PLL, если вы его используете.