From 8f810e648dfdc5a5509692e2032659e63cd1a79a Mon Sep 17 00:00:00 2001 From: Pepping <pepping> Date: Tue, 20 Jan 2015 10:15:54 +0000 Subject: [PATCH] -Removed the io_ddr instance. -Updated port map to interface with external io_ddr --- .../reorder/src/vhdl/reorder_transpose.vhd | 149 +++++------------- 1 file changed, 42 insertions(+), 107 deletions(-) diff --git a/libraries/base/reorder/src/vhdl/reorder_transpose.vhd b/libraries/base/reorder/src/vhdl/reorder_transpose.vhd index b0745a0984..e0b701c41b 100644 --- a/libraries/base/reorder/src/vhdl/reorder_transpose.vhd +++ b/libraries/base/reorder/src/vhdl/reorder_transpose.vhd @@ -20,10 +20,9 @@ -- -------------------------------------------------------------------------------- -LIBRARY IEEE, technology_lib, common_lib, dp_lib, io_ddr_lib, tech_ddr_lib; +LIBRARY IEEE, common_lib, dp_lib, io_ddr_lib, tech_ddr_lib; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.numeric_std.ALL; -USE technology_lib.technology_select_pkg.ALL; USE common_lib.common_pkg.ALL; USE common_lib.common_mem_pkg.ALL; USE dp_lib.dp_stream_pkg.ALL; @@ -33,7 +32,6 @@ USE work.reorder_pkg.ALL; ENTITY reorder_transpose IS GENERIC( g_sim : BOOLEAN := FALSE; - g_technology : NATURAL := c_tech_select_default; g_tech_ddr : t_c_tech_ddr; g_nof_streams : NATURAL := 4; g_in_dat_w : NATURAL := 8; @@ -61,31 +59,28 @@ ENTITY reorder_transpose IS -- Memory Mapped ram_ss_ss_transp_mosi : IN t_mem_mosi; -- channel select control ram_ss_ss_transp_miso : OUT t_mem_miso; + + -- Control interface to the external memory + dvr_miso : IN t_mem_ctlr_miso; + dvr_mosi : OUT t_mem_ctlr_mosi; - ser_term_ctrl_out : OUT STD_LOGIC_VECTOR(13 DOWNTO 0); - par_term_ctrl_out : OUT STD_LOGIC_VECTOR(13 DOWNTO 0); - - ser_term_ctrl_in : IN STD_LOGIC_VECTOR(13 DOWNTO 0) := (OTHERS => '0'); - par_term_ctrl_in : IN STD_LOGIC_VECTOR(13 DOWNTO 0) := (OTHERS => '0'); - - phy_in : IN t_tech_ddr_phy_in := c_tech_ddr_phy_in_x; - phy_io : INOUT t_tech_ddr_phy_io; - phy_ou : OUT t_tech_ddr_phy_ou + -- Data interface to the external memory + to_mem_src_out : OUT t_dp_sosi; + to_mem_src_in : IN t_dp_siso; + + from_mem_snk_in : IN t_dp_sosi; + from_mem_snk_out : OUT t_dp_siso := c_dp_siso_rdy ); END reorder_transpose; ARCHITECTURE str OF reorder_transpose IS - CONSTANT c_min_fifo_size : POSITIVE := 256; CONSTANT c_blocksize : POSITIVE := g_reorder_seq.wr_nof_chunks * (g_reorder_seq.wr_chunksize + g_reorder_seq.gapsize); CONSTANT c_pagesize : POSITIVE := g_reorder_seq.nof_blocks * c_blocksize; CONSTANT c_mem_size : POSITIVE := 2*c_pagesize; CONSTANT c_mem_size_w : POSITIVE := ceil_log2(c_mem_size); - - CONSTANT c_wr_fifo_depth : NATURAL := sel_a_b(c_blocksize > c_min_fifo_size, c_blocksize, c_min_fifo_size);--c_blocksize * 2; - CONSTANT c_rd_fifo_depth : NATURAL := sel_a_b(c_blocksize > c_min_fifo_size, c_blocksize, c_min_fifo_size);--c_blocksize * 2; - + CONSTANT c_total_data_w : NATURAL := g_nof_streams*g_in_dat_w; CONSTANT c_complex_data_w : NATURAL := c_total_data_w*c_nof_complex; CONSTANT c_data_w : NATURAL := sel_a_b(g_use_complex, c_complex_data_w, c_total_data_w); @@ -109,17 +104,11 @@ ARCHITECTURE str OF reorder_transpose IS SIGNAL dvr_nof_data : STD_LOGIC_VECTOR(c_mem_size_w-1 DOWNTO 0); SIGNAL dvr_wr_flush_en : STD_LOGIC; - SIGNAL transpose_in_sosi : t_dp_sosi; - SIGNAL transpose_in_siso : t_dp_siso; - - SIGNAL transpose_out_sosi : t_dp_sosi; + SIGNAL to_mem_src_out_i : t_dp_sosi; SIGNAL block_gen_out_sosi : t_dp_sosi; SIGNAL pipeline_out_sosi : t_dp_sosi; - SIGNAL ctlr_dvr_miso : t_mem_ctlr_miso; - SIGNAL ctlr_dvr_mosi : t_mem_ctlr_mosi; - SIGNAL sync_bsn : STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0); SIGNAL wr_req : STD_LOGIC; SIGNAL rd_req_i : STD_LOGIC; @@ -132,9 +121,6 @@ ARCHITECTURE str OF reorder_transpose IS SIGNAL nxt_mon_nof_sop : STD_LOGIC_VECTOR(c_cnt_sop_w-1 DOWNTO 0); SIGNAL sync_ok_in : STD_LOGIC; SIGNAL sync_ok_out : STD_LOGIC; - - SIGNAL ctlr_clk : STD_LOGIC; - SIGNAL ctlr_rst : STD_LOGIC; BEGIN @@ -149,15 +135,15 @@ BEGIN END PROCESS; END GENERATE; --- g_merge_in_data : IF g_use_complex = FALSE GENERATE --- merge_input : PROCESS(snk_in_arr) --- BEGIN --- transpose_in_sosi <= snk_in_arr(0); --- FOR i IN 0 TO g_nof_streams-1 LOOP --- transpose_in_sosi.data((i+1)*g_in_dat_w-1 DOWNTO i*g_in_dat_w) <= snk_in_arr(i).data(g_in_dat_w-1 DOWNTO 0); --- END LOOP; --- END PROCESS; --- END GENERATE; + g_merge_in_data : IF g_use_complex = FALSE GENERATE + PROCESS(snk_in_arr) + BEGIN + ss_in_sosi <= snk_in_arr(0); + FOR i IN 0 TO g_nof_streams-1 LOOP + ss_in_sosi.data((i+1)*g_in_dat_w-1 DOWNTO i*g_in_dat_w) <= snk_in_arr(i).data(g_in_dat_w-1 DOWNTO 0); + END LOOP; + END PROCESS; + END GENERATE; gen_pre_transpose : IF g_ena_pre_transp = TRUE GENERATE u_single_ss : ENTITY work.ss @@ -182,82 +168,29 @@ BEGIN input_sosi => ss_in_sosi, input_siso => ss_in_siso, - output_sosi => transpose_in_sosi, - output_siso => transpose_in_siso + output_sosi => to_mem_src_out_i, + output_siso => to_mem_src_in ); - END GENERATE; + END GENERATE; + + to_mem_src_out <= to_mem_src_out_i; gen_not_pre_transpose : IF g_ena_pre_transp = FALSE GENERATE - transpose_in_sosi <= ss_in_sosi; - ss_in_siso <= transpose_in_siso; + to_mem_src_out_i <= ss_in_sosi; + ss_in_siso <= to_mem_src_in; END GENERATE; g_siso : FOR J IN 0 TO g_nof_streams-1 GENERATE snk_out_arr(J) <= ss_in_siso; END GENERATE; - u_ddr3: ENTITY io_ddr_lib.io_ddr - GENERIC MAP( - g_sim => g_sim, - g_technology => g_technology, -- : NATURAL := c_tech_select_default; - g_tech_ddr => g_tech_ddr, -- : t_c_tech_ddr; - g_cross_domain_dvr_ctlr => FALSE, --TRUE, -- : BOOLEAN := TRUE; - g_wr_data_w => c_data_w, -- : NATURAL := 32; - g_wr_fifo_depth => c_wr_fifo_depth, -- : NATURAL := 128; -- >=16 , defined at DDR side of the FIFO. - g_rd_fifo_depth => c_rd_fifo_depth, -- : NATURAL := 256; -- >=16 AND >g_tech_ddr.maxburstsize, defined at DDR side of the FIFO. - g_rd_data_w => c_data_w, -- : NATURAL := 32; - g_wr_flush_mode => "SYN", -- : STRING := "VAL"; -- "VAL", "SOP", "SYN" - g_wr_flush_use_channel => FALSE, -- : BOOLEAN := FALSE; - g_wr_flush_start_channel => 0, -- : NATURAL := 0; - g_wr_flush_nof_channels => 1 -- : POSITIVE := 1 - ) - PORT MAP ( - -- DDR reference clock - ctlr_ref_clk => dp_clk, - ctlr_ref_rst => dp_rst, - - -- DDR controller clock domain - ctlr_clk_out => ctlr_clk, - ctlr_rst_out => ctlr_rst, - - ctlr_clk_in => ctlr_clk, -- connect ctlr_clk_out to ctlr_clk_in at top level to avoid potential delta-cycle differences between the same clock - ctlr_rst_in => ctlr_rst, -- connect ctlr_rst_out to ctlr_rst_in at top level - - -- Driver clock domain - dvr_clk => dp_clk, - dvr_rst => dp_rst, - - dvr_miso => ctlr_dvr_miso, - dvr_mosi => ctlr_dvr_mosi, - - -- Write FIFO clock domain - wr_clk => dp_clk, - wr_rst => dp_rst, - - wr_fifo_usedw => OPEN, - wr_sosi => transpose_in_sosi, - wr_siso => transpose_in_siso, - - -- Read FIFO clock domain - rd_clk => dp_clk, - rd_rst => dp_rst, - - rd_fifo_usedw => OPEN, - rd_sosi => transpose_out_sosi, - rd_siso => src_in_arr(0), - - phy_in => phy_in, - phy_io => phy_io, - phy_ou => phy_ou - ); - -- Map original dvr interface signals to t_mem_ctlr_mosi/miso - dvr_done <= ctlr_dvr_miso.done; -- Requested wr or rd sequence is done - ctlr_dvr_mosi.burstbegin <= dvr_en; - ctlr_dvr_mosi.wr <= dvr_wr_not_rd; -- No need to use dvr_mosi.rd - ctlr_dvr_mosi.address <= RESIZE_MEM_CTLR_ADDRESS(dvr_start_address); - ctlr_dvr_mosi.burstsize <= RESIZE_MEM_CTLR_BURSTSIZE(dvr_nof_data); - ctlr_dvr_mosi.flush <= dvr_wr_flush_en; + dvr_done <= dvr_miso.done; -- Requested wr or rd sequence is done + dvr_mosi.burstbegin <= dvr_en; + dvr_mosi.wr <= dvr_wr_not_rd; -- No need to use dvr_mosi.rd + dvr_mosi.address <= RESIZE_MEM_CTLR_ADDRESS(dvr_start_address); + dvr_mosi.burstsize <= RESIZE_MEM_CTLR_BURSTSIZE(dvr_nof_data); + dvr_mosi.flush <= dvr_wr_flush_en; dvr_wr_flush_en <= NOT(sync_ok_out); @@ -289,13 +222,13 @@ BEGIN PORT MAP ( rst => dp_rst, clk => dp_clk, - cnt_clr => transpose_in_sosi.sync, - cnt_en => transpose_in_sosi.sop, + cnt_clr => to_mem_src_out_i.sync, + cnt_en => to_mem_src_out_i.sop, count => cnt_sop ); nof_sop <= INCR_UVEC(cnt_sop, 1); -- +1 because the sop at the sync also counts - nxt_mon_nof_sop <= nof_sop WHEN transpose_in_sosi.sync='1' ELSE i_mon_nof_sop; + nxt_mon_nof_sop <= nof_sop WHEN to_mem_src_out_i.sync='1' ELSE i_mon_nof_sop; sync_ok_in <= '1' WHEN TO_UINT(i_mon_nof_sop) = g_nof_blk_per_sync AND TO_UINT(nof_sop) <= g_nof_blk_per_sync ELSE '0'; p_clk : PROCESS(dp_rst, dp_clk) @@ -365,7 +298,7 @@ BEGIN clk => dp_clk, -- ST sink snk_out => OPEN, - snk_in => transpose_out_sosi, + snk_in => from_mem_snk_in, -- ST source src_in => OPEN, src_out => pipeline_out_sosi @@ -386,7 +319,7 @@ BEGIN PORT MAP( rst => dp_rst, clk => dp_clk, - snk_in => transpose_out_sosi, + snk_in => from_mem_snk_in, -- Use incoming data to generate more data src_in => c_dp_siso_rdy, @@ -394,6 +327,8 @@ BEGIN en => '1' ); + from_mem_snk_out <= src_in_arr(0); + g_merge_out_complex : IF g_use_complex = TRUE GENERATE gen_merge_out : PROCESS(block_gen_out_sosi, pipeline_out_sosi) BEGIN -- GitLab