
# Name of model to be built and evaluated
ModelName = SWSRLink

# Query string to choose what to evaluate (use '\' to enable multiline config)
QueryString = \
    Energy>>SWSRLink:Send@1 \
    NddPower>>SWSRLink:Leakage@0 \
    NddPower>>SWSRLink:RingTuning@0 \
    NddPower>>SWSRLink:Laser@0 \
    Area>>SWSRLink:Active@0 \
    Area>>SWSRLink:Photonic@0 \
    
# Injection rate (# words per core cycle)
InjectionRate                           = 1.0
# Evaluation string
EvaluateString                          = \
    dynamic         = $(InjectionRate) * $(CoreDataRate) * $(Energy>>SWSRLink:Send); \
    leakage         = $(NddPower>>SWSRLink:Leakage); \
    ring_heating    = $(NddPower>>SWSRLink:RingTuning); \
    laser           = $(NddPower>>SWSRLink:Laser); \
    total           = dynamic + leakage + ring_heating + laser; \
    energy_per_bit  = total / ($(InjectionRate) * $(CoreDataRate) * $(NumberBits)); \
    active_area     = $(Area>>SWSRLink:Active); \
    photonic_area   = $(Area>>SWSRLink:Photonic); \
    print "Photonic Clos Network:"; \
    print "    Dynamic power: " dynamic; \
    print "    Leakage power: " leakage; \
    print "    Laser power: " laser; \
    print "    Ring Heater Power: " ring_heating; \
    print "    Total power: " total; \
    print "    Energy per bit: " energy_per_bit; \
    print "    Active Area: " active_area; \
    print "    Photonic Area: " photonic_area; \
    
# Technology file (see other models in tech/models)
ElectricalTechModelFilename             = tech/tech_models/Bulk45LVT.model
PhotonicTechModelFilename               = tech/tech_models/Photonics.model

###############################################################################
# Model specifications
###############################################################################

# Clos Parameters
# Number of bits the link is responsible for delivering
NumberBits                                      = 64
# Core data rate
CoreDataRate                                    = 1e9
# Link data rate, if link data-rate > core data rate, SerDes will be applied
LinkDataRate                                    = 1e9

# Optimization parameters
# Whether link specs will be optimized for power
OptimizeLoss                                    = true
# Optimize the laser/modulator power balance for the given link utilization,
# ignored if optimize loss is set to false
OptUtil                                         = 0.5
# Insertion loss and extinction ratio (in dB), ignored if optimize loss is set
# to true
InsertionLoss                                   = 2.0
ExtinctionRatio                                 = 6.0

# Technology-based parameters
# Type of the laser. Current valid choices are: (Standard, Throttled)
# Note, if you change this to throttled, the laser gets lumped into dynamic
# power, so change the Ndd power query for laser appropriately
LaserType                                       = Standard
# Ring tuning method. Current valid choices are:
# (FullThermal, AthermalWithTrim, ThermalWithBitReshuffle, ElectricalAssistWithBitReshuffle)
RingTuningMethod                                = ThermalWithBitReshuffle 
    
# Physical organization properties
# Length of the link (in meters)
Length                                          = 10e-3

