我试图在测试台上的时钟上升沿做事件而且正常方法不起作用。似乎发生的事情是它无法评估语句所以永远不会进展,这是有道理的,因为它试图与时钟信号同时完成上升沿检查......我想...
我是否需要将do_stuff
处理逻辑放在单独的实例中并将时钟信号输入其中?
为了简洁起见,本例除去了所有实际的UUT信号,实际测试逻辑和组件本身,同时仍然突出了基本问题。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.numeric_std.all;
use ieee.math_real.all;
entity tb is
end tb;
architecture Behavioral of tb is
constant clk_period : time := 10 ns; -- 100 MHz clock
signal s_clk : std_logic := '0';
signal i : integer := 0;
begin
ref_clk : process
begin
s_clk <= '0';
wait for clk_period/2;
s_clk <= '1';
wait for clk_period/2;
end process ref_clk;
do_stuff : process
begin
if(rising_edge(s_clk)) then
if(i < 20) then
i <= i + 1;
end if;
end if;
end process do_stuff;
end Behavioral;