summaryrefslogtreecommitdiff
path: root/ext/dsent/configs/router.cfg
blob: 2e68b7e2ca35b8e8bbaeedea329e340fbd8095cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131

# 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             = 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