summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/rtlil.cc32
-rw-r--r--kernel/rtlil.h10
2 files changed, 40 insertions, 2 deletions
diff --git a/kernel/rtlil.cc b/kernel/rtlil.cc
index 2ab4a8c6..acfba057 100644
--- a/kernel/rtlil.cc
+++ b/kernel/rtlil.cc
@@ -1324,6 +1324,13 @@ RTLIL::SigChunk::SigChunk(const RTLIL::Const &value)
offset = 0;
}
+RTLIL::SigChunk::SigChunk(RTLIL::Wire *wire)
+{
+ this->wire = wire;
+ this->width = wire->width;
+ this->offset = 0;
+}
+
RTLIL::SigChunk::SigChunk(RTLIL::Wire *wire, int width, int offset)
{
this->wire = wire;
@@ -1331,6 +1338,15 @@ RTLIL::SigChunk::SigChunk(RTLIL::Wire *wire, int width, int offset)
this->offset = offset;
}
+RTLIL::SigChunk RTLIL::SigChunk::grml(RTLIL::Wire *wire, int offset, int width)
+{
+ RTLIL::SigChunk chunk;
+ chunk.wire = wire;
+ chunk.width = width;
+ chunk.offset = offset;
+ return chunk;
+}
+
RTLIL::SigChunk::SigChunk(const std::string &str)
{
wire = NULL;
@@ -1432,6 +1448,13 @@ RTLIL::SigSpec::SigSpec(const RTLIL::SigChunk &chunk)
check();
}
+RTLIL::SigSpec::SigSpec(RTLIL::Wire *wire)
+{
+ chunks_.push_back(RTLIL::SigChunk(wire));
+ width_ = chunks_.back().width;
+ check();
+}
+
RTLIL::SigSpec::SigSpec(RTLIL::Wire *wire, int width, int offset)
{
chunks_.push_back(RTLIL::SigChunk(wire, width, offset));
@@ -1439,6 +1462,15 @@ RTLIL::SigSpec::SigSpec(RTLIL::Wire *wire, int width, int offset)
check();
}
+RTLIL::SigSpec RTLIL::SigSpec::grml(RTLIL::Wire *wire, int offset, int width)
+{
+ RTLIL::SigSpec sig;
+ sig.chunks_.push_back(RTLIL::SigChunk::grml(wire, offset, width));
+ sig.width_ = sig.chunks_.back().width;
+ sig.check();
+ return sig;
+}
+
RTLIL::SigSpec::SigSpec(const std::string &str)
{
chunks_.push_back(RTLIL::SigChunk(str));
diff --git a/kernel/rtlil.h b/kernel/rtlil.h
index 0e74c958..542e685d 100644
--- a/kernel/rtlil.h
+++ b/kernel/rtlil.h
@@ -462,7 +462,10 @@ struct RTLIL::SigChunk {
int width, offset;
SigChunk();
SigChunk(const RTLIL::Const &value);
- SigChunk(RTLIL::Wire *wire, int width, int offset);
+ SigChunk(RTLIL::Wire *wire);
+ SigChunk(RTLIL::Wire *wire, int width); // <-- using this will cause a linker error
+ SigChunk(RTLIL::Wire *wire, int width, int offset) __attribute__((deprecated));
+ static SigChunk grml(RTLIL::Wire *wire, int offset, int width = 1);
SigChunk(const std::string &str);
SigChunk(int val, int width = 32);
SigChunk(RTLIL::State bit, int width = 1);
@@ -522,7 +525,10 @@ public:
SigSpec();
SigSpec(const RTLIL::Const &value);
SigSpec(const RTLIL::SigChunk &chunk);
- SigSpec(RTLIL::Wire *wire, int width = -1, int offset = 0);
+ SigSpec(RTLIL::Wire *wire);
+ SigSpec(RTLIL::Wire *wire, int width); // <-- using this will cause a linker error
+ SigSpec(RTLIL::Wire *wire, int width, int offset) __attribute__((deprecated));
+ static SigSpec grml(RTLIL::Wire *wire, int offset, int width = 1);
SigSpec(const std::string &str);
SigSpec(int val, int width = 32);
SigSpec(RTLIL::State bit, int width = 1);