Skip to content

Commit 2b7944c

Browse files
committed
Remove z-write ROB and add outstanding FIFO
1 parent 1bc48ed commit 2b7944c

File tree

1 file changed

+29
-17
lines changed

1 file changed

+29
-17
lines changed

rtl/redmule_streamer.sv

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,17 @@ localparam int unsigned DW = `HCI_SIZE_GET_DW(tcdm);
4444
localparam int unsigned UW = `HCI_SIZE_GET_UW(tcdm);
4545
localparam int unsigned IW = `HCI_SIZE_GET_IW(tcdm);
4646
localparam int unsigned EW = `HCI_SIZE_GET_EW(tcdm);
47+
localparam int unsigned EHW = `HCI_SIZE_GET_EHW(tcdm);
4748

4849
// this localparam is reused for all internal, non-ecc HCI interfaces
4950
localparam hci_size_parameter_t `HCI_SIZE_PARAM(ldst_tcdm) = '{
5051
DW: DW,
5152
AW: DEFAULT_AW,
5253
BW: DEFAULT_BW,
5354
UW: UW,
54-
IW: IW
55+
IW: IW,
56+
EW: EW,
57+
EHW: EHW
5558
};
5659

5760
// Virtual internal TCDM interface splitting the upstream TCDM
@@ -97,26 +100,35 @@ hci_outstanding_rob #(
97100
.in ( virt_tcdm[2] ),
98101
.out ( virt_tcdm_rob[2] )
99102
);
100-
hci_outstanding_rob #(
101-
.ROB_NW ( ROB_NW ),
102-
.`HCI_SIZE_PARAM(out) ( `HCI_SIZE_PARAM(ldst_tcdm) )
103-
) i_streamer_rob_z (
104-
.clk_i ( clk_i ),
105-
.rst_ni ( rst_ni ),
106-
.in ( virt_tcdm[3] ),
107-
.out ( virt_tcdm_rob[3] )
103+
104+
flags_fifo_t z_fifo_flags;
105+
logic [NumStreamSources:0][$clog2(NumStreamSources+1)-1:0] priority_encoding;
106+
assign priority_encoding[1] = 0;
107+
assign priority_encoding[2] = z_fifo_flags.full & ctrl_i.z_priority ? 3 : 1;
108+
assign priority_encoding[0] = 2;
109+
assign priority_encoding[3] = z_fifo_flags.full & ctrl_i.z_priority ? 1 : 3;
110+
hci_outstanding_fifo #(
111+
.FIFO_DEPTH ( ARRAY_WIDTH / 4 ),
112+
.`HCI_SIZE_PARAM(tcdm_initiator) ( `HCI_SIZE_PARAM(ldst_tcdm) )
113+
) i_z_fifo (
114+
.clk_i ( clk_i ),
115+
.rst_ni ( rst_ni ),
116+
.clear_i ( clear_i ),
117+
.flags_o ( z_fifo_flags ),
118+
.tcdm_target ( virt_tcdm[3] ),
119+
.tcdm_initiator ( virt_tcdm_rob[3] )
108120
);
109121

110122
// XWYZ-MUX A single TCDM port is used to load XW and to store Z / load Y
111123
hci_outstanding_mux #(
112-
.NB_CHAN ( NumStreamSources+1 ),
124+
.NB_CHAN ( NumStreamSources+1 ),
113125
.`HCI_SIZE_PARAM(out) ( `HCI_SIZE_PARAM(ldst_tcdm) )
114126
) i_ldst_mux (
115127
.clk_i ( clk_i ),
116128
.rst_ni ( rst_ni ),
117129
.clear_i ( clear_i ),
118-
.priority_force_i ( '0 ),
119-
.priority_i ( '0 ),
130+
.priority_force_i ( 1'b1 ),
131+
.priority_i ( priority_encoding ),
120132
.in ( virt_tcdm_rob ),
121133
.out ( tcdm )
122134
);
@@ -184,11 +196,11 @@ assign z_store.req_id = zstream2cast.req_id;
184196
assign z_store.req_valid = zstream2cast.req_valid;
185197
assign zstream2cast.req_ready = z_store.req_ready;
186198
// Right TCDM buses assignment.
187-
assign zstream2cast.resp_data = z_store.resp_data;
188-
assign zstream2cast.resp_user = z_store.resp_user;
189-
assign zstream2cast.resp_id = z_store.resp_id;
190-
assign zstream2cast.resp_valid = z_store.resp_valid;
191-
assign z_store.resp_ready = zstream2cast.resp_ready;
199+
assign zstream2cast.resp_data = '0;
200+
assign zstream2cast.resp_user = '0;
201+
assign zstream2cast.resp_id = '0;
202+
assign zstream2cast.resp_valid = 1'b1;
203+
assign z_store.resp_ready = 1'b1;
192204

193205
// Assigning the store output to the store side of the y/z multiplexer.
194206
hci_outstanding_assign i_store_assign ( .tcdm_target (z_store), .tcdm_initiator (virt_tcdm[3]) );

0 commit comments

Comments
 (0)