OpenASIP  2.0
Public Member Functions | Protected Member Functions | Protected Attributes | Static Private Attributes | List of all members
XilinxBlockRamGenerator Class Reference

#include <XilinxBlockRamGenerator.hh>

Inheritance diagram for XilinxBlockRamGenerator:
Inheritance graph
Collaboration diagram for XilinxBlockRamGenerator:
Collaboration graph

Public Member Functions

 XilinxBlockRamGenerator (int memMauWidth, int widthInMaus, int addrWidth, int portBDataWidth, int portBAddrWidth, const PlatformIntegrator *integrator, std::ostream &warningStream, std::ostream &errorStream, bool connectToArbiter=false, ProGe::NetlistBlock *almaifBlocks=nullptr, TCEString signalPrefix="", bool overrideAddrWidth=false, bool singleMemoryBlock=false)
 
virtual ~XilinxBlockRamGenerator ()
 
virtual bool generatesComponentHdlFile () const
 
virtual std::vector< TCEStringgenerateComponentFile (TCEString outputPath)
 
virtual void addMemory (const ProGe::NetlistBlock &ttaCore, ProGe::NetlistBlock &integratorBlock, int memIndex, int coreId)
 
virtual bool isCompatible (const ProGe::NetlistBlock &ttaCore, int coreId, std::vector< TCEString > &reasons) const
 
- Public Member Functions inherited from MemoryGenerator
 MemoryGenerator (int memMauWidth, int widthInMaus, int addrWidth, TCEString initFile, const PlatformIntegrator *integrator, std::ostream &warningStream, std::ostream &errorStream)
 
virtual ~MemoryGenerator ()
 
int memoryTotalWidth () const
 
int memoryMauSize () const
 
int memoryWidthInMaus () const
 
int memoryAddrWidth () const
 
TCEString initializationFile () const
 
void addLsu (TTAMachine::FunctionUnit &lsuArch, std::vector< std::string > lsuPorts)
 

Protected Member Functions

virtual TCEString moduleName () const
 
void addPorts (std::string prefix, int addrWidth, int dataWidth)
 
virtual TCEString instanceName (int coreId, int) const
 
TCEString almaifPortName (const TCEString &portBaseName)
 
- Protected Member Functions inherited from MemoryGenerator
virtual bool checkFuPort (const std::string fuPort, std::vector< TCEString > &reasons) const
 
virtual void connectPorts (ProGe::NetlistBlock &netlistBlock, const ProGe::NetlistPort &memPort, const ProGe::NetlistPort &corePort, bool inverted, int coreId)
 
virtual MemoryGenerator::BlockPair createMemoryNetlistBlock (ProGe::NetlistBlock &integratorBlock, int memIndex, int coreId)
 
const PlatformIntegratorplatformIntegrator () const
 
std::ostream & warningStream ()
 
std::ostream & errorStream ()
 
int portCount () const
 
const HDLPortport (int index) const
 
const HDLPortportByKeyName (TCEString name) const
 
TCEString portKeyName (const HDLPort *port) const
 
void addPort (const TCEString &name, HDLPort *port)
 
int parameterCount () const
 
const ProGe::Parameterparameter (int index) const
 
void addParameter (const ProGe::Parameter &add)
 
TCEString ttaCoreName () const
 
TCEString memoryIndexString (int coreId, int memIndex) const
 
TCEString templatePath () const
 
void instantiateTemplate (const TCEString &inFile, const TCEString &outFile, const TCEString &entity) const
 
bool hasLSUArchitecture () const
 
const TTAMachine::FunctionUnitlsuArchitecture () const
 
TCEString corePortName (const TCEString &portBaseName, int coreId) const
 

Protected Attributes

const bool connectToArbiter_
 
ProGe::NetlistBlockalmaifBlock_
 
TCEString signalPrefix_
 
const bool overrideAddrWidth_
 
const bool singleMemoryBlock_
 

Static Private Attributes

static const TCEString DP_FILE = "xilinx_dp_blockram.vhdl"
 
static const TCEString SP_FILE = "xilinx_blockram.vhdl"
 

Additional Inherited Members

- Protected Types inherited from MemoryGenerator
typedef std::multimap< TCEString, HDLPort * > PortMap
 
typedef std::pair< ProGe::NetlistBlock *, ProGe::VirtualNetlistBlock * > BlockPair
 

Detailed Description

Definition at line 41 of file XilinxBlockRamGenerator.hh.

Constructor & Destructor Documentation

◆ XilinxBlockRamGenerator()

XilinxBlockRamGenerator::XilinxBlockRamGenerator ( int  memMauWidth,
int  widthInMaus,
int  addrWidth,
int  portBDataWidth,
int  portBAddrWidth,
const PlatformIntegrator integrator,
std::ostream &  warningStream,
std::ostream &  errorStream,
bool  connectToArbiter = false,
ProGe::NetlistBlock almaifBlocks = nullptr,
TCEString  signalPrefix = "",
bool  overrideAddrWidth = false,
bool  singleMemoryBlock = false 
)

Definition at line 47 of file XilinxBlockRamGenerator.cc.

54  memMauWidth, widthInMaus, addrWidth, "", integrator, warningStream,
55  errorStream),
56  connectToArbiter_(connectToArbiter),
57  almaifBlock_(almaifBlock),
58  signalPrefix_(signalPrefix),
59  overrideAddrWidth_(overrideAddrWidth),
60  singleMemoryBlock_(singleMemoryBlock) {
61  assert (!connectToArbiter || almaifBlock != nullptr);
62 
63  ProGe::Parameter dataw = {"dataw_g", "integer",
65  ProGe::Parameter addrw = {"addrw_g", "integer",
67 
68 
69  ProGe::Parameter second_dataw = {"dataw_b_g", "integer",
70  Conversion::toString(portBDataWidth)};
71  ProGe::Parameter second_addrw = {"addrw_b_g", "integer",
72  Conversion::toString(portBAddrWidth)};
73 
74  if (overrideAddrWidth) {
75  addrw.setValue("local_mem_addrw_g");
76  second_addrw.setValue("local_mem_addrw_g");
77  }
78 
79  addParameter(dataw);
80  addParameter(addrw);
81 
82  if (connectToArbiter_) {
83  addParameter(second_dataw);
84  addParameter(second_addrw);
85  }
86 
87  addPort("clk", new HDLPort("clk", "1", ProGe::BIT, ProGe::IN, false, 1));
88  addPort("rstx", new HDLPort("rstx", "1", ProGe::BIT, ProGe::IN, false, 1));
89  if (connectToArbiter) {
91  addPorts("b_", portBAddrWidth, portBDataWidth);
92  } else {
94  }
95 }

References MemoryGenerator::addParameter(), MemoryGenerator::addPort(), addPorts(), assert, ProGe::BIT, connectToArbiter_, ProGe::IN, MemoryGenerator::memoryAddrWidth(), MemoryGenerator::memoryTotalWidth(), ProGe::Parameter::setValue(), and Conversion::toString().

Here is the call graph for this function:

◆ ~XilinxBlockRamGenerator()

XilinxBlockRamGenerator::~XilinxBlockRamGenerator ( )
virtual

Definition at line 97 of file XilinxBlockRamGenerator.cc.

97  {
98 }

Member Function Documentation

◆ addMemory()

void XilinxBlockRamGenerator::addMemory ( const ProGe::NetlistBlock ttaCore,
ProGe::NetlistBlock integratorBlock,
int  memIndex,
int  coreId 
)
virtual

Reimplemented from MemoryGenerator.

Definition at line 149 of file XilinxBlockRamGenerator.cc.

152  {
153 
154  // Do not instantiate multiple physical memories for shared AS when shared
155  if (coreId > 0 && connectToArbiter_ && singleMemoryBlock_) {
156  return;
157  }
158  BlockPair blocks =
159  createMemoryNetlistBlock(integratorBlock, memIndex, coreId);
160  ProGe::NetlistBlock* mem = blocks.first;
161  ProGe::VirtualNetlistBlock* virt = blocks.second;
162  assert(mem != NULL);
163  assert(virt != NULL);
164 
165  if (virt->portCount() > 0) {
166  integratorBlock.addSubBlock(virt);
167  }
168 
169  for (int i = 0; i < portCount(); i++) {
170  const HDLPort* hdlPort = port(i);
171  ProGe::NetlistPort* memPort = mem->port(hdlPort->name());
172  if (memPort == NULL) {
173  memPort = virt->port(hdlPort->name());
174  if (memPort == NULL) {
175  TCEString msg = "Port ";
176  msg << hdlPort->name() << " not found from netlist block";
177  throw InvalidData(__FILE__, __LINE__, "MemoryGenerator", msg);
178  }
179  }
180 
181 
182  TCEString portName = corePortName(portKeyName(hdlPort), coreId);
183  const ProGe::NetlistPort* corePort = NULL;
184  // clock and reset must be connected to new toplevel ports
185  if (portName == platformIntegrator()->clockPort()->name()) {
186  corePort = platformIntegrator()->clockPort();
187  } else if (portName == platformIntegrator()->resetPort()->name()) {
188  corePort = platformIntegrator()->resetPort();
189  } else {
190  if (connectToArbiter_) {
191  portName = almaifPortName(portKeyName(hdlPort));
192  corePort = almaifBlock_->port(portName);
193  } else {
194  corePort = ttaCore.port(portName);
195  }
196  }
197  if (corePort == NULL) {
198  TCEString msg = "Port ";
199  msg << portName << " not found from";
200  if (connectToArbiter_) {
201  msg << " AlmaIF ";
202  } else {
203  msg << " TTA core ";
204  }
205  msg << "netlist block";
206  throw InvalidData(__FILE__, __LINE__, "MemoryGenerator", msg);
207  }
208 
210  corePort->realWidth() != memPort->realWidth()) {
211  // Assume a private memory, split wide integrator signals accross
212  // multiple cores
213  int portWidth = memPort->realWidth();
214  // This assumes no ports are inverted
215  integratorBlock.netlist().connect(*memPort, *corePort,
216  0, portWidth*coreId,
217  portWidth);
218  } else {
219  connectPorts(
220  integratorBlock, *corePort, *memPort,
221  hdlPort->needsInversion(), coreId);
222  }
223  }
224 }

References ProGe::NetlistBlock::addSubBlock(), almaifBlock_, almaifPortName(), assert, PlatformIntegrator::clockPort(), ProGe::Netlist::connect(), MemoryGenerator::connectPorts(), connectToArbiter_, MemoryGenerator::corePortName(), MemoryGenerator::createMemoryNetlistBlock(), HDLPort::name(), HDLPort::needsInversion(), ProGe::NetlistBlock::netlist(), overrideAddrWidth_, MemoryGenerator::platformIntegrator(), ProGe::NetlistBlock::port(), MemoryGenerator::port(), ProGe::NetlistBlock::portCount(), MemoryGenerator::portCount(), MemoryGenerator::portKeyName(), ProGe::NetlistPort::realWidth(), PlatformIntegrator::resetPort(), and singleMemoryBlock_.

Here is the call graph for this function:

◆ addPorts()

void XilinxBlockRamGenerator::addPorts ( std::string  prefix,
int  addrWidth,
int  dataWidth 
)
protected

Definition at line 106 of file XilinxBlockRamGenerator.cc.

107  {
108  std::string datawGeneric = "dataw_g";
109  std::string addrwGeneric = "addrw_g";
110  if (pfx == "b_") {
111  datawGeneric = "dataw_b_g";
112  addrwGeneric = "addrw_b_g";
113  }
116  const ProGe::Direction IN = ProGe::IN;
118  const bool noInvert = false;
119  addPort(pfx + "avalid_out",
120  new HDLPort(pfx + "avalid_in", "1", BIT, IN, noInvert, 1));
121  addPort(pfx + "aready_in",
122  new HDLPort(pfx + "aready_out", "1", BIT, OUT, noInvert, 1));
123  if (!overrideAddrWidth_) {
124  addPort(pfx + "aaddr_out",
125  new HDLPort(pfx + "aaddr_in", addrwGeneric, VEC, IN, noInvert,
126  addrWidth));
127  } else {
128  addPort(pfx + "aaddr_out",
129  new HDLPort(pfx + "aaddr_in", addrwGeneric, VEC, IN, noInvert));
130  }
131  addPort(pfx + "awren_out",
132  new HDLPort(pfx + "awren_in", "1", BIT, IN, noInvert, 1));
133  addPort(pfx + "astrb_out",
134  new HDLPort(pfx + "astrb_in", "(" + datawGeneric + "+7)/8", VEC, IN,
135  noInvert, (dataWidth+7)/8));
136  addPort(pfx + "adata_out",
137  new HDLPort(pfx + "adata_in", datawGeneric, VEC, IN, noInvert,
138  dataWidth));
139  addPort(pfx + "rvalid_in",
140  new HDLPort(pfx + "rvalid_out", "1", BIT, ProGe::OUT, noInvert, 1));
141  addPort(pfx + "rready_out",
142  new HDLPort(pfx + "rready_in", "1", BIT, IN, noInvert, 1));
143  addPort(pfx + "rdata_in",
144  new HDLPort(pfx + "rdata_out", datawGeneric, VEC, OUT, noInvert,
145  dataWidth));
146 }

References MemoryGenerator::addPort(), ProGe::BIT, ProGe::BIT_VECTOR, HDB::IN, ProGe::IN, HDB::OUT, ProGe::OUT, and overrideAddrWidth_.

Referenced by XilinxBlockRamGenerator().

Here is the call graph for this function:

◆ almaifPortName()

TCEString XilinxBlockRamGenerator::almaifPortName ( const TCEString portBaseName)
protected

Definition at line 263 of file XilinxBlockRamGenerator.cc.

263  {
264  // clock and reset port names are global
265  if (portBaseName == platformIntegrator()->clockPort()->name() ||
266  portBaseName == platformIntegrator()->resetPort()->name()) {
267  return portBaseName;
268  }
269 
270  return signalPrefix_ + "_" + portBaseName;
271 }

References MemoryGenerator::platformIntegrator(), and signalPrefix_.

Referenced by addMemory().

Here is the call graph for this function:

◆ generateComponentFile()

std::vector< TCEString > XilinxBlockRamGenerator::generateComponentFile ( TCEString  outputPath)
virtual

Implements MemoryGenerator.

Definition at line 227 of file XilinxBlockRamGenerator.cc.

227  {
228  TCEString inputFile =
231  TCEString outputFile;
232  outputFile << outputPath << FileSystem::DIRECTORY_SEPARATOR
233  << moduleName() << ".vhdl";
234 
235  FileSystem::copy(inputFile, outputPath);
236  std::vector<TCEString> files;
237  files.push_back(outputFile);
238  return files;
239 }

References connectToArbiter_, FileSystem::copy(), FileSystem::DIRECTORY_SEPARATOR, DP_FILE, moduleName(), SP_FILE, and MemoryGenerator::templatePath().

Here is the call graph for this function:

◆ generatesComponentHdlFile()

bool XilinxBlockRamGenerator::generatesComponentHdlFile ( ) const
virtual

Implements MemoryGenerator.

Definition at line 101 of file XilinxBlockRamGenerator.cc.

101  {
102  return true;
103 }

◆ instanceName()

TCEString XilinxBlockRamGenerator::instanceName ( int  coreId,
int   
) const
protectedvirtual

Implements MemoryGenerator.

Definition at line 253 of file XilinxBlockRamGenerator.cc.

253  {
254  TCEString iname = "onchip_mem_";
255 
256  if (coreId != -1) {
257  iname << "core" << coreId << "_";
258  }
259  return iname << signalPrefix_;
260 }

References signalPrefix_.

◆ isCompatible()

bool XilinxBlockRamGenerator::isCompatible ( const ProGe::NetlistBlock ttaCore,
int  coreId,
std::vector< TCEString > &  reasons 
) const
virtual

Tests that the memory generator is compatible with TTA core. If incompatible, reasons are appended to the reasons vector

Parameters
ttaCoreTTA toplevel
coreIdThe core ID number
reasonsReasons why incompatible
Returns
is memory generator compatible with the TTA core

Reimplemented from MemoryGenerator.

Definition at line 274 of file XilinxBlockRamGenerator.cc.

275  {
276  if (connectToArbiter_) {
277  // TODO: Actually check almaifBlock_ ports?
278  return true;
279  } else {
280  return MemoryGenerator::isCompatible(ttaCore, coreId, reasons);
281  }
282 }

References connectToArbiter_, and MemoryGenerator::isCompatible().

Here is the call graph for this function:

◆ moduleName()

TCEString XilinxBlockRamGenerator::moduleName ( ) const
protectedvirtual

Implements MemoryGenerator.

Definition at line 243 of file XilinxBlockRamGenerator.cc.

243  {
244  TCEString name = "xilinx_";
245  if (connectToArbiter_)
246  name += "dp_";
247  name += "blockram";
248  return name;
249 }

References connectToArbiter_.

Referenced by generateComponentFile().

Member Data Documentation

◆ almaifBlock_

ProGe::NetlistBlock* XilinxBlockRamGenerator::almaifBlock_
protected

Definition at line 82 of file XilinxBlockRamGenerator.hh.

Referenced by addMemory().

◆ connectToArbiter_

const bool XilinxBlockRamGenerator::connectToArbiter_
protected

◆ DP_FILE

const TCEString XilinxBlockRamGenerator::DP_FILE = "xilinx_dp_blockram.vhdl"
staticprivate

Definition at line 89 of file XilinxBlockRamGenerator.hh.

Referenced by generateComponentFile().

◆ overrideAddrWidth_

const bool XilinxBlockRamGenerator::overrideAddrWidth_
protected

Definition at line 84 of file XilinxBlockRamGenerator.hh.

Referenced by addMemory(), and addPorts().

◆ signalPrefix_

TCEString XilinxBlockRamGenerator::signalPrefix_
protected

Definition at line 83 of file XilinxBlockRamGenerator.hh.

Referenced by almaifPortName(), and instanceName().

◆ singleMemoryBlock_

const bool XilinxBlockRamGenerator::singleMemoryBlock_
protected

Definition at line 85 of file XilinxBlockRamGenerator.hh.

Referenced by addMemory().

◆ SP_FILE

const TCEString XilinxBlockRamGenerator::SP_FILE = "xilinx_blockram.vhdl"
staticprivate

Definition at line 90 of file XilinxBlockRamGenerator.hh.

Referenced by generateComponentFile().


The documentation for this class was generated from the following files:
MemoryGenerator::platformIntegrator
const PlatformIntegrator * platformIntegrator() const
Definition: MemoryGenerator.cc:225
ProGe::NetlistBlock::netlist
virtual const Netlist & netlist() const
Definition: BaseNetlistBlock.cc:348
MemoryGenerator::port
const HDLPort * port(int index) const
Definition: MemoryGenerator.cc:249
PlatformIntegrator::clockPort
ProGe::NetlistPort * clockPort() const
Definition: PlatformIntegrator.cc:692
XilinxBlockRamGenerator::moduleName
virtual TCEString moduleName() const
Definition: XilinxBlockRamGenerator.cc:243
MemoryGenerator::createMemoryNetlistBlock
virtual MemoryGenerator::BlockPair createMemoryNetlistBlock(ProGe::NetlistBlock &integratorBlock, int memIndex, int coreId)
Definition: MemoryGenerator.cc:163
ProGe::NetlistBlock
Definition: NetlistBlock.hh:61
ProGe::Parameter::setValue
void setValue(const TCEString &value)
Definition: Parameter.cc:128
MemoryGenerator::addPort
void addPort(const TCEString &name, HDLPort *port)
Definition: MemoryGenerator.cc:294
HDLPort
Definition: PlatformIntegrator/HDLPort.hh:48
ProGe::BIT_VECTOR
@ BIT_VECTOR
Several bits.
Definition: ProGeTypes.hh:48
MemoryGenerator::MemoryGenerator
MemoryGenerator(int memMauWidth, int widthInMaus, int addrWidth, TCEString initFile, const PlatformIntegrator *integrator, std::ostream &warningStream, std::ostream &errorStream)
Definition: MemoryGenerator.cc:59
XilinxBlockRamGenerator::connectToArbiter_
const bool connectToArbiter_
Definition: XilinxBlockRamGenerator.hh:81
XilinxBlockRamGenerator::almaifPortName
TCEString almaifPortName(const TCEString &portBaseName)
Definition: XilinxBlockRamGenerator.cc:263
MemoryGenerator::templatePath
TCEString templatePath() const
Definition: MemoryGenerator.cc:325
Conversion::toString
static std::string toString(const T &source)
ProGe::NetlistBlock::portCount
virtual size_t portCount() const
Definition: BaseNetlistBlock.cc:248
ProGe::Netlist::connect
bool connect(const NetlistPort &port1, const NetlistPort &port2, int port1FirstBit, int port2FirstBit, int width=1)
Definition: Netlist.cc:83
assert
#define assert(condition)
Definition: Application.hh:86
XilinxBlockRamGenerator::almaifBlock_
ProGe::NetlistBlock * almaifBlock_
Definition: XilinxBlockRamGenerator.hh:82
XilinxBlockRamGenerator::addPorts
void addPorts(std::string prefix, int addrWidth, int dataWidth)
Definition: XilinxBlockRamGenerator.cc:106
XilinxBlockRamGenerator::SP_FILE
static const TCEString SP_FILE
Definition: XilinxBlockRamGenerator.hh:90
InvalidData
Definition: Exception.hh:149
PlatformIntegrator::resetPort
ProGe::NetlistPort * resetPort() const
Definition: PlatformIntegrator.cc:704
MemoryGenerator::isCompatible
virtual bool isCompatible(const ProGe::NetlistBlock &ttaCore, int coreId, std::vector< TCEString > &reasons) const
Definition: MemoryGenerator.cc:82
ProGe::Parameter
Definition: Parameter.hh:62
FileSystem::copy
static void copy(const std::string &source, const std::string &target)
Definition: FileSystem.cc:524
HDLPort::name
TCEString name() const
Definition: HDLPort.cc:87
ProGe::VirtualNetlistBlock
Definition: VirtualNetlistBlock.hh:52
ProGe::BIT
@ BIT
One bit.
Definition: ProGeTypes.hh:47
XilinxBlockRamGenerator::singleMemoryBlock_
const bool singleMemoryBlock_
Definition: XilinxBlockRamGenerator.hh:85
MemoryGenerator::BlockPair
std::pair< ProGe::NetlistBlock *, ProGe::VirtualNetlistBlock * > BlockPair
Definition: MemoryGenerator.hh:148
MemoryGenerator::warningStream
std::ostream & warningStream()
Definition: MemoryGenerator.cc:231
FileSystem::DIRECTORY_SEPARATOR
static const std::string DIRECTORY_SEPARATOR
Definition: FileSystem.hh:189
ProGe::OUT
@ OUT
Output port.
Definition: ProGeTypes.hh:54
XilinxBlockRamGenerator::overrideAddrWidth_
const bool overrideAddrWidth_
Definition: XilinxBlockRamGenerator.hh:84
XilinxBlockRamGenerator::DP_FILE
static const TCEString DP_FILE
Definition: XilinxBlockRamGenerator.hh:89
ProGe::NetlistPort::realWidth
int realWidth() const
Definition: NetlistPort.cc:348
MemoryGenerator::corePortName
TCEString corePortName(const TCEString &portBaseName, int coreId) const
Definition: MemoryGenerator.cc:356
MemoryGenerator::connectPorts
virtual void connectPorts(ProGe::NetlistBlock &netlistBlock, const ProGe::NetlistPort &memPort, const ProGe::NetlistPort &corePort, bool inverted, int coreId)
Definition: MemoryGenerator.cc:392
ProGe::NetlistBlock::addSubBlock
void addSubBlock(BaseNetlistBlock *subBlock, const std::string &instanceName="")
Definition: BaseNetlistBlock.cc:405
MemoryGenerator::portCount
int portCount() const
Definition: MemoryGenerator.cc:243
ProGe::DataType
DataType
Data types of hardware ports.
Definition: ProGeTypes.hh:46
TCEString
Definition: TCEString.hh:53
MemoryGenerator::addParameter
void addParameter(const ProGe::Parameter &add)
Definition: MemoryGenerator.cc:313
HDB::IN
@ IN
Input port.
Definition: HDBTypes.hh:41
ProGe::NetlistPort
Definition: NetlistPort.hh:70
MemoryGenerator::portKeyName
TCEString portKeyName(const HDLPort *port) const
Definition: MemoryGenerator.cc:275
MemoryGenerator::errorStream
std::ostream & errorStream()
Definition: MemoryGenerator.cc:237
MemoryGenerator::memoryTotalWidth
int memoryTotalWidth() const
Definition: MemoryGenerator.cc:193
MemoryGenerator::memoryAddrWidth
int memoryAddrWidth() const
Definition: MemoryGenerator.cc:212
ProGe::Direction
Direction
Direction of the port.
Definition: ProGeTypes.hh:52
ProGe::NetlistBlock::port
virtual NetlistPort * port(const std::string &portName, bool partialMatch=true)
Definition: NetlistBlock.cc:97
ProGe::IN
@ IN
Input port.
Definition: ProGeTypes.hh:53
HDB::OUT
@ OUT
Output port.
Definition: HDBTypes.hh:42
XilinxBlockRamGenerator::signalPrefix_
TCEString signalPrefix_
Definition: XilinxBlockRamGenerator.hh:83
HDLPort::needsInversion
bool needsInversion() const
Definition: HDLPort.cc:122