X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/3fb762e7042d9b4a1cf78556ad9ed7f117cc53ba..HEAD:/AbstractInterface.cpp?ds=sidebyside diff --git a/AbstractInterface.cpp b/AbstractInterface.cpp index d040598..83aa4c3 100644 --- a/AbstractInterface.cpp +++ b/AbstractInterface.cpp @@ -2,6 +2,7 @@ #include "BlockParameterPort.h" #include "AbstractBlock.h" #include "Parameters.h" +#include "Graph.h" AbstractInterface::AbstractInterface(AbstractBlock* _owner) { @@ -13,8 +14,8 @@ AbstractInterface::AbstractInterface(AbstractBlock* _owner) { type = Boolean; endianess = LittleEndian; associatedIface = NULL; - clkIface = ""; - clkIfaceType = 0; + clkIfaceName = ""; + clkIfaceType = NoName; } @@ -28,8 +29,8 @@ AbstractInterface::AbstractInterface(AbstractBlock* _owner, const QString& _name type = typeFromString(_type); endianess = _endianess; associatedIface = NULL; - clkIface = ""; - clkIfaceType = 0; + clkIfaceName = ""; + clkIfaceType = NoName; } AbstractInterface::AbstractInterface(AbstractInterface* other) { @@ -41,7 +42,7 @@ AbstractInterface::AbstractInterface(AbstractInterface* other) { purpose = other->purpose; endianess = LittleEndian; associatedIface = NULL; - clkIface = other->clkIface; + clkIfaceName = other->clkIfaceName; clkIfaceType = other->clkIfaceType; } @@ -192,36 +193,6 @@ QString AbstractInterface::getDirectionString() { return str; } -double AbstractInterface::getDoubleWidth() throw(QException) { - - static QString fctName = "AbstractInterface::getDoubleWidth()"; - #ifdef DEBUG_FCTNAME - cout << "call to " << qPrintable(fctName) << endl; - #endif - - /* - cout << "start AbstractInterface::getDoubleWidth()" << endl; - bool ok; - double width = getWidth().toDouble(&ok); - - if(!ok){ - ArithmeticEvaluator *evaluator = new ArithmeticEvaluator; - cout << "evaluator created!" << endl; - evaluator->setExpression(getWidth()); - cout << "expression defined!" << endl; - foreach(BlockParameter *param, getOwner()->getParameters()){ - evaluator->setVariableValue(param->getName(), param->getIntValue()); - cout << "param : " << param->getName().toStdString() << " evaluated!" << endl; - } - width = evaluator->evaluate(); - cout << "expression evaluated succefully!" << endl; - } - cout << "real width : " << width << endl; - return width; - */ - - return 1.0; -} void AbstractInterface::setPurpose(int _purpose) { if ((_purpose>=Data) && (_purpose <= Wishbone)) { @@ -245,52 +216,38 @@ bool AbstractInterface::setAssociatedIface(AbstractInterface* iface) { AbstractInterface* AbstractInterface::getClockIface() { if (clkIfaceType == ClockName) { - return owner->getIfaceFromName(clkIface); + return owner->getIfaceFromName(clkIfaceName); } return NULL; } -bool AbstractInterface::setClockIface(QString name) { - /* 2 cases : - * - this is a Data interface - * - this is a Clock output (from a clkrstgen) - * - * iface must correspond to an existing clock interface name - * or a user parameter prepend with a $. - */ - if ((purpose == Data) || ((purpose == Clock) && (direction == Output))) { - if (name.at(0) == '$') { - name.remove(0,1); - QList params = owner->getUserParameters(); - foreach(BlockParameter* p, params) { - if (p->getName() == name) { - clkIface = name; - clkIfaceType = ParameterName; - return true; - } - } - // error case: cannot found the input clock - return false; + +double AbstractInterface::getClockFrequency() throw(Exception) { + + int idClock = -1; + + if (clkIfaceType == ParameterName) { + BlockParameter* param = owner->getParameterFromName(clkIfaceName); + if (!param->isUserParameter()) throw(Exception(IFACE_INVALID_CLKFREQ,this)); + bool ok; + double freq = param->getDoubleValue(&ok); + if (!ok) throw(Exception(IFACE_INVALID_CLKFREQ,this)); + return freq; + } + else { + try { + idClock = getClockDomain(); } - else { - QList clocks = owner->getInterfaces(Input, Clock); - foreach(AbstractInterface* iface, clocks) { - if (iface->getName() == name) { - clkIface = name; - clkIfaceType = ClockName; - return true; - } - } - // error case: cannot found the user paramter - return false; + catch(Exception e) { + throw(e); } + return owner->getGraph()->getClock(idClock); } - clkIface = ""; - clkIfaceType = NoName; - return true; + return 0.0; } + int AbstractInterface::getIntDirection(QString str) { if(str == "input") return Input; if(str == "output") return Output; @@ -354,7 +311,10 @@ QString AbstractInterface::toVHDL(IfaceVHDLContext context, int flags) throw(Exc //cout << "iface " << qPrintable(name) << " must be evaluated to vhdl :" << qPrintable(width) << " with type = " << qPrintable(getTypeString()) << endl; if (context == Instance) { - if (direction == Output) { + if (direction == Input) { + ret = owner->getName()+"_"+name; + } + else if (direction == Output) { ret = "from_"+owner->getName()+"_"+name; } else if (direction == InOut) {