Files
2d_display_engine-new/tb/toplevel_tb.vhd
Matthias Blankertz 0bc4815926 - Debugged SPI module
- Debugged UART
- Firmware support for SPI, UART
- Work on SD/MMC support in firmware
- Debugged mblite core/WB interface
2013-06-08 11:53:27 +02:00

248 lines
11 KiB
VHDL

-------------------------------------------------------------------------------
-- Title : Testbench for design "toplevel"
-- Project :
-------------------------------------------------------------------------------
-- File : toplevel_tb.vhd
-- Author : <Matthias@MATTHIAS-PC>
-- Company :
-- Created : 2013-03-02
-- Last update: 2013-06-07
-- Platform :
-- Standard : VHDL'87
-------------------------------------------------------------------------------
-- Description:
-------------------------------------------------------------------------------
-- Copyright (c) 2013
-------------------------------------------------------------------------------
-- Revisions :
-- Date Version Author Description
-- 2013-03-02 1.0 Matthias Created
-------------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use work.sim_bmppack.all;
-------------------------------------------------------------------------------
entity toplevel_tb is
end toplevel_tb;
-------------------------------------------------------------------------------
architecture testbench of toplevel_tb is
component toplevel
generic (
dontcare : std_logic
);
port (
clkin_50MHz : IN std_ulogic;
clkin_133MHz : IN std_ulogic;
reset : IN std_ulogic;
vga_r, vga_g, vga_b : OUT std_logic_vector(3 downto 0);
vga_vsync, vga_hsync : OUT std_ulogic;
dataflash_mosi, dataflash_sck, dataflash_ss, dataflash_wp, dataflash_rst : OUT std_ulogic;
dataflash_miso : IN std_ulogic;
-- led : OUT std_ulogic_vector(7 downto 0);
ddr2_dq : inout std_logic_vector(15 downto 0);
ddr2_a : out std_logic_vector(12 downto 0);
ddr2_ba : out std_logic_vector(1 downto 0);
ddr2_cke : out std_logic;
ddr2_cs_n : out std_logic;
ddr2_ras_n : out std_logic;
ddr2_cas_n : out std_logic;
ddr2_we_n : out std_logic;
ddr2_odt : out std_logic;
ddr2_dm : out std_logic_vector(1 downto 0);
rst_dqs_div_in : in std_logic;
rst_dqs_div_out : out std_logic;
ddr2_dqs : inout std_logic_vector(1 downto 0);
ddr2_dqs_n : inout std_logic_vector(1 downto 0);
ddr2_ck : out std_logic_vector(0 downto 0);
ddr2_ck_n : out std_logic_vector(0 downto 0);
rs232_txd : out std_logic;
rs232_rxd : in std_logic;
sd_miso : in std_logic;
sd_mosi : out std_logic;
sd_cs : out std_logic;
sd_sck : out std_logic
);
end component;
component ddr2_model
port (
ck : in std_logic;
ck_n : in std_logic;
cke : in std_logic;
cs_n : in std_logic;
ras_n : in std_logic;
cas_n : in std_logic;
we_n : in std_logic;
dm_rdqs : inout std_logic_vector(1 downto 0);
ba : in std_logic_vector(1 downto 0);
addr : in std_logic_vector(12 downto 0);
dq : inout std_logic_vector(15 downto 0);
dqs : inout std_logic_vector(1 downto 0);
dqs_n : inout std_logic_vector(1 downto 0);
rdqs_n : out std_logic_vector(1 downto 0);
odt : in std_logic
);
end component;
constant dontcare : std_logic := '0';
-- component ports
signal clkin_50MHz : std_ulogic := '0';
signal clkin_133MHz : std_ulogic := '0';
signal reset : std_ulogic := '0';
signal vga_r, vga_g, vga_b : std_logic_vector(3 downto 0);
signal vga_vsync, vga_hsync : std_ulogic;
signal dataflash_mosi, dataflash_sck, dataflash_ss, dataflash_wp, dataflash_rst : std_ulogic;
signal dataflash_miso : std_ulogic;
signal led : std_ulogic_vector(7 downto 0);
signal ddr2_dq : std_logic_vector(15 downto 0);
signal ddr2_a : std_logic_vector(12 downto 0);
signal ddr2_ba : std_logic_vector(1 downto 0);
signal ddr2_cke : std_logic;
signal ddr2_cs_n : std_logic;
signal ddr2_ras_n : std_logic;
signal ddr2_cas_n : std_logic;
signal ddr2_we_n : std_logic;
signal ddr2_odt : std_logic;
signal ddr2_dm : std_logic_vector(1 downto 0);
signal rst_dqs_div_in : std_logic;
signal rst_dqs_div_out : std_logic;
signal ddr2_dqs : std_logic_vector(1 downto 0);
signal ddr2_dqs_n : std_logic_vector(1 downto 0);
signal ddr2_ck : std_logic_vector(0 downto 0);
signal ddr2_ck_n : std_logic_vector(0 downto 0);
signal rs232_txd, rs232_rxd : std_logic := '1';
signal sd_mosi, sd_miso, sd_cs, sd_sck : std_logic := '0';
signal sim_done : boolean := false;
begin -- testbench
-- component instantiation
DUT: toplevel
generic map (
dontcare => dontcare
)
port map (
clkin_50MHz => clkin_50MHz,
clkin_133MHz => clkin_133MHz,
reset => reset,
vga_r => vga_r,
vga_g => vga_g,
vga_b => vga_b,
vga_vsync => vga_vsync,
vga_hsync => vga_hsync,
dataflash_mosi => dataflash_mosi,
dataflash_sck => dataflash_sck,
dataflash_ss => dataflash_ss,
dataflash_wp => dataflash_wp,
dataflash_rst => dataflash_rst,
dataflash_miso => dataflash_miso,
-- led => led,
ddr2_dq => ddr2_dq,
ddr2_a => ddr2_a,
ddr2_ba => ddr2_ba,
ddr2_cke => ddr2_cke,
ddr2_cs_n => ddr2_cs_n,
ddr2_ras_n => ddr2_ras_n,
ddr2_cas_n => ddr2_cas_n,
ddr2_we_n => ddr2_we_n,
ddr2_odt => ddr2_odt,
ddr2_dm => ddr2_dm,
rst_dqs_div_in => rst_dqs_div_in,
rst_dqs_div_out => rst_dqs_div_out,
ddr2_dqs => ddr2_dqs,
ddr2_dqs_n => ddr2_dqs_n,
ddr2_ck => ddr2_ck,
ddr2_ck_n => ddr2_ck_n,
rs232_txd => rs232_txd,
rs232_rxd => rs232_rxd,
sd_mosi => sd_mosi,
sd_miso => sd_miso,
sd_cs => sd_cs,
sd_sck => sd_sck);
rst_dqs_div_in <= rst_dqs_div_out after 100 ps;
rs232_rxd <= rs232_txd;
ddr2_model_inst : ddr2_model port map (
ck => ddr2_ck(0),
ck_n => ddr2_ck_n(0),
cke => ddr2_cke,
cs_n => ddr2_cs_n,
ras_n => ddr2_ras_n,
cas_n => ddr2_cas_n,
we_n => ddr2_we_n,
dm_rdqs => ddr2_dm,
ba => ddr2_ba,
addr => ddr2_a,
dq => ddr2_dq,
dqs => ddr2_dqs,
dqs_n => ddr2_dqs_n,
rdqs_n => open,
odt => ddr2_odt);
-- clock generation
clkin_133MHz <= not clkin_133MHz after 3.7594 ns when sim_done = false else
'0';
clkin_50MHz <= not clkin_50MHz after 10 ns when sim_done = false else
'0';
-- waveform generation
WaveGen_Proc: process
begin
-- insert signal assignments here
wait;
end process WaveGen_Proc;
VGARead: process
variable i: integer := 0;
variable pixeldata : std_logic_vector(23 downto 0);
begin
ReadFile("vga.bmp");
wait for 100 ns; -- wait for uut to stat
wait until rising_edge(vga_vsync); -- wait for vga frame to start (depends
-- on latency of UUT)
wait for 1061.76 us;
while true loop
for y in 479 downto 0 loop
for x in 0 to 639 loop
pixeldata := std_logic_vector(vga_r) & "0000" & std_logic_vector(vga_g) & "0000" & std_logic_vector(vga_b) & "0000";
SetPixel(x, y, pixeldata);
wait for 40 ns;
end loop; -- x
wait for 6400 ns;
end loop; -- x
wait for 1440 us;
WriteFile("vga" & integer'image(i) & ".bmp");
i := i + 1;
if i = 4 then
sim_done <= true;
wait;
end if;
end loop;
end process;
end testbench;
-------------------------------------------------------------------------------
configuration toplevel_tb_testbench_cfg of toplevel_tb is
for testbench
end for;
end toplevel_tb_testbench_cfg;
-------------------------------------------------------------------------------