aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorJannis Harder <me@jix.one>2023-01-29 13:54:02 +0100
committerJannis Harder <me@jix.one>2023-01-29 14:02:25 +0100
commitb08a8807044980b7906362848f62291ede50e696 (patch)
treedaafa09056ad4efef3860a883b9f52843a91670c /kernel
parent541fdffff243bccb410de13ae3ef91797060fcd4 (diff)
downloadyosys-b08a8807044980b7906362848f62291ede50e696.tar.gz
yosys-b08a8807044980b7906362848f62291ede50e696.tar.bz2
yosys-b08a8807044980b7906362848f62291ede50e696.zip
backends/rtlil: Do not shorten a value with z bits to 'x
Diffstat (limited to 'kernel')
-rw-r--r--kernel/rtlil.cc11
-rw-r--r--kernel/rtlil.h1
2 files changed, 12 insertions, 0 deletions
diff --git a/kernel/rtlil.cc b/kernel/rtlil.cc
index eee014c54..7f3508b2f 100644
--- a/kernel/rtlil.cc
+++ b/kernel/rtlil.cc
@@ -370,6 +370,17 @@ bool RTLIL::Const::is_fully_undef() const
return true;
}
+bool RTLIL::Const::is_fully_undef_x_only() const
+{
+ cover("kernel.rtlil.const.is_fully_undef_x_only");
+
+ for (const auto &bit : bits)
+ if (bit != RTLIL::State::Sx)
+ return false;
+
+ return true;
+}
+
bool RTLIL::Const::is_onehot(int *pos) const
{
cover("kernel.rtlil.const.is_onehot");
diff --git a/kernel/rtlil.h b/kernel/rtlil.h
index 42bb66da8..7c7669caa 100644
--- a/kernel/rtlil.h
+++ b/kernel/rtlil.h
@@ -686,6 +686,7 @@ struct RTLIL::Const
bool is_fully_ones() const;
bool is_fully_def() const;
bool is_fully_undef() const;
+ bool is_fully_undef_x_only() const;
bool is_onehot(int *pos = nullptr) const;
inline RTLIL::Const extract(int offset, int len = 1, RTLIL::State padding = RTLIL::State::S0) const {