@@ -272,14 +272,23 @@ struct RsDspMultAddWorker
272
272
cell_muladd->setPort (RTLIL::escape_id (" unsigned_b_i" ),mult_coeff->getParam (ID::B_SIGNED).as_bool ()?RTLIL::S0:RTLIL::S1);
273
273
}
274
274
else if (mult_coeff->getPort (ID::B).is_fully_const ()){
275
- cell_muladd->setParam (RTLIL::escape_id (" COEFF_0" ), mult_coeff->getPort (ID::B).as_const ());
275
+ RTLIL::Const coeff_0 = const_or (RTLIL::Const (RTLIL::S0,tgt_a_width), mult_coeff->getPort (ID::B).as_const (), false , false , tgt_a_width);
276
+ cell_muladd->setParam (RTLIL::escape_id (" COEFF_0" ), coeff_0);
277
+
278
+ cell_muladd->setParam (RTLIL::escape_id (" COEFF_1" ), RTLIL::Const (RTLIL::S0,tgt_a_width));
279
+ cell_muladd->setParam (RTLIL::escape_id (" COEFF_2" ), RTLIL::Const (RTLIL::S0,tgt_a_width));
280
+ cell_muladd->setParam (RTLIL::escape_id (" COEFF_3" ), RTLIL::Const (RTLIL::S0,tgt_a_width));
276
281
sig_b = mult_coeff->getPort (ID::A);
277
282
cell_muladd->setPort (RTLIL::escape_id (" b_i" ), sig_b);
278
283
cell_muladd->setPort (RTLIL::escape_id (" a_i" ), sig_a);
279
284
cell_muladd->setPort (RTLIL::escape_id (" unsigned_b_i" ),mult_coeff->getParam (ID::A_SIGNED).as_bool ()?RTLIL::S0:RTLIL::S1);
280
285
}
281
286
else {
282
- cell_muladd->setParam (RTLIL::escape_id (" COEFF_0" ), mult_coeff->getPort (ID::A).as_const ());
287
+ RTLIL::Const coeff_0 = const_or (RTLIL::Const (RTLIL::S0,tgt_a_width), mult_coeff->getPort (ID::A).as_const (), false , false , tgt_a_width);
288
+ cell_muladd->setParam (RTLIL::escape_id (" COEFF_0" ), coeff_0);
289
+ cell_muladd->setParam (RTLIL::escape_id (" COEFF_1" ), RTLIL::Const (RTLIL::S0,tgt_a_width));
290
+ cell_muladd->setParam (RTLIL::escape_id (" COEFF_2" ), RTLIL::Const (RTLIL::S0,tgt_a_width));
291
+ cell_muladd->setParam (RTLIL::escape_id (" COEFF_3" ), RTLIL::Const (RTLIL::S0,tgt_a_width));
283
292
sig_b = mult_coeff->getPort (ID::B);
284
293
cell_muladd->setPort (RTLIL::escape_id (" b_i" ), sig_b);
285
294
cell_muladd->setPort (RTLIL::escape_id (" a_i" ), sig_a);
0 commit comments