2016-03-23 15 views
0

Ich habe Top-Modul einschließlich Sub-Module in der Testbench-Datei instanziiert. Die Submodule sind ziemlich frei für sich selbst, daher muss ich beim Testen des obersten Moduls nur wenige Signale einführen und wenige Ausgänge verfolgen, aber das oberste Modul hat viele andere Ports.Blind/Boden unbenutzte Testbench-Ports

Darf ich diesen Pins ein "default"/"undefined" Signal (und Senke) geben (nicht in Bezug auf Größe, Typ)?

Es gibt 2 Möglichkeiten, die ich jetzt lösen, entweder das Submodul herausnehmen, um es zu testen (gut, aber ich möchte es innerhalb Top-Modul testen) oder schreiben geeignete "Null" Eingänge für Eingänge und führen Signale für Ausgänge (viel Arbeit auch).

mit VHDL mit Vivado 2015

in Ordnung, so ist dies die Testbank

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
use ieee.numeric_std.all; 

entity tb_FIR_v0_3 is 
end tb_FIR_v0_3; 

architecture Behavioral of tb_FIR_v0_3 is 
shared variable C_S00_AXI_DATA_WIDTH : integer := 32; 
shared variable C_S00_AXI_ADDR_WIDTH : integer := 7; 

component FIR_v0_3 is 
    generic (
     C_S00_AXI_DATA_WIDTH : integer := 32; 
     C_S00_AXI_ADDR_WIDTH : integer := 7 
    ); 
    port (
     fir_clk  : in std_logic; 
     fir_x_in : in std_logic_vector(C_S00_AXI_DATA_WIDTH-1 downto 0); 
     fir_y_out : out std_logic_vector(C_S00_AXI_DATA_WIDTH-1 downto 0); 
     fir_d_out : out std_logic_vector(C_S00_AXI_DATA_WIDTH-1 downto 0); 
     -- User ports ends 

     s00_axi_aclk : in std_logic; 
     s00_axi_aresetn : in std_logic; 
     s00_axi_awaddr : in std_logic_vector(C_S00_AXI_ADDR_WIDTH-1 downto 0); 
     s00_axi_awprot : in std_logic_vector(2 downto 0); 
     s00_axi_awvalid : in std_logic; 
     s00_axi_awready : out std_logic; 
     s00_axi_wdata : in std_logic_vector(C_S00_AXI_DATA_WIDTH-1 downto 0); 
     s00_axi_wstrb : in std_logic_vector((C_S00_AXI_DATA_WIDTH/8)-1 downto 0); 
     s00_axi_wvalid : in std_logic; 
     s00_axi_wready : out std_logic; 
     s00_axi_bresp : out std_logic_vector(1 downto 0); 
     s00_axi_bvalid : out std_logic; 
     s00_axi_bready : in std_logic; 
     s00_axi_araddr : in std_logic_vector(C_S00_AXI_ADDR_WIDTH-1 downto 0); 
     s00_axi_arprot : in std_logic_vector(2 downto 0); 
     s00_axi_arvalid : in std_logic; 
     s00_axi_arready : out std_logic; 
     s00_axi_rdata : out std_logic_vector(C_S00_AXI_DATA_WIDTH-1 downto 0); 
     s00_axi_rresp : out std_logic_vector(1 downto 0); 
     s00_axi_rvalid : out std_logic; 
     s00_axi_rready : in std_logic 
    ); 
end component FIR_v0_3; 

signal e_clk  : std_logic := '1' ; 
signal e_reset : std_logic := '1' ; 
signal e_x_in : std_logic_vector (31 downto 0); 
signal e_y_out : std_logic_vector (31 downto 0); 
signal e_d_out : std_logic_vector (31 downto 0); 

signal s00_axi_awready : std_logic; 
signal s00_axi_wready : std_logic; 
signal s00_axi_bresp  : std_logic_vector(1 downto 0); 
signal s00_axi_bvalid : std_logic; 
signal s00_axi_arready : std_logic; 
signal s00_axi_rdata  : std_logic_vector(32-1 downto 0); 
signal s00_axi_rresp  : std_logic_vector(1 downto 0); 
signal s00_axi_rvalid : std_logic; 

signal s00_axi_aclk  : std_logic := '0'; 
signal s00_axi_aresetn : std_logic; 
signal s00_axi_awaddr : std_logic_vector(C_S00_AXI_ADDR_WIDTH-1 downto 0); 
signal s00_axi_awprot : std_logic_vector(2 downto 0); 
signal s00_axi_awvalid : std_logic := '0'; 
signal s00_axi_wdata : std_logic_vector(C_S00_AXI_DATA_WIDTH-1 downto 0); 
signal s00_axi_wstrb : std_logic_vector((C_S00_AXI_DATA_WIDTH/8)-1 downto 0); 
signal s00_axi_wvalid : std_logic := '0'; 
signal s00_axi_bready : std_logic := '0'; 
signal s00_axi_araddr : std_logic_vector(C_S00_AXI_ADDR_WIDTH-1 downto 0); 
signal s00_axi_arprot : std_logic_vector(2 downto 0); 
signal s00_axi_arvalid : std_logic := '0'; 
signal s00_axi_rready : std_logic := '0'; 

begin 
inst_FIR_v0_3 : FIR_v0_3 
generic map (
    C_S00_AXI_DATA_WIDTH => 32, 
    C_S00_AXI_ADDR_WIDTH => 7 
) 
port map (
    -- Users to add ports here 
    fir_clk  => e_clk, 
    fir_x_in => e_x_in, 
    fir_y_out => e_y_out, 
    fir_d_out => e_d_out, 

    -- Ports of Axi Slave Bus Interface S00_AXI 
    s00_axi_aclk  => s00_axi_aclk, 
    s00_axi_aresetn => e_reset, 
    s00_axi_awaddr => (others => '0'), 
    s00_axi_awprot => (others => '0'), 
    s00_axi_awvalid => s00_axi_awvalid, 
    s00_axi_awready => s00_axi_awready, 
    s00_axi_wdata => (others => '0'), 
    s00_axi_wstrb => (others => '0'), 
    s00_axi_wvalid => s00_axi_wvalid, 
    s00_axi_wready => s00_axi_wready, 
    s00_axi_bresp => s00_axi_bresp, 
    s00_axi_bvalid => s00_axi_bvalid, 
    s00_axi_bready => s00_axi_bready, 
    s00_axi_araddr => (others => '0'), 
    s00_axi_arprot => (others => '0'), 
    s00_axi_arvalid => s00_axi_arvalid, 
    s00_axi_arready => s00_axi_arready, 
    s00_axi_rdata => s00_axi_rdata, 
    s00_axi_rresp => s00_axi_rresp, 
    s00_axi_rvalid => s00_axi_rvalid, 
    s00_axi_rready => s00_axi_rready 
); 

process 
    variable count : integer := 0; 
begin 

    if (count = 0) then 
     -- e_reset <= '0'; -- VALUES NOT INITIATED PROPERLY, FUCKER ? ... With the non-stop, pop pop and stainless steel (DMX) 
     e_x_in <= x"00000000"; 
    end if; 

    if (count = 3) then 
     -- e_reset <= '1'; 
    end if; 

    if (count = 3) then 
     e_x_in <= x"00000001"; 
    end if; 

    if (count = 5) then 
     e_x_in <= x"00000000"; 
    end if; 

    if (count = 8) then 
     e_x_in <= x"00000000"; 
    end if; 

    e_clk <= not(e_clk); 
    wait for 0.5 ns; 
    count := count + 1; 
    if((count = 60)) then 
     count := 0; 
    end if; 
end process; 


end Behavioral; 

Ich bin zu faul Signal für jeden AXI Eingangs-/Ausgangs-Ports zu erstellen und sie dann eins nach dem anderen verbinden. Kann ich ... diese 21 Signale irgendwie zu schaffen vermeiden

signal s00_axi_awready : std_logic; 
signal s00_axi_wready : std_logic; 
signal s00_axi_bresp  : std_logic_vector(1 downto 0); 
signal s00_axi_bvalid : std_logic; 
signal s00_axi_arready : std_logic; 
.... 
... 

und verbindet sie dann? So ...

s00_axi_wvalid => s00_axi_wvalid, 
s00_axi_wready => s00_axi_wready, 
s00_axi_bresp => s00_axi_bresp, 
s00_axi_bvalid => s00_axi_bvalid, 
s00_axi_bready => s00_axi_bready, 

Gibt es eine „universelle“ in/out-Signal, dass ich an die Pins binden würde, die nicht wichtig sind, weil ich die Ports einer Instanz verlassen kann nicht unverbundenen (soweit ich weiß, und versucht).

+0

Versuchen Sie es, ohne eine Komponente zu deklarieren, wie in meinem Beispiel. Instanziieren Sie mit der 'library.entity_name' Technik. –

+0

Leider benutzt die Software, die ich verwende, VHDL 87 Standard, also muss ich die Komponente deklarieren .... aber ich werde es trotzdem versuchen. –

+0

VHDL'87! Diese Software verdient sicherlich einen Namen und eine Schande! –

Antwort

2

Wenn ich die Frage richtig verstanden habe, können die Eingaben in Ihrer port Definition Standardwerte haben und Ausgaben können in einer Instanziierung nicht verbunden werden. Zum Beispiel:

entity ShiftRegister is 
    Generic (
     WIDTH : integer 
    ); 
    Port (
     clk : in STD_LOGIC; 
     enable : in STD_LOGIC := '1'; 
     serial_in : in STD_LOGIC := '0'; 
     parallel_out : out STD_LOGIC_VECTOR (WIDTH-1 downto 0); 
    ); 
end ShiftRegister; 

...

SR : entity work.ShiftRegister 
    Generic map (
     WIDTH : integer => 8 
    ) 
    Port map(
     clk => serial_clk, 
     serial_in => serial_data_in 
    ); 

In diesem Beispiel wird das Register immer aktiviert sein, und das Unternehmen nichts ausgibt. In diesem Fall keine sehr nützliche Instanziierung, aber ich denke, das beantwortet deine Frage!

Verwandte Themen