2022-04-07 18:46:57 +02:00

90 lines
1.9 KiB
VHDL

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.math_real.all;
entity PixTrans_tb is
end PixTrans_tb;
architecture test of PixTrans_tb is
constant CLK_PERIOD : time := 20 ns;
constant N_LED_MAX : integer := 255;
constant MAX_H : natural := 4;
constant MAX_W : natural := 4;
constant ACTUAL_H : natural := 2;
constant ACTUAL_W : natural := 2;
signal clk : std_logic := '0';
signal rst_n : std_logic;
signal fifo_empty, lcd_req : std_logic;
signal fifo_q : std_logic_vector(31 downto 0);
signal w, h : natural;
begin
w <= ACTUAL_W;
h <= ACTUAL_H;
-- Instantiate DUT
dut : entity work.PixTrans
generic map (
MAX_H => MAX_H,
MAX_W => MAX_W
)
port map(
clk => clk,
rst_n => rst_n,
lcd_req => lcd_req,
fifo_q => fifo_q,
fifo_empty => fifo_empty,
w => w,
h => h
);
-- Clocking process
clk_generation : process
begin
clk <= not clk;
wait for CLK_PERIOD / 2;
end process;
-- Testbench
tb : process
procedure getPixel is
begin
wait until rising_edge(clk);
lcd_req <= '1';
wait for CLK_PERIOD;
wait until rising_edge(clk);
lcd_req <= '0';
wait for CLK_PERIOD*3;
end procedure getPixel;
begin
-- Just let the FIFO interface always provide data
fifo_q <= X"FFFF" & X"F0F0";
fifo_empty <= '0';
lcd_req <= '0';
-- Reset
rst_n <= '0';
wait for CLK_PERIOD * 2.5;
rst_n <= '1';
wait for CLK_PERIOD * 2;
-- Get some pixels
for i in 1 to MAX_H*MAX_W loop
report "hello";
getPixel;
end loop;
-- Test finished
wait;
end process;
end;