Lightening_Transformer/ddot_unit_testBench.vhd
2025-06-09 19:11:01 +02:00

96 lines
2 KiB
VHDL

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.math_real.all;
use work.real_vector_pkg.all;
entity tb_ddot_unit is
end tb_ddot_unit;
architecture Behavioral of tb_ddot_unit is
-- Parameters
constant N : integer := 4; -- must match DDOT generic
-- DUT signals
signal clk : std_logic := '0';
signal reset_n : std_logic := '0';
signal enable : std_logic := '0';
signal out_valid : std_logic;
signal x_vec : my_real_vector(0 to N-1);
signal y_vec : my_real_vector(0 to N-1);
signal dot_out : real;
-- Clock period
constant clk_period : time := 10 ns;
begin
-- Instantiate the DUT
uut: entity work.ddot_unit
generic map (
N => N
)
port map (
clk => clk,
reset_n => reset_n,
enable => enable,
x_vec => x_vec,
y_vec => y_vec,
out_valid => out_valid,
dot_out => dot_out
);
-- Clock generation
clk_process : process
begin
clk <= '0';
wait for clk_period/2;
clk <= '1';
wait for clk_period/2;
end process;
-- Stimulus process
stim_proc: process
begin
-- Reset
reset_n <= '0';
enable <= '0';
wait for 20 ns;
reset_n <= '1';
wait for 10 ns;--
-- Apply first test vector
x_vec(0) <= 1.0; y_vec(0) <= 2.0;
x_vec(1) <= 3.0; y_vec(1) <= 4.0;
x_vec(2) <= 5.0; y_vec(2) <= 6.0;
x_vec(3) <= 7.0; y_vec(3) <= 8.0;
wait for clk_period;--
enable <= '1';
wait until rising_edge(clk) and out_valid = '1';
--wait for 10 ns;
enable <= '0';
-- Wait and observe output
wait for 50 ns;
-- Apply second test vector
x_vec(0) <= 2.0; y_vec(0) <= 3.0;
x_vec(1) <= 4.0; y_vec(1) <= 5.0;
x_vec(2) <= 6.0; y_vec(2) <= 7.0;
x_vec(3) <= 8.0; y_vec(3) <= 9.0;
wait for clk_period;
enable <= '1';
wait until rising_edge(clk) and out_valid = '1';
--wait for 10 ns;
enable <= '0';
-- Wait and observe output
wait for 50 ns;
-- Finish simulation
wait;
end process;
end architecture;