testbench_package.vhd
144 lines
| 4.2 KiB
| text/x-vhdl
|
VhdlLexer
pellion
|
r400 | |||
LIBRARY ieee; | ||||
USE ieee.std_logic_1164.ALL; | ||||
LIBRARY grlib; | ||||
USE grlib.amba.ALL; | ||||
USE grlib.stdlib.ALL; | ||||
PACKAGE testbench_package IS | ||||
COMPONENT tb_memory | ||||
GENERIC ( | ||||
n_ahb_m : INTEGER; | ||||
n_ahb_s : INTEGER); | ||||
PORT ( | ||||
clk : IN STD_LOGIC; | ||||
rstn : IN STD_LOGIC; | ||||
ahbsi : OUT ahb_slv_in_type; | ||||
ahbso : IN ahb_slv_out_vector := (OTHERS => ahbs_none); | ||||
ahbmi : OUT ahb_mst_in_type; | ||||
ahbmo : IN ahb_mst_out_vector := (OTHERS => ahbm_none)); | ||||
END COMPONENT; | ||||
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; | ||||