@@ -46,8 +46,6 @@ module VX_operands import VX_gpu_pkg::*; #(
46
46
wire [ISSUE_WIS_W - 1 : 0 ] per_opc_pending_wis[`NUM_OPCS ];
47
47
wire [NUM_REGS - 1 : 0 ] per_opc_pending_regs[`NUM_OPCS ];
48
48
49
- `AOS_TO_ITF (per_opc_scoreboard, per_opc_scoreboard_if, `NUM_OPCS , SCB_DATAW )
50
-
51
49
// collector selection
52
50
53
51
reg [`NUM_OPCS - 1 : 0 ] select_opcs;
@@ -72,26 +70,28 @@ module VX_operands import VX_gpu_pkg::*; #(
72
70
end
73
71
end
74
72
75
- wire opc_sel_valid;
76
- wire [`NUM_OPCS - 1 : 0 ] opc_sel_mask;
77
-
78
- wire [`NUM_OPCS - 1 : 0 ] ready_opcs = select_opcs & per_opc_scoreboard_ready;
73
+ `IGNORE_UNOPTFLAT_BEGIN
74
+ `AOS_TO_ITF (per_opc_scoreboard, per_opc_scoreboard_if, `NUM_OPCS , SCB_DATAW )
75
+ `IGNORE_UNOPTFLAT_END
79
76
80
- VX_priority_encoder # (
81
- .N (`NUM_OPCS )
82
- ) opc_sel (
83
- .data_in (ready_opcs),
84
- .valid_out (opc_sel_valid),
85
- .onehot_out (opc_sel_mask),
86
- `UNUSED_PIN (index_out)
77
+ VX_stream_arb # (
78
+ .NUM_INPUTS (1 ),
79
+ .NUM_OUTPUTS (`NUM_OPCS ),
80
+ .DATAW (SCB_DATAW ),
81
+ .ARBITER (" P" ),
82
+ .OUT_BUF (0 )
83
+ ) input_arb (
84
+ .clk (clk),
85
+ .reset (reset),
86
+ .valid_in (scoreboard_if.valid),
87
+ .data_in (scoreboard_if.data),
88
+ .ready_in (scoreboard_if.ready),
89
+ .valid_out (per_opc_scoreboard_valid),
90
+ .data_out (per_opc_scoreboard_data),
91
+ .ready_out (per_opc_scoreboard_ready & select_opcs),
92
+ `UNUSED_PIN (sel_out)
87
93
);
88
94
89
- for (genvar i = 0 ; i < `NUM_OPCS ; ++ i) begin : g_opc_sel
90
- assign per_opc_scoreboard_valid[i] = scoreboard_if.valid && opc_sel_mask[i];
91
- assign per_opc_scoreboard_data[i] = scoreboard_if.data;
92
- assign scoreboard_if.ready = opc_sel_valid;
93
- end
94
-
95
95
for (genvar i = 0 ; i < `NUM_OPCS ; ++ i) begin : g_collectors
96
96
wire [`UP (`NUM_OPCS - 1 )- 1 : 0 ][ISSUE_WIS_W - 1 : 0 ] pending_wis_in;
97
97
wire [`UP (`NUM_OPCS - 1 )- 1 : 0 ][NUM_REGS - 1 : 0 ] pending_regs_in;
@@ -138,16 +138,17 @@ module VX_operands import VX_gpu_pkg::*; #(
138
138
.NUM_INPUTS (`NUM_OPCS ),
139
139
.NUM_OUTPUTS (1 ),
140
140
.DATAW (OPD_DATAW ),
141
+ .ARBITER (" R" ),
141
142
.OUT_BUF (3 )
142
- ) operands_arb (
143
- .clk (clk),
144
- .reset (reset),
145
- .valid_in (per_opc_operands_valid),
146
- .data_in (per_opc_operands_data),
147
- .ready_in (per_opc_operands_ready),
148
- .valid_out (operands_if.valid),
149
- .data_out (operands_if.data),
150
- .ready_out (operands_if.ready),
143
+ ) output_arb (
144
+ .clk (clk),
145
+ .reset (reset),
146
+ .valid_in (per_opc_operands_valid),
147
+ .data_in (per_opc_operands_data),
148
+ .ready_in (per_opc_operands_ready),
149
+ .valid_out (operands_if.valid),
150
+ .data_out (operands_if.data),
151
+ .ready_out (operands_if.ready),
151
152
`UNUSED_PIN (sel_out)
152
153
);
153
154
0 commit comments