diff options
author | Clifford Wolf <clifford@clifford.at> | 2015-02-07 11:40:19 +0100 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2015-02-07 11:40:19 +0100 |
commit | dce1fae777bcc9791c2f49be4b53f1de53df7502 (patch) | |
tree | cec59c5048b001b230a041bd021b60b0141df22a | |
parent | d5e30978e97f6e23eacad91766d862a7b8ea8879 (diff) | |
download | yosys-dce1fae777bcc9791c2f49be4b53f1de53df7502.tar.gz yosys-dce1fae777bcc9791c2f49be4b53f1de53df7502.tar.bz2 yosys-dce1fae777bcc9791c2f49be4b53f1de53df7502.zip |
Added cell->known(), cell->input(portname), cell->output(portname)
-rw-r--r-- | kernel/rtlil.cc | 34 | ||||
-rw-r--r-- | kernel/rtlil.h | 5 |
2 files changed, 39 insertions, 0 deletions
diff --git a/kernel/rtlil.cc b/kernel/rtlil.cc index 8c64217bb..b1e2c0e8e 100644 --- a/kernel/rtlil.cc +++ b/kernel/rtlil.cc @@ -19,6 +19,7 @@ #include "kernel/yosys.h" #include "kernel/macc.h" +#include "kernel/celltypes.h" #include "frontends/verilog/verilog_frontend.h" #include "backends/ilang/ilang_backend.h" @@ -1928,6 +1929,39 @@ const dict<RTLIL::IdString, RTLIL::SigSpec> &RTLIL::Cell::connections() const return connections_; } +bool RTLIL::Cell::known() const +{ + if (yosys_celltypes.cell_known(type)) + return true; + if (module && module->design && module->design->module(type)) + return true; + return false; +} + +bool RTLIL::Cell::input(RTLIL::IdString portname) const +{ + if (yosys_celltypes.cell_known(type)) + return yosys_celltypes.cell_input(type, portname); + if (module && module->design) { + RTLIL::Module *m = module->design->module(type); + RTLIL::Wire *w = m ? m->wire(portname) : nullptr; + return w && w->port_input; + } + return false; +} + +bool RTLIL::Cell::output(RTLIL::IdString portname) const +{ + if (yosys_celltypes.cell_known(type)) + return yosys_celltypes.cell_output(type, portname); + if (module && module->design) { + RTLIL::Module *m = module->design->module(type); + RTLIL::Wire *w = m ? m->wire(portname) : nullptr; + return w && w->port_output; + } + return false; +} + bool RTLIL::Cell::hasParam(RTLIL::IdString paramname) const { return parameters.count(paramname) != 0; diff --git a/kernel/rtlil.h b/kernel/rtlil.h index c17ede3d0..985bffe5e 100644 --- a/kernel/rtlil.h +++ b/kernel/rtlil.h @@ -1140,6 +1140,11 @@ public: const RTLIL::SigSpec &getPort(RTLIL::IdString portname) const; const dict<RTLIL::IdString, RTLIL::SigSpec> &connections() const; + // information about cell ports + bool known() const; + bool input(RTLIL::IdString portname) const; + bool output(RTLIL::IdString portname) const; + // access cell parameters bool hasParam(RTLIL::IdString paramname) const; void unsetParam(RTLIL::IdString paramname); |