URL
https://opencores.org/ocsvn/xmatchpro/xmatchpro/trunk
Subversion Repositories xmatchpro
[/] [xmatchpro/] [trunk/] [xmw4-comdec/] [src/] [tb_level1cr.vhd] - Rev 8
Compare with Previous | Blame | View Log
--This library is free software; you can redistribute it and/or --modify it under the terms of the GNU Lesser General Public --License as published by the Free Software Foundation; either --version 2.1 of the License, or (at your option) any later version. --This library is distributed in the hope that it will be useful, --but WITHOUT ANY WARRANTY; without even the implied warranty of --MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --Lesser General Public License for more details. --You should have received a copy of the GNU Lesser General Public --License along with this library; if not, write to the Free Software --Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -- e_mail : j.l.nunez-yanez@byacom.co.uk --------------------------------- -- ENTITY = TB_LEVEL1CR -- -- version = 3.0 -- -- last update = 17/10/01 -- -- author = Jose Nunez -- --------------------------------- -- FUNCTION -- test bench for level 1 using a register file in compression mode. library ieee,std; use ieee.std_logic_1164.all; use ieee.std_logic_textio.all; use std.textio.all; entity TB_LEVEL1cr is end TB_LEVEL1cr; architecture TB1cr of TB_LEVEL1cr is signal CS: bit; signal RW : bit; signal ADDRESS: bit_vector(3 downto 0); signal CONTROL: std_logic_vector(31 downto 0); signal CLK : bit ; signal CLEAR : bit; signal U_DATAIN : bit_vector(31 downto 0) ; signal C_DATAIN : bit_vector(31 downto 0) ; signal U_DATAOUT : std_logic_vector(31 downto 0) ; signal C_DATAOUT : std_logic_vector(31 downto 0) ; signal FINISHED_C: bit; signal FINISHED_D: bit; signal COMPRESSING: bit; signal BUS_ACKNOWLEDGE_CC: bit; signal BUS_ACKNOWLEDGE_CU: bit; signal BUS_ACKNOWLEDGE_DC: bit; signal BUS_ACKNOWLEDGE_DU: bit; signal WAIT_CU: bit; signal WAIT_CC: bit; signal WAIT_DC: bit; signal WAIT_DU: bit; signal BUS_REQUEST_CC : bit; signal BUS_REQUEST_CU : bit; signal BUS_REQUEST_DC : bit; signal BUS_REQUEST_DU : bit; signal FLUSHING_C: bit; signal FLUSHING_D: bit; signal DECOMPRESSING: bit; signal DECODING_OVERFLOW : bit; signal CODING_OVERFLOW : bit; signal C_DATA_VALID : bit; signal U_DATA_VALID : bit; signal CRC_ERROR: bit; signal INTERRUPT_REQUEST : bit; signal INTERRUPT_ACKNOWLEDGE : bit; signal ONE: bit; -- this is the component to be tested component level1r port ( CS : in bit ; RW : in bit; ADDRESS: in bit_vector(3 downto 0); CONTROL : inout std_logic_vector(31 downto 0); CLK : in bit ; CLEAR: in bit; BUS_ACKNOWLEDGE_CC : in bit; BUS_ACKNOWLEDGE_CU : in bit; BUS_ACKNOWLEDGE_DC : in bit; BUS_ACKNOWLEDGE_DU : in bit; WAIT_CU : in bit; WAIT_CC : in bit; WAIT_DC : in bit; WAIT_DU : in bit; U_DATAIN : in bit_vector(31 downto 0); C_DATAIN : in bit_vector(31 downto 0); U_DATAOUT : out std_logic_vector(31 downto 0); C_DATAOUT : out std_logic_vector(31 downto 0); FINISHED_C : out bit; FINISHED_D : out bit; COMPRESSING : out bit; FLUSHING_C : out bit; FLUSHING_D : out bit; DECOMPRESSING : out bit; U_DATA_VALID : out bit; C_DATA_VALID : out bit; DECODING_OVERFLOW : out bit; CODING_OVERFLOW : out bit; CRC_ERROR : out bit; INTERRUPT_REQUEST : out bit; INTERRUPT_ACKNOWLEDGE : in bit; BUS_REQUEST_CC : out bit; BUS_REQUEST_CU : out bit; BUS_REQUEST_DC : out bit; BUS_REQUEST_DU : out bit ); end component; -- set up constants for test vector application & monitoring constant CLOCK_PERIOD : time := 200 ns; constant HALF_PERIOD : time := CLOCK_PERIOD / 2; constant STROBE_TIME : time := 0.9 * HALF_PERIOD; begin -- instantiate the device under test DUT : level1r port map( CS => CS, RW => RW, ADDRESS => ADDRESS, CONTROL => CONTROL, CLK => CLK, CLEAR => CLEAR, BUS_ACKNOWLEDGE_CC => BUS_ACKNOWLEDGE_CC, BUS_ACKNOWLEDGE_CU => BUS_ACKNOWLEDGE_CU, BUS_ACKNOWLEDGE_DC => BUS_ACKNOWLEDGE_DC, BUS_ACKNOWLEDGE_DU => BUS_ACKNOWLEDGE_DU, WAIT_CU => WAIT_CU, WAIT_CC => WAIT_CC, WAIT_DC => WAIT_DC, WAIT_DU => WAIT_DU, U_DATAIN => U_DATAIN, C_DATAIN => C_DATAIN, U_DATAOUT => U_DATAOUT, C_DATAOUT => C_DATAOUT, FINISHED_C => FINISHED_C, FINISHED_D => FINISHED_D, COMPRESSING => COMPRESSING, FLUSHING_C => FLUSHING_C, FLUSHING_D => FLUSHING_D, DECOMPRESSING => DECOMPRESSING, U_DATA_VALID => U_DATA_VALID, C_DATA_VALID => C_DATA_VALID, DECODING_OVERFLOW => DECODING_OVERFLOW, CODING_OVERFLOW => CODING_OVERFLOW, CRC_ERROR => CRC_ERROR, INTERRUPT_REQUEST => INTERRUPT_REQUEST, INTERRUPT_ACKNOWLEDGE => INTERRUPT_ACKNOWLEDGE, BUS_REQUEST_CC => BUS_REQUEST_CC, BUS_REQUEST_CU => BUS_REQUEST_CU, BUS_REQUEST_DC => BUS_REQUEST_DC, BUS_REQUEST_DU => BUS_REQUEST_DU ); TEST_VECTORS : process -- input t -- file TV_IN : TEXT open read_mode is "..\test\Cvectors_alic_1024.txt"; --file TV_IN : TEXT open read_mode is "..\test\Cvectors_kenn_3422.txt"; --file TV_IN : TEXT open read_mode is "..\test\Cvectors_plra_2712.txt"; file TV_IN : TEXT open read_mode is "..\..\test\Cvectors_fiel_1024.txt"; variable LIN : line; variable LOUT : line; -- input test vectors from input test file variable I_CLEAR : bit ; variable I_CS: bit; variable I_RW: bit; variable I_ADDRESS : bit_vector(1 downto 0); variable I_CONTROL : std_logic_vector(15 downto 0); variable I_U_DATAIN : bit_vector(31 downto 0) ; variable I_C_DATAIN : bit_vector(31 downto 0) ; variable OLD_I_C_DATAIN: bit_vector(31 downto 0); -- expected response vectors variable I_COMPRESSING: bit; variable I_DECOMPRESSING: bit; variable I_BUS_ACKNOWLEDGE_C : bit; variable I_BUS_ACKNOWLEDGE_U : bit; variable I_WAIT_CU : bit; variable I_WAIT_CC : bit; variable I_WAIT_DC : bit; variable I_WAIT_DU : bit; variable I_BUS_REQUEST_C : bit; variable I_BUS_REQUEST_U : bit; variable I_FINISHED: bit; variable I_FLUSHING: bit; variable I_U_DATAOUT : std_logic_vector(31 downto 0) ; variable I_C_DATAOUT : std_logic_vector(31 downto 0) ; variable I_U_DATA_VALID : bit; variable I_C_DATA_VALID : bit; variable O_FINISHED: bit; variable O_COMPRESSING: bit; variable O_FLUSHING: bit; variable O_DECOMPRESSING: bit; variable O_DISALIGNED : bit; variable O_BUS_REQUEST_C : bit; variable O_BUS_REQUEST_U : bit; variable O_U_DATAOUT : std_logic_vector(31 downto 0) ; variable O_C_DATAOUT : std_logic_vector(31 downto 0) ; variable O_DECODING_OVERFLOW : bit; variable O_U_DATA_VALID : bit; variable O_C_DATA_VALID : bit; variable SPACE : character; begin while not(endfile(TV_IN)) loop -- check for end of file readline(TV_IN , LIN); read(LIN , I_CLEAR); read(LIN , SPACE); read(LIN , I_CS); -- read in input test vectors read(LIN , SPACE); read(LIN , I_RW); read(LIN , SPACE); read(LIN , I_ADDRESS); read(LIN , SPACE); read(LIN , I_CONTROL); read(LIN , SPACE); read(LIN , I_BUS_ACKNOWLEDGE_C); read(LIN , SPACE); read(LIN , I_BUS_ACKNOWLEDGE_U); read(LIN , SPACE); read(LIN , I_U_DATAIN); read(LIN , SPACE); read(LIN , I_C_DATAIN); read(LIN , SPACE); read(LIN , I_COMPRESSING); -- read in expected response vectors read(LIN , SPACE); read(LIN , I_DECOMPRESSING); read(LIN , SPACE); read(LIN, I_BUS_REQUEST_C); read(LIN, SPACE); read(LIN, I_BUS_REQUEST_U); read(LIN, SPACE); read(LIN, I_C_DATA_VALID); read(LIN, SPACE); read(LIN , I_FINISHED); read(LIN , SPACE); read(LIN , I_FLUSHING); read(LIN , SPACE); read(LIN , I_U_DATA_VALID); read(LIN , SPACE); read(LIN , I_U_DATAOUT); read(LIN , SPACE); read(LIN , I_C_DATAOUT); -- read(LIN , SPACE); CLK <= '1'; -- rising clock edge wait for 10 ns; CS <= I_CS; RW <= I_RW; -- compress ADDRESS <= "11" & I_ADDRESS; -- decompress -- ADDRESS <= "10" & I_ADDRESS; CONTROL <= x"0000" & I_CONTROL; -- compress BUS_ACKNOWLEDGE_DC <= '1'; BUS_ACKNOWLEDGE_DU <= '1'; BUS_ACKNOWLEDGE_CC <= I_BUS_ACKNOWLEDGE_C; BUS_ACKNOWLEDGE_CU <= I_BUS_ACKNOWLEDGE_U; WAIT_CU <= '1';--I_WAIT_CU; WAIT_CC <= '1';--I_WAIT_CC; WAIT_DC <= '1';--I_WAIT_DC; WAIT_DU <= '1';--I_WAIT_DU; INTERRUPT_ACKNOWLEDGE <= '1'; -- decompress -- BUS_ACKNOWLEDGE_DC <= I_BUS_ACKNOWLEDGE_C; -- BUS_ACKNOWLEDGE_DU <= I_BUS_ACKNOWLEDGE_U; -- BUS_ACKNOWLEDGE_CC <= '1'; -- BUS_ACKNOWLEDGE_CU <= '1'; -- WAIT_CU <= I_WAIT_CU; -- WAIT_CC <= I_WAIT_CC; -- WAIT_DC <= I_WAIT_DC; -- WAIT_DU <= I_WAIT_DU; CLEAR <= I_CLEAR; -- apply control inputs on rising clock edge + 2ns U_DATAIN <= I_U_DATAIN; -- (these will be generated by a synchronous state machine, -- and so this is perfectly valid). C_DATAIN<=I_C_DATAIN; -- this changes on a rising clock edge (follows RAM address) wait for (HALF_PERIOD - 10 ns); CLK <= '0'; -- RESET <= I_RESET; -- apply external inputs on falling clock edge wait for STROBE_TIME; -- wait for strobe time O_FINISHED := FINISHED_C; O_COMPRESSING := COMPRESSING; O_DECOMPRESSING := DECOMPRESSING; O_BUS_REQUEST_C := BUS_REQUEST_CC; O_BUS_REQUEST_U := BUS_REQUEST_CU; O_C_DATA_VALID := C_DATA_VALID; O_FLUSHING := FLUSHING_C; O_U_DATA_VALID := U_DATA_VALID; O_U_DATAOUT := U_DATAOUT; O_C_DATAOUT := C_DATAOUT; -- write input vectors to results file -- compare actual circuit response with expected response vectors assert CRC_ERROR = ONE report "Unexpected value on output CRC_ERROR." severity error; wait for (HALF_PERIOD - STROBE_TIME); -- resynchronise with tester period end loop; wait; end process TEST_VECTORS; ONE <= '1'; end TB1cr; --end of architecture