⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fifo_tb.vhd

📁 fifo的程序 大家努力一起研究哦
💻 VHD
字号:
--------------------------------------------------------------------------------- Title      : FIFO Test Bench-- Project    : Memory Cores/FIFO--------------------------------------------------------------------------------- File        : FIFO_TB.VHD-- Author      : Jamil Khatib  <khatib@ieee.org>-- Organization: OpenIPCore Project-- Created     : 2000/02/29-- Last update : 2000/02/29-- Platform    : -- Simulators  : Modelsim 5.2EE / Windows98-- Synthesizers: -- Target      :-- Dependency  : It uses VHDL 93 file syntax--------------------------------------------------------------------------------- Description: FIFO Test bench--------------------------------------------------------------------------------- Copyright (c) 2000 Jamil Khatib-- -- This VHDL design file is an open design; you can redistribute it and/or-- modify it and/or implement it under the terms of the Openip General Public-- License as it is going to be published by the OpenIPCore Organization and-- any coming versions of this license.-- You can check the draft license at-- http://www.openip.org/oc/license.html--------------------------------------------------------------------------------- Revisions  :-- Revision Number : 1-- Version		:   0.1-- Date 	    :	24th Feb 2000-- Modifier     :   Jamil Khatib (khatib@ieee.org)-- Desccription :	Created---------------------------------------------------------------------------------library ieee;use ieee.std_logic_arith.all;use ieee.std_logic_1164.all;use ieee.STD_LOGIC_UNSIGNED.all;use std.textio.all;entity fifo_tb is	-- Generic declarations of the tested unit	generic(		WIDTH : INTEGER := 8;		ADD_WIDTH : INTEGER := 4 );end fifo_tb;architecture TB_ARCHITECTURE of fifo_tb is		constant MAX_STATES : integer := 16;		type TEST_VECTORS is record 		WE : std_logic;    -- Write signal		RE : std_logic;	   -- Read  signal	end record;		 	type TABLE_typ is array (0 to MAX_STATES - 1 ) of TEST_VECTORS;		signal TABLE : TABLE_typ;	file l_file: TEXT open write_mode is "fifo.log";	--INITs the table	procedure init_table(signal L_TABLE: INOUT TABLE_typ	) is	begin		L_TABLE <= (					('0','0'), --nn					('1','0'), --wn					('1','0'), --wn					('1','1'), --wr					('1','1'), --wr					('0','1'), --nr					('0','1'), --nr					('0','1'), --nr					('1','0'), --wn					('1','1'), --wr					('1','0'), --wn					('0','1'), --nr					('0','1'), --nr					('0','1'), --nr					('1','1'), --wr					('0','0')  --nn				   );			end;	-- Component declaration of the tested unit	component FIFO	generic(		WIDTH : INTEGER := 8;		ADD_WIDTH : INTEGER := 4 );	port(		Data_In : in std_logic_vector((WIDTH-1) downto 0);		Data_Out : out std_logic_vector((WIDTH-1) downto 0);		clk : in std_logic;		reset : in std_logic;		RE : in std_logic;		WE : in std_logic;		Full : out std_logic;		Half_full : out std_logic;		Empty : out std_logic );end component;		-- Stimulus signals - signals mapped to the input and inout ports of tested entity	signal Data_In : std_logic_vector((WIDTH-1) downto 0);	signal clk : std_logic :='0';	signal reset : std_logic;	signal RE : std_logic;	signal WE : std_logic;	-- Observed signals - signals mapped to the output ports of tested entity	signal Data_Out : std_logic_vector((WIDTH-1) downto 0);	signal Full : std_logic;	signal Half_full : std_logic;	signal Empty : std_logic;begin	-- Unit Under Test port map	UUT : FIFO		port map			(Data_In => Data_In,			Data_Out => Data_Out,			clk => clk,			reset => reset,			RE => RE,			WE => WE,			Full => Full,			Half_full => Half_full,			Empty => Empty );-- Clock generation	clk <= not clk after 40 ns;-- Reset generation	reset <= transport '0',		 '1' after 20 ns;-- WE signal stimuls generation	write_proc: process(clk,reset)	variable count  : integer;    variable l : line;	begin		if reset = '0' then				count := 0;		data_in <= (others => '0');				init_table(TABLE);		write(l,' ');		writeline(l_file,l);		write(l,'=');--"=======RESET========",right,20);		write(l,'=');		write(l,'R');		write(l,'S');		write(l,'T');		write(l,'=');		write(l,'=');		write(l,'@');		write(l,now);		writeline(l_file,l);		we <= '0';		elsif clk = '0' then			count := count +1;			if count > (MAX_STATES-1) or count < 0 then				count := 0;					   							end if;			data_in <= data_in + 1;			we <= TABLE(count).WE;			write(l,'W');write(l,'E');			write(l,'=');write(l,conv_integer(we));			write(l,' ');			write(l,conv_integer(data_in));			write(l,'@');			write(l,now);			writeline(l_file,l);		end if;	end process write_proc;-- RE signal stimuls generation	read_proc: process(clk,reset)		variable l : line;		variable count  : integer;	begin		if reset = '0' then			count := 0;			re <= '0';			elsif clk = '0' then			count := count +1;			if count > (MAX_STATES-1)  or count < 0 then				count := 0;							end if;			re <= TABLE(count).RE;			write(l,'R');write(l,'E');			write(l,'=');write(l,conv_integer(re));			write(l,' ');			write(l,conv_integer(data_out));			write(l,'@');			write(l,now);						writeline(l_file,l);		end if;	end process read_proc;-- diff pointer	ptr_proc: process(WE,RE,reset)		variable diff_ptr : integer;		variable l : line;	begin	if reset = '0' then		diff_ptr := 0;					end if;			if WE = '1' then		diff_ptr := diff_ptr + 1;	end if;	if RE = '1' then		diff_ptr := diff_ptr - 1;	end if;	write(l,'d');write(l,'f');write(l,'f');	write(l,'=');write(l,conv_integer(diff_ptr));	write(l,'@');write(l,now);	writeline(l_file,l);	end process ptr_proc;-- clock monitor process	clk_proc: process(clk)		variable l : line;	begin		if clk = '1' then					write(l,' ');			writeline(l_file,l);			write(l,'*');write(l,'*');write(l,'*');			write(l,'c');write(l,'l');write(l,'k');			write(l,'@');			write(l,now);						writeline(l_file,l);					end if;			end process	clk_proc;-- flags monitor process	flags_proc: process(full,half_full,empty)		variable l : line;	begin				if full = '1'  then			write(l,'!');			write(l,'F');write(l,'U');write(l,'L');			write(l,'@');			write(l,now);						writeline(l_file,l);					end if;					if half_full = '1'  then			write(l,'H');write(l,'L');write(l,'F');			write(l,'@');			write(l,now);						writeline(l_file,l);					end if;			if empty = '1' then			write(l,'!');			write(l,'E');write(l,'M');write(l,'P');			write(l,'@');			write(l,now);						writeline(l_file,l);								end if;	end process	flags_proc;	end TB_ARCHITECTURE;configuration TESTBENCH_FOR_FIFO of fifo_tb is	for TB_ARCHITECTURE		for UUT : FIFO			use entity work.FIFO(FIFO_v7);		end for;	end for;end TESTBENCH_FOR_FIFO;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -