aboutsummaryrefslogtreecommitdiffstats
path: root/passes/pmgen/ice40_dsp.pmg
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2019-02-17 15:35:48 +0100
committerClifford Wolf <clifford@clifford.at>2019-02-17 15:35:48 +0100
commit5a853ed46cd3a41df9da4c8206f9416748788487 (patch)
tree60eef6d0bc328c18733f69a508c1b24c26bca5c8 /passes/pmgen/ice40_dsp.pmg
parentc06c062469a6f5ea16116a5ed3bc4a45b6e818a2 (diff)
downloadyosys-5a853ed46cd3a41df9da4c8206f9416748788487.tar.gz
yosys-5a853ed46cd3a41df9da4c8206f9416748788487.tar.bz2
yosys-5a853ed46cd3a41df9da4c8206f9416748788487.zip
Add actual DSP inference to ice40_dsp pass
Signed-off-by: Clifford Wolf <clifford@clifford.at>
Diffstat (limited to 'passes/pmgen/ice40_dsp.pmg')
-rw-r--r--passes/pmgen/ice40_dsp.pmg18
1 files changed, 16 insertions, 2 deletions
diff --git a/passes/pmgen/ice40_dsp.pmg b/passes/pmgen/ice40_dsp.pmg
index 1370cb66a..58e1ce0e0 100644
--- a/passes/pmgen/ice40_dsp.pmg
+++ b/passes/pmgen/ice40_dsp.pmg
@@ -63,7 +63,7 @@ code sigY clock clock_pol clock_vld
sigY = port(mul, \Y);
if (ffY) {
- sigY = port(ffY, \D);
+ sigY = port(ffY, \Q);
SigBit c = port(ffY, \CLK).as_bit();
bool cp = param(ffY, \CLK_POLARITY).as_bool();
@@ -77,7 +77,7 @@ code sigY clock clock_pol clock_vld
endcode
match addA
- select addA->type.in($add, $sub)
+ select addA->type.in($add)
select nusers(port(addA, \A)) == 2
index <SigSpec> port(addA, \A) === sigY
optional
@@ -134,3 +134,17 @@ match ffS
index <SigSpec> port(ffS, \D) === port(muxAB, \Y)
index <SigSpec> port(ffS, \Q) === sigS
endmatch
+
+code clock clock_pol clock_vld
+ if (ffS) {
+ SigBit c = port(ffS, \CLK).as_bit();
+ bool cp = param(ffS, \CLK_POLARITY).as_bool();
+
+ if (clock_vld && (c != clock || cp != clock_pol))
+ reject;
+
+ clock = c;
+ clock_pol = cp;
+ clock_vld = true;
+ }
+endcode