yosys-master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
ModIndex Struct Reference

#include <modtools.h>

+ Inheritance diagram for ModIndex:
+ Collaboration diagram for ModIndex:

Data Structures

struct  PortInfo
 
struct  SigBitInfo
 

Public Member Functions

void port_add (RTLIL::Cell *cell, RTLIL::IdString port, const RTLIL::SigSpec &sig)
 
void port_del (RTLIL::Cell *cell, RTLIL::IdString port, const RTLIL::SigSpec &sig)
 
const SigBitInfoinfo (RTLIL::SigBit bit)
 
void reload_module ()
 
virtual void notify_connect (RTLIL::Cell *cell, const RTLIL::IdString &port, const RTLIL::SigSpec &old_sig, RTLIL::SigSpec &sig) YS_OVERRIDE
 
virtual void notify_connect (RTLIL::Module *mod, const RTLIL::SigSig &)
 
virtual void notify_connect (RTLIL::Module *mod, const std::vector< RTLIL::SigSig > &)
 
virtual void notify_blackout (RTLIL::Module *mod)
 
 ModIndex (RTLIL::Module *_m)
 
 ~ModIndex ()
 
SigBitInfoquery (RTLIL::SigBit bit)
 
bool query_is_input (RTLIL::SigBit bit)
 
bool query_is_output (RTLIL::SigBit bit)
 
std::set< PortInfo > & query_ports (RTLIL::SigBit bit)
 
virtual void notify_module_add (RTLIL::Module *)
 
virtual void notify_module_del (RTLIL::Module *)
 
virtual void notify_connect (RTLIL::Module *, const std::vector< RTLIL::SigSig > &)
 

Data Fields

SigMap sigmap
 
RTLIL::Modulemodule
 
std::map< RTLIL::SigBit,
SigBitInfo
database
 
bool auto_reload_module
 

Detailed Description

Definition at line 29 of file modtools.h.

Constructor & Destructor Documentation

ModIndex::ModIndex ( RTLIL::Module _m)
inline

Definition at line 132 of file modtools.h.

132  : module(_m)
133  {
134  auto_reload_module = true;
135  module->monitors.insert(this);
136  }
bool auto_reload_module
Definition: modtools.h:58
std::set< RTLIL::Monitor * > monitors
Definition: rtlil.h:590
RTLIL::Module * module
Definition: modtools.h:56
ModIndex::~ModIndex ( )
inline

Definition at line 138 of file modtools.h.

139  {
140  module->monitors.erase(this);
141  }
std::set< RTLIL::Monitor * > monitors
Definition: rtlil.h:590
RTLIL::Module * module
Definition: modtools.h:56

Member Function Documentation

const SigBitInfo& ModIndex::info ( RTLIL::SigBit  bit)
inline

Definition at line 78 of file modtools.h.

79  {
80  return database[sigmap(bit)];
81  }
std::map< RTLIL::SigBit, SigBitInfo > database
Definition: modtools.h:57
SigMap sigmap
Definition: modtools.h:55

+ Here is the caller graph for this function:

virtual void ModIndex::notify_blackout ( RTLIL::Module mod)
inlinevirtual

Reimplemented from RTLIL::Monitor.

Definition at line 126 of file modtools.h.

127  {
128  log_assert(module == mod);
129  auto_reload_module = true;
130  }
bool auto_reload_module
Definition: modtools.h:58
RTLIL::Module * module
Definition: modtools.h:56
#define log_assert(_assert_expr_)
Definition: log.h:85
virtual void ModIndex::notify_connect ( RTLIL::Cell cell,
const RTLIL::IdString port,
const RTLIL::SigSpec old_sig,
RTLIL::SigSpec sig 
)
inlinevirtual

Reimplemented from RTLIL::Monitor.

Definition at line 105 of file modtools.h.

106  {
107  if (auto_reload_module)
108  reload_module();
109 
110  port_del(cell, port, old_sig);
111  port_add(cell, port, sig);
112  }
bool auto_reload_module
Definition: modtools.h:58
void port_add(RTLIL::Cell *cell, RTLIL::IdString port, const RTLIL::SigSpec &sig)
Definition: modtools.h:60
void port_del(RTLIL::Cell *cell, RTLIL::IdString port, const RTLIL::SigSpec &sig)
Definition: modtools.h:69
void reload_module()
Definition: modtools.h:83

+ Here is the call graph for this function:

virtual void ModIndex::notify_connect ( RTLIL::Module mod,
const RTLIL::SigSig  
)
inlinevirtual

Reimplemented from RTLIL::Monitor.

Definition at line 114 of file modtools.h.

115  {
116  log_assert(module == mod);
117  auto_reload_module = true;
118  }
bool auto_reload_module
Definition: modtools.h:58
RTLIL::Module * module
Definition: modtools.h:56
#define log_assert(_assert_expr_)
Definition: log.h:85
virtual void ModIndex::notify_connect ( RTLIL::Module mod,
const std::vector< RTLIL::SigSig > &   
)
inlinevirtual

Definition at line 120 of file modtools.h.

121  {
122  log_assert(module == mod);
123  auto_reload_module = true;
124  }
bool auto_reload_module
Definition: modtools.h:58
RTLIL::Module * module
Definition: modtools.h:56
#define log_assert(_assert_expr_)
Definition: log.h:85
virtual void RTLIL::Monitor::notify_connect ( RTLIL::Module ,
const std::vector< RTLIL::SigSig > &   
)
inlinevirtualinherited

Definition at line 497 of file rtlil.h.

497 { }
virtual void RTLIL::Monitor::notify_module_add ( RTLIL::Module )
inlinevirtualinherited

Reimplemented in TraceMonitor.

Definition at line 493 of file rtlil.h.

493 { }
virtual void RTLIL::Monitor::notify_module_del ( RTLIL::Module )
inlinevirtualinherited

Reimplemented in TraceMonitor.

Definition at line 494 of file rtlil.h.

494 { }
void ModIndex::port_add ( RTLIL::Cell cell,
RTLIL::IdString  port,
const RTLIL::SigSpec sig 
)
inline

Definition at line 60 of file modtools.h.

61  {
62  for (int i = 0; i < GetSize(sig); i++) {
63  RTLIL::SigBit bit = sigmap(sig[i]);
64  if (bit.wire)
65  database[bit].ports.insert(PortInfo(cell, port, i));
66  }
67  }
std::map< RTLIL::SigBit, SigBitInfo > database
Definition: modtools.h:57
RTLIL::Wire * wire
Definition: rtlil.h:907
SigMap sigmap
Definition: modtools.h:55
int GetSize(RTLIL::Wire *wire)
Definition: yosys.cc:334

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ModIndex::port_del ( RTLIL::Cell cell,
RTLIL::IdString  port,
const RTLIL::SigSpec sig 
)
inline

Definition at line 69 of file modtools.h.

70  {
71  for (int i = 0; i < GetSize(sig); i++) {
72  RTLIL::SigBit bit = sigmap(sig[i]);
73  if (bit.wire)
74  database[bit].ports.erase(PortInfo(cell, port, i));
75  }
76  }
std::map< RTLIL::SigBit, SigBitInfo > database
Definition: modtools.h:57
RTLIL::Wire * wire
Definition: rtlil.h:907
SigMap sigmap
Definition: modtools.h:55
int GetSize(RTLIL::Wire *wire)
Definition: yosys.cc:334

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

SigBitInfo* ModIndex::query ( RTLIL::SigBit  bit)
inline

Definition at line 143 of file modtools.h.

144  {
145  if (auto_reload_module)
146  reload_module();
147 
148  auto it = database.find(sigmap(bit));
149  if (it == database.end())
150  return nullptr;
151  else
152  return &it->second;
153  }
std::map< RTLIL::SigBit, SigBitInfo > database
Definition: modtools.h:57
bool auto_reload_module
Definition: modtools.h:58
SigMap sigmap
Definition: modtools.h:55
void reload_module()
Definition: modtools.h:83

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

bool ModIndex::query_is_input ( RTLIL::SigBit  bit)
inline

Definition at line 155 of file modtools.h.

156  {
157  const SigBitInfo *info = query(bit);
158  if (info == nullptr)
159  return false;
160  return info->is_input;
161  }
const SigBitInfo & info(RTLIL::SigBit bit)
Definition: modtools.h:78
SigBitInfo * query(RTLIL::SigBit bit)
Definition: modtools.h:143

+ Here is the call graph for this function:

bool ModIndex::query_is_output ( RTLIL::SigBit  bit)
inline

Definition at line 163 of file modtools.h.

164  {
165  const SigBitInfo *info = query(bit);
166  if (info == nullptr)
167  return false;
168  return info->is_output;
169  }
const SigBitInfo & info(RTLIL::SigBit bit)
Definition: modtools.h:78
SigBitInfo * query(RTLIL::SigBit bit)
Definition: modtools.h:143

+ Here is the call graph for this function:

std::set<PortInfo>& ModIndex::query_ports ( RTLIL::SigBit  bit)
inline

Definition at line 171 of file modtools.h.

172  {
173  static std::set<PortInfo> empty_result_set;
174  SigBitInfo *info = query(bit);
175  if (info == nullptr)
176  return empty_result_set;
177  return info->ports;
178  }
const SigBitInfo & info(RTLIL::SigBit bit)
Definition: modtools.h:78
SigBitInfo * query(RTLIL::SigBit bit)
Definition: modtools.h:143

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ModIndex::reload_module ( )
inline

Definition at line 83 of file modtools.h.

84  {
85  sigmap.clear();
86  sigmap.set(module);
87 
88  database.clear();
89  for (auto wire : module->wires())
90  if (wire->port_input || wire->port_output)
91  for (int i = 0; i < GetSize(wire); i++) {
92  RTLIL::SigBit bit = sigmap(RTLIL::SigBit(wire, i));
93  if (bit.wire && wire->port_input)
94  database[bit].is_input = true;
95  if (bit.wire && wire->port_output)
96  database[bit].is_output = true;
97  }
98  for (auto cell : module->cells())
99  for (auto &conn : cell->connections())
100  port_add(cell, conn.first, conn.second);
101 
102  auto_reload_module = false;
103  }
std::map< RTLIL::SigBit, SigBitInfo > database
Definition: modtools.h:57
RTLIL::Wire * wire
Definition: rtlil.h:907
bool auto_reload_module
Definition: modtools.h:58
void clear()
Definition: sigtools.h:263
void port_add(RTLIL::Cell *cell, RTLIL::IdString port, const RTLIL::SigSpec &sig)
Definition: modtools.h:60
bool port_input
Definition: rtlil.h:827
RTLIL::ObjRange< RTLIL::Wire * > wires()
Definition: rtlil.h:640
bool port_output
Definition: rtlil.h:827
SigMap sigmap
Definition: modtools.h:55
void set(RTLIL::Module *module)
Definition: sigtools.h:273
RTLIL::Module * module
Definition: modtools.h:56
int GetSize(RTLIL::Wire *wire)
Definition: yosys.cc:334
RTLIL::ObjRange< RTLIL::Cell * > cells()
Definition: rtlil.h:641

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Field Documentation

bool ModIndex::auto_reload_module

Definition at line 58 of file modtools.h.

std::map<RTLIL::SigBit, SigBitInfo> ModIndex::database

Definition at line 57 of file modtools.h.

RTLIL::Module* ModIndex::module

Definition at line 56 of file modtools.h.

SigMap ModIndex::sigmap

Definition at line 55 of file modtools.h.


The documentation for this struct was generated from the following file: