Skip to content

Commit a196bfb

Browse files
committed
hw(output_arb): Remove gen_path_mask and clean up output_arbiter
1 parent 32d30d5 commit a196bfb

File tree

4 files changed

+48
-95
lines changed

4 files changed

+48
-95
lines changed

Bender.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ sources:
3434
- hw/floo_rob_wrapper.sv
3535
- hw/floo_reduction_sync.sv
3636
- hw/floo_route_xymask.sv
37-
- hw/floo_gen_path_mask.sv
3837
# Level 2
3938
- hw/floo_route_select.sv
4039
- hw/floo_route_comp.sv

hw/floo_gen_path_mask.sv

Lines changed: 0 additions & 37 deletions
This file was deleted.

hw/floo_output_arbiter.sv

Lines changed: 47 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66

77
module floo_output_arbiter import floo_pkg::*;
88
#(
9+
/// Number of input ports
910
parameter int unsigned NumRoutes = 1,
11+
/// Type definitions
1012
parameter type flit_t = logic,
1113
parameter type payload_t = logic,
1214
parameter payload_t NarrowRspMask = '0,
@@ -15,86 +17,75 @@ module floo_output_arbiter import floo_pkg::*;
1517
) (
1618
input logic clk_i,
1719
input logic rst_ni,
18-
/// Ports towards the input routes
20+
/// Input ports
1921
input logic [NumRoutes-1:0] valid_i,
2022
output logic [NumRoutes-1:0] ready_o,
2123
input flit_t [NumRoutes-1:0] data_i,
22-
input id_t node_id_i,
23-
/// Ports towards the output route
24+
input id_t xy_id_i,
25+
/// Output port
2426
output logic valid_o,
2527
input logic ready_i,
2628
output flit_t data_o
2729
);
2830

29-
flit_t[NumRoutes-1:0] in_reducing_data, in_normal_data;
30-
logic [NumRoutes-1:0] in_reducing_valid, in_reducing_ready;
31-
logic [NumRoutes-1:0] in_normal_valid, in_normal_ready;
31+
flit_t[NumRoutes-1:0] reduce_data_in, unicast_data_in;
32+
logic [NumRoutes-1:0] reduce_valid_in, reduce_ready_in;
33+
logic [NumRoutes-1:0] unicast_valid_in, unicast_ready_in;
3234

33-
// 1 for every bit means that the corresponding flit is normal, 0 means that it needs to be reduced
34-
logic [NumRoutes-1:0] path_mask;
35+
flit_t reduced_data_out, unicast_data_out;
36+
logic reduced_valid_out, unicast_valid_out;
3537

36-
flit_t out_reduced_data, out_normal_data;
37-
logic out_reduced_valid, out_reduced_ready;
38-
logic out_normal_valid, out_normal_ready;
38+
logic [NumRoutes-1:0] reduce_mask;
3939

40-
assign out_reduced_ready = ready_i;
41-
assign out_normal_ready = ready_i;
40+
// Determine which input ports are to be reduced
41+
for (genvar i = 0; i < NumRoutes; i++) begin : gen_reduce_mask
42+
assign reduce_mask[i] = (data_i[i].hdr.commtype == CollectB);
43+
end
4244

43-
floo_gen_path_mask #(
44-
.NumRoutes ( NumRoutes ),
45-
.flit_t ( flit_t )
46-
) i_gen_path_mask (
47-
.clk_i,
48-
.rst_ni,
49-
.data_i ( data_i ),
50-
.mask_o ( path_mask )
51-
);
52-
53-
// the normal arbitrater side
54-
assign in_normal_valid = valid_i & path_mask;
55-
assign in_normal_data = data_i ;
45+
// Arbitrate unicasts
46+
assign unicast_valid_in = valid_i & ~reduce_mask;
47+
assign unicast_data_in = data_i;
5648

5749
floo_wormhole_arbiter #(
5850
.NumRoutes ( NumRoutes ),
59-
.flit_t ( flit_t )
51+
.flit_t ( flit_t )
6052
) i_wormhole_arbiter (
6153
.clk_i,
6254
.rst_ni,
63-
64-
.valid_i ( in_normal_valid ),
65-
.ready_o ( in_normal_ready ),
66-
.data_i ( in_normal_data ),
67-
68-
.valid_o ( out_normal_valid ),
69-
.ready_i ( out_reduced_ready ),
70-
.data_o ( out_normal_data )
55+
.valid_i ( unicast_valid_in ),
56+
.ready_o ( unicast_ready_in ),
57+
.data_i ( unicast_data_in ),
58+
.valid_o ( unicast_valid_out ),
59+
.ready_i ( ready_i ),
60+
.data_o ( unicast_data_out )
7161
);
7262

73-
// the reduction side
74-
assign in_reducing_valid = valid_i & ~path_mask;
75-
assign in_reducing_data = data_i ;
63+
// Arbitrate reductions
64+
assign reduce_valid_in = valid_i & reduce_mask;
65+
assign reduce_data_in = data_i;
7666

7767
floo_reduction_arbiter #(
78-
.NumRoutes ( NumRoutes ),
79-
.flit_t ( flit_t ),
80-
.payload_t ( payload_t ),
81-
.NarrowRspMask ( NarrowRspMask ),
82-
.WideRspMask ( WideRspMask ),
83-
.id_t ( id_t )
68+
.NumRoutes ( NumRoutes ),
69+
.flit_t ( flit_t ),
70+
.payload_t ( payload_t ),
71+
.id_t ( id_t ),
72+
.NarrowRspMask ( NarrowRspMask ),
73+
.WideRspMask ( WideRspMask )
8474
) i_reduction_arbiter (
85-
.valid_i ( in_reducing_valid ),
86-
.ready_o ( in_reducing_ready ),
87-
.data_i ( in_reducing_data ),
88-
.node_id_i ( node_id_i ),
89-
90-
.valid_o ( out_reduced_valid ),
91-
.ready_i ( out_normal_ready ),
92-
.data_o ( out_reduced_data )
75+
.valid_i ( reduce_valid_in ),
76+
.ready_o ( reduce_ready_in ),
77+
.data_i ( reduce_data_in ),
78+
.node_id_i ( xy_id_i ),
79+
.valid_o ( reduced_valid_out ),
80+
.ready_i ( ready_i ),
81+
.data_o ( reduced_data_out )
9382
);
9483

95-
// choose which side to output, prefer the reduced side
96-
assign valid_o = (out_reduced_valid & |in_reducing_valid) ? out_reduced_valid : out_normal_valid;
97-
assign data_o = (out_reduced_valid & |in_reducing_valid) ? out_reduced_data : out_normal_data;
98-
assign ready_o = (out_reduced_valid & |in_reducing_valid) ? in_reducing_ready : in_normal_ready;
84+
// Arbitrate between wormhole and reduction arbiter
85+
// TODO(fischeti): Discuss with Chen if the handshaking is correctly handled
86+
// I believe that the `ready_i` of the two arbiters should be masked.
87+
assign valid_o = (reduced_valid_out & |reduce_valid_in) ? reduced_valid_out : unicast_valid_out;
88+
assign data_o = (reduced_valid_out & |reduce_valid_in) ? reduced_data_out : unicast_data_out;
89+
assign ready_o = (reduced_valid_out & |reduce_valid_in) ? reduce_ready_in : unicast_ready_in;
9990

10091
endmodule

hw/floo_router.sv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ module floo_router
210210
.valid_i ( masked_valid[out][v] ),
211211
.ready_o ( masked_ready[out][v] ),
212212
.data_i ( masked_data [out][v] ),
213-
.node_id_i( xy_id_i ),
213+
.xy_id_i ( xy_id_i ),
214214

215215
.valid_o ( out_valid[out][v] ),
216216
.ready_i ( out_ready[out][v] ),

0 commit comments

Comments
 (0)