原创 双口RAM的VHDL testbench

2008-7-3 21:27 3045 5 5 分类: 测试测量

需要的朋友可以参考,我是用Modelsim仿真的


-----------------------------------------------------------------------------------------------------------
-- Designer   : skycanny
-- Date    : 2007-2-3
-- Description : This VHDL file is a testbench file designed to simulate a dual port ram



library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;


entity dualram_tb is
end entity;


architecture Behavioral of dualram_tb is
constant delay : time   := 3 ns;
constant width : positive := 16;
constant depth : positive := 8;  
signal clka : std_logic;
signal wr   : std_logic;
signal addra : std_logic_vector(7 downto 0) := "00000000";
signal datain : std_logic_vector(15 downto 0) := x"0002";


signal clkb : std_logic;
signal rd   : std_logic;
signal addrb : std_logic_vector(7 downto 0) := "00000000";
signal dataout : std_logic_vector(15 downto 0);


component dualram
-- generic
-- (
--   width : positive := 16;
--   depth : positive := 8
-- );
port
(
   ------------------------- port a is only for writing -------------------------------
   clka : in std_logic;
   wr   : in std_logic;
   addra : in std_logic_vector(depth - 1 downto 0);
   datain : in std_logic_vector(width - 1 downto 0);
   ------------------------------------------------------------------------------------
   ------------------------- port b is only for reading -------------------------------
   clkb : in std_logic;
   rd   : in std_logic;
   addrb : in std_logic_vector(depth - 1 downto 0);
   dataout : out std_logic_vector(width - 1 downto 0)  
   ------------------------------------------------------------------------------------
);
end component;


begin
----------------------------------------------------------------------------------------
tb : dualram
-- generic map
-- (
--   width,
--   depth
-- )
port map
(
   clka => clka,    
   wr   => wr,  
   addra => addra,
   datain => datain,
   --------=> --------
   --------=> --------
   clkb => clkb,    
   rd   => rd,  
   addrb => addrb,
   dataout => dataout
);
----------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------
process
begin
   clka <= '0';
   wait for 13 ns;
   loop
    clka <= not clka;
    wait for 10 ns;
   end loop;
end process;

process
begin
   clkb <= '0';
   wait for 12 ns;
   loop
    clkb <= not clkb;
    wait for 7 ns;
   end loop;
end process;


process
begin
   wr <= '1';
   rd <= '1';
   wait for 24 ns;
   wr <= '0';
   wait for 60 ns;
   rd <= '0';
   wait for 300 ns;
   wr <= '1';
   wait;
end process;

process(clka)
begin
   if clka'event and clka = '1' then
    if wr = '0' then
     addra <= addra + 1 after delay;
    end if;
    datain<= datain + 1 after delay;
   end if;
end process;

process(clkb)
begin
   if clkb'event and clkb = '1' then
    if rd = '0' then
     addrb <= addrb + 1 after delay;
    end if;
   end if;
end process;
end Behavioral;

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /2 下一条