aboutsummaryrefslogtreecommitdiffstats
path: root/passes/pmgen/ice40_dsp.cc
diff options
context:
space:
mode:
authorEddie Hung <eddie@fpgeh.com>2019-08-01 12:44:56 -0700
committerEddie Hung <eddie@fpgeh.com>2019-08-01 12:44:56 -0700
commite19d33b003702a03b191fa2eda14d016a6bce0aa (patch)
treec9b7f6905677019ac1cb2dabd0ee90e136603e0a /passes/pmgen/ice40_dsp.cc
parent332b86491de4d033f2fe259ab7ad7d02761cc515 (diff)
downloadyosys-e19d33b003702a03b191fa2eda14d016a6bce0aa.tar.gz
yosys-e19d33b003702a03b191fa2eda14d016a6bce0aa.tar.bz2
yosys-e19d33b003702a03b191fa2eda14d016a6bce0aa.zip
Cope with sign extension in mul2dsp
Diffstat (limited to 'passes/pmgen/ice40_dsp.cc')
-rw-r--r--passes/pmgen/ice40_dsp.cc16
1 files changed, 8 insertions, 8 deletions
diff --git a/passes/pmgen/ice40_dsp.cc b/passes/pmgen/ice40_dsp.cc
index f88cd62dd..f6ae3a13f 100644
--- a/passes/pmgen/ice40_dsp.cc
+++ b/passes/pmgen/ice40_dsp.cc
@@ -72,17 +72,17 @@ void create_ice40_dsp(ice40_dsp_pm &pm)
pm.module->swap_names(cell, st.mul);
// SB_MAC16 Input Interface
- bool a_signed = st.mul->getParam("\\A_SIGNED").as_bool();
- bool b_signed = st.mul->getParam("\\B_SIGNED").as_bool();
-
SigSpec A = st.sigA;
- A.extend_u0(16, a_signed);
+ log_assert(GetSize(A) == 16);
SigSpec B = st.sigB;
- B.extend_u0(16, b_signed);
+ log_assert(GetSize(B) == 16);
SigSpec CD = st.sigCD;
- CD.extend_u0(32, st.sigCD_signed);
+ if (CD.empty())
+ CD = RTLIL::Const(0, 32);
+ else
+ log_assert(GetSize(CD) == 32);
cell->setPort("\\A", A);
cell->setPort("\\B", B);
@@ -217,8 +217,8 @@ void create_ice40_dsp(ice40_dsp_pm &pm)
cell->setParam("\\BOTADDSUB_CARRYSELECT", Const(0, 2));
cell->setParam("\\MODE_8x8", State::S0);
- cell->setParam("\\A_SIGNED", a_signed);
- cell->setParam("\\B_SIGNED", b_signed);
+ cell->setParam("\\A_SIGNED", st.mul->getParam("\\A_SIGNED").as_bool());
+ cell->setParam("\\B_SIGNED", st.mul->getParam("\\B_SIGNED").as_bool());
pm.autoremove(st.mul);
pm.autoremove(st.ffH);