nameStr = eltInput.attribute("iface","none");
AbstractInterface* dataIface = getIfaceFromName(nameStr);
if (dataIface == NULL) throw (Exception(BLOCKFILE_CORRUPTED));
- nameStr = dataIface->getName()+"_ctl";
+ nameStr = dataIface->getName()+"_enb";
inter = new ReferenceInterface(this,nameStr,"boolean","1",AbstractInterface::Input, AbstractInterface::Control, 1);
if (!inter->setAssociatedIface(dataIface)) {
throw (Exception(BLOCKFILE_CORRUPTED));
}
+ cout << "created a control input named " << qPrintable(inter->getName()) << endl;
inputs.append(inter);
}
QDomElement eltOutputs = eltInputs.nextSiblingElement("outputs");
nameStr = eltOutput.attribute("iface","none");
AbstractInterface* dataIface = getIfaceFromName(nameStr);
if (dataIface == NULL) throw (Exception(BLOCKFILE_CORRUPTED));
- nameStr = dataIface->getName()+"_ctl";
+ nameStr = dataIface->getName()+"_enb";
inter = new ReferenceInterface(this,nameStr,"boolean","1",AbstractInterface::Output, AbstractInterface::Control, 1);
if (!inter->setAssociatedIface(dataIface)) {
throw (Exception(BLOCKFILE_CORRUPTED));
}
+ cout << "created a control output named " << qPrintable(inter->getName()) << endl;
outputs.append(inter);
}
}
toWrite << b.inputs.size();
+ // firstly write control ifaces
for(int i=0; i<b.inputs.size(); i++){
ReferenceInterface *iface = (ReferenceInterface *)(b.inputs.at(i));
- toWrite << iface->getName();
- toWrite << iface->getWidth();
- toWrite << iface->getPurpose();
- toWrite << iface->getDirection();
- toWrite << iface->getMultiplicity();
+ if (iface->getPurpose() == AbstractInterface::Control) {
+ toWrite << iface->getName();
+ toWrite << iface->getWidth();
+ toWrite << iface->getPurpose();
+ toWrite << iface->getDirection();
+ toWrite << iface->getMultiplicity();
+ }
+ }
+ // secondly, write other ifaces
+ for(int i=0; i<b.inputs.size(); i++){
+ ReferenceInterface *iface = (ReferenceInterface *)(b.inputs.at(i));
+ if (iface->getPurpose() != AbstractInterface::Control) {
+ toWrite << iface->getName();
+ toWrite << iface->getWidth();
+ toWrite << iface->getPurpose();
+ toWrite << iface->getDirection();
+ toWrite << iface->getMultiplicity();
+ }
}
toWrite << b.outputs.size();
+ // firstly write control ifaces
for(int i=0; i<b.outputs.size(); i++){
ReferenceInterface *iface = (ReferenceInterface *)(b.outputs.at(i));
- toWrite << iface->getName();
- toWrite << iface->getWidth();
- toWrite << iface->getPurpose();
- toWrite << iface->getDirection();
- toWrite << iface->getMultiplicity();
+ if (iface->getPurpose() == AbstractInterface::Control) {
+ toWrite << iface->getName();
+ toWrite << iface->getWidth();
+ toWrite << iface->getPurpose();
+ toWrite << iface->getDirection();
+ toWrite << iface->getMultiplicity();
+ }
+ }
+ // secondly, write other ifaces
+ for(int i=0; i<b.outputs.size(); i++){
+ ReferenceInterface *iface = (ReferenceInterface *)(b.outputs.at(i));
+ if (iface->getPurpose() != AbstractInterface::Control) {
+ toWrite << iface->getName();
+ toWrite << iface->getWidth();
+ toWrite << iface->getPurpose();
+ toWrite << iface->getDirection();
+ toWrite << iface->getMultiplicity();
+ }
}
toWrite << b.bidirs.size();
for(int i=0; i<b.bidirs.size(); i++){
in >> txt;
iface->setWidth(txt);
in >> val;
- iface->setPurpose(val);
+ iface->setPurpose(val);
in >> val;
iface->setDirection(val);
in >> val;
iface->setMultiplicity(val);
b.inputs.append(iface);
+ if (iface->getPurpose() == AbstractInterface::Data) {
+ QString ctlRefName = iface->getName()+"_enb";
+ ReferenceInterface* ctlRefIface = AI_TO_REF(b.getIfaceFromName(ctlRefName));
+ if (ctlRefIface != NULL) {
+ if (! ctlRefIface->setAssociatedIface(iface)) {
+ cerr << "Abnormal case while reading a reference block in library" << endl;
+ }
+ }
+ }
}
b.outputs.clear();
in >> txt;
iface->setWidth(txt);
in >> val;
- iface->setPurpose(val);
+ iface->setPurpose(val);
in >> val;
iface->setDirection(val);
in >> val;
iface->setMultiplicity(val);
b.outputs.append(iface);
+ if (iface->getPurpose() == AbstractInterface::Data) {
+ QString ctlRefName = iface->getName()+"_enb";
+ ReferenceInterface* ctlRefIface = AI_TO_REF(b.getIfaceFromName(ctlRefName));
+ if (ctlRefIface != NULL) {
+ if (! ctlRefIface->setAssociatedIface(iface)) {
+ cerr << "Abnormal case while reading a reference block in library" << endl;
+ }
+ }
+ }
}
b.bidirs.clear();