# Name of model to be built and evaluated ModelName = Router # Query string to choose what to evaluate (use '\' to enable multiline config) QueryString = \ Energy>>Router:WriteBuffer@0 \ Energy>>Router:ReadBuffer@0 \ Energy>>Router:TraverseCrossbar->Multicast1@0 \ Energy>>Router:ArbitrateSwitch->ArbitrateStage1@0 \ Energy>>Router:ArbitrateSwitch->ArbitrateStage2@0 \ Energy>>Router:DistributeClock@0 \ NddPower>>Router:Leakage@1 \ Area>>Router:Active@1 \ # Injection rate (# flits per cycle per port), assuming that the router is not # saturated InjectionRate = 0.3 # Evaluation string EvaluateString = \ ejection_rate = $(NumberInputPorts) * $(InjectionRate) / $(NumberOutputPorts); \ buf_rd_dynamic = $(Energy>>Router:ReadBuffer) * $(Frequency); \ buf_wr_dynamic = $(Energy>>Router:WriteBuffer) * $(Frequency); \ buf_static = $(NddPower>>Router->InputPort:Leakage) * $(NumberInputPorts) + ($(NddPower>>Router->PipelineReg0:Leakage) + $(NddPower>>Router->PipelineReg1:Leakage)) * $(NumberInputPorts) * $(NumberBitsPerFlit); \ xbar_o_dynamic = $(Energy>>Router:TraverseCrossbar->Multicast1) * $(Frequency); \ xbar_static = $(NddPower>>Router->Crossbar:Leakage) + $(NddPower>>Router->PipelineReg2_0:Leakage) * $(NumberOutputPorts) * $(NumberBitsPerFlit); \ sa_o_dynamic = ($(Energy>>Router:ArbitrateSwitch->ArbitrateStage1) + $(Energy>>Router:ArbitrateSwitch->ArbitrateStage2)) * $(Frequency); \ sa_static = $(NddPower>>Router->SwitchAllocator:Leakage); \ clock_o_dynamic = $(Energy>>Router:DistributeClock) * $(Frequency); \ clock_static = $(NddPower>>Router->ClockTree:Leakage); \ buffer_dynamic = buf_wr_dynamic * $(InjectionRate) * $(NumberInputPorts) + buf_rd_dynamic * ejection_rate * $(NumberOutputPorts); \ buffer_leakage = buf_static; \ xbar_dynamic = xbar_o_dynamic * ejection_rate * $(NumberOutputPorts); \ xbar_leakage = xbar_static; \ sa_dynamic = sa_o_dynamic * ejection_rate * $(NumberOutputPorts); \ sa_leakage = sa_static; \ clock_dynamic = clock_o_dynamic; \ clock_leakage = clock_static; \ total_dynamic = buffer_dynamic + xbar_dynamic + sa_dynamic + clock_dynamic; \ total_leakage = buffer_leakage + xbar_leakage + sa_leakage + clock_leakage; \ buf_area = ($(Area>>Router->InputPort:Active) + ($(Area>>Router->PipelineReg0:Active) + $(Area>>Router->PipelineReg1:Active)) * $(NumberBitsPerFlit)) * $(NumberInputPorts); \ xbar_area = $(Area>>Router->Crossbar:Active) + $(Area>>Router->Crossbar_Sel_DFF:Active) + $(Area>>Router->PipelineReg2_0:Active) * $(NumberBitsPerFlit) * $(NumberOutputPorts); \ sa_area = $(Area>>Router->SwitchAllocator:Active); \ other_area = $(Area>>Router->ClockTree:Active); \ print "Buffer:"; \ print " Dynamic power: " buffer_dynamic; \ print " Leakage power: " buffer_leakage; \ print "Crossbar:"; \ print " Dynamic power: " xbar_dynamic; \ print " Leakage power: " xbar_leakage; \ print "Switch allocator:"; \ print " Dynamic power: " sa_dynamic; \ print " Leakage power: " sa_leakage; \ print "Clock:"; \ print " Dynamic power: " clock_dynamic; \ print " Leakage power: " clock_leakage; \ print "Total:"; \ print " Dynamic power: " total_dynamic; \ print " Leakage power: " $(NddPower>>Router:Leakage); \ print "Area:"; \ print " Buffer: " buf_area; \ print " Crossbar: " xbar_area; \ print " Switch allocator: " sa_area; \ print " Other: " other_area; \ # Technology file (see other models in tech/models) ElectricalTechModelFilename = ext/dsent/tech/tech_models/Bulk45LVT.model ############################################################################### # Timing optimization ############################################################################### # True if want to perform timing optimization; otherwise, false. IsPerformTimingOptimization = true # Nets that the timing optimizer starts from TimingOptimization->StartNetNames = [*] # Operating frequency (Hz) Frequency = 1.0e9 ############################################################################### # Model specifications ############################################################################### # Number of input ports NumberInputPorts = 5 # Number of output ports NumberOutputPorts = 5 # Flit width (bit) NumberBitsPerFlit = 64 # In this example, we define 2 virtual networks (message classes), VN1 and VN2. # VN1 VN2 # Number of VCs 2 3 # Number of buffers / VC 4 5 # # So in total, there are (2 * 4) + (3 * 5) = 23 flit buffers # # Number of virtual networks (number of message classes) NumberVirtualNetworks = 2 # Number of virtual channels per virtual network NumberVirtualChannelsPerVirtualNetwork = [2, 3] # Number of buffers per virtual channel NumberBuffersPerVirtualChannel = [4, 5] # InputPort # --------- # buffer model InputPort->BufferModel = DFFRAM # Crossbar # -------- # crossbar model CrossbarModel = MultiplexerCrossbar # Switch allocator # ---------------- # arbiter model SwitchAllocator->ArbiterModel = MatrixArbiter # Clock tree # ---------- # clock tree model ClockTreeModel = BroadcastHTree # number of levels ClockTree->NumberLevels = 5 # wire layer ClockTree->WireLayer = Global # wire width multiplier ClockTree->WireWidthMultiplier = 1.0