diff --git a/boards/uniboard1/designs/unb1_test/src/vhdl/ddr_stream.vhd b/boards/uniboard1/designs/unb1_test/src/vhdl/ddr_stream.vhd index 7d51b6de5106aa1aba3e13cdbc4d1f0111a39cff..682eae39fa5f7eb2d91ef0ce9eef37adbbf1025b 100644 --- a/boards/uniboard1/designs/unb1_test/src/vhdl/ddr_stream.vhd +++ b/boards/uniboard1/designs/unb1_test/src/vhdl/ddr_stream.vhd @@ -48,10 +48,6 @@ ENTITY ddr_stream IS ddr_ref_clk : IN STD_LOGIC; ddr_ref_rst : IN STD_LOGIC; - -- Clock outputs - ddr_out_clk : OUT STD_LOGIC; - ddr_out_rst : OUT STD_LOGIC; - -- MM interface reg_io_ddr_mosi : IN t_mem_mosi := c_mem_mosi_rst; reg_io_ddr_miso : OUT t_mem_miso; @@ -72,10 +68,6 @@ ENTITY ddr_stream IS reg_diag_rx_seq_mosi : IN t_mem_mosi; reg_diag_rx_seq_miso : OUT t_mem_miso; - -- DDR3 pass on termination control from master to slave controller - term_ctrl_out : OUT t_tech_ddr3_phy_terminationcontrol; - term_ctrl_in : IN t_tech_ddr3_phy_terminationcontrol := c_tech_ddr3_phy_terminationcontrol_rst; - -- SO-DIMM Memory Bank I = ddr3_I phy_3_in : IN t_tech_ddr3_phy_in; phy_3_io : INOUT t_tech_ddr3_phy_io; @@ -86,27 +78,18 @@ END ddr_stream; ARCHITECTURE str OF ddr_stream IS - CONSTANT c_wr_data_w : NATURAL := g_st_dat_w; - CONSTANT c_rd_data_w : NATURAL := g_st_dat_w; CONSTANT c_data_w : NATURAL := g_st_dat_w; CONSTANT c_wr_fifo_depth : NATURAL := 1024; -- >=16 , defined at DDR side of the FIFO. CONSTANT c_rd_fifo_depth : NATURAL := 1024; -- >=16 AND >g_tech_ddr.maxburstsize, defined at DDR side of the FIFO. - CONSTANT c_use_bg : BOOLEAN := FALSE; - CONSTANT c_use_tx_seq : BOOLEAN := TRUE; CONSTANT c_use_db : BOOLEAN := FALSE; - CONSTANT c_use_rx_seq : BOOLEAN := TRUE; CONSTANT c_buf_nof_data : NATURAL := 1024; - CONSTANT c_nof_streams : NATURAL := 1; CONSTANT c_seq_dat_w : NATURAL := 16; - SIGNAL en_sync : STD_LOGIC; - - SIGNAL out_siso_arr : t_dp_siso_arr(c_nof_streams-1 DOWNTO 0) := (OTHERS=>c_dp_siso_rdy); -- Default xon='1' - SIGNAL out_sosi_arr : t_dp_sosi_arr(c_nof_streams-1 DOWNTO 0); -- Output SOSI that contains the waveform data - SIGNAL in_siso_arr : t_dp_siso_arr(c_nof_streams-1 DOWNTO 0) := (OTHERS=>c_dp_siso_rdy); -- Default xon='1' - SIGNAL in_sosi_arr : t_dp_sosi_arr(c_nof_streams-1 DOWNTO 0); + SIGNAL en_sync : STD_LOGIC; + SIGNAL ctlr_clk : STD_LOGIC; + SIGNAL ctlr_rst : STD_LOGIC; BEGIN @@ -141,11 +124,11 @@ BEGIN ctlr_ref_rst => ddr_ref_rst, -- DDR controller clock domain - ctlr_clk_out => ddr_out_clk, - ctlr_rst_out => ddr_out_rst, + ctlr_clk_out => ctlr_clk, + ctlr_rst_out => ctlr_rst, - ctlr_clk_in => dp_clk, - ctlr_rst_in => dp_rst, + ctlr_clk_in => ctlr_clk, + ctlr_rst_in => ctlr_rst, -- MM interface reg_io_ddr_mosi => reg_io_ddr_mosi, @@ -155,9 +138,9 @@ BEGIN wr_fifo_usedw => OPEN, rd_fifo_usedw => OPEN, - -- DDR3 pass on termination control from master to slave controller - term_ctrl_out => term_ctrl_out, - term_ctrl_in => term_ctrl_in, + -- DDR3 pass on signals from master to slave controller + term_ctrl_out => OPEN, + term_ctrl_in => OPEN, -- DDR3 PHY external interface phy3_in => phy_3_in, diff --git a/boards/uniboard1/designs/unb1_test/src/vhdl/unb1_test.vhd b/boards/uniboard1/designs/unb1_test/src/vhdl/unb1_test.vhd index 99361ae5bb7070cbfed07d6b606466a82e4afb1e..aba251b9d3e53bdc5ad33af98f67711efc713f38 100644 --- a/boards/uniboard1/designs/unb1_test/src/vhdl/unb1_test.vhd +++ b/boards/uniboard1/designs/unb1_test/src/vhdl/unb1_test.vhd @@ -123,10 +123,12 @@ ARCHITECTURE str OF unb1_test IS CONSTANT c_use_back : BOOLEAN := FALSE; -- however SI_FN_[0..2] do connect to copper connectors of single board unb -- Revision controlled constants - CONSTANT c_use_1GbE : BOOLEAN := g_design_name="unb1_test_1GbE" OR g_design_name="unb1_test_10GbE" OR g_design_name="unb1_test_all"; - CONSTANT c_use_10GbE : BOOLEAN := g_design_name="unb1_test_10GbE" OR g_design_name="unb1_test_all"; - CONSTANT c_use_ddr_MB_I : BOOLEAN := g_design_name="unb1_test_ddr_MB_I" OR g_design_name="unb1_test_ddr_MB_I_II" OR g_design_name="unb1_test_all"; - CONSTANT c_use_ddr_MB_II : BOOLEAN := g_design_name="unb1_test_ddr_MB_II" OR g_design_name="unb1_test_ddr_MB_I_II" OR g_design_name="unb1_test_all"; + CONSTANT c_use_1GbE : BOOLEAN := g_design_name="unb1_test_1GbE" OR g_design_name="unb1_test_10GbE" OR g_design_name="unb1_test_all"; + CONSTANT c_use_10GbE : BOOLEAN := g_design_name="unb1_test_10GbE" OR g_design_name="unb1_test_all"; + CONSTANT c_use_ddr_4g_MB_I : BOOLEAN := g_design_name="unb1_test_ddr_MB_I" OR g_design_name="unb1_test_ddr_MB_I_II" OR g_design_name="unb1_test_all"; + CONSTANT c_use_ddr_4g_MB_II : BOOLEAN := g_design_name="unb1_test_ddr_MB_II" OR g_design_name="unb1_test_ddr_MB_I_II" OR g_design_name="unb1_test_all"; + CONSTANT c_use_ddr_16g_MB_I : BOOLEAN := g_design_name="unb1_test_ddr_16g_MB_I" OR g_design_name="unb1_test_ddr_16g_MB_I_II"; + CONSTANT c_use_ddr_16g_MB_II : BOOLEAN := g_design_name="unb1_test_ddr_16g_MB_II" OR g_design_name="unb1_test_ddr_16g_MB_I_II"; -- max useful peripherals (FIXME read these constants from board lib) @@ -135,8 +137,8 @@ ARCHITECTURE str OF unb1_test IS -- ddr CONSTANT c_nof_MB : NATURAL := c_unb1_board_nof_ddr3; -- Fixed control infrastructure for 2 modules per FPGA - CONSTANT c_use_MB_I : NATURAL := sel_a_b(c_use_ddr_MB_I,1,0); -- 1: use MB_I 0: do not use - CONSTANT c_use_MB_II : NATURAL := sel_a_b(c_use_ddr_MB_II,1,0); -- 1: use MB_II 0: do not use + CONSTANT c_use_MB_I : NATURAL := sel_a_b((c_use_ddr_4g_MB_I OR c_use_ddr_16g_MB_I),1,0); -- 1: use MB_I 0: do not use + CONSTANT c_use_MB_II : NATURAL := sel_a_b((c_use_ddr_4g_MB_II OR c_use_ddr_16g_MB_II),1,0); -- 1: use MB_II 0: do not use CONSTANT c_use_phy : t_c_unb1_board_use_phy := (1, sel_a_b(c_use_front,1, 0), @@ -155,8 +157,10 @@ ARCHITECTURE str OF unb1_test IS CONSTANT c_data_w_64 : NATURAL := c_xgmii_data_w; -- 10GbE -- ddr - CONSTANT c_ddr_master : t_c_tech_ddr := c_tech_ddr3_4g_single_rank_800m_master; - CONSTANT c_ddr_slave : t_c_tech_ddr := c_tech_ddr3_4g_single_rank_800m_slave; + CONSTANT c_ddr_4g_master : t_c_tech_ddr := c_tech_ddr3_4g_single_rank_800m_master; + CONSTANT c_ddr_16g_master : t_c_tech_ddr := c_tech_ddr3_16g_dual_rank_800m; + CONSTANT c_ddr_4g_slave : t_c_tech_ddr := c_tech_ddr3_4g_single_rank_800m_slave; + -- Block generator constants CONSTANT c_bg_block_size : NATURAL := 900; @@ -358,7 +362,7 @@ ARCHITECTURE str OF unb1_test IS -- DDR3 pass on termination control from master to slave controller SIGNAL term_ctrl_out : t_tech_ddr3_phy_terminationcontrol; - SIGNAL term_ctrl_in : t_tech_ddr3_phy_terminationcontrol := c_tech_ddr3_phy_terminationcontrol_rst; + SIGNAL term_ctrl_in : t_tech_ddr3_phy_terminationcontrol; BEGIN @@ -390,7 +394,7 @@ BEGIN g_aux => c_unb1_board_aux, g_udp_offload => c_use_1GbE, g_udp_offload_nof_streams => c_nof_streams_1GbE, - g_dp_clk_use_pll => TRUE, + g_dp_clk_use_pll => FALSE, g_xo_clk_use_pll => TRUE ) PORT MAP ( @@ -410,8 +414,8 @@ BEGIN epcs_clk => epcs_clk, epcs_clk_out => epcs_clk, - dp_rst => dp_rst, - dp_clk => dp_clk, + dp_rst => OPEN, + dp_clk => OPEN, dp_pps => OPEN, dp_rst_in => dp_rst, dp_clk_in => dp_clk, @@ -497,9 +501,7 @@ BEGIN ETH_SGIN => ETH_SGIN, ETH_SGOUT => ETH_SGOUT ); - - --dp_clk <= CLK; - --dp_rst <= mm_rst; +-- END GENERATE; ----------------------------------------------------------------------------- -- MM master @@ -886,13 +888,53 @@ BEGIN END GENERATE; END GENERATE; + gen_ddr_stream_4g_MB_I : IF c_use_ddr_4g_MB_I = TRUE GENERATE + u_ddr_stream_4g_MB_I : ENTITY work.ddr_stream + GENERIC MAP ( + g_sim => g_sim, + g_technology => g_technology, + g_tech_ddr => c_ddr_4g_master, + g_st_dat_w => c_data_w_64 + ) + PORT MAP ( + mm_rst => mm_rst, + mm_clk => mm_clk, + + dp_rst => dp_rst, + dp_clk => dp_clk, + + ddr_ref_clk => CLK, + ddr_ref_rst => ddr_ref_rst, + + -- blockgen mm + reg_diag_tx_seq_mosi => reg_diag_tx_seq_ddr_MB_I_mosi, + reg_diag_tx_seq_miso => reg_diag_tx_seq_ddr_MB_I_miso, + + -- databuffer + reg_diag_data_buf_mosi => reg_diag_data_buf_ddr_MB_I_mosi, + reg_diag_data_buf_miso => reg_diag_data_buf_ddr_MB_I_miso, + ram_diag_data_buf_mosi => ram_diag_data_buf_ddr_MB_I_mosi, + ram_diag_data_buf_miso => ram_diag_data_buf_ddr_MB_I_miso, + reg_diag_rx_seq_mosi => reg_diag_rx_seq_ddr_MB_I_mosi, + reg_diag_rx_seq_miso => reg_diag_rx_seq_ddr_MB_I_miso, + + -- IO DDR register map + reg_io_ddr_mosi => reg_io_ddr_MB_I_mosi, + reg_io_ddr_miso => reg_io_ddr_MB_I_miso, + + -- SO-DIMM Memory Bank + phy_3_in => MB_I_IN, + phy_3_io => MB_I_IO, + phy_3_ou => MB_I_OU + ); + END GENERATE; - gen_ddr_stream_MB_I : IF c_use_ddr_MB_I = TRUE GENERATE - u_ddr_stream_MB_I : ENTITY work.ddr_stream + gen_ddr_stream_4g_MB_II : IF c_use_ddr_4g_MB_II = TRUE GENERATE + u_ddr_stream_4g_MB_II : ENTITY work.ddr_stream GENERIC MAP ( g_sim => g_sim, g_technology => g_technology, - g_tech_ddr => c_ddr_master, + g_tech_ddr => c_ddr_4g_master, g_st_dat_w => c_data_w_64 ) PORT MAP ( @@ -905,9 +947,46 @@ BEGIN ddr_ref_clk => CLK, ddr_ref_rst => ddr_ref_rst, - -- Clock outputs - ddr_out_clk => OPEN, - ddr_out_rst => OPEN, + -- blockgen mm + reg_diag_tx_seq_mosi => reg_diag_tx_seq_ddr_MB_II_mosi, + reg_diag_tx_seq_miso => reg_diag_tx_seq_ddr_MB_II_miso, + + -- databuffer + reg_diag_data_buf_mosi => reg_diag_data_buf_ddr_MB_II_mosi, + reg_diag_data_buf_miso => reg_diag_data_buf_ddr_MB_II_miso, + ram_diag_data_buf_mosi => ram_diag_data_buf_ddr_MB_II_mosi, + ram_diag_data_buf_miso => ram_diag_data_buf_ddr_MB_II_miso, + reg_diag_rx_seq_mosi => reg_diag_rx_seq_ddr_MB_II_mosi, + reg_diag_rx_seq_miso => reg_diag_rx_seq_ddr_MB_II_miso, + + -- IO DDR register map + reg_io_ddr_mosi => reg_io_ddr_MB_II_mosi, + reg_io_ddr_miso => reg_io_ddr_MB_II_miso, + + -- SO-DIMM Memory Bank + phy_3_in => MB_II_IN, + phy_3_io => MB_II_IO, + phy_3_ou => MB_II_OU + ); + END GENERATE; + + gen_ddr_stream_16g_MB_I : IF c_use_ddr_16g_MB_I = TRUE GENERATE + u_ddr_stream_16g_MB_I : ENTITY work.ddr_stream + GENERIC MAP ( + g_sim => g_sim, + g_technology => g_technology, + g_tech_ddr => c_ddr_16g_master, + g_st_dat_w => c_data_w_64 + ) + PORT MAP ( + mm_rst => mm_rst, + mm_clk => mm_clk, + + dp_rst => dp_rst, + dp_clk => dp_clk, + + ddr_ref_clk => CLK, + ddr_ref_rst => ddr_ref_rst, -- blockgen mm reg_diag_tx_seq_mosi => reg_diag_tx_seq_ddr_MB_I_mosi, @@ -925,10 +1004,6 @@ BEGIN reg_io_ddr_mosi => reg_io_ddr_MB_I_mosi, reg_io_ddr_miso => reg_io_ddr_MB_I_miso, - -- DDR3 pass on termination control from master to slave controller - term_ctrl_out => OPEN, - term_ctrl_in => OPEN, - -- SO-DIMM Memory Bank phy_3_in => MB_I_IN, phy_3_io => MB_I_IO, @@ -936,12 +1011,12 @@ BEGIN ); END GENERATE; - gen_ddr_stream_MB_II : IF c_use_ddr_MB_II = TRUE GENERATE - u_ddr_stream_MB_II : ENTITY work.ddr_stream + gen_ddr_stream_16g_MB_II : IF c_use_ddr_16g_MB_II = TRUE GENERATE + u_ddr_stream_16g_MB_II : ENTITY work.ddr_stream GENERIC MAP ( g_sim => g_sim, g_technology => g_technology, - g_tech_ddr => c_ddr_master, + g_tech_ddr => c_ddr_16g_master, g_st_dat_w => c_data_w_64 ) PORT MAP ( @@ -954,10 +1029,6 @@ BEGIN ddr_ref_clk => CLK, ddr_ref_rst => ddr_ref_rst, - -- Clock outputs - ddr_out_clk => OPEN, - ddr_out_rst => OPEN, - -- blockgen mm reg_diag_tx_seq_mosi => reg_diag_tx_seq_ddr_MB_II_mosi, reg_diag_tx_seq_miso => reg_diag_tx_seq_ddr_MB_II_miso, @@ -974,10 +1045,6 @@ BEGIN reg_io_ddr_mosi => reg_io_ddr_MB_II_mosi, reg_io_ddr_miso => reg_io_ddr_MB_II_miso, - -- DDR3 pass on termination control from master to slave controller - term_ctrl_out => OPEN, - term_ctrl_in => OPEN, - -- SO-DIMM Memory Bank phy_3_in => MB_II_IN, phy_3_io => MB_II_IO,