aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rtlil.cc
diff options
context:
space:
mode:
authorEddie Hung <eddie@fpgeh.com>2019-12-06 23:22:52 -0800
committerEddie Hung <eddie@fpgeh.com>2019-12-06 23:22:52 -0800
commita46a7e8a678a410292bbab061d1b96254fa7701d (patch)
tree07ed33e9e84c10c415165f05f1d2001fad7ddfc9 /kernel/rtlil.cc
parentab667d3d47ceb07a41b571517b4effb0f4a4bf0b (diff)
parentecb0c68f0751b3bd97f8da94e7bd2258987d58e1 (diff)
downloadyosys-a46a7e8a678a410292bbab061d1b96254fa7701d.tar.gz
yosys-a46a7e8a678a410292bbab061d1b96254fa7701d.tar.bz2
yosys-a46a7e8a678a410292bbab061d1b96254fa7701d.zip
Merge remote-tracking branch 'origin/master' into xaig_dff
Diffstat (limited to 'kernel/rtlil.cc')
-rw-r--r--kernel/rtlil.cc24
1 files changed, 21 insertions, 3 deletions
diff --git a/kernel/rtlil.cc b/kernel/rtlil.cc
index bd2fd91a3..7c73f94c8 100644
--- a/kernel/rtlil.cc
+++ b/kernel/rtlil.cc
@@ -783,6 +783,14 @@ namespace {
return v;
}
+ int param_bool(RTLIL::IdString name, bool expected)
+ {
+ int v = param_bool(name);
+ if (v != expected)
+ error(__LINE__);
+ return v;
+ }
+
void param_bits(RTLIL::IdString name, int width)
{
param(name);
@@ -869,13 +877,23 @@ namespace {
return;
}
- if (cell->type.in(ID($shl), ID($shr), ID($sshl), ID($sshr), ID($shift), ID($shiftx))) {
+ if (cell->type.in(ID($shl), ID($shr), ID($sshl), ID($sshr))) {
+ param_bool(ID(A_SIGNED));
+ param_bool(ID(B_SIGNED), /*expected=*/false);
+ port(ID::A, param(ID(A_WIDTH)));
+ port(ID::B, param(ID(B_WIDTH)));
+ port(ID::Y, param(ID(Y_WIDTH)));
+ check_expected(/*check_matched_sign=*/false);
+ return;
+ }
+
+ if (cell->type.in(ID($shift), ID($shiftx))) {
param_bool(ID(A_SIGNED));
param_bool(ID(B_SIGNED));
port(ID::A, param(ID(A_WIDTH)));
port(ID::B, param(ID(B_WIDTH)));
port(ID::Y, param(ID(Y_WIDTH)));
- check_expected(false);
+ check_expected(/*check_matched_sign=*/false);
return;
}
@@ -957,7 +975,7 @@ namespace {
port(ID::A, param(ID(A_WIDTH)));
port(ID::B, param(ID(B_WIDTH)));
port(ID::Y, param(ID(Y_WIDTH)));
- check_expected(false);
+ check_expected(/*check_matched_sign=*/false);
return;
}