X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/6a0ffdb10d7344d99e04c5518fca2b8295df94be..bc5d59217a24b25c1b913bec4a41dd026d02720c:/AbstractInterface.cpp diff --git a/AbstractInterface.cpp b/AbstractInterface.cpp index 03a1a98..3fdd87a 100644 --- a/AbstractInterface.cpp +++ b/AbstractInterface.cpp @@ -2,10 +2,11 @@ #include "BlockParameterPort.h" #include "AbstractBlock.h" #include "Parameters.h" +#include "Graph.h" AbstractInterface::AbstractInterface(AbstractBlock* _owner) { - owner = _owner; + owner = _owner; name = ""; width = "1"; direction = Input; @@ -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)) { @@ -243,6 +214,39 @@ bool AbstractInterface::setAssociatedIface(AbstractInterface* iface) { return true; } +AbstractInterface* AbstractInterface::getClockIface() { + if (clkIfaceType == ClockName) { + return owner->getIfaceFromName(clkIface); + } + return NULL; +} + + +double AbstractInterface::getClockFrequency() throw(Exception) { + + int idClock = -1; + + if (clkIfaceType == ParameterName) { + BlockParameter* param = owner->getParameterFromName(clkIface); + 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(); + } + catch(Exception e) { + throw(e); + } + return owner->getGraph()->getClock(idClock); + } + return 0.0; +} + + bool AbstractInterface::setClockIface(QString name) { /* 2 cases : * - this is a Data interface