aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rtlil.cc
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/rtlil.cc')
-rw-r--r--kernel/rtlil.cc19
1 files changed, 13 insertions, 6 deletions
diff --git a/kernel/rtlil.cc b/kernel/rtlil.cc
index c97e2e455..b0dcfe428 100644
--- a/kernel/rtlil.cc
+++ b/kernel/rtlil.cc
@@ -18,6 +18,7 @@
*/
#include "kernel/rtlil.h"
+#include "kernel/log.h"
#include <assert.h>
#include <algorithm>
@@ -257,13 +258,12 @@ RTLIL::Module::~Module()
RTLIL::IdString RTLIL::Module::derive(RTLIL::Design*, std::map<RTLIL::IdString, RTLIL::Const>)
{
- assert(!"Called derive() from module base class.");
- abort();
+ log_error("Module `%s' is used with parameters but is not parametric!\n", id2cstr(name));
}
void RTLIL::Module::update_auto_wires(std::map<RTLIL::IdString, int>)
{
- assert(!"Called update_auto_wires() from module base class.");
+ log_error("Module `%s' has automatic wires bu no HDL backend to handle it!\n", id2cstr(name));
}
size_t RTLIL::Module::count_id(RTLIL::IdString id)
@@ -566,7 +566,7 @@ void RTLIL::SigSpec::optimize()
check();
}
-static bool compare_sigchunks(const RTLIL::SigChunk &a, const RTLIL::SigChunk &b)
+bool RTLIL::SigChunk::compare(const RTLIL::SigChunk &a, const RTLIL::SigChunk &b)
{
if (a.wire != b.wire) {
if (a.wire == NULL || b.wire == NULL)
@@ -583,14 +583,21 @@ static bool compare_sigchunks(const RTLIL::SigChunk &a, const RTLIL::SigChunk &b
return a.data.bits < b.data.bits;
}
+void RTLIL::SigSpec::sort()
+{
+ expand();
+ std::sort(chunks.begin(), chunks.end(), RTLIL::SigChunk::compare);
+ optimize();
+}
+
void RTLIL::SigSpec::sort_and_unify()
{
expand();
- std::sort(chunks.begin(), chunks.end(), compare_sigchunks);
+ std::sort(chunks.begin(), chunks.end(), RTLIL::SigChunk::compare);
for (size_t i = 1; i < chunks.size(); i++) {
RTLIL::SigChunk &ch1 = chunks[i-1];
RTLIL::SigChunk &ch2 = chunks[i];
- if (!compare_sigchunks(ch1, ch2) && !compare_sigchunks(ch2, ch1)) {
+ if (!RTLIL::SigChunk::compare(ch1, ch2) && !RTLIL::SigChunk::compare(ch2, ch1)) {
chunks.erase(chunks.begin()+i);
width -= chunks[i].width;
i--;