1919module axi_dma # (
2020 parameter int abits = 48 , // adress bits used
2121 parameter logic async_reset = 1'b0 ,
22- parameter int userbits = 1
22+ parameter int userbits = 1 ,
23+ parameter logic [63 : 0 ] base_offset = '0 // Address offset for all DMA transactions
2324)
2425(
2526 input logic i_nrst, // Reset: active LOW
2627 input logic i_clk, // CPU clock
2728 output logic o_req_mem_ready, // Ready to accept next data
2829 input logic i_req_mem_valid, // Request data is ready to accept
2930 input logic i_req_mem_write, // 0=read; 1=write operation
30- input logic [9 : 0 ] i_req_mem_bytes, // 0=1024 B; 4=DWORD; 8=QWORD; ...
31+ input logic [11 : 0 ] i_req_mem_bytes, // 0=4096 B; 4=DWORD; 8=QWORD; ...
3132 input logic [abits- 1 : 0 ] i_req_mem_addr, // Address to read/write
3233 input logic [7 : 0 ] i_req_mem_strob, // Byte enabling write strob
3334 input logic [63 : 0 ] i_req_mem_data, // Data to write
@@ -108,7 +109,7 @@ axi_dma_registers rin;
108109always_comb
109110begin : comb_proc
110111 axi_dma_registers v;
111- logic [9 : 0 ] vb_req_mem_bytes_m1;
112+ logic [11 : 0 ] vb_req_mem_bytes_m1;
112113 logic [CFG_SYSBUS_ADDR_BITS - 1 : 0 ] vb_req_addr_inc;
113114 logic [CFG_SYSBUS_DATA_BITS - 1 : 0 ] vb_r_data_swap;
114115 axi4_master_out_type vmsto;
@@ -124,7 +125,7 @@ begin: comb_proc
124125
125126 // Byte swapping:
126127 if (r.req_size == 3'd0 ) begin
127- vb_req_addr_inc[9 : 0 ] = (r.req_addr[9 : 0 ] + 10 'h001 );
128+ vb_req_addr_inc[11 : 0 ] = (r.req_addr[11 : 0 ] + 12 'h001 );
128129 if (r.req_addr[2 : 0 ] == 3'd0 ) begin
129130 vb_r_data_swap[31 : 0 ] = { i_msti.r_data[7 : 0 ], i_msti.r_data[7 : 0 ], i_msti.r_data[7 : 0 ], i_msti.r_data[7 : 0 ]} ;
130131 end else if (r.req_addr[2 : 0 ] == 3'd1 ) begin
@@ -144,7 +145,7 @@ begin: comb_proc
144145 end
145146 vb_r_data_swap[63 : 32 ] = vb_r_data_swap[31 : 0 ];
146147 end else if (r.req_size == 3'd1 ) begin
147- vb_req_addr_inc[9 : 0 ] = (r.req_addr[9 : 0 ] + 10 'h002 );
148+ vb_req_addr_inc[11 : 0 ] = (r.req_addr[11 : 0 ] + 12 'h002 );
148149 if (r.req_addr[2 : 1 ] == 2'd0 ) begin
149150 vb_r_data_swap = { i_msti.r_data[15 : 0 ], i_msti.r_data[15 : 0 ], i_msti.r_data[15 : 0 ], i_msti.r_data[15 : 0 ]} ;
150151 end else if (r.req_addr[2 : 1 ] == 2'd1 ) begin
@@ -155,14 +156,14 @@ begin: comb_proc
155156 vb_r_data_swap = { i_msti.r_data[63 : 48 ], i_msti.r_data[63 : 48 ], i_msti.r_data[63 : 48 ], i_msti.r_data[63 : 48 ]} ;
156157 end
157158 end else if (r.req_size == 3'd2 ) begin
158- vb_req_addr_inc[9 : 0 ] = (r.req_addr[9 : 0 ] + 10 'h004 );
159+ vb_req_addr_inc[11 : 0 ] = (r.req_addr[11 : 0 ] + 12 'h004 );
159160 if (r.req_addr[2 ] == 1'b0 ) begin
160161 vb_r_data_swap = { i_msti.r_data[31 : 0 ], i_msti.r_data[31 : 0 ]} ;
161162 end else begin
162163 vb_r_data_swap = { i_msti.r_data[63 : 32 ], i_msti.r_data[63 : 32 ]} ;
163164 end
164165 end else begin
165- vb_req_addr_inc[9 : 0 ] = (r.req_addr[9 : 0 ] + 10 'h008 );
166+ vb_req_addr_inc[11 : 0 ] = (r.req_addr[11 : 0 ] + 12 'h008 );
166167 vb_r_data_swap = i_msti.r_data;
167168 end
168169
@@ -174,19 +175,19 @@ begin: comb_proc
174175 v.resp_last = 1'b0 ;
175176 if (i_req_mem_valid == 1'b1 ) begin
176177 v.req_ready = 1'b0 ;
177- v.req_addr = { '0 , i_req_mem_addr} ;
178- if (i_req_mem_bytes == 10 'd1 ) begin
178+ v.req_addr = { base_offset[( CFG_SYSBUS_ADDR_BITS - 1 ) : abits] , i_req_mem_addr} ;
179+ if (i_req_mem_bytes == 12 'd1 ) begin
179180 v.req_size = 3'd0 ;
180181 v.req_len = 8'd0 ;
181- end else if (i_req_mem_bytes == 10 'd2 ) begin
182+ end else if (i_req_mem_bytes == 12 'd2 ) begin
182183 v.req_size = 3'd1 ;
183184 v.req_len = 8'd0 ;
184- end else if (i_req_mem_bytes == 10 'd4 ) begin
185+ end else if (i_req_mem_bytes == 12 'd4 ) begin
185186 v.req_size = 3'd2 ;
186187 v.req_len = 8'd0 ;
187188 end else begin
188189 v.req_size = 3'd3 ;
189- v.req_len = { 1'b0 , vb_req_mem_bytes_m1[9 : 3 ]} ;
190+ v.req_len = vb_req_mem_bytes_m1[10 : 3 ];
190191 end
191192 if (i_req_mem_write == 1'b0 ) begin
192193 v.ar_valid = 1'b1 ;
@@ -206,7 +207,6 @@ begin: comb_proc
206207 // debug interface:
207208 v.dbg_payload = { 1'b1 ,
208209 i_req_mem_addr[10 : 0 ],
209- 2'h0 ,
210210 i_req_mem_bytes,
211211 i_req_mem_strob,
212212 i_req_mem_data[31 : 0 ]} ;
0 commit comments