Skip to content

Commit

Permalink
elab and binding
Browse files Browse the repository at this point in the history
  • Loading branch information
alaindargelas committed Sep 12, 2021
1 parent 3f3212b commit 313bd5b
Show file tree
Hide file tree
Showing 39 changed files with 8,947 additions and 6,368 deletions.
31 changes: 21 additions & 10 deletions src/DesignCompile/NetlistElaboration.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,13 @@
#include "Design/VObject.h"
#include "DesignCompile/CompileDesign.h"
#include "DesignCompile/UhdmWriter.h"

#include "ErrorReporting/Error.h"
#include "ErrorReporting/ErrorContainer.h"
#include "ErrorReporting/ErrorDefinition.h"
#include "ErrorReporting/Location.h"
#include "Library/Library.h"

#include "SourceCompile/CompilationUnit.h"
#include "SourceCompile/CompileSourceFile.h"
#include "SourceCompile/Compiler.h"
Expand Down Expand Up @@ -177,8 +179,15 @@ bool NetlistElaboration::elab_parameters_(ModuleInstance* instance,
}
param_assign* mod_assign = assign->getUhdmParamAssign();
isMultidimensional = assign->isMultidimensional();
const std::string& paramName =
assign->getFileContent()->SymName(assign->getParamId());

if (mod_assign) {
const any* rhs = mod_assign->Rhs();
expr* override = instance->getComplexValue(paramName);
if (override) {
rhs = override;
}
if (rhs && rhs->UhdmType() == uhdmoperation) {
operation* op = (operation*)rhs;
int opType = op->VpiOpType();
Expand All @@ -198,7 +207,10 @@ bool NetlistElaboration::elab_parameters_(ModuleInstance* instance,
if (opType == vpiAssignmentPatternOp) {
const any* lhs = pclone->Lhs();
any* rhs = (any*)pclone->Rhs();

if (override) {
rhs = UHDM::clone_tree(override, s, &listener);
rhs->VpiParent(pclone);
}
rhs = m_helper.expandPatternAssignment((expr*)lhs, (expr*)rhs, mod,
m_compileDesign, instance);
pclone->Rhs(rhs);
Expand All @@ -219,14 +231,13 @@ bool NetlistElaboration::elab_parameters_(ModuleInstance* instance,
inst_assign->VpiEndLineNo(mod_assign->VpiEndLineNo());
inst_assign->VpiEndColumnNo(mod_assign->VpiEndColumnNo());
inst_assign->Lhs((any*)mod_assign->Lhs());
const std::string& paramName =
assign->getFileContent()->SymName(assign->getParamId());
bool override = false;

bool overriden = false;
for (Parameter* tpm :
instance->getTypeParams()) { // for parameters that do not resolve to
// scalars (complex structs)
if (tpm->getName() == paramName) {
override = true;
overriden = true;
if (ModuleInstance* pinst = instance->getParent()) {
ModuleDefinition* pmod =
dynamic_cast<ModuleDefinition*>(pinst->getDefinition());
Expand Down Expand Up @@ -278,7 +289,7 @@ bool NetlistElaboration::elab_parameters_(ModuleInstance* instance,
}
}
}
if ((override == false) && (!isMultidimensional)) {
if ((overriden == false) && (!isMultidimensional)) {
Value* value = instance->getValue(paramName, m_exprBuilder);
if (value && value->isValid()) {
constant* c = s.MakeConstant();
Expand Down Expand Up @@ -310,10 +321,10 @@ bool NetlistElaboration::elab_parameters_(ModuleInstance* instance,
}
}

override = true;
overriden = true;
}
}
if (override == false) {
if (overriden == false) {
expr* exp = instance->getComplexValue(paramName);
if (exp) {
if (!isMultidimensional) {
Expand Down Expand Up @@ -343,10 +354,10 @@ bool NetlistElaboration::elab_parameters_(ModuleInstance* instance,
}
}

override = true;
overriden = true;
}
}
if (override == false) {
if (overriden == false) {
// Default
if (assign->getAssignId()) {
expr* rhs = (expr*)m_helper.compileExpression(
Expand Down
Loading

0 comments on commit 313bd5b

Please sign in to comment.