Схема тактирования с использованием VHDL (для синтеза) - PullRequest
0 голосов
/ 08 марта 2019

Я только начал играть с ПЛИС, и в качестве первого проекта я хочу взаимодействовать с КМОП-детектором, который имеет определенный шаблон закрытия.

Это последовательность из симулятора: enter image description here

Синхронизация

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;

...