File tree Expand file tree Collapse file tree 3 files changed +11
-2
lines changed Expand file tree Collapse file tree 3 files changed +11
-2
lines changed Original file line number Diff line number Diff line change @@ -33,6 +33,7 @@ module snitch_ssr import snitch_ssr_pkg::*; #(
33
33
// Register lanes from switch.
34
34
output data_t lane_rdata_o,
35
35
input data_t lane_wdata_i,
36
+ input logic lane_write_i,
36
37
output logic lane_valid_o,
37
38
input logic lane_ready_i,
38
39
// Ports into memory.
@@ -158,9 +159,13 @@ module snitch_ssr import snitch_ssr_pkg::*; #(
158
159
159
160
always_comb begin
160
161
if (dm_write) begin
161
- lane_valid_o = ~ fifo_full;
162
+ // Accept only writes and only when there is space in the FIFO.
163
+ // Note this blocks read accesses until the current write stream is over;
164
+ // This means that reads in the midst of write streams are *deadlocking*
165
+ // just like excess reads past finished read streams are.
166
+ lane_valid_o = lane_write_i & ~ fifo_full;
162
167
data_req_qvalid = agen_valid & ~ fifo_empty & has_credit & ~ agen_flush;
163
- fifo_push = lane_ready_i & ~ fifo_full ;
168
+ fifo_push = lane_valid_o & lane_ready_i ;
164
169
fifo_in = lane_wdata_i;
165
170
rep_enable = 0 ;
166
171
fifo_pop = data_req_qvalid & data_rsp.q_ready;
Original file line number Diff line number Diff line change @@ -155,6 +155,7 @@ module snitch_ssr_streamer import snitch_ssr_pkg::*; #(
155
155
.cfg_wready_o ( dmcfg_wready [i] ),
156
156
.lane_rdata_o ( lane_rdata [i] ),
157
157
.lane_wdata_i ( lane_wdata [i] ),
158
+ .lane_write_i ( lane_write [i] ),
158
159
.lane_valid_o ( lane_valid [i] ),
159
160
.lane_ready_i ( lane_ready [i] ),
160
161
.mem_req_o ( mem_req_o [i] ),
Original file line number Diff line number Diff line change @@ -102,6 +102,7 @@ module fixture_ssr import snitch_ssr_pkg::*; #(
102
102
tcdm_rsp_t mem_rsp_i;
103
103
logic [DataWidth- 1 : 0 ] lane_rdata_o;
104
104
logic [DataWidth- 1 : 0 ] lane_wdata_i;
105
+ logic [DataWidth- 1 : 0 ] lane_write_i;
105
106
logic [AddrWidth- 1 : 0 ] tcdm_start_address_i = '0 ; // (currently) required for test flow
106
107
107
108
// Device Under Test (DUT)
@@ -126,6 +127,7 @@ module fixture_ssr import snitch_ssr_pkg::*; #(
126
127
.cfg_wready_o,
127
128
.lane_rdata_o,
128
129
.lane_wdata_i,
130
+ .lane_write_i,
129
131
.lane_valid_o,
130
132
.lane_ready_i,
131
133
.mem_req_o,
@@ -304,6 +306,7 @@ module fixture_ssr import snitch_ssr_pkg::*; #(
304
306
305
307
// Swap valid and ready to emulate 3-way handshake
306
308
assign lane_wdata_i = ssr_bus.wdata;
309
+ assign lane_write_i = ssr_bus.write;
307
310
assign lane_ready_i = ssr_bus.valid;
308
311
assign ssr_bus.rdata = lane_rdata_o;
309
312
assign ssr_bus.ready = lane_valid_o;
You can’t perform that action at this time.
0 commit comments