LIBRARY ieee; USE ieee.std_logic_1164.ALL; LIBRARY grlib; USE grlib.amba.ALL; USE grlib.stdlib.ALL; --LIBRARY gaisler; --USE gaisler.libdcom.ALL; --USE gaisler.sim.ALL; --USE gaisler.jtagtst.ALL; --LIBRARY techmap; --USE techmap.gencomp.ALL; PACKAGE testbench_package IS PROCEDURE APB_WRITE ( SIGNAL clk : IN STD_LOGIC; CONSTANT pindex : IN INTEGER; SIGNAL apbi : OUT apb_slv_in_type; CONSTANT paddr : IN STD_LOGIC_VECTOR(31 DOWNTO 0); CONSTANT pwdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0) ); PROCEDURE APB_READ ( SIGNAL clk : IN STD_LOGIC; CONSTANT pindex : IN INTEGER; SIGNAL apbi : OUT apb_slv_in_type; SIGNAL apbo : IN apb_slv_out_type; CONSTANT paddr : IN STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL prdata : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) ); PROCEDURE AHB_READ ( SIGNAL clk : IN STD_LOGIC; CONSTANT hindex : IN INTEGER; SIGNAL ahbmi : IN ahb_mst_in_type; SIGNAL ahbmo : OUT ahb_mst_out_type; CONSTANT haddr : IN STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL hrdata : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) ); END testbench_package; PACKAGE BODY testbench_package IS PROCEDURE APB_WRITE ( SIGNAL clk : IN STD_LOGIC; CONSTANT pindex : IN INTEGER; SIGNAL apbi : OUT apb_slv_in_type; CONSTANT paddr : IN STD_LOGIC_VECTOR(31 DOWNTO 0); CONSTANT pwdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0) ) IS BEGIN apbi.psel(pindex) <= '1'; apbi.pwrite <= '1'; apbi.penable <= '1'; apbi.paddr <= paddr; apbi.pwdata <= pwdata; WAIT UNTIL clk = '0'; WAIT UNTIL clk = '1'; apbi.psel(pindex) <= '0'; apbi.pwrite <= '0'; apbi.penable <= '0'; apbi.paddr <= (OTHERS => '0'); apbi.pwdata <= (OTHERS => '0'); WAIT UNTIL clk = '0'; WAIT UNTIL clk = '1'; END APB_WRITE; PROCEDURE APB_READ ( SIGNAL clk : IN STD_LOGIC; CONSTANT pindex : IN INTEGER; SIGNAL apbi : OUT apb_slv_in_type; SIGNAL apbo : IN apb_slv_out_type; CONSTANT paddr : IN STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL prdata : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) ) IS BEGIN apbi.psel(pindex) <= '1'; apbi.pwrite <= '0'; apbi.penable <= '1'; apbi.paddr <= paddr; WAIT UNTIL clk = '0'; WAIT UNTIL clk = '1'; apbi.psel(pindex) <= '0'; apbi.pwrite <= '0'; apbi.penable <= '0'; apbi.paddr <= (OTHERS => '0'); WAIT UNTIL clk = '0'; WAIT UNTIL clk = '1'; prdata <= apbo.prdata; END APB_READ; PROCEDURE AHB_READ ( SIGNAL clk : IN STD_LOGIC; CONSTANT hindex : IN INTEGER; SIGNAL ahbmi : IN ahb_mst_in_type; SIGNAL ahbmo : OUT ahb_mst_out_type; CONSTANT haddr : IN STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL hrdata : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) ) IS BEGIN WAIT UNTIL clk = '1'; ahbmo.HADDR <= haddr; ahbmo.HPROT <= "0011"; ahbmo.HIRQ <= (OTHERS => '0'); ahbmo.HCONFIG <= (0 => (OTHERS => '0'), OTHERS => (OTHERS => '0')); ahbmo.HINDEX <= hindex; ahbmo.HBUSREQ <= '1'; ahbmo.HLOCK <= '1'; ahbmo.HSIZE <= HSIZE_WORD; ahbmo.HBURST <= HBURST_SINGLE; ahbmo.HTRANS <= HTRANS_NONSEQ; ahbmo.HWRITE <= '0'; WHILE ahbmi.HREADY = '0' LOOP WAIT UNTIL clk = '1'; END LOOP; WAIT UNTIL clk = '1'; --WAIT UNTIL clk = '1' AND ahbmi.HREADY = '1' AND ahbmi.HGRANT(hindex) = '1'; ahbmo.HBUSREQ <= '0'; ahbmo.HLOCK <= '0'; ahbmo.HTRANS <= HTRANS_IDLE; WHILE ahbmi.HREADY = '0' LOOP WAIT UNTIL clk = '1'; END LOOP; WAIT UNTIL clk = '1'; hrdata <= ahbmi.HRDATA; --WAIT UNTIL clk = '1' AND ahbmi.HREADY = '1' AND ahbmi.HGRANT(hindex) = '1'; ahbmo.HLOCK <= '0'; WAIT UNTIL clk = '1'; END AHB_READ; END testbench_package;