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

# Query string to choose what to evaluate (use '\' to enable multiline config)
QueryString = \
    Energy>>PhotonicClos:AvgUnicast@1 \
    NddPower>>PhotonicClos:RingTuning@0 \
    NddPower>>PhotonicClos:Laser@0 \
    NddPower>>PhotonicClos:Leakage@0 \
    Area>>PhotonicClos:Active@0 \
    Area>>PhotonicClos:GlobalWire@0 \
    Area>>PhotonicClos:Photonic@0 \
    
# Injection rate (# flits per cycle per site), assuming that the network is not
# saturated and uniform random traffic
InjectionRate                           = 0.1
# Evaluation string
EvaluateString                          = \
    dynamic         = $(InjectionRate) * $(NumberInputSites) * $(Frequency) * $(Energy>>PhotonicClos:AvgUnicast); \
    leakage         = $(NddPower>>PhotonicClos:Leakage); \
    ring_heating    = $(NddPower>>PhotonicClos:RingTuning); \
    laser           = $(NddPower>>PhotonicClos:Laser); \
    total           = dynamic + leakage + ring_heating + laser; \
    energy_per_bit  = total / ($(InjectionRate) * $(Frequency) * $(NumberInputSites) * $(NumberBitsPerFlit)); \
    active_area     = $(Area>>PhotonicClos:Active); \
    global_area     = $(Area>>PhotonicClos:GlobalWire); \
    photonic_area   = $(Area>>PhotonicClos: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 "    Global Wire Area: " global_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

###############################################################################
# Timing optimization
###############################################################################

# Individual network components already optimize for timing, no need to do it
# at the top-level
# Operating frequency (Hz)
Frequency                                       = 4e9

# NOTE: If you adjust Frequency, make sure you adjust SWSR->LinkDataRate
# to make sure it is >= Frequency, since the model doesn't support serialization
# ratios < 1.

# Report timing
IsReportTiming                                  = true
# Report timing
ReportTiming->StartNetNames                     = [CK]

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

# Clos Parameters
# Number of sites that can send
NumberInputSites                                = 64
# Number of sites that can receive
NumberOutputSites                               = 64
# Bits per flit
NumberBitsPerFlit                               = 64
# Number of routers at each stage
NumberIngressRouters                            = 8
NumberMiddleRouters                             = 8
NumberEgressRouters                             = 8

# Router-specific parameters (see dsent.cfg.router for descriptions)
Router->NumberVirtualNetworks                   = 3
Router->NumberVirtualChannelsPerVirtualNetwork  = [1,1,1]
Router->NumberBuffersPerVirtualChannel          = [4,1,1]
Router->InputPort->BufferModel                  = DFFRAM
Router->CrossbarModel                           = MultiplexerCrossbar
Router->SwitchAllocator->ArbiterModel           = MatrixArbiter
Router->ClockTreeModel                          = BroadcastHTree
Router->ClockTree->NumberLevels                 = 6
Router->ClockTree->WireLayer                    = Intermediate
Router->ClockTree->WireWidthMultiplier          = 1.0

# Electrical Link-specific parameters
Link->WireLayer                                 = Global
Link->WireWidthMultiplier                       = 1.0
Link->WireSpacingMultiplier                     = 1.0

# Photonic link-specfic parameters
# Link data rate (Hz), must be >= Frequency of the network
SWSR->LinkDataRate                              = 4e9
# Optimize the laser/modulator power balance for the given utilization
SWSR->OptUtil 					                = 0.5
# 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
SWSR->LaserType                                 = Standard
# Ring tuning method. Current valid choices are:
# (FullThermal, AthermalWithTrim, ThermalWithBitReshuffle, ElectricalAssistWithBitReshuffle)
SWSR->RingTuningMethod                          = ThermalWithBitReshuffle 
    
# Physical organization properties
# Note: This model assumes a square network layout
InputSitePitch                                  = 1e-3
OutputSitePitch                                 = 1e-3

