Я только начал играть с ПЛИС, и в качестве первого проекта я хочу взаимодействовать с КМОП-детектором, который имеет определенный шаблон закрытия.
Это последовательность из симулятора:
Синхронизация
In terms of frequencies the granulatiry of signal I need is 10ns (I will prescale external clock). And in terms of timings :
Initial states:
- SEL <= 0
- SHR <= 0
- RST <= 1
- TRA <= 0
- SHS <= 0
Timings:
SEL: 500ns / 1 / 5000ns / 0 / 500ns
SHR: 1000ns / 1 / 1000ns / 0 / 4000ns
RST: 600ns / 0 / 4900ns / 1 / 500ns
TRA: 2500ns / 1 / 1000ns / 0 / 2500ns
SHS: 4000ns / 1 / 1000ns / 0 / 1000ns
Как получить в действительности этот конкретный сигнал (задержки)?Я думал о том, чтобы использовать несколько процедур для каждой строки и использовать обнаружение нарастающего фронта флага переполнения счетчика для изменения уровня, это хороший подход?
Код VHDL счетчика
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
entity delay_generator is
Port ( clk : in STD_LOGIC;
reset : in STD_LOGIC;
delay_cycles : in unsigned(31 downto 0);
flag : out STD_LOGIC);
end delay_generator;
architecture Behavioral of delay_generator is
signal count : unsigned(31 downto 0) := (others => '0');
begin
process(clk,reset)
begin
if(reset = '1') then
flag <= '0';
count <= (others => '0');
elsif(rising_edge(clk)) then
--when the necessary delay is achieved, reset count and set flag high
if(count = delay_cycles-1) then
count <= (others => '0');
flag <= '1';
else
flag <= '0';
count <= count +1; --increment counter otherwise.
end if;
end if;
end process;
end Behavioral;