1 |
16 |
alirezamon |
#!/bin/sh
|
2 |
|
|
|
3 |
|
|
CORE_NUM(){
|
4 |
|
|
# local variable x and y with passed args
|
5 |
|
|
local x=$1
|
6 |
|
|
local y=$2
|
7 |
|
|
|
8 |
|
|
echo $(( $x + ($y*$NX) ))
|
9 |
|
|
}
|
10 |
|
|
|
11 |
|
|
|
12 |
|
|
# NoC parameters:
|
13 |
|
|
V=2 # number of VC per port
|
14 |
28 |
alirezamon |
TOPOLOGY="MESH" #"MESH" or "TORUS"
|
15 |
|
|
P="(TOPOLOGY==\"RING\")? 3 : 5" # number of port per router
|
16 |
16 |
alirezamon |
B=4 # buffer space :flit per VC
|
17 |
|
|
NX=8 # number of node in x axis
|
18 |
|
|
NY=8 # number of node in y axis
|
19 |
|
|
C=1 # number of flit class
|
20 |
|
|
Fpay=32 #flit payload width
|
21 |
|
|
MUX_TYPE="ONE_HOT" #crossbar multiplexer type : "ONE_HOT" or "BINARY"
|
22 |
|
|
VC_REALLOCATION_TYPE="NONATOMIC" # "ATOMIC" or "NONATOMIC"
|
23 |
|
|
COMBINATION_TYPE="COMB_NONSPEC" # "BASELINE" or "COMB_SPEC1" or "COMB_SPEC2" or "COMB_NONSPEC"
|
24 |
|
|
FIRST_ARBITER_EXT_P_EN=0
|
25 |
28 |
alirezamon |
|
26 |
16 |
alirezamon |
ROUTE_NAME="XY" # Routing algorithm
|
27 |
|
|
# mesh : "XY" , "WEST_FIRST" , "NORTH_LAST" , "NEGETIVE_FIRST" , "DUATO"
|
28 |
|
|
# torus: "TRANC_XY" , "TRANC_WEST_FIRST", "TRANC_NORTH_LAST", "TRANC_NEGETIVE_FIRST", "TRANC_DUATO"
|
29 |
|
|
|
30 |
|
|
|
31 |
|
|
CLASS_SETTING="{CVw{1'b1}}"
|
32 |
28 |
alirezamon |
|
33 |
|
|
SSA_EN="NO"
|
34 |
16 |
alirezamon |
|
35 |
|
|
|
36 |
|
|
ADD_PIPREG_AFTER_CROSSBAR=0
|
37 |
28 |
alirezamon |
|
38 |
16 |
alirezamon |
#simulation parameters:
|
39 |
|
|
C0_p=100 # the percentage of injected packets with class 0
|
40 |
|
|
C1_p=0
|
41 |
|
|
C2_p=0
|
42 |
|
|
C3_p=0
|
43 |
|
|
|
44 |
|
|
|
45 |
|
|
|
46 |
|
|
# Simulation parameters:
|
47 |
|
|
AVG_LATENCY_METRIC="HEAD_2_TAIL"
|
48 |
|
|
# HEAD_2_TAIL : The average latency is calculated based on the time when the head flit is injected until the tail flit is received
|
49 |
|
|
# HEAD_2_HEAD : The average latency is calculated based on the time when the head flit is injected until it reachs the destination
|
50 |
|
|
TRAFFIC="TRANSPOSE2" # "RANDOM", "TRANSPOSE1","TRANSPOSE2", "HOTSPOT";
|
51 |
|
|
#Hotspot Traffic setting
|
52 |
|
|
HOTSPOT_PERCENTAGE=3 #maximum 20
|
53 |
|
|
HOTSOPT_NUM=4 #maximum 5
|
54 |
|
|
HOTSPOT_CORE_1=$(CORE_NUM 1 1)
|
55 |
|
|
HOTSPOT_CORE_2=$(CORE_NUM 1 3)
|
56 |
|
|
HOTSPOT_CORE_3=$(CORE_NUM 3 1)
|
57 |
|
|
HOTSPOT_CORE_4=$(CORE_NUM 3 3)
|
58 |
|
|
HOTSPOT_CORE_5=$(CORE_NUM 2 2)
|
59 |
|
|
|
60 |
|
|
|
61 |
|
|
|
62 |
|
|
|
63 |
|
|
MAX_PCK_NUM=128000
|
64 |
|
|
MAX_SIM_CLKs=100000
|
65 |
|
|
MAX_PCK_SIZ=10 # maximum flit number in a single packet
|
66 |
|
|
TIMSTMP_FIFO_NUM=64
|
67 |
|
|
|
68 |
|
|
|
69 |
|
|
|
70 |
|
|
ESCAP_VC_MASK="1" # mask escape vc
|
71 |
|
|
DEBUG_EN=1
|
72 |
|
|
|
73 |
|
|
CONGESTION_INDEX=3 # 0: packets are routed to the ports with more available VCs
|
74 |
|
|
# 1: packets are routed to the ports with more available credits
|
75 |
|
|
# 2: packets are routed to the ports connected to the routers with less active ivc requests
|
76 |
|
|
# 3: packets are routed to the ports connected to the routers with less active ivc requests that are not granted
|
77 |
|
|
|
78 |
|
|
|
79 |
|
|
|
80 |
|
|
# Simulation C file constant:
|
81 |
|
|
PACKET_SIZE=2 # packet size in flit. Minimum is 2
|
82 |
|
|
|
83 |
|
|
|
84 |
|
|
#
|
85 |
|
|
ROUTE_SUBFUNC="NORTH_LAST" # "NORTH_LAST" ,"XY"
|
86 |
|
|
AVC_ATOMIC_EN=0
|
87 |
|
|
STND_DEV_EN=0 # 1: generate standard devision
|
88 |
|
|
|
89 |
|
|
generate_parameter_v (){
|
90 |
|
|
printf " \`ifdef INCLUDE_PARAM \n\n" >> parameter.v
|
91 |
28 |
alirezamon |
printf " parameter V=$V;\n" >> parameter.v
|
92 |
|
|
printf " parameter TOPOLOGY=\"$TOPOLOGY\";\n" >> parameter.v
|
93 |
16 |
alirezamon |
printf " parameter P=$P;\n" >> parameter.v
|
94 |
|
|
printf " parameter B=$B;\n" >> parameter.v
|
95 |
|
|
printf " parameter NX=$NX;\n" >> parameter.v
|
96 |
|
|
printf " parameter NY=$NY;\n" >> parameter.v
|
97 |
|
|
printf " parameter C=$C;\n" >> parameter.v
|
98 |
|
|
printf " parameter Fpay=$Fpay;\n" >> parameter.v
|
99 |
|
|
printf " parameter MUX_TYPE=\"$MUX_TYPE\";\n" >> parameter.v
|
100 |
|
|
printf " parameter VC_REALLOCATION_TYPE=\"$VC_REALLOCATION_TYPE\";\n" >> parameter.v
|
101 |
|
|
printf " parameter COMBINATION_TYPE=\"$COMBINATION_TYPE\";\n" >> parameter.v
|
102 |
|
|
printf " parameter FIRST_ARBITER_EXT_P_EN=$FIRST_ARBITER_EXT_P_EN;\n" >> parameter.v
|
103 |
28 |
alirezamon |
|
104 |
16 |
alirezamon |
printf " parameter ROUTE_NAME=\"$ROUTE_NAME\";\n" >> parameter.v
|
105 |
|
|
printf " parameter CONGESTION_INDEX=$CONGESTION_INDEX;\n" >> parameter.v
|
106 |
|
|
printf " parameter C0_p=$C0_p;\n" >> parameter.v
|
107 |
|
|
printf " parameter C1_p=$C1_p;\n" >> parameter.v
|
108 |
|
|
printf " parameter C2_p=$C2_p;\n" >> parameter.v
|
109 |
|
|
printf " parameter C3_p=$C3_p;\n" >> parameter.v
|
110 |
|
|
printf " parameter TRAFFIC=\"$TRAFFIC\";\n" >> parameter.v
|
111 |
|
|
printf " parameter HOTSPOT_PERCENTAGE=$HOTSPOT_PERCENTAGE;\n" >> parameter.v
|
112 |
|
|
printf " parameter HOTSOPT_NUM=$HOTSOPT_NUM;\n" >> parameter.v
|
113 |
|
|
printf " parameter HOTSPOT_CORE_1=$HOTSPOT_CORE_1;\n" >> parameter.v
|
114 |
|
|
printf " parameter HOTSPOT_CORE_2=$HOTSPOT_CORE_2;\n" >> parameter.v
|
115 |
|
|
printf " parameter HOTSPOT_CORE_3=$HOTSPOT_CORE_3;\n" >> parameter.v
|
116 |
|
|
printf " parameter HOTSPOT_CORE_4=$HOTSPOT_CORE_4;\n" >> parameter.v
|
117 |
|
|
printf " parameter HOTSPOT_CORE_5=$HOTSPOT_CORE_5;\n" >> parameter.v
|
118 |
|
|
printf " parameter MAX_PCK_NUM=$MAX_PCK_NUM;\n" >> parameter.v
|
119 |
|
|
printf " parameter MAX_SIM_CLKs=$MAX_SIM_CLKs;\n" >> parameter.v
|
120 |
|
|
printf " parameter MAX_PCK_SIZ=$MAX_PCK_SIZ;\n" >> parameter.v
|
121 |
|
|
printf " parameter TIMSTMP_FIFO_NUM=$TIMSTMP_FIFO_NUM;\n" >> parameter.v
|
122 |
|
|
printf " parameter ROUTE_TYPE = (ROUTE_NAME == \"XY\" || ROUTE_NAME == \"TRANC_XY\" )? \"DETERMINISTIC\" : \n" >> parameter.v
|
123 |
|
|
printf " (ROUTE_NAME == \"DUATO\" || ROUTE_NAME == \"TRANC_DUATO\" )? \"FULL_ADAPTIVE\": \"PAR_ADAPTIVE\"; \n" >> parameter.v
|
124 |
|
|
printf " parameter DEBUG_EN=$DEBUG_EN;\n" >> parameter.v
|
125 |
|
|
printf " parameter ROUTE_SUBFUNC= \"$ROUTE_SUBFUNC\";\n">> parameter.v
|
126 |
|
|
printf " parameter AVC_ATOMIC_EN= $AVC_ATOMIC_EN;\n">> parameter.v
|
127 |
|
|
printf " parameter AVG_LATENCY_METRIC= \"$AVG_LATENCY_METRIC\";\n">> parameter.v
|
128 |
|
|
printf " parameter ADD_PIPREG_AFTER_CROSSBAR= $ADD_PIPREG_AFTER_CROSSBAR;\n" >> parameter.v
|
129 |
|
|
printf " parameter CVw=(C==0)? V : C * V;\n" >> parameter.v
|
130 |
|
|
printf " parameter [CVw-1: 0] CLASS_SETTING = $CLASS_SETTING;\n">> parameter.v
|
131 |
28 |
alirezamon |
printf " parameter [V-1 : 0] ESCAP_VC_MASK=$ESCAP_VC_MASK;\n" >> parameter.v
|
132 |
|
|
printf " parameter SSA_EN= \"$SSA_EN\";\n">> parameter.v
|
133 |
16 |
alirezamon |
printf " \n\n \`endif " >> parameter.v
|
134 |
|
|
|
135 |
|
|
|
136 |
|
|
}
|
137 |
|
|
|
138 |
|
|
generate_parameter_h (){
|
139 |
|
|
printf " #ifndef INCLUDE_PARAM\n " >> parameter.h
|
140 |
|
|
printf " #define INCLUDE_PARAM\n\n" >> parameter.h
|
141 |
|
|
printf "\t #define V $V\n" >> parameter.h
|
142 |
|
|
printf "\t #define B $B\n" >> parameter.h
|
143 |
|
|
printf "\t #define NX $NX\n" >> parameter.h
|
144 |
|
|
printf "\t #define NY $NY\n" >> parameter.h
|
145 |
|
|
printf "\t #define C $C\n" >> parameter.h
|
146 |
|
|
printf "\t #define Fpay $Fpay\n" >> parameter.h
|
147 |
|
|
printf "\t #define MUX_TYPE \"$MUX_TYPE\"\n" >> parameter.h
|
148 |
|
|
printf "\t #define VC_REALLOCATION_TYPE \"$VC_REALLOCATION_TYPE\"\n" >> parameter.h
|
149 |
|
|
printf "\t #define COMBINATION_TYPE \"$COMBINATION_TYPE\"\n" >> parameter.h
|
150 |
|
|
printf "\t #define FIRST_ARBITER_EXT_P_EN $FIRST_ARBITER_EXT_P_EN\n" >> parameter.h
|
151 |
|
|
printf "\t #define TOPOLOGY \"$TOPOLOGY\"\n" >> parameter.h
|
152 |
|
|
printf "\t #define ROUTE_NAME \"$ROUTE_NAME\"\n" >> parameter.h
|
153 |
|
|
printf "\t #define C0_p $C0_p\n" >> parameter.h
|
154 |
|
|
printf "\t #define C1_p $C1_p\n" >> parameter.h
|
155 |
|
|
printf "\t #define C2_p $C2_p\n" >> parameter.h
|
156 |
|
|
printf "\t #define C3_p $C3_p\n" >> parameter.h
|
157 |
|
|
printf "\t #define TRAFFIC \"$TRAFFIC\"\n" >> parameter.h
|
158 |
|
|
printf "\t #define HOTSPOT_PERCENTAGE $HOTSPOT_PERCENTAGE\n" >> parameter.h
|
159 |
|
|
printf "\t #define HOTSOPT_NUM $HOTSOPT_NUM\n" >> parameter.h
|
160 |
|
|
printf "\t #define HOTSPOT_CORE_1 $HOTSPOT_CORE_1\n" >> parameter.h
|
161 |
|
|
printf "\t #define HOTSPOT_CORE_2 $HOTSPOT_CORE_2\n" >> parameter.h
|
162 |
|
|
printf "\t #define HOTSPOT_CORE_3 $HOTSPOT_CORE_3\n" >> parameter.h
|
163 |
|
|
printf "\t #define HOTSPOT_CORE_4 $HOTSPOT_CORE_4\n" >> parameter.h
|
164 |
|
|
printf "\t #define HOTSPOT_CORE_5 $HOTSPOT_CORE_5\n" >> parameter.h
|
165 |
|
|
printf "\t #define MAX_PCK_NUM $MAX_PCK_NUM\n" >> parameter.h
|
166 |
|
|
printf "\t #define MAX_SIM_CLKs $MAX_SIM_CLKs\n" >> parameter.h
|
167 |
|
|
printf "\t #define MAX_PCK_SIZ $MAX_PCK_SIZ\n" >> parameter.h
|
168 |
|
|
printf "\t #define TIMSTMP_FIFO_NUM $TIMSTMP_FIFO_NUM\n" >> parameter.h
|
169 |
|
|
printf "\t #define PACKET_SIZE $PACKET_SIZE\n" >> parameter.h
|
170 |
|
|
printf "\t #define DEBUG_EN $DEBUG_EN\n" >> parameter.h
|
171 |
|
|
printf "\t #define ROUTE_SUBFUNC \"$ROUTE_SUBFUNC\"\n" >> parameter.h
|
172 |
|
|
printf "\t #define AVC_ATOMIC_EN $AVC_ATOMIC_EN\n" >> parameter.h
|
173 |
|
|
printf "\t #define CONGESTION_INDEX $CONGESTION_INDEX\n">>parameter.h
|
174 |
|
|
printf "\t #define STND_DEV_EN $STND_DEV_EN\n">> parameter.h
|
175 |
|
|
printf "\t #define AVG_LATENCY_METRIC \"$AVG_LATENCY_METRIC\"\n">> parameter.h
|
176 |
|
|
printf "\t #define ADD_PIPREG_AFTER_CROSSBAR $ADD_PIPREG_AFTER_CROSSBAR\n" >> parameter.h
|
177 |
|
|
printf "\t #define CVw (C==0)? V : C * V\n" >> parameter.h
|
178 |
|
|
printf "\t #define CLASS_SETTING \"$CLASS_SETTING\"\n">> parameter.h
|
179 |
28 |
alirezamon |
printf "\t #define ESCAP_VC_MASK $ESCAP_VC_MASK\n">> parameter.h
|
180 |
|
|
printf "\t #define SSA_EN \"$SSA_EN\"\n" >> parameter.h
|
181 |
16 |
alirezamon |
printf " \n\n #endif " >> parameter.h
|
182 |
|
|
|
183 |
|
|
}
|