diff --git a/libraries/dsp/iquv/tb/vhdl/tb_iquv_iab.vhd b/libraries/dsp/iquv/tb/vhdl/tb_iquv_iab.vhd index 89fd455399a8a13a23b200e40e11ab6eb0f6168e..bd45dac37548b18227e72e8041a5547e6784d307 100644 --- a/libraries/dsp/iquv/tb/vhdl/tb_iquv_iab.vhd +++ b/libraries/dsp/iquv/tb/vhdl/tb_iquv_iab.vhd @@ -59,6 +59,11 @@ ARCHITECTURE tb OF tb_iquv_iab IS CONSTANT c_fsd_w : NATURAL := c_iquv_out_w + ceil_log2(g_nof_streams); -- The number of bits fsd after the adder tree CONSTANT c_lsb_w : NATURAL := c_fsd_w - g_out_data_w; -- number of lsbs to remove from the expected result + CONSTANT c_clip : BOOLEAN := TRUE; + CONSTANT c_wrap : BOOLEAN := NOT c_clip; + CONSTANT c_even : BOOLEAN := TRUE; + CONSTANT c_away : BOOLEAN := NOT c_even; + SIGNAL tb_end : STD_LOGIC := '0'; SIGNAL dp_rst : STD_LOGIC := '1'; SIGNAL dp_clk : STD_LOGIC := '0'; @@ -205,19 +210,19 @@ BEGIN IF rising_edge(dp_clk) THEN IF diag_out_valid = '1' THEN IF g_nof_int = 8 THEN - ASSERT TO_UINT(i_out.data) = TO_UINT(u_round(TO_UVEC(i_nint8_exp_arr(v_index),c_fsd_w), c_lsb_w, TRUE)) REPORT "Error: wrong result in I out DUT" SEVERITY ERROR; - --REPORT "I exp = " & integer'image(to_uint(s_round(TO_UVEC(i_nint8_exp_arr(v_index),c_fsd_w), c_lsb_w, TRUE))); - ASSERT TO_SINT(q_out.data) = TO_SINT(s_round(TO_SVEC(q_nint8_exp_arr(v_index),c_word_w), c_lsb_w)) REPORT "Error: wrong result in Q out DUT" SEVERITY ERROR; - ASSERT TO_SINT(u_out.data) = TO_SINT(s_round(TO_SVEC(u_nint8_exp_arr(v_index),c_word_w), c_lsb_w)) REPORT "Error: wrong result in U out DUT" SEVERITY ERROR; - ASSERT TO_SINT(v_out.data) = TO_SINT(s_round(TO_SVEC(v_nint8_exp_arr(v_index),c_word_w), c_lsb_w)) REPORT "Error: wrong result in V out DUT" SEVERITY ERROR; + ASSERT TO_UINT(i_out.data) = TO_UINT(u_round(TO_UVEC(i_nint8_exp_arr(v_index),c_fsd_w), c_lsb_w, c_clip, c_even)) REPORT "Error: wrong result in I out DUT" SEVERITY ERROR; + --REPORT "I exp = " & integer'image(to_uint(s_round(TO_UVEC(i_nint8_exp_arr(v_index),c_fsd_w), c_lsb_w, c_clip))); + ASSERT TO_SINT(q_out.data) = TO_SINT(s_round(TO_SVEC(q_nint8_exp_arr(v_index),c_word_w), c_lsb_w, c_wrap, c_even)) REPORT "Error: wrong result in Q out DUT" SEVERITY ERROR; + ASSERT TO_SINT(u_out.data) = TO_SINT(s_round(TO_SVEC(u_nint8_exp_arr(v_index),c_word_w), c_lsb_w, c_wrap, c_even)) REPORT "Error: wrong result in U out DUT" SEVERITY ERROR; + ASSERT TO_SINT(v_out.data) = TO_SINT(s_round(TO_SVEC(v_nint8_exp_arr(v_index),c_word_w), c_lsb_w, c_wrap, c_even)) REPORT "Error: wrong result in V out DUT" SEVERITY ERROR; ELSIF g_nof_int = 16 THEN - ASSERT TO_UINT(i_out.data) = TO_UINT(u_round(TO_UVEC(i_nint16_exp_arr(v_index),c_fsd_w), c_lsb_w, TRUE)) REPORT "Error: wrong result in I out DUT" SEVERITY ERROR; - --REPORT "I expected = " & integer'image(to_uint(u_round(TO_UVEC(i_nint16_exp_arr(v_index),c_fsd_w), c_lsb_w, TRUE))); - ASSERT TO_SINT(q_out.data) = TO_SINT(s_round(TO_SVEC(q_nint16_exp_arr(v_index),c_word_w), c_lsb_w)) REPORT "Error: wrong result in Q out DUT" SEVERITY ERROR; - --REPORT "Q expected = " & integer'image(to_sint(s_round(TO_SVEC(q_nint16_exp_arr(v_index),c_word_w), c_lsb_w))); - ASSERT TO_SINT(u_out.data) = TO_SINT(s_round(TO_SVEC(u_nint16_exp_arr(v_index),c_word_w), c_lsb_w)) REPORT "Error: wrong result in U out DUT" SEVERITY ERROR; - ASSERT TO_SINT(v_out.data) = TO_SINT(s_round(TO_SVEC(v_nint16_exp_arr(v_index),c_word_w), c_lsb_w)) REPORT "Error: wrong result in V out DUT" SEVERITY ERROR; + ASSERT TO_UINT(i_out.data) = TO_UINT(u_round(TO_UVEC(i_nint16_exp_arr(v_index),c_fsd_w), c_lsb_w, c_clip, c_even)) REPORT "Error: wrong result in I out DUT" SEVERITY ERROR; + --REPORT "I expected = " & integer'image(to_uint(u_round(TO_UVEC(i_nint16_exp_arr(v_index),c_fsd_w), c_lsb_w, c_clip, c_even))); + ASSERT TO_SINT(q_out.data) = TO_SINT(s_round(TO_SVEC(q_nint16_exp_arr(v_index),c_word_w), c_lsb_w, c_wrap, c_even)) REPORT "Error: wrong result in Q out DUT" SEVERITY ERROR; + --REPORT "Q expected = " & integer'image(to_sint(s_round(TO_SVEC(q_nint16_exp_arr(v_index),c_word_w), c_lsb_w, c_wrap, c_even))); + ASSERT TO_SINT(u_out.data) = TO_SINT(s_round(TO_SVEC(u_nint16_exp_arr(v_index),c_word_w), c_lsb_w, c_wrap, c_even)) REPORT "Error: wrong result in U out DUT" SEVERITY ERROR; + ASSERT TO_SINT(v_out.data) = TO_SINT(s_round(TO_SVEC(v_nint16_exp_arr(v_index),c_word_w), c_lsb_w, c_wrap, c_even)) REPORT "Error: wrong result in V out DUT" SEVERITY ERROR; END IF; REPORT "I = " & integer'image(to_uint(i_out.data)) & ", Q = " & integer'image(to_sint(q_out.data)) &