From d51f8638d2a19431caed2afb1a4c0de8866a3588 Mon Sep 17 00:00:00 2001 From: Erik Kooistra <kooistra@astron.nl> Date: Wed, 8 Apr 2015 11:21:57 +0000 Subject: [PATCH] Removed g_use_ddr_memory_model so the DDR memory model code is not seen/needed by synthesis. Instead only support DDR memory model instantiation in test bench. --- libraries/io/ddr/hdllib.cfg | 8 ++--- libraries/io/ddr/tb/vhdl/tb_io_ddr.vhd | 24 ++++++--------- libraries/io/ddr/tb/vhdl/tb_tb_io_ddr.vhd | 37 +++++++++++------------ libraries/technology/ddr/tech_ddr.vhd | 31 ++----------------- 4 files changed, 35 insertions(+), 65 deletions(-) diff --git a/libraries/io/ddr/hdllib.cfg b/libraries/io/ddr/hdllib.cfg index 35519ad26a..f3d103744e 100644 --- a/libraries/io/ddr/hdllib.cfg +++ b/libraries/io/ddr/hdllib.cfg @@ -24,11 +24,11 @@ test_bench_files = modelsim_search_libraries = # stratixiv only -# altera_ver lpm_ver sgate_ver altera_mf_ver altera_lnsim_ver stratixiv_ver stratixiv_hssi_ver stratixiv_pcie_hip_ver -# altera lpm sgate altera_mf altera_lnsim stratixiv stratixiv_hssi stratixiv_pcie_hip + altera_ver lpm_ver sgate_ver altera_mf_ver altera_lnsim_ver stratixiv_ver stratixiv_hssi_ver stratixiv_pcie_hip_ver + altera lpm sgate altera_mf altera_lnsim stratixiv stratixiv_hssi stratixiv_pcie_hip # arria10 only - altera_ver lpm_ver sgate_ver altera_mf_ver altera_lnsim_ver twentynm_ver twentynm_hssi_ver twentynm_hip_ver - altera lpm sgate altera_mf altera_lnsim twentynm twentynm_hssi twentynm_hip +# altera_ver lpm_ver sgate_ver altera_mf_ver altera_lnsim_ver twentynm_ver twentynm_hssi_ver twentynm_hip_ver +# altera lpm sgate altera_mf altera_lnsim twentynm twentynm_hssi twentynm_hip # both (will yield errors if the technology library is not available in simulator but these errors can be ignored) # altera_ver lpm_ver sgate_ver altera_mf_ver altera_lnsim_ver stratixiv_ver stratixiv_hssi_ver stratixiv_pcie_hip_ver twentynm_ver twentynm_hssi_ver twentynm_hip_ver # altera lpm sgate altera_mf altera_lnsim stratixiv stratixiv_hssi stratixiv_pcie_hip twentynm twentynm_hssi twentynm_hip diff --git a/libraries/io/ddr/tb/vhdl/tb_io_ddr.vhd b/libraries/io/ddr/tb/vhdl/tb_io_ddr.vhd index 528ce573c6..3c25f729db 100644 --- a/libraries/io/ddr/tb/vhdl/tb_io_ddr.vhd +++ b/libraries/io/ddr/tb/vhdl/tb_io_ddr.vhd @@ -48,8 +48,7 @@ ENTITY tb_io_ddr IS g_tech_ddr3 : t_c_tech_ddr := c_tech_ddr3_4g_800m_master; g_tech_ddr4 : t_c_tech_ddr := c_tech_ddr4_4g_1600m; g_tb_end : BOOLEAN := TRUE; -- when TRUE then tb_end ends this simulation, else a higher multi-testbench will end the simulation - g_use_ddr_memory_model : BOOLEAN := FALSE; -- when TRUE use the internal DDR memory model, else use the DDR model in this tb. - g_cross_domain_dvr_ctlr : BOOLEAN := FALSE; -- when TRUE insert clock cross domain logic + g_cross_domain_dvr_ctlr : BOOLEAN := TRUE; -- when TRUE insert clock cross domain logic g_ctlr_ref_clk_period : TIME := 5000 ps; -- 200 MHz g_dvr_clk_period : TIME := 5000 ps; -- 50 MHz g_dp_clk_period : TIME := 5000 ps; -- 200 MHz @@ -399,7 +398,6 @@ BEGIN GENERIC MAP( g_technology => g_technology, g_tech_ddr => c_tech_ddr, - g_use_ddr_memory_model => g_use_ddr_memory_model, -- when TRUE use internal DDR memory model g_cross_domain_dvr_ctlr => c_cross_domain_dvr_ctlr, g_cross_domain_delay_len => c_meta_delay_len, g_wr_data_w => c_dp_data_w, @@ -461,17 +459,15 @@ BEGIN phy_in => phy_in ); - external_ddr_memory_model : IF g_use_ddr_memory_model=FALSE GENERATE - u_tech_ddr_memory_model : ENTITY tech_ddr_lib.tech_ddr_memory_model - GENERIC MAP ( - g_sim => TRUE, - g_tech_ddr => c_tech_ddr - ) - PORT MAP ( - mem_in => phy_ou, - mem_io => phy_io - ); - END GENERATE; + u_tech_ddr_memory_model : ENTITY tech_ddr_lib.tech_ddr_memory_model + GENERIC MAP ( + g_sim => TRUE, + g_tech_ddr => c_tech_ddr + ) + PORT MAP ( + mem_in => phy_ou, + mem_io => phy_io + ); END ARCHITECTURE str; diff --git a/libraries/io/ddr/tb/vhdl/tb_tb_io_ddr.vhd b/libraries/io/ddr/tb/vhdl/tb_tb_io_ddr.vhd index 98fb26e13d..efafd7f57c 100644 --- a/libraries/io/ddr/tb/vhdl/tb_tb_io_ddr.vhd +++ b/libraries/io/ddr/tb/vhdl/tb_tb_io_ddr.vhd @@ -52,7 +52,6 @@ BEGIN -- g_tech_ddr3 : t_c_tech_ddr := c_tech_ddr3_4g_800m_master; -- g_tech_ddr4 : t_c_tech_ddr := c_tech_ddr4_4g_1600m; -- g_tb_end : BOOLEAN := TRUE; -- when TRUE then tb_end ends this simulation, else a higher multi-testbench will end the simulation - -- g_use_ddr_memory_model : BOOLEAN := TRUE; -- when TRUE use the internal DDR memory model, else use the DDR model in this tb. -- g_cross_domain_dvr_ctlr : BOOLEAN := FALSE; -- when TRUE insert clock cross domain logic -- g_ctlr_ref_clk_period : TIME := 5 ns; -- 200 MHz -- g_dvr_clk_period : TIME := 5 ns; -- 50 ns @@ -68,28 +67,28 @@ BEGIN -- g_wr_flush_mode : STRING := "SYN" -- "VAL", "SOP", "SYN" gen_ddr3 : IF c_tech_ddr.name="DDR3" GENERATE - u_default : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, FALSE, 5 ns, 5 ns, 5 ns, 8 ns, 4, 512, 2500, 2, 1, 1, 1, "VAL") PORT MAP (tb_end_vec(0)); - - u_fill_wrfifo_on_next_valid : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, FALSE, 5 ns, 5 ns, 5 ns, 8 ns, 1, 256, 1000, 2, 1, 4, 2, "VAL") PORT MAP (tb_end_vec(1)); - u_fill_wrfifo_on_next_sop : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, FALSE, 5 ns, 5 ns, 5 ns, 8 ns, 1, 256, 1000, 2, 3, 4, 2, "SOP") PORT MAP (tb_end_vec(2)); - u_fill_wrfifo_on_next_sync : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, FALSE, 5 ns, 5 ns, 5 ns, 8 ns, 1, 256, 1000, 2, 4, 1, 2, "SYN") PORT MAP (tb_end_vec(3)); - - u_ext_memory_model : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, TRUE, FALSE, 5 ns, 5 ns, 5 ns, 8 ns, 1,8192, 2500, 1, 2, 3, 1, "VAL") PORT MAP (tb_end_vec(4)); - u_mixed_width : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, FALSE, 5 ns, 5 ns, 5 ns, 8 ns, 8,8192, 2500, 1, 3, 2, 1, "VAL") PORT MAP (tb_end_vec(5)); - - u_wr_burst_size_0 : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, TRUE, FALSE, 5 ns, 5 ns, 5 ns, 8 ns, 4, 256, 2,10, 3, 3, 2, "VAL") PORT MAP (tb_end_vec(6)); - u_wr_burst_size_1 : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, TRUE, FALSE, 5 ns, 5 ns, 5 ns, 8 ns, 4, 256, 1,10, 1, 1, 2, "VAL") PORT MAP (tb_end_vec(7)); - - u_cross_dvr_to_faster_ctlr : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, FALSE, 5 ns, 20 ns, 5 ns, 8 ns, 1,8192, 2500, 1, 1, 4, 1, "VAL") PORT MAP (tb_end_vec(8)); - u_cross_dvr_to_slower_ctlr : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, FALSE, 5 ns, 1 ns, 5 ns, 8 ns, 1,8192, 2500, 1, 1, 4, 1, "VAL") PORT MAP (tb_end_vec(9)); - - u_sequencer_1_16 : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, FALSE, 5 ns, 5 ns, 5 ns, 8 ns, 4, 256, 64,10, 1,16, 1, "VAL") PORT MAP (tb_end_vec(10)); - u_sequencer_16_1 : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, FALSE, 5 ns, 5 ns, 5 ns, 8 ns, 4, 256, 64,10,16, 1, 1, "VAL") PORT MAP (tb_end_vec(11)); + u_default : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, 5 ns, 5 ns, 5 ns, 8 ns, 4, 512, 2500, 2, 1, 1, 1, "VAL") PORT MAP (tb_end_vec(0)); + + u_fill_wrfifo_on_next_valid : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, 5 ns, 5 ns, 5 ns, 8 ns, 1, 256, 1000, 2, 1, 4, 2, "VAL") PORT MAP (tb_end_vec(1)); + u_fill_wrfifo_on_next_sop : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, 5 ns, 5 ns, 5 ns, 8 ns, 1, 256, 1000, 2, 3, 4, 2, "SOP") PORT MAP (tb_end_vec(2)); + u_fill_wrfifo_on_next_sync : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, 5 ns, 5 ns, 5 ns, 8 ns, 1, 256, 1000, 2, 4, 1, 2, "SYN") PORT MAP (tb_end_vec(3)); + + u_cross_domain : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, TRUE, 5 ns, 5 ns, 5 ns, 8 ns, 1,8192, 2500, 1, 2, 3, 1, "VAL") PORT MAP (tb_end_vec(4)); + u_mixed_width : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, 5 ns, 5 ns, 5 ns, 8 ns, 8,8192, 2500, 1, 3, 2, 1, "VAL") PORT MAP (tb_end_vec(5)); + + u_wr_burst_size_0 : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, 5 ns, 5 ns, 5 ns, 8 ns, 4, 256, 2,10, 3, 3, 2, "VAL") PORT MAP (tb_end_vec(6)); + u_wr_burst_size_1 : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, 5 ns, 5 ns, 5 ns, 8 ns, 4, 256, 1,10, 1, 1, 2, "VAL") PORT MAP (tb_end_vec(7)); + + u_cross_dvr_to_faster_ctlr : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, 5 ns, 20 ns, 5 ns, 8 ns, 1,8192, 2500, 1, 1, 4, 1, "VAL") PORT MAP (tb_end_vec(8)); + u_cross_dvr_to_slower_ctlr : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, 5 ns, 1 ns, 5 ns, 8 ns, 1,8192, 2500, 1, 1, 4, 1, "VAL") PORT MAP (tb_end_vec(9)); + + u_sequencer_1_16 : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, 5 ns, 5 ns, 5 ns, 8 ns, 4, 256, 64,10, 1,16, 1, "VAL") PORT MAP (tb_end_vec(10)); + u_sequencer_16_1 : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, 5 ns, 5 ns, 5 ns, 8 ns, 4, 256, 64,10,16, 1, 1, "VAL") PORT MAP (tb_end_vec(11)); END GENERATE; -- Distinghuis between tests for DDR3 and DDR4, because the Quartus 14.1 ip_arria10 DDR4 model simulates about 40x slower than the Quartus 11.1 ip_stratixiv DDR3 uniphy model. gen_ddr4 : IF c_tech_ddr.name="DDR4" GENERATE - u_default : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, FALSE, 5 ns, 5 ns, 5 ns, 8 ns, 4, 512, 2500, 2, 1, 1, 1, "VAL") PORT MAP (tb_end_vec(0)); + u_default : ENTITY work.tb_io_ddr GENERIC MAP (c_technology, c_tech_ddr3, c_tech_ddr4, FALSE, FALSE, 5 ns, 5 ns, 5 ns, 8 ns, 4, 512, 2500, 2, 1, 1, 1, "VAL") PORT MAP (tb_end_vec(0)); END GENERATE; p_tb_end : PROCESS diff --git a/libraries/technology/ddr/tech_ddr.vhd b/libraries/technology/ddr/tech_ddr.vhd index 15e254aba5..ac00058366 100644 --- a/libraries/technology/ddr/tech_ddr.vhd +++ b/libraries/technology/ddr/tech_ddr.vhd @@ -24,11 +24,6 @@ -- Description: -- The component also supports different types of DDR, so DDR3 and DDR4. -- Remark: --- In simulation use g_use_ddr_memory_model=TRUE to also include the DDR --- memory model that is internally available within tech_ddr. This avoids --- having to connect a DDR memory model at top level in the test bench. --- Default g_use_ddr_memory_model must be FALSE to avoid further analysis --- of the DDR memory model component by synthesis. LIBRARY IEEE, common_lib, technology_lib; USE IEEE.STD_LOGIC_1164.ALL; @@ -40,8 +35,7 @@ USE work.tech_ddr_pkg.ALL; ENTITY tech_ddr IS GENERIC ( g_technology : NATURAL := c_tech_select_default; - g_tech_ddr : t_c_tech_ddr; - g_use_ddr_memory_model : BOOLEAN := FALSE + g_tech_ddr : t_c_tech_ddr ); PORT ( -- PLL reference clock @@ -70,8 +64,6 @@ END tech_ddr; ARCHITECTURE str OF tech_ddr IS - SIGNAL i_phy_ou : t_tech_ddr_phy_ou; - BEGIN gen_ip_stratixiv : IF g_technology=c_tech_stratixiv GENERATE @@ -80,7 +72,7 @@ BEGIN PORT MAP (ref_clk, ref_rst, ctlr_gen_clk, ctlr_gen_rst, ctlr_gen_clk_2x, ctlr_gen_rst_2x, ctlr_mosi, ctlr_miso, term_ctrl_out, term_ctrl_in, - phy_in, phy_io, i_phy_ou); + phy_in, phy_io, phy_ou); END GENERATE; gen_ip_arria10 : IF g_technology=c_tech_arria10 GENERATE @@ -89,24 +81,7 @@ BEGIN PORT MAP (ref_clk, ref_rst, ctlr_gen_clk, ctlr_gen_rst, ctlr_mosi, ctlr_miso, - phy_in, phy_io, i_phy_ou); - END GENERATE; - - -- Include DDR memory model only for simulation - no_ddr_memory_model : IF g_use_ddr_memory_model=FALSE GENERATE - phy_ou <= i_phy_ou; - END GENERATE; - - gen_ddr_memory_model: IF g_use_ddr_memory_model=TRUE GENERATE - u_tech_ddr_memory_model : ENTITY work.tech_ddr_memory_model - GENERIC MAP ( - g_sim => g_use_ddr_memory_model, - g_tech_ddr => g_tech_ddr - ) - PORT MAP ( - mem_in => i_phy_ou, - mem_io => phy_io - ); + phy_in, phy_io, phy_ou); END GENERATE; END str; -- GitLab