OpticalTestModel.cc revision 10447
17405SAli.Saidi@ARM.com#include "model/optical/OpticalTestModel.h" 27405SAli.Saidi@ARM.com#include "model/optical_graph/OpticalGraph.h" 37405SAli.Saidi@ARM.com#include "model/optical_graph/OpticalWaveguide.h" 47405SAli.Saidi@ARM.com#include "model/optical/RingModulator.h" 57405SAli.Saidi@ARM.com#include "model/optical/RingFilter.h" 67405SAli.Saidi@ARM.com#include "model/optical/RingDetector.h" 77405SAli.Saidi@ARM.com#include "model/optical/LaserSource.h" 87405SAli.Saidi@ARM.com 97405SAli.Saidi@ARM.comnamespace DSENT 107405SAli.Saidi@ARM.com{ 117405SAli.Saidi@ARM.com OpticalTestModel::OpticalTestModel(const String& instance_name_, const TechModel* tech_model_) 127405SAli.Saidi@ARM.com : OpticalModel(instance_name_, tech_model_) 137405SAli.Saidi@ARM.com { 147405SAli.Saidi@ARM.com initParameters(); 157405SAli.Saidi@ARM.com initProperties(); 167405SAli.Saidi@ARM.com } 177405SAli.Saidi@ARM.com 187405SAli.Saidi@ARM.com OpticalTestModel::~OpticalTestModel() 197405SAli.Saidi@ARM.com {} 207405SAli.Saidi@ARM.com 217405SAli.Saidi@ARM.com void OpticalTestModel::initParameters() 227405SAli.Saidi@ARM.com { 237405SAli.Saidi@ARM.com return; 247405SAli.Saidi@ARM.com } 257405SAli.Saidi@ARM.com 267405SAli.Saidi@ARM.com void OpticalTestModel::initProperties() 277405SAli.Saidi@ARM.com { 287405SAli.Saidi@ARM.com return; 297405SAli.Saidi@ARM.com } 307405SAli.Saidi@ARM.com 317405SAli.Saidi@ARM.com void OpticalTestModel::constructModel() 327405SAli.Saidi@ARM.com { 337405SAli.Saidi@ARM.com unsigned int wavelengths = 64; 347405SAli.Saidi@ARM.com unsigned int number_readers = 1; 357405SAli.Saidi@ARM.com 367405SAli.Saidi@ARM.com createWaveguide("LaserToMod", makeWavelengthGroup(0, wavelengths-1)); 377405SAli.Saidi@ARM.com 387405SAli.Saidi@ARM.com // Create laser 397405SAli.Saidi@ARM.com LaserSource* laser = new LaserSource("Laser", getTechModel()); 407405SAli.Saidi@ARM.com laser->setParameter("OutStart", 0); 417405SAli.Saidi@ARM.com laser->setParameter("OutEnd", wavelengths-1); 427405SAli.Saidi@ARM.com laser->construct(); 437405SAli.Saidi@ARM.com 447405SAli.Saidi@ARM.com // Create modulator 457405SAli.Saidi@ARM.com RingModulator* modulator = new RingModulator("Modulator", getTechModel()); 467405SAli.Saidi@ARM.com modulator->setParameter("InStart", 0); 477405SAli.Saidi@ARM.com modulator->setParameter("InEnd", wavelengths-1); 487405SAli.Saidi@ARM.com modulator->setParameter("ModStart", 0); 497405SAli.Saidi@ARM.com modulator->setParameter("ModEnd", wavelengths-1); 507405SAli.Saidi@ARM.com modulator->construct(); 517405SAli.Saidi@ARM.com 527405SAli.Saidi@ARM.com for (unsigned int i = 0; i <= number_readers; ++i) 537405SAli.Saidi@ARM.com { 547405SAli.Saidi@ARM.com String n = (String) i; 557405SAli.Saidi@ARM.com createWaveguide("WaveguideDet-" + n, makeWavelengthGroup(0, wavelengths-1)); 567405SAli.Saidi@ARM.com } 577405SAli.Saidi@ARM.com 587405SAli.Saidi@ARM.com // Create a SWMR Configuration 597405SAli.Saidi@ARM.com for (unsigned int i = 0; i < number_readers; ++i) 607405SAli.Saidi@ARM.com { 617405SAli.Saidi@ARM.com String n = (String) i; 627405SAli.Saidi@ARM.com 637405SAli.Saidi@ARM.com // Create resonant ring detector 647405SAli.Saidi@ARM.com RingDetector* detector = new RingDetector("Detector-" + n, getTechModel()); 657405SAli.Saidi@ARM.com detector->setParameter("InStart", 0); 667405SAli.Saidi@ARM.com detector->setParameter("InEnd", wavelengths-1); 677405SAli.Saidi@ARM.com detector->setParameter("DetStart", 0); 687405SAli.Saidi@ARM.com detector->setParameter("DetEnd", wavelengths-1); 697405SAli.Saidi@ARM.com detector->setParameter("DropAll", "FALSE"); 707405SAli.Saidi@ARM.com detector->setParameter("SenseAmp", "TRUE"); 717405SAli.Saidi@ARM.com detector->construct(); 727405SAli.Saidi@ARM.com 737405SAli.Saidi@ARM.com opticalPortConnect(detector, "In", "WaveguideDet-" + n); 747405SAli.Saidi@ARM.com opticalPortConnect(detector, "Out", "WaveguideDet-" + (String) (i + 1)); 757405SAli.Saidi@ARM.com 767405SAli.Saidi@ARM.com addSubInstances(detector, 1.0); 777405SAli.Saidi@ARM.com } 787405SAli.Saidi@ARM.com 797405SAli.Saidi@ARM.com opticalPortConnect(laser, "Out", "LaserToMod"); 807405SAli.Saidi@ARM.com opticalPortConnect(modulator, "In", "LaserToMod"); 817405SAli.Saidi@ARM.com opticalPortConnect(modulator, "Out", "WaveguideDet-0"); 827405SAli.Saidi@ARM.com 837405SAli.Saidi@ARM.com addSubInstances(laser, 1.0); 847405SAli.Saidi@ARM.com addSubInstances(modulator, 1.0); 857405SAli.Saidi@ARM.com } 867405SAli.Saidi@ARM.com 877405SAli.Saidi@ARM.com void OpticalTestModel::updateModel() 887405SAli.Saidi@ARM.com { 897405SAli.Saidi@ARM.com double data_rate = 8e9; 907405SAli.Saidi@ARM.com double extinction_ratio = 5; 917405SAli.Saidi@ARM.com double insertion_loss = 3; 927405SAli.Saidi@ARM.com 937405SAli.Saidi@ARM.com Model* laser = getSubInstance("Laser"); 947405SAli.Saidi@ARM.com laser->update(); 957405SAli.Saidi@ARM.com 967405SAli.Saidi@ARM.com getWaveguide("LaserToMod")->setLoss(10); 977405SAli.Saidi@ARM.com 987405SAli.Saidi@ARM.com Model* modulator = getSubInstance("Modulator"); 997405SAli.Saidi@ARM.com modulator->setProperty("ExtinctionRatio", extinction_ratio); 1007405SAli.Saidi@ARM.com modulator->setProperty("InsertionLoss", insertion_loss); 1017405SAli.Saidi@ARM.com modulator->setProperty("DataRate", data_rate); 1027405SAli.Saidi@ARM.com modulator->setProperty("P(In)", 0.5); 1037405SAli.Saidi@ARM.com modulator->setProperty("Act(In)", 1.0); 1047405SAli.Saidi@ARM.com modulator->update(); 1057405SAli.Saidi@ARM.com 1067405SAli.Saidi@ARM.com unsigned int number_readers = 1; 1077405SAli.Saidi@ARM.com for (unsigned int i = 0; i < number_readers; ++i) 1087405SAli.Saidi@ARM.com { 1097405SAli.Saidi@ARM.com Model* detector = getSubInstance("Detector-" + (String) i); 1107405SAli.Saidi@ARM.com detector->setProperty("ExtinctionRatio", extinction_ratio); 1117405SAli.Saidi@ARM.com detector->setProperty("DataRate", data_rate); 1127405SAli.Saidi@ARM.com detector->setProperty("P(In)", 0.5); 1137405SAli.Saidi@ARM.com detector->setProperty("Act(In)", 1.0); 1147405SAli.Saidi@ARM.com detector->update(); 1157405SAli.Saidi@ARM.com } 1167405SAli.Saidi@ARM.com 1177405SAli.Saidi@ARM.com 1187405SAli.Saidi@ARM.com } 1197405SAli.Saidi@ARM.com 1207405SAli.Saidi@ARM.com} // namespace DSENT 1217405SAli.Saidi@ARM.com 1227405SAli.Saidi@ARM.com