Skip to content
Snippets Groups Projects
Commit 66a5e187 authored by Eric Kooistra's avatar Eric Kooistra
Browse files

Added expected_res to be able to verify g_use_steps.

parent bbf7dc82
No related branches found
No related tags found
No related merge requests found
...@@ -24,6 +24,7 @@ LIBRARY IEEE, common_lib; ...@@ -24,6 +24,7 @@ LIBRARY IEEE, common_lib;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL; USE IEEE.NUMERIC_STD.ALL;
USE common_lib.common_pkg.ALL; USE common_lib.common_pkg.ALL;
USE work.diag_pkg.ALL;
-- Purpose: test bench for diag_rx_seq control -- Purpose: test bench for diag_rx_seq control
-- Usage: -- Usage:
...@@ -34,17 +35,24 @@ USE common_lib.common_pkg.ALL; ...@@ -34,17 +35,24 @@ USE common_lib.common_pkg.ALL;
--- stimuli process, these mismatches are reported --- stimuli process, these mismatches are reported
ENTITY tb_diag_rx_seq IS ENTITY tb_diag_rx_seq IS
GENERIC (
g_use_steps : BOOLEAN := TRUE;
g_steps_arr : t_integer_arr(c_diag_seq_rx_reg_nof_steps-1 DOWNTO 0) := (OTHERS=>1);
g_seq_dat_w : NATURAL := 16 -- = 12b for Lofar RCU test data, 16b for Lofar TBBI test data
);
END tb_diag_rx_seq; END tb_diag_rx_seq;
ARCHITECTURE tb OF tb_diag_rx_seq IS ARCHITECTURE tb OF tb_diag_rx_seq IS
CONSTANT c_period : TIME := 100 ns; CONSTANT c_period : TIME := 100 ns;
CONSTANT c_nof_cycles : NATURAL := 100; CONSTANT c_nof_cycles : NATURAL := 100;
CONSTANT c_latency : NATURAL := 2;
CONSTANT c_dat_w : NATURAL := 12; -- = 12, for RCU test data CONSTANT c_nof_steps : NATURAL := c_diag_seq_rx_reg_nof_steps;
--CONSTANT c_dat_w : NATURAL := 16; -- = 16, for TBBI test data CONSTANT c_diag_res_w : NATURAL := g_seq_dat_w + 1;
CONSTANT c_diag_res_w : NATURAL := c_dat_w + 1; CONSTANT c_diag_res_ok : STD_LOGIC_VECTOR(c_diag_res_w-1 DOWNTO 0) := '0' & TO_UVEC( 0, c_diag_res_w-1);
CONSTANT c_diag_res_wrong : STD_LOGIC_VECTOR(c_diag_res_w-1 DOWNTO 0) := '0' & TO_UVEC(2**g_seq_dat_w-1, c_diag_res_w-1);
SIGNAL tb_end : STD_LOGIC := '0'; SIGNAL tb_end : STD_LOGIC := '0';
SIGNAL clk : STD_LOGIC := '1'; SIGNAL clk : STD_LOGIC := '1';
...@@ -54,15 +62,18 @@ ARCHITECTURE tb OF tb_diag_rx_seq IS ...@@ -54,15 +62,18 @@ ARCHITECTURE tb OF tb_diag_rx_seq IS
SIGNAL tx_diag_en : STD_LOGIC; SIGNAL tx_diag_en : STD_LOGIC;
SIGNAL tx_diag_sel : STD_LOGIC; SIGNAL tx_diag_sel : STD_LOGIC;
SIGNAL tx_diag_req : STD_LOGIC; SIGNAL tx_diag_req : STD_LOGIC;
SIGNAL seq_dat : STD_LOGIC_VECTOR(c_dat_w-1 DOWNTO 0); SIGNAL seq_dat : STD_LOGIC_VECTOR(g_seq_dat_w-1 DOWNTO 0);
SIGNAL seq_val : STD_LOGIC; SIGNAL seq_val : STD_LOGIC;
-- Rx test data -- Rx test data
SIGNAL rx_diag_en : STD_LOGIC; SIGNAL rx_diag_en : STD_LOGIC;
SIGNAL rx_diag_sel : STD_LOGIC; SIGNAL rx_diag_sel : STD_LOGIC;
SIGNAL rx_diag_steps_arr : t_integer_arr(c_nof_steps-1 DOWNTO 0) := g_steps_arr;
SIGNAL diag_res : STD_LOGIC_VECTOR(c_diag_res_w-1 DOWNTO 0); SIGNAL diag_res : STD_LOGIC_VECTOR(c_diag_res_w-1 DOWNTO 0);
SIGNAL diag_res_val : STD_LOGIC; SIGNAL diag_res_val : STD_LOGIC;
SIGNAL expected_res : STD_LOGIC_VECTOR(c_diag_res_w-1 DOWNTO 0);
BEGIN BEGIN
rst <= '1', '0' AFTER c_period/10; rst <= '1', '0' AFTER c_period/10;
...@@ -78,6 +89,7 @@ BEGIN ...@@ -78,6 +89,7 @@ BEGIN
tx_diag_req <= '1'; tx_diag_req <= '1';
-- COUNTER -- COUNTER
expected_res <= sel_a_b(g_use_steps, c_diag_res_ok, c_diag_res_ok);
WAIT FOR c_period; WAIT FOR c_period;
tx_diag_sel <= '1'; tx_diag_sel <= '1';
rx_diag_sel <= '1'; rx_diag_sel <= '1';
...@@ -107,8 +119,10 @@ BEGIN ...@@ -107,8 +119,10 @@ BEGIN
tx_diag_req <= '1'; tx_diag_req <= '1';
WAIT FOR c_nof_cycles*c_period; WAIT FOR c_nof_cycles*c_period;
rx_diag_en <= '0'; -- stop diag_res rx_diag_en <= '0'; -- stop diag_res
WAIT FOR c_latency*c_period;
-- PRSG -- PRSG
expected_res <= sel_a_b(g_use_steps, c_diag_res_wrong, c_diag_res_ok);
WAIT FOR c_period; WAIT FOR c_period;
tx_diag_sel <= '0'; tx_diag_sel <= '0';
rx_diag_sel <= '0'; rx_diag_sel <= '0';
...@@ -118,8 +132,11 @@ BEGIN ...@@ -118,8 +132,11 @@ BEGIN
rx_diag_en <= '1'; -- restart diag_res rx_diag_en <= '1'; -- restart diag_res
WAIT FOR c_nof_cycles*c_period; WAIT FOR c_nof_cycles*c_period;
rx_diag_en <= '0'; -- stop diag_res rx_diag_en <= '0'; -- stop diag_res
WAIT FOR c_latency*c_period;
-- COUNTER -- COUNTER
WAIT FOR c_latency*c_period;
expected_res <= sel_a_b(g_use_steps, c_diag_res_ok, c_diag_res_ok);
tx_diag_en <= '0'; -- stop tx tx_diag_en <= '0'; -- stop tx
WAIT FOR c_period; WAIT FOR c_period;
tx_diag_sel <= '1'; tx_diag_sel <= '1';
...@@ -134,8 +151,10 @@ BEGIN ...@@ -134,8 +151,10 @@ BEGIN
tx_diag_req <= '1'; tx_diag_req <= '1';
WAIT FOR c_nof_cycles*c_period; WAIT FOR c_nof_cycles*c_period;
rx_diag_en <= '0'; -- stop diag_res rx_diag_en <= '0'; -- stop diag_res
WAIT FOR c_latency*c_period;
-- COUNTER -- COUNTER
expected_res <= sel_a_b(g_use_steps, c_diag_res_ok, c_diag_res_ok);
tx_diag_en <= '0'; -- stop tx tx_diag_en <= '0'; -- stop tx
tx_diag_req <= '0'; -- inactive tx request tx_diag_req <= '0'; -- inactive tx request
WAIT FOR c_period; WAIT FOR c_period;
...@@ -163,8 +182,10 @@ BEGIN ...@@ -163,8 +182,10 @@ BEGIN
WAIT FOR c_period; WAIT FOR c_period;
WAIT FOR c_nof_cycles*c_period; WAIT FOR c_nof_cycles*c_period;
rx_diag_en <= '0'; -- stop diag_res rx_diag_en <= '0'; -- stop diag_res
WAIT FOR c_latency*c_period;
-- PRSG -- PRSG
expected_res <= sel_a_b(g_use_steps, c_diag_res_wrong, c_diag_res_ok);
WAIT FOR c_period; WAIT FOR c_period;
tx_diag_sel <= '0'; tx_diag_sel <= '0';
rx_diag_sel <= '0'; rx_diag_sel <= '0';
...@@ -177,8 +198,10 @@ BEGIN ...@@ -177,8 +198,10 @@ BEGIN
tx_diag_en <= '0'; -- stop tx tx_diag_en <= '0'; -- stop tx
WAIT FOR c_nof_cycles*c_period; WAIT FOR c_nof_cycles*c_period;
rx_diag_en <= '0'; -- stop diag_res rx_diag_en <= '0'; -- stop diag_res
WAIT FOR c_latency*c_period;
-- PRSG -- PRSG
expected_res <= sel_a_b(g_use_steps, c_diag_res_wrong, c_diag_res_ok);
WAIT FOR c_period; WAIT FOR c_period;
tx_diag_sel <= '0'; tx_diag_sel <= '0';
rx_diag_sel <= '0'; rx_diag_sel <= '0';
...@@ -201,8 +224,10 @@ BEGIN ...@@ -201,8 +224,10 @@ BEGIN
tx_diag_en <= '0'; -- stop tx tx_diag_en <= '0'; -- stop tx
WAIT FOR c_nof_cycles*c_period; WAIT FOR c_nof_cycles*c_period;
rx_diag_en <= '0'; -- stop diag_res rx_diag_en <= '0'; -- stop diag_res
WAIT FOR c_latency*c_period;
-- COUNTER -- COUNTER
expected_res <= sel_a_b(g_use_steps, c_diag_res_ok, c_diag_res_ok);
WAIT FOR c_period; WAIT FOR c_period;
tx_diag_sel <= '1'; tx_diag_sel <= '1';
rx_diag_sel <= '1'; rx_diag_sel <= '1';
...@@ -217,6 +242,7 @@ BEGIN ...@@ -217,6 +242,7 @@ BEGIN
WAIT FOR c_nof_cycles*c_period; -- some more cylces to show that the diag_res error state is preserved WAIT FOR c_nof_cycles*c_period; -- some more cylces to show that the diag_res error state is preserved
tx_diag_en <= '0'; -- stop tx tx_diag_en <= '0'; -- stop tx
rx_diag_en <= '0'; -- stop diag_res rx_diag_en <= '0'; -- stop diag_res
WAIT FOR c_latency*c_period;
WAIT FOR c_nof_cycles*c_period; WAIT FOR c_nof_cycles*c_period;
tb_end <= '1'; tb_end <= '1';
...@@ -226,7 +252,7 @@ BEGIN ...@@ -226,7 +252,7 @@ BEGIN
u_diag_tx_seq : ENTITY work.diag_tx_seq u_diag_tx_seq : ENTITY work.diag_tx_seq
GENERIC MAP ( GENERIC MAP (
g_dat_w => c_dat_w g_dat_w => g_seq_dat_w
) )
PORT MAP ( PORT MAP (
clk => clk, clk => clk,
...@@ -240,7 +266,9 @@ BEGIN ...@@ -240,7 +266,9 @@ BEGIN
u_diag_rx_seq : ENTITY work.diag_rx_seq u_diag_rx_seq : ENTITY work.diag_rx_seq
GENERIC MAP ( GENERIC MAP (
g_dat_w => c_dat_w, g_use_steps => g_use_steps,
g_nof_steps => c_nof_steps,
g_dat_w => g_seq_dat_w,
g_diag_res_w => c_diag_res_w g_diag_res_w => c_diag_res_w
) )
PORT MAP ( PORT MAP (
...@@ -250,6 +278,7 @@ BEGIN ...@@ -250,6 +278,7 @@ BEGIN
in_val => seq_val, in_val => seq_val,
diag_en => rx_diag_en, diag_en => rx_diag_en,
diag_sel => rx_diag_sel, diag_sel => rx_diag_sel,
diag_steps_arr => rx_diag_steps_arr,
diag_res => diag_res, diag_res => diag_res,
diag_res_val => diag_res_val diag_res_val => diag_res_val
); );
...@@ -258,7 +287,7 @@ BEGIN ...@@ -258,7 +287,7 @@ BEGIN
BEGIN BEGIN
IF rising_edge(clk) THEN IF rising_edge(clk) THEN
IF diag_res_val='1' THEN IF diag_res_val='1' THEN
ASSERT UNSIGNED(diag_res)=0 REPORT "DIAG sequence mismatch occured."; ASSERT UNSIGNED(diag_res)=UNSIGNED(expected_res) REPORT "DIAG sequence mismatch occured.";
END IF; END IF;
END IF; END IF;
END PROCESS; END PROCESS;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment