57 coreBlock_(processorBlock.shallowCopy()) {
95 for (
size_t i = 0; i < processorBlock.
packageCount(); i++) {
96 procPackages.insert(processorBlock.
package(i));
99 for (
auto packageStr : procPackages) {
113 const Path& targetBaseDir,
HDL targetLang)
const {
115 targetBaseDir / std::string(
"tb"), targetLang);
126 const int unusedBits = std::ceil(std::log2(imemWidthInMaus));
130 const int unusedBits = std::ceil(std::log2(imemWidthInMaus));
132 std::to_string(unusedBits);
137 "tb/imem_init.img",
true);
140 std::string accessTrace = std::string(
"core") +
142 "_imem_access_trace.dump";
151 {{SigT::READ_DATA, SigT::FETCHBLOCK},
152 {SigT::READ_WRITE_REQUEST, SigT::READ_REQUEST}});
155 coreImemPort.
portBySignal(SigT::ADDRESS), 0, unusedBits,
156 realAddrWidth - unusedBits);
159 imemBlock->memoryPort(), coreImemPort,
160 {{SigT::ADDRESS, SigT::ADDRESS},
161 {SigT::READ_DATA, SigT::FETCHBLOCK},
162 {SigT::READ_WRITE_REQUEST, SigT::READ_REQUEST}});
165 imemBlock->memoryPort()
166 .portBySignal(SigT::WRITE_BITMASK)
167 .setToStatic(StaticSignal::VCC);
168 imemBlock->memoryPort()
169 .portBySignal(SigT::WRITEMODE)
170 .setToStatic(StaticSignal::VCC);
171 imemBlock->memoryPort()
172 .portBySignal(SigT::WRITE_DATA)
173 .setToStatic(StaticSignal::GND);
174 coreImemPort.portBySignal(SigT::READ_REQUEST_READY)
175 .setToStatic(StaticSignal::GND);
191 if (!netlist().connect(dmemBlock->
memoryPort(), coreDmemPort)) {
194 "Could not connect two port groups together.");
199ProcessorWrapperBlock::addDataMemory2(
213 if (!netlist().connect(dmemBlock->
memoryPort(), coreDmemPort)) {
216 "Could not connect two port groups together.");
221ProcessorWrapperBlock::connectLockStatus(
224 coreBlock_->port(
"locked") !=
nullptr &&
225 "Could not found lock status port.");
226 if (!netlist().connect(*coreBlock_->port(
"locked"), topLockStatusPort)) {
229 "Could not connect \"locked\" signal to the toplevel");
238ProcessorWrapperBlock::handleUnconnectedPorts() {
239 for (
size_t i = 0; i < coreBlock_->portCount(); i++) {
245 netlist().connect(*topPort, port);
#define assert(condition)
#define THROW_EXCEPTION(exceptionType, message)
Exception wrapper macro that automatically includes file name, line number and function name where th...
static std::string toString(const T &source)
virtual size_t packageCount() const
void addSubBlock(BaseNetlistBlock *subBlock, const std::string &instanceName="")
NetlistPort * addPort(NetlistPort *port)
virtual size_t portGroupCount() const
virtual const std::string & package(size_t idx) const
virtual const NetlistPortGroup & portGroup(size_t index) const
virtual void write(const Path &targetBaseDir, HDL targetLang=VHDL) const override
virtual size_t portCount() const
void addPackage(const std::string &packageName)
virtual void writeSelf(const Path &targetBaseDir, HDL targetLang=VHDL) const
virtual const Netlist & netlist() const
const std::string name() const
const std::string fetchBlockAddressWidth() const
const std::string fetchBlockDataWidth() const
TCEString addressSpace() const
SignalGroup assignedSignalGroup() const
const NetlistPort & portBySignal(SignalType type) const
virtual NetlistPort * clone(bool asMirrored=false) const
bool hasStaticValue() const
std::string widthFormula() const
bool connect(const NetlistPort &port1, const NetlistPort &port2, int port1FirstBit, int port2FirstBit, int width=1)
Convenience class for output ports.
static NetlistPort * resetPort(Direction direction=IN)
static NetlistPort * clockPort(Direction direction=IN)
const std::string & coreEntityName() const
const TTAMachine::Machine & adf() const
const GlobalPackage & globalPackage() const
BaseNetlistBlock * coreBlock_
The target TTA processor.
virtual void write(const Path &targetBaseDir, HDL targetLang=VHDL) const override
const ProGeContext & context_
virtual ~ProcessorWrapperBlock()
void addInstructionMemory(const NetlistPortGroup &)
void addDataMemory2(const MemoryBusInterface &)
void handleUnconnectedPorts()
void addDataMemory(const MemoryBusInterface &)
void connectLockStatus(const NetlistPort &topPCInitPort)
ProcessorWrapperBlock()=delete
SignalGroupType type() const
const NetlistPortGroup & memoryPort() const
const NetlistPortGroup & memoryPort() const
void setAccessTraceFile(const std::string filename)
virtual ULongWord end() const
virtual AddressSpace * addressSpace() const
virtual ControlUnit * controlUnit() const
bool isRISCVMachine() const
@ BYTEMASKED_SRAM_PORT
Signal group type for one port SRAM having read and write capability and bitmask for writing with sep...
@ BITMASKED_SRAM_PORT
Signal group type for one port SRAM having read and write capability and bitmask for writing.
@ INSTRUCTION_LINE
Signal group type for serial TTA instruction bus.
HDL
HDLs supported by ProGe.