Вообще-то, дело вкуса. Я, например, чтобы избежать подобных казусов при создании тестбенча стараюсь с помощью задержек формировать только клок, я для остальных сигналов создавать процессы, работающие по этому клоку.
вот пример.
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY northogonal_corrector_noc_test_vhd_tb IS
END northogonal_corrector_noc_test_vhd_tb;
ARCHITECTURE behavior OF northogonal_corrector_noc_test_vhd_tb IS
COMPONENT northogonal_corrector
PORT(
DI : IN std_logic_vector(7 downto 0);
DQ : IN std_logic_vector(7 downto 0);
CLK : IN std_logic;
Ce : IN std_logic;
QI : OUT std_logic_vector(7 downto 0);
QQ : OUT std_logic_vector(7 downto 0)
);
END COMPONENT;
SIGNAL DI : std_logic_vector(7 downto 0);
SIGNAL DQ : std_logic_vector(7 downto 0);
SIGNAL QI : std_logic_vector(7 downto 0);
SIGNAL QQ : std_logic_vector(7 downto 0);
SIGNAL CLK : std_logic;
SIGNAL Ce : std_logic;
constant T : time := 10 ns;
signal Counter : std_logic_vector (1 downto 0):="00";
signal Pointer : std_logic_vector (1 downto 0):="00";
type ARRAY_8BITS is array (integer range <>) of std_logic_Vector (7 downto 0);
constant I: ARRAY_8BITS(0 to 3):=(X"3C",X"28",X"D8",X"C4");
constant Q: ARRAY_8BITS(0 to 3):=(X"3C",X"D8",X"28",X"C4");
BEGIN
uut: northogonal_corrector PORT MAP(
DI => DI,
DQ => DQ,
QI => QI,
QQ => QQ,
CLK => CLK,
Ce => Ce
);
tb : PROCESS
BEGIN
CLK<='1';
wait for T/2;
CLK<= '0';
wait for T/2;
END PROCESS;
process (CLK)
begin
if (CLK'Event and CLK = '1') then
Counter <= Counter + '1';
if (Counter = "11") then
Ce<='1';
Pointer<= Pointer + '1';
else
Ce<='0';
end if;
end if;
end process;
DI<=I(CONV_INTEGER(Pointer));
DQ<=Q(CONV_INTEGER(Pointer));
END;
Может быть более громоздко, но зато потом голова не болит