Skip to content

Commit 280c3aa

Browse files
committed
Discard LSbs of address for AXI4-Lite CPUIF to properly handle unaligned transfers. #60
1 parent eef8f7c commit 280c3aa

File tree

3 files changed

+14
-2
lines changed

3 files changed

+14
-2
lines changed

src/peakrdl_regblock/cpuif/apb3/apb3_tmpl.sv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ always_ff {{get_always_ff_event(cpuif.reset)}} begin
1313
is_active <= '1;
1414
cpuif_req <= '1;
1515
cpuif_req_is_wr <= {{cpuif.signal("pwrite")}};
16-
{%- if cpuif.data_width == 8 %}
16+
{%- if cpuif.data_width_bytes == 1 %}
1717
cpuif_addr <= {{cpuif.signal("paddr")}}[{{cpuif.addr_width-1}}:0];
1818
{%- else %}
1919
cpuif_addr <= { {{-cpuif.signal("paddr")}}[{{cpuif.addr_width-1}}:{{clog2(cpuif.data_width_bytes)}}], {{clog2(cpuif.data_width_bytes)}}'b0};

src/peakrdl_regblock/cpuif/apb4/apb4_tmpl.sv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ always_ff {{get_always_ff_event(cpuif.reset)}} begin
1414
is_active <= '1;
1515
cpuif_req <= '1;
1616
cpuif_req_is_wr <= {{cpuif.signal("pwrite")}};
17-
{%- if cpuif.data_width == 8 %}
17+
{%- if cpuif.data_width_bytes == 1 %}
1818
cpuif_addr <= {{cpuif.signal("paddr")}}[{{cpuif.addr_width-1}}:0];
1919
{%- else %}
2020
cpuif_addr <= { {{-cpuif.signal("paddr")}}[{{cpuif.addr_width-1}}:{{clog2(cpuif.data_width_bytes)}}], {{clog2(cpuif.data_width_bytes)}}'b0};

src/peakrdl_regblock/cpuif/axi4lite/axi4lite_tmpl.sv

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,17 +83,29 @@ always_comb begin
8383
if(axil_arvalid && !axil_prev_was_rd) begin
8484
cpuif_req = '1;
8585
cpuif_req_is_wr = '0;
86+
{%- if cpuif.data_width_bytes == 1 %}
8687
cpuif_addr = axil_araddr;
88+
{%- else %}
89+
cpuif_addr = {axil_araddr[{{cpuif.addr_width-1}}:{{clog2(cpuif.data_width_bytes)}}], {{clog2(cpuif.data_width_bytes)}}'b0};
90+
{%- endif %}
8791
if(!cpuif_req_stall_rd) axil_ar_accept = '1;
8892
end else if(axil_awvalid && axil_wvalid) begin
8993
cpuif_req = '1;
9094
cpuif_req_is_wr = '1;
95+
{%- if cpuif.data_width_bytes == 1 %}
9196
cpuif_addr = axil_awaddr;
97+
{%- else %}
98+
cpuif_addr = {axil_awaddr[{{cpuif.addr_width-1}}:{{clog2(cpuif.data_width_bytes)}}], {{clog2(cpuif.data_width_bytes)}}'b0};
99+
{%- endif %}
92100
if(!cpuif_req_stall_wr) axil_aw_accept = '1;
93101
end else if(axil_arvalid) begin
94102
cpuif_req = '1;
95103
cpuif_req_is_wr = '0;
104+
{%- if cpuif.data_width_bytes == 1 %}
96105
cpuif_addr = axil_araddr;
106+
{%- else %}
107+
cpuif_addr = {axil_araddr[{{cpuif.addr_width-1}}:{{clog2(cpuif.data_width_bytes)}}], {{clog2(cpuif.data_width_bytes)}}'b0};
108+
{%- endif %}
97109
if(!cpuif_req_stall_rd) axil_ar_accept = '1;
98110
end
99111
end

0 commit comments

Comments
 (0)