@@ -83,8 +83,13 @@ module fpnew_top #(
83
83
$clog2 (MAX_DELAY ) +
84
84
// In case of a TMR approach we add extra ID Bits for the Division since it can take up to 12 cycles
85
85
// For DMR this is not needed as we stall the unit instead
86
- ((RedundancyFeatures.RedundancyType == fpnew_pkg :: TMR_FAST || RedundancyFeatures.RedundancyType == fpnew_pkg :: TMR_SMALL )
87
- && fpnew_pkg :: division_enabled (Implementation.UnitTypes)
86
+ (
87
+ (
88
+ RedundancyFeatures.RedundancyType == fpnew_pkg :: TMR_FAST ||
89
+ RedundancyFeatures.RedundancyType == fpnew_pkg :: TMR_SMALL ||
90
+ RedundancyFeatures.RedundancyType == fpnew_pkg :: TMR_TINY
91
+ ) &&
92
+ fpnew_pkg :: division_enabled (Implementation.UnitTypes)
88
93
) ? 4 : 0
89
94
);
90
95
@@ -162,7 +167,11 @@ module fpnew_top #(
162
167
// Stall Handshake when a division is going on and DMR is enabled
163
168
logic division_stall;
164
169
165
- if (RedundancyFeatures.RedundancyType == fpnew_pkg :: TMR_FAST || RedundancyFeatures.RedundancyType == fpnew_pkg :: TMR_SMALL ) begin : gen_no_division_stall
170
+ if (
171
+ RedundancyFeatures.RedundancyType == fpnew_pkg :: TMR_FAST ||
172
+ RedundancyFeatures.RedundancyType == fpnew_pkg :: TMR_SMALL ||
173
+ RedundancyFeatures.RedundancyType == fpnew_pkg :: TMR_TINY
174
+ ) begin : gen_no_division_stall
166
175
assign division_stall = 0 ;
167
176
end else begin : gen_division_stall
168
177
logic division_busy_q;
@@ -206,11 +215,16 @@ module fpnew_top #(
206
215
assign retry_ready = fpnew_pkg :: DONT_CARE ;
207
216
assign retry_replacement_id = fpnew_pkg :: DONT_CARE ;
208
217
209
- end else if (RedundancyFeatures.RedundancyType == fpnew_pkg :: TMR_FAST || RedundancyFeatures.RedundancyType == fpnew_pkg :: TMR_SMALL ) begin : gen_in_tmr
218
+ end else if (
219
+ RedundancyFeatures.RedundancyType == fpnew_pkg :: TMR_FAST ||
220
+ RedundancyFeatures.RedundancyType == fpnew_pkg :: TMR_SMALL ||
221
+ RedundancyFeatures.RedundancyType == fpnew_pkg :: TMR_TINY
222
+ ) begin : gen_in_tmr
210
223
time_TMR_start # (
211
- .DataType ( tmr_in_stacked_t ),
212
- .IDSize ( ID_SIZE ),
213
- .InternalRedundancy ( RedundancyFeatures.TripplicateRepetition )
224
+ .DataType ( tmr_in_stacked_t ),
225
+ .IDSize ( ID_SIZE ),
226
+ .InternalRedundancy ( RedundancyFeatures.TripplicateRepetition ),
227
+ .EarlyReadyEnable ( (RedundancyFeatures.RedundancyType != fpnew_pkg :: TMR_TINY ) ? 1 : 0 )
214
228
) i_time_TMR_start (
215
229
.clk_i,
216
230
.rst_ni,
@@ -274,7 +288,8 @@ module fpnew_top #(
274
288
.DataType ( tmr_in_stacked_t ),
275
289
.IDSize ( ID_SIZE ),
276
290
.InternalRedundancy ( RedundancyFeatures.TripplicateRepetition ),
277
- .UseExternalId ( 1 )
291
+ .UseExternalId ( 1 ),
292
+ .EarlyReadyEnable ( 1 ) // Low area overhead, always enable (If retry gets it as feature remove here)
278
293
) i_time_DMR_start (
279
294
.clk_i,
280
295
.rst_ni,
@@ -439,7 +454,11 @@ module fpnew_top #(
439
454
assign retry_valid = fpnew_pkg :: DONT_CARE ;
440
455
assign retry_lock = fpnew_pkg :: DONT_CARE ;
441
456
442
- end else if (RedundancyFeatures.RedundancyType == fpnew_pkg :: TMR_FAST || RedundancyFeatures.RedundancyType == fpnew_pkg :: TMR_SMALL ) begin : gen_out_tmr
457
+ end else if (
458
+ RedundancyFeatures.RedundancyType == fpnew_pkg :: TMR_FAST ||
459
+ RedundancyFeatures.RedundancyType == fpnew_pkg :: TMR_SMALL ||
460
+ RedundancyFeatures.RedundancyType == fpnew_pkg :: TMR_TINY
461
+ ) begin : gen_out_tmr
443
462
time_TMR_end # (
444
463
.DataType ( tmr_out_stacked_t ),
445
464
.LockTimeout ( LOCK_TIMEOUT ),
0 commit comments