Генератор импульсов VHDL с петлей / после - PullRequest
0 голосов
/ 27 сентября 2018

Я пытался построить генератор импульсов, чтобы, скажем, определить, когда сигнал упал.Я пробовал разные способы построить этот генератор импульсов, используя процессы: моя симуляция зависает.

Я отправляю этот вопрос, не столько ища код для генератора импульсов, сколько надеюсь на объяснение того, почему этот подход не работает.Я пытаюсь перейти с последовательных языков (таких как C ++ и т. Д.) На VHDL, и я сталкиваюсь с этой невидимой концептуальной стеной.Заранее спасибо.

library ieee;  
use ieee.std_logic_1164.all;  

entity puls_on_FE is  
    port (signal_in : in  std_logic; pulse_out : out std_logic);  
end puls_on_FE;

architecture behavior of puls_on_FE is  
signal epoch: std_logic := '0';  
begin  
    process (signal_in)
    begin
        if falling_edge(signal_in)then
            pulse_out <= '0';
            wait1:  loop   --using loop because an after by itself hangs the sim too
                exit when epoch = '1';
                epoch <= '1' after 5 ns;  
            end loop wait1; --expect loop to execute once and exit after 5ns
            pulse_out <= '1';
        end if; 
    end process;
end behavior;

1 Ответ

0 голосов
/ 28 сентября 2018

Сигналы не обновляются до тех пор, пока процесс не приостановится, либо нажав оператор ожидания или дойдя до конца процесса, когда у него есть список чувствительности.В вашем примере вы вводите цикл, в котором нет механизма ожидания в течение какого-то промежутка времени.В каждой итерации цикла вы назначаете

epoch <= '1' через 5 нс;</p>

, поскольку вы не ожидаете внутри цикла, каждая итерация занимает 0 дельт, а время никогда не увеличивается ни на одну дельту.(кстати, вам не разрешено ждать здесь, потому что процесс имеет список чувствительности)

Я предлагаю вам отступить от кодирования и начать рисовать больше.Какую схему вы намереваетесь создать этот код?ты можешь нарисовать схему?Поскольку VHDL - это язык описания, вам нужно понимать, какую схему вы пытаетесь создать, а не писать код, который, по вашему мнению, может эмулировать какую-то схему.

Я также подвергаю сомнению необходимость "после"«назначение.Вы не можете синтезировать реальную схему, используя «после» - они существуют только для того, чтобы эмулировать инерционные задержки сигналов и применять только для моделирования.

...