Задержка VHDL перед освещением
Я хочу сделать простой код VHDL, который делает задержку 20 секунд, прежде чем светодиод будет включен. Я использовал счетчик сигналов, чтобы сделать задержку в 20 секунд, но я заметил очень странную вещь: если я не заявляю, что светодиод выключен до задержки, светодиод всегда будет включен.
посмотрите на два кода (тактовая частота 50 МГц):
в этом коде светодиод всегда включен.
library ieee;
use ieee.std_logic_1164.all;
entity check is
port(clk : in std_logic;
led : out std_logic);
end check;
architecture arc of check is
signal counter : integer range 0 to 100e6;
begin
process(clk)
begin
if rising_edge(clk) then
if counter<500e6 then
counter<=counter+1;
else
led<='1';
end if;
end if;
end process;
end arc;
в этом коде светодиод включен только через 20 секунд.
library ieee;
use ieee.std_logic_1164.all;
entity check is
port(clk : in std_logic;
led : out std_logic);
end check;
architecture arc of check is
signal counter : integer range 0 to 100e6;
begin
process(clk)
begin
if rising_edge(clk) then
if counter<500e6 then
counter<=counter+1;
led<='0';
else
led<='1';
end if;
end if;
end process;
end arc;
1 ответ
Вы должны инициализировать как счетчик, так и светодиод. В симуляции, если вы этого не сделаете, значением каждого неинициализированного сигнала будет "U", что означает, что вы просто не можете быть уверены, какое значение он будет иметь в реальной системе. Может быть как 0, так и 1. Вы можете использовать:= '0' в объявлении порта.
Вероятно, светодиод всегда включен, потому что согласно этому коду, если счетчик<500e6, значение "led" не имеет значения, а иначе - 1, поэтому компилятор упростил его, потому что единственное значение, которое программа устанавливает в "led", это '1'.