aboutsummaryrefslogtreecommitdiffstats
path: root/passes/pmgen
diff options
context:
space:
mode:
authorEddie Hung <eddie@fpgeh.com>2019-08-01 10:00:49 -0700
committerEddie Hung <eddie@fpgeh.com>2019-08-01 10:00:49 -0700
commitc54a39069d1f536da7a830fa2fa504bc72c20c18 (patch)
treecba5574162edda2da40ff34c2dfa8583fa70d19c /passes/pmgen
parente3c39cc450a0317ad7e8234bb866d55465548c9c (diff)
downloadyosys-c54a39069d1f536da7a830fa2fa504bc72c20c18.tar.gz
yosys-c54a39069d1f536da7a830fa2fa504bc72c20c18.tar.bz2
yosys-c54a39069d1f536da7a830fa2fa504bc72c20c18.zip
CO is sign extension only if signed multiplier
Diffstat (limited to 'passes/pmgen')
-rw-r--r--passes/pmgen/ice40_dsp.cc7
1 files changed, 6 insertions, 1 deletions
diff --git a/passes/pmgen/ice40_dsp.cc b/passes/pmgen/ice40_dsp.cc
index 00794ca0d..f88cd62dd 100644
--- a/passes/pmgen/ice40_dsp.cc
+++ b/passes/pmgen/ice40_dsp.cc
@@ -147,7 +147,12 @@ void create_ice40_dsp(ice40_dsp_pm &pm)
int O_width = GetSize(O);
if (O_width == 33) {
log_assert(st.addAB);
- cell->setPort("\\CO", O[-1]);
+ // If we have a signed multiply-add, then perform sign extension
+ // TODO: Need to check CD[31:16] is sign extension of CD[15:0]?
+ if (st.addAB->getParam("\\A_SIGNED").as_bool() && st.addAB->getParam("\\B_SIGNED").as_bool())
+ pm.module->connect(O[-1], O[-2]);
+ else
+ cell->setPort("\\CO", O[-1]);
O.remove(O_width-1);
}
else