Skip to content

Commit 34116e1

Browse files
Fix byte counter width mismatch
1 parent 978f994 commit 34116e1

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

src/ctrl/width_converter_8toN.sv

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,30 +28,34 @@ module width_converter_8toN #(
2828

2929
// Number of bytes of wider data bus
3030
localparam int unsigned Bytes = Width / 8;
31+
localparam int unsigned BytesW = $clog2(Bytes);
3132

3233
// Byte counter
33-
logic [$clog2(Bytes):0] bcnt;
34+
logic [BytesW:0] bcnt;
35+
logic [BytesW:0] s_bytes;
36+
37+
assign s_bytes = (BytesW+1)'(Bytes);
3438

3539
always_ff @(posedge clk_i or negedge rst_ni)
3640
if (!rst_ni) bcnt <= '0;
3741
else begin
38-
if ((bcnt != '0) & sink_flush_i) bcnt <= Bytes;
39-
else if ((bcnt != Bytes) & sink_valid_i & sink_ready_o) bcnt <= bcnt + 1;
40-
else if ((bcnt == Bytes) & source_valid_o & source_ready_i) bcnt <= '0;
42+
if ((bcnt != '0) & sink_flush_i) bcnt <= s_bytes;
43+
else if ((bcnt != s_bytes) & sink_valid_i & sink_ready_o) bcnt <= bcnt + 1;
44+
else if ((bcnt == s_bytes) & source_valid_o & source_ready_i) bcnt <= '0;
4145
end
4246

4347
// Valid / ready
44-
assign sink_ready_o = (bcnt != Bytes);
45-
assign source_valid_o = (bcnt == Bytes);
48+
assign sink_ready_o = (bcnt != s_bytes);
49+
assign source_valid_o = (bcnt == s_bytes);
4650

4751
// Data register
4852
logic [Width-1:0] sreg;
4953

5054
always_ff @(posedge clk_i or negedge rst_ni)
5155
if (!rst_ni) sreg <= '0;
5256
else begin
53-
if ((bcnt != Bytes) & sink_valid_i & sink_ready_o) sreg[bcnt*8+:8] <= sink_data_i;
54-
else if ((bcnt == Bytes) & source_valid_o & source_ready_i)
57+
if ((bcnt != s_bytes) & sink_valid_i & sink_ready_o) sreg[bcnt*8+:8] <= sink_data_i;
58+
else if ((bcnt == s_bytes) & source_valid_o & source_ready_i)
5559
sreg <= '0; // Clear the reg not to leak data
5660
end
5761

0 commit comments

Comments
 (0)