diff --git a/libraries/io/ddr/src/vhdl/io_ddr_driver.vhd b/libraries/io/ddr/src/vhdl/io_ddr_driver.vhd index e28a52d8a15c93e59ba280b6953d729f11b9e3bd..3ed8f5a5daa404c62a2bbe1069aa56d3b8f99fd6 100644 --- a/libraries/io/ddr/src/vhdl/io_ddr_driver.vhd +++ b/libraries/io/ddr/src/vhdl/io_ddr_driver.vhd @@ -30,29 +30,27 @@ USE tech_ddr_lib.tech_ddr_pkg.ALL; ENTITY io_ddr_driver IS GENERIC ( g_tech_ddr : t_c_tech_ddr - ); + ); PORT ( - clk : IN STD_LOGIC; rst : IN STD_LOGIC; + clk : IN STD_LOGIC; - ctlr_init_done : IN STD_LOGIC; - - ctlr_mosi : OUT t_tech_ddr_mosi; - ctlr_miso : IN t_tech_ddr_miso; - dvr_en : IN STD_LOGIC := '1'; dvr_wr_not_rd : IN STD_LOGIC; - dvr_done : OUT STD_LOGIC; -- Requested wr or rd sequence is done. dvr_start_addr : IN t_tech_ddr_addr; dvr_end_addr : IN t_tech_ddr_addr; + dvr_done : OUT STD_LOGIC; -- Requested wr or rd sequence is done. wr_fifo_usedw : IN STD_LOGIC_VECTOR; - - wr_snk_out : OUT t_dp_siso; wr_snk_in : IN t_dp_sosi; + wr_snk_out : OUT t_dp_siso; + rd_src_out : OUT t_dp_sosi; rd_src_in : IN t_dp_siso; - rd_src_out : OUT t_dp_sosi + + ctlr_init_done : IN STD_LOGIC; + ctlr_miso : IN t_tech_ddr_miso; + ctlr_mosi : OUT t_tech_ddr_mosi ); END io_ddr_driver; @@ -128,6 +126,12 @@ BEGIN END IF; END PROCESS; + -- Record address --> slv address + start_address <= func_tech_ddr_dq_address(dvr_start_addr, g_tech_ddr, c_address_w); + end_address <= func_tech_ddr_dq_address(dvr_end_addr, g_tech_ddr, c_address_w); + + cur_addr <= func_tech_ddr_dq_address(cur_address, g_tech_ddr); + -- Add 1 address (accounting for address resulotion) to diff_address: we also want to write the last address. Shift the result right to provide the correct resolution. addresses_rem <= RESIZE_UVEC( SHIFT_UVEC( INCR_UVEC(diff_address, g_tech_ddr.rsl), g_tech_ddr.rsl_w), addresses_rem'LENGTH); @@ -165,7 +169,8 @@ BEGIN rd_src_out.valid <= ctlr_miso.rdval; rd_src_out.data <= RESIZE_DP_DATA(ctlr_miso.rddata); - p_state : PROCESS(prev_state, state, i_dvr_done, ctlr_miso, req_burst_cycles, dvr_wr_not_rd, wr_snk_in, wr_fifo_usedw, wr_burst_size, rd_burst_size, dvr_en, ctlr_init_done, reg_addresses_rem, rd_src_in, ctlr_mosi_burstsize, start_address, cur_address) + p_state : PROCESS(prev_state, state, ctlr_init_done, dvr_en, dvr_wr_not_rd, i_dvr_done, ctlr_mosi_burstsize, ctlr_miso, req_burst_cycles, wr_snk_in, rd_src_in, + wr_fifo_usedw, wr_burst_size, rd_burst_size, reg_addresses_rem, start_address, cur_address) BEGIN nxt_state <= state; ctlr_mosi.wr <= '0'; @@ -268,10 +273,5 @@ BEGIN END CASE; END PROCESS; - start_address <= func_tech_ddr_dq_address(dvr_start_addr, g_tech_ddr, c_address_w); - end_address <= func_tech_ddr_dq_address(dvr_end_addr, g_tech_ddr, c_address_w); - - cur_addr <= func_tech_ddr_dq_address(cur_address, g_tech_ddr); - END str;