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

Define g_dp_data_w as generic to be able to select mixed width or equal width FIFO.

parent ac1d2c4c
No related branches found
No related tags found
No related merge requests found
...@@ -50,6 +50,7 @@ ENTITY tb_io_ddr IS ...@@ -50,6 +50,7 @@ ENTITY tb_io_ddr IS
g_ctlr_ref_clk_period : TIME := 5 ns; -- 200 MHz g_ctlr_ref_clk_period : TIME := 5 ns; -- 200 MHz
g_dvr_clk_period : TIME := 5 ns; -- 50 ns g_dvr_clk_period : TIME := 5 ns; -- 50 ns
g_dp_clk_period : TIME := 5000 ps; -- 200 MHz g_dp_clk_period : TIME := 5000 ps; -- 200 MHz
g_dp_data_w : NATURAL := 32; -- 32 for mixed width and 256 for equal width FIFO
g_nof_repeat : NATURAL := 2; g_nof_repeat : NATURAL := 2;
g_wr_flush_mode : STRING := "SYN" -- "VAL", "SOP", "SYN" g_wr_flush_mode : STRING := "SYN" -- "VAL", "SOP", "SYN"
); );
...@@ -75,9 +76,7 @@ ARCHITECTURE str of tb_io_ddr IS ...@@ -75,9 +76,7 @@ ARCHITECTURE str of tb_io_ddr IS
CONSTANT c_wr_not_rd_arr : STD_LOGIC_VECTOR := ('1', '1', '0', '1', '1', '0', '0', '0', '0', '1', '0'); CONSTANT c_wr_not_rd_arr : STD_LOGIC_VECTOR := ('1', '1', '0', '1', '1', '0', '0', '0', '0', '1', '0');
CONSTANT c_ctlr_data_w : NATURAL := func_tech_ddr_ctlr_data_w(c_tech_ddr); CONSTANT c_ctlr_data_w : NATURAL := func_tech_ddr_ctlr_data_w(c_tech_ddr);
--CONSTANT c_dp_data_w : NATURAL := 32; CONSTANT c_dp_factor : NATURAL := c_ctlr_data_w/g_dp_data_w;
CONSTANT c_dp_data_w : NATURAL := 256;
CONSTANT c_dp_factor : NATURAL := c_ctlr_data_w/c_dp_data_w;
CONSTANT c_wr_fifo_depth : NATURAL := 128; CONSTANT c_wr_fifo_depth : NATURAL := 128;
CONSTANT c_rd_fifo_depth : NATURAL := 256; CONSTANT c_rd_fifo_depth : NATURAL := 256;
...@@ -104,16 +103,17 @@ ARCHITECTURE str of tb_io_ddr IS ...@@ -104,16 +103,17 @@ ARCHITECTURE str of tb_io_ddr IS
SIGNAL dvr_done : STD_LOGIC; SIGNAL dvr_done : STD_LOGIC;
SIGNAL dvr_wr_not_rd : STD_LOGIC; SIGNAL dvr_wr_not_rd : STD_LOGIC;
SIGNAL dvr_wr_flush_en : STD_LOGIC; SIGNAL dvr_wr_flush_en : STD_LOGIC;
SIGNAL dvr_wr_fifo_usedw : STD_LOGIC_VECTOR(ceil_log2(c_wr_fifo_depth * c_dp_factor)-1 DOWNTO 0);
SIGNAL diag_wr_src_in : t_dp_siso; SIGNAL diag_wr_src_in : t_dp_siso;
SIGNAL diag_wr_src_out : t_dp_sosi; SIGNAL diag_wr_src_out : t_dp_sosi;
SIGNAL wr_fifo_usedw : STD_LOGIC_VECTOR(ceil_log2(c_wr_fifo_depth * c_dp_factor)-1 DOWNTO 0);
SIGNAL wr_src_out : t_dp_sosi; SIGNAL wr_src_out : t_dp_sosi;
SIGNAL wr_val_cnt : NATURAL := 0; SIGNAL wr_val_cnt : NATURAL := 0;
SIGNAL diag_rd_snk_out : t_dp_siso; SIGNAL diag_rd_snk_out : t_dp_siso;
SIGNAL diag_rd_snk_in : t_dp_sosi; SIGNAL diag_rd_snk_in : t_dp_sosi;
SIGNAL rd_fifo_usedw : STD_LOGIC_VECTOR(ceil_log2(c_rd_fifo_depth * c_dp_factor)-1 DOWNTO 0);
SIGNAL src_diag_en : STD_LOGIC; SIGNAL src_diag_en : STD_LOGIC;
SIGNAL src_val_cnt : STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL src_val_cnt : STD_LOGIC_VECTOR(31 DOWNTO 0);
...@@ -174,7 +174,7 @@ BEGIN ...@@ -174,7 +174,7 @@ BEGIN
proc_common_wait_some_cycles(dvr_clk, 1); proc_common_wait_some_cycles(dvr_clk, 1);
dvr_en <= '0'; dvr_en <= '0';
-- ACCESS DONE -- ACCESS DONE
proc_common_wait_until_lo_hi(dvr_clk, dvr_done); proc_common_wait_until_lo_hi(dvr_clk, dvr_done);
IF c_wr_not_rd_arr(I)='0' THEN IF c_wr_not_rd_arr(I)='0' THEN
...@@ -194,8 +194,10 @@ BEGIN ...@@ -194,8 +194,10 @@ BEGIN
proc_common_wait_some_cycles(dvr_clk, 1); proc_common_wait_some_cycles(dvr_clk, 1);
dvr_wr_flush_en <= '0'; dvr_wr_flush_en <= '0';
proc_common_wait_some_cycles(ctlr_clk, 500); -- Wait until the wr fifo has been flushed and the rd fifo has been read empty
ASSERT UNSIGNED(dvr_wr_fifo_usedw) = 0 REPORT "[ERROR] Write FIFO is flushed but not empty!" SEVERITY FAILURE; proc_common_wait_some_cycles(ctlr_clk, 500*c_dp_factor);
ASSERT UNSIGNED(wr_fifo_usedw) = 0 REPORT "[ERROR] Write FIFO is flushed but not empty!" SEVERITY FAILURE;
ASSERT UNSIGNED(rd_fifo_usedw) = 0 REPORT "[ERROR] Read FIFO is not empty!" SEVERITY FAILURE;
ASSERT UNSIGNED(snk_val_cnt) = expected_cnt REPORT "[ERROR] Unexpected number of read data!" SEVERITY FAILURE; ASSERT UNSIGNED(snk_val_cnt) = expected_cnt REPORT "[ERROR] Unexpected number of read data!" SEVERITY FAILURE;
-- Restart diagnostics source and sink -- Restart diagnostics source and sink
...@@ -211,7 +213,7 @@ BEGIN ...@@ -211,7 +213,7 @@ BEGIN
u_diagnostics: ENTITY diagnostics_lib.diagnostics u_diagnostics: ENTITY diagnostics_lib.diagnostics
GENERIC MAP ( GENERIC MAP (
g_dat_w => c_dp_data_w, g_dat_w => g_dp_data_w,
g_nof_streams => 1 g_nof_streams => 1
) )
PORT MAP ( PORT MAP (
...@@ -263,10 +265,10 @@ BEGIN ...@@ -263,10 +265,10 @@ BEGIN
g_technology => g_technology, g_technology => g_technology,
g_tech_ddr => c_tech_ddr, g_tech_ddr => c_tech_ddr,
g_cross_domain_dvr_ctlr => c_cross_domain_dvr_ctlr, g_cross_domain_dvr_ctlr => c_cross_domain_dvr_ctlr,
g_wr_data_w => c_dp_data_w, g_wr_data_w => g_dp_data_w,
g_wr_fifo_depth => c_wr_fifo_depth, -- >=16 AND >g_tech_ddr.maxburstsize, defined at DDR side of the FIFO. g_wr_fifo_depth => c_wr_fifo_depth, -- >=16 AND >g_tech_ddr.maxburstsize, defined at DDR side of the FIFO.
g_rd_fifo_depth => c_rd_fifo_depth, -- >=16 AND >g_tech_ddr.maxburstsize, defined at DDR side of the FIFO. g_rd_fifo_depth => c_rd_fifo_depth, -- >=16 AND >g_tech_ddr.maxburstsize, defined at DDR side of the FIFO.
g_rd_data_w => c_dp_data_w, g_rd_data_w => g_dp_data_w,
g_wr_flush_mode => g_wr_flush_mode, g_wr_flush_mode => g_wr_flush_mode,
g_wr_flush_use_channel => FALSE, g_wr_flush_use_channel => FALSE,
g_wr_flush_start_channel => 0, g_wr_flush_start_channel => 0,
...@@ -293,22 +295,24 @@ BEGIN ...@@ -293,22 +295,24 @@ BEGIN
dvr_start_addr => dvr_start_addr, dvr_start_addr => dvr_start_addr,
dvr_end_addr => dvr_end_addr, dvr_end_addr => dvr_end_addr,
dvr_wr_flush_en => dvr_wr_flush_en, dvr_wr_flush_en => dvr_wr_flush_en,
dvr_wr_fifo_usedw => dvr_wr_fifo_usedw,
-- Write FIFO clock domain -- Write FIFO clock domain
wr_clk => dp_clk, wr_clk => dp_clk,
wr_rst => dp_rst, wr_rst => dp_rst,
wr_fifo_usedw => wr_fifo_usedw,
wr_sosi => wr_src_out, wr_sosi => wr_src_out,
wr_siso => diag_wr_src_in, wr_siso => diag_wr_src_in,
-- Read FIFO clock domain -- Read FIFO clock domain
rd_sosi => diag_rd_snk_in,
rd_siso => diag_rd_snk_out,
rd_clk => dp_clk, rd_clk => dp_clk,
rd_rst => dp_rst, rd_rst => dp_rst,
rd_fifo_usedw => rd_fifo_usedw,
rd_sosi => diag_rd_snk_in,
rd_siso => diag_rd_snk_out,
-- DDR PHY external interface
phy_ou => phy_ou, phy_ou => phy_ou,
phy_io => phy_io, phy_io => phy_io,
phy_in => phy_in phy_in => phy_in
......
...@@ -43,14 +43,17 @@ BEGIN ...@@ -43,14 +43,17 @@ BEGIN
-- g_ctlr_ref_clk_period : TIME := 5 ns; -- 200 MHz -- g_ctlr_ref_clk_period : TIME := 5 ns; -- 200 MHz
-- g_dvr_clk_period : TIME := 20 ns; -- 50 ns -- g_dvr_clk_period : TIME := 20 ns; -- 50 ns
-- g_dp_clk_period : TIME := 5000 ps; -- 200 MHz -- g_dp_clk_period : TIME := 5000 ps; -- 200 MHz
-- g_dp_data_w : NATURAL := 32; -- 32 for mixed width and 256 for equal width FIFO
-- g_nof_repeat : NATURAL := 2; -- g_nof_repeat : NATURAL := 2;
-- g_wr_flush_mode : STRING := "SYN" -- "VAL", "SOP", "SYN" -- g_wr_flush_mode : STRING := "SYN" -- "VAL", "SOP", "SYN"
u_fill_wrfifo_on_next_valid : ENTITY work.tb_io_ddr GENERIC MAP (c_tech_select_default, 5 ns, 5 ns, 5 ns, 2, "VAL"); u_fill_wrfifo_on_next_valid : ENTITY work.tb_io_ddr GENERIC MAP (c_tech_select_default, 5 ns, 5 ns, 5 ns, 256, 2, "VAL");
u_fill_wrfifo_on_next_sop : ENTITY work.tb_io_ddr GENERIC MAP (c_tech_select_default, 5 ns, 5 ns, 5 ns, 2, "SOP"); u_fill_wrfifo_on_next_sop : ENTITY work.tb_io_ddr GENERIC MAP (c_tech_select_default, 5 ns, 5 ns, 5 ns, 256, 2, "SOP");
u_fill_wrfifo_on_next_sync : ENTITY work.tb_io_ddr GENERIC MAP (c_tech_select_default, 5 ns, 5 ns, 5 ns, 2, "SYN"); u_fill_wrfifo_on_next_sync : ENTITY work.tb_io_ddr GENERIC MAP (c_tech_select_default, 5 ns, 5 ns, 5 ns, 256, 2, "SYN");
u_cross_dvr_to_faster_ctlr : ENTITY work.tb_io_ddr GENERIC MAP (c_tech_select_default, 5 ns, 20 ns, 5 ns, 1, "VAL"); u_mixed_width : ENTITY work.tb_io_ddr GENERIC MAP (c_tech_select_default, 5 ns, 5 ns, 5 ns, 32, 1, "VAL");
u_cross_dvr_to_slower_ctlr : ENTITY work.tb_io_ddr GENERIC MAP (c_tech_select_default, 5 ns, 1 ns, 5 ns, 1, "VAL");
u_cross_dvr_to_faster_ctlr : ENTITY work.tb_io_ddr GENERIC MAP (c_tech_select_default, 5 ns, 20 ns, 5 ns, 256, 1, "VAL");
u_cross_dvr_to_slower_ctlr : ENTITY work.tb_io_ddr GENERIC MAP (c_tech_select_default, 5 ns, 1 ns, 5 ns, 256, 1, "VAL");
END tb; END tb;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment