2015-07-23 4 views
-1

У меня возникли проблемы с созданием тестового стенда для моего тестового модуля, в котором использовался пакет. Пакет содержит только блок массива, доступ к которому осуществляется в другом процессе.Testbench для Entitiy с пакетом - VHDL

-------------------- Package --------------------- 
library IEEE; 
use IEEE.STD_LOGIC_1164.all; 
package my_array_pkg is 
type my_array is array (0 to 9) of std_logic_vector(3 downto 0); 
end my_array_pkg; 

И верхний объект.

----------------- TOP ENTITY ------------------------- 
    library IEEE; 
    use IEEE.STD_LOGIC_1164.ALL; 
    use work.my_array_pkg.all; 
    use IEEE.NUMERIC_STD.ALL; 

entity pkt_top is 
Port (sys_clk : IN STD_LOGIC; 
     RESET : IN STD_LOGIC; 
     AN_EN : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); 
     Seg_Cathodes : out Std_logic_Vector(6 downto 0) 
);  
end pkt_top; 

architecture Behavioral of pkt_top is 

SIGNAL CLK1HZ, CLK256HZ : STD_LOGIC; 
signal my_digit : my_array; 

COMPONENT Clock_1Hz is 
    Port (Sys_clk : in STD_LOGIC; 
       Reset  : in std_logic; 
       C_256Hz : out std_logic; 
       C_1Hz  : out std_logic 
       ); 
end COMPONENT; 

COMPONENT Array_Count is 
Port (C_1Hz : in std_logic; 
     reset : in std_logic; 
     digit : out my_array 
     ); 
end COMPONENT; 

COMPONENT Display_Driver is 
Port (Reset   : in std_logic; 
     c256Hz   : in std_logic; 
     C_1Hz   : in std_logic; 
     digit_in  : in my_array; 
     Seg_Cathodes : out Std_logic_vector(6 downto 0); 
     An_En   : out std_logic_vector(3 downto 0) 
    ); 
end COMPONENT; 

begin 

C1 : Clock_1Hz -- Gives two clock divisions. 
    PORT MAP (SYS_CLK, RESET,CLK256HZ, CLK1HZ); 

C2 : Array_Count -- Initialize array with some numbers on every 1Hz edge 
    PORT MAP (CLK1HZ, RESET, my_digit); 

C3 : Display_Driver -- Dispaly the numbers on seven segments with 256Hz switching time between segments. 
    PORT MAP (RESET , CLK256HZ, CLK1HZ, my_digit, SEG_CATHODES, AN_EN); 

end Behavioral; 

Код синтезируемый и работает на BASYS2 борту, однако я не могу имитировать его через тестбенча.

--------------------My TestBench ------------------------- 
LIBRARY ieee; 
USE ieee.std_logic_1164.ALL; 
use work.my_array_pkg.all; 

ENTITY pkg_tb IS 
END pkg_tb; 

ARCHITECTURE behavior OF pkg_tb IS 

    -- Component Declaration for the Unit Under Test (UUT) 

    COMPONENT pkt_top 
    PORT(
     sys_clk : IN std_logic; 
     RESET : IN std_logic; 
     AN_EN : OUT std_logic_vector(3 downto 0); 
     array_test : INOUT my_array; 
     Seg_Cathodes : OUT std_logic_vector(6 downto 0) 
     ); 
    END COMPONENT; 


    --Inputs 
    signal sys_clk : std_logic := '0'; 
    signal RESET : std_logic := '0'; 
    signal my_digit : my_array; 

    --Outputs 
    signal AN_EN : std_logic_vector(3 downto 0); 
    signal Seg_Cathodes : std_logic_vector(6 downto 0); 

    -- Clock period definitions 
    constant sys_clk_period : time := 20 ns; 

BEGIN 

    -- Instantiate the Unit Under Test (UUT) 
    uut: pkt_top PORT MAP (
      sys_clk => sys_clk, 
      RESET => RESET, 
      AN_EN => AN_EN, 
      array_test => my_digit, 
      Seg_Cathodes => Seg_Cathodes 
     ); 

    -- Clock process definitions 
    sys_clk_process :process 
    begin 
     sys_clk <= '0'; 
     wait for sys_clk_period/2; 
     sys_clk <= '1'; 
     wait for sys_clk_period/2; 
    end process; 


    -- Stimulus process 
    stim_proc: process 
    begin   
     -- hold reset state for 100 ns. 
     reset <= '1'; 
     wait for 100 ns; 
     reset <= '0'; 

     -- insert stimulus here 

     wait; 
    end process; 

END; 
--------------------------------------------------------------- 

При имитации ISIM выдает ошибку о «array_test» не будучи Availabe в Top сущности, и если это будет удален моделирование остается пустым.

Любая помощь на тестовом стенде, пожалуйста.

+0

Вам нужен еще один процесс в тестовом банке, который фактически выполняет некоторые тесты ... –

+0

См. [Как создать минимальный, завершенный и проверяемый пример] (http://stackoverflow.com/help/mcve). Когда вы задаете вопрос о проблеме, вызванной вашим кодом, вы получите гораздо лучшие ответы, если вы предоставите код, который люди могут использовать для воспроизведения проблемы. – user1155120

ответ

3

Я не вижу порт с именем «array_test» в описании объекта pkt_top. Вы должны объявить его порт вывода в pkt_top.

+0

Я не понял, что требуется объявить пакетный сигнал как INOUT в моей верхней сущности. Спасибо, он решен. –

0

Другой способ избежать ошибок в testbench - удалить файл .vhd testbench и создать новый для объекта, который вы хотите имитировать.

Кроме того, каждый раз, когда вы редактируете порт своего верхнего объекта, вы можете удалить старый и создать новую тестовую стенку или отредактировать компонент того же объекта в своем тестовом банке.

Смежные вопросы