我的VHDL代码可以编译,但RTL Simulation无法运行

时间:2019-05-09 01:37:20

标签: vhdl clock modelsim test-bench

我对VHDL有点陌生,正在尝试为Flip Flop D创建简单的代码。我的代码可以正确编译,但是当我在ModelSim Altera中运行Testbench tb_FlipFlopD时,程序打开了,但是没有动静,我也没有选择添加它的选项。 该错误是我测试台中的问题。

我的顶级身份代码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;

我的测试台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 :(得分:0)

您的问题是模拟运行,但是永不停止;它只是永远运行。

如果还有很多事情要做,那么任何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;会一直等待。信号STOPboolean

signal STOP : boolean := false;

然后您需要类似的东西来驱动信号STOP

STOP <= false, true after 10 ns;