我对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;
答案 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;
会一直等待。信号STOP
是boolean
:
signal STOP : boolean := false;
然后您需要类似的东西来驱动信号STOP
:
STOP <= false, true after 10 ns;