У меня есть 25-мегапиксельная синхронизация в моей FPGA, и я хотел бы сделать таймер, который возвращает «1», когда он отсчитывает 60 секунд. Но у меня есть две проблемы:VHDL Мой таймер не работает
- Я не понимаю, почему мой сигнал outpout «count_sortie» не определен в Vivado, когда я имитирую его.
- Чтобы определить свой сигнал count_sortie, я добавляю «: = 0» в файл testbench для имитации, но «count_sortie» остается равным «0» после 60 секундной задержки.
Вот мои VHDL файлы:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity count is
Port (clk : in STD_LOGIC;
count_entree : in STD_LOGIC;
count_sortie : out STD_LOGIC
);
end count;
architecture Behavioral of count is
signal q : integer range 0 to 30000000 :=0;
begin
process(clk)
begin
if (clk'event and clk='1')
then
while ((count_entree = '1') and (q < 25000000)) loop
if (q < 25000000) then
q := q + 1;
count_sortie <= '0';
else
count_sortie <= '1';
end if;
end loop;
end if;
end process;
end Behavioral;
и файл испытательного стенда:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
ENTITY tbcount IS
END tbcount;
ARCHITECTURE behavior OF tbcount IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT count
PORT(
clk : in STD_LOGIC;
count_entree : in STD_LOGIC;
count_sortie : out STD_LOGIC
);
END COMPONENT;
--Inputs
signal clk : std_logic := '0';
signal count_entree : std_logic;
--Outputs
signal count_sortie : std_logic;
--Clock
constant clk_period : time := 40 ns;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: count PORT MAP (
clk => clk,
count_entree => count_entree,
count_sortie => count_sortie
);
-- Clock process definitions
clk_process :process
begin
clk <= '0';
wait for clk_period/2;
clk <= '1';
wait for clk_period/2;
end process;
-- Stimulus process
stim_proc: process
begin
count_entree <= '1';
wait;
end process;
END;
Спасибо за вашу поддержку.
См. Этот очень похожий вопрос и ответ: http://stackoverflow.com/questions/29948476/creating-a-real-time-delay-in-vhdl/29948930#29948930 – Josh
В поведенческой архитектуре подсчета строка ' q: = q + 1' является синтаксически неправильным. Если 'q' действительно является сигналом, ему требуется назначение сигнала (' <= '). Это переменная, она не определена должным образом в коде, который вы отправили. –