Мой код VHDL компилируется, но RTL Simulation не запускается - PullRequest
0 голосов
/ 09 мая 2019

Я несколько новичок в VHDL и пытаюсь создать простой код для Flip Flop D. Мой код компилируется правильно, однако, когда я запускаю свой Testbench tb_FlipFlopD в ModelSim Altera, программа открывается, но волны нет, и У меня нет возможности добавить его тоже. Ошибка в моем Testbench.

Мой личный код верхнего уровня FlipFlopD:

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.numeric_std.all;


    entity FlipFlopD is
        port( clock: in std_logic;
                D: in std_logic;
              Q: out std_logic
            );
    end FlipFlopD;

    architecture RTL of FlipFlopD is
    begin       
                Q <= D when clock = '1' and clock'event;    
    end RTL;

My Testbench tb_FlipFlopD:

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.numeric_std.all;

    entity tb_FlipFlopD is
    end tb_FlipFlopD;

    architecture teste of tb_FlipFlopD is

    component FlipFlopD is
    port (
            clock   : in    std_logic;
            D   : in std_logic;
            Q   : out   std_logic
    ); 
    end component;

    signal I: std_logic; 
    signal O: std_logic;
    signal C: std_logic := '0';
    constant clk_period : time := 1 ns;


    begin

    instancia_FlipFlopD: FlipFlopD port map( D => I, Q => O, clock => C);
    I <= '0', '1' after 1 ns, '1' after 2 ns, '0' after 3 ns, '1' after 4 ns;

    clk_process : process
    begin 
        C <= '0';
        wait for clk_period/2;
        C <= '1';
        wait for clk_period/2;
    end process;

    end teste;

1 Ответ

0 голосов
/ 09 мая 2019

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

Любая симуляция VHDL (или Verilog) будет продолжаться, если еще есть чем заняться. Этот процесс:

clk_process : process
begin 
    C <= '0';
    wait for clk_period/2;
    C <= '1';
    wait for clk_period/2;
end process;

генерирует событие (изменение) по сигналу C каждые clk_period/2. Навсегда. Чтобы вылечить это, вам нужно положить что-то, чтобы остановить это, например:

clk_process : process
begin 
    while not STOP loop
      C <= '0';
      wait for clk_period/2;
      C <= '1';
      wait for clk_period/2;
    end loop;
    wait;
end process;

wait; в конце процесса ждет вечно. Сигнал STOP является boolean:

signal STOP : boolean := false;

Тогда вам нужно что-то вроде этого для подачи сигнала STOP:

STOP <= false, true after 10 ns;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...