diff options
author | Marcelina KoĆcielnicka <mwk@0x04.net> | 2021-07-11 23:57:53 +0200 |
---|---|---|
committer | Marcelina KoĆcielnicka <mwk@0x04.net> | 2021-07-12 00:47:34 +0200 |
commit | 009940f56ca71cc8655a13a514371eb5757b96ca (patch) | |
tree | 8b194a81a92590973eb662c1207a876d010b2966 /kernel/rtlil.cc | |
parent | 726fabd65e51c7a15a2a2dc24d3b99426ef43ad2 (diff) | |
download | yosys-009940f56ca71cc8655a13a514371eb5757b96ca.tar.gz yosys-009940f56ca71cc8655a13a514371eb5757b96ca.tar.bz2 yosys-009940f56ca71cc8655a13a514371eb5757b96ca.zip |
rtlil: Make Process handling more uniform with Cell and Wire.
- add a backlink to module from Process
- make constructor and destructor protected, expose Module functions
to add and remove processes
Diffstat (limited to 'kernel/rtlil.cc')
-rw-r--r-- | kernel/rtlil.cc | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/kernel/rtlil.cc b/kernel/rtlil.cc index b7bef723f..21ee15ac5 100644 --- a/kernel/rtlil.cc +++ b/kernel/rtlil.cc @@ -1839,6 +1839,14 @@ void RTLIL::Module::add(RTLIL::Cell *cell) cell->module = this; } +void RTLIL::Module::add(RTLIL::Process *process) +{ + log_assert(!process->name.empty()); + log_assert(count_id(process->name) == 0); + processes[process->name] = process; + process->module = this; +} + void RTLIL::Module::remove(const pool<RTLIL::Wire*> &wires) { log_assert(refcount_wires_ == 0); @@ -1895,6 +1903,13 @@ void RTLIL::Module::remove(RTLIL::Cell *cell) delete cell; } +void RTLIL::Module::remove(RTLIL::Process *process) +{ + log_assert(processes.count(process->name) != 0); + processes.erase(process->name); + delete process; +} + void RTLIL::Module::rename(RTLIL::Wire *wire, RTLIL::IdString new_name) { log_assert(wires_[wire->name] == wire); @@ -2120,11 +2135,19 @@ RTLIL::Memory *RTLIL::Module::addMemory(RTLIL::IdString name, const RTLIL::Memor return mem; } +RTLIL::Process *RTLIL::Module::addProcess(RTLIL::IdString name) +{ + RTLIL::Process *proc = new RTLIL::Process; + proc->name = name; + add(proc); + return proc; +} + RTLIL::Process *RTLIL::Module::addProcess(RTLIL::IdString name, const RTLIL::Process *other) { RTLIL::Process *proc = other->clone(); proc->name = name; - processes[name] = proc; + add(proc); return proc; } @@ -2920,6 +2943,13 @@ RTLIL::Memory::Memory() #endif } +RTLIL::Process::Process() : module(nullptr) +{ + static unsigned int hashidx_count = 123456789; + hashidx_count = mkhash_xorshift(hashidx_count); + hashidx_ = hashidx_count; +} + RTLIL::Cell::Cell() : module(nullptr) { static unsigned int hashidx_count = 123456789; |