GeMRTOS
avalon_monitor_hw.tcl
Go to the documentation of this file.
1 # (C) 2001-2013 Altera Corporation. All rights reserved.
2 # Your use of Altera Corporation's design tools, logic functions and other
3 # software and tools, and its AMPP partner logic functions, and any output
4 # files any of the foregoing (including device programming or simulation
5 # files), and any associated documentation or information are expressly subject
6 # to the terms and conditions of the Altera Program License Subscription
7 # Agreement, Altera MegaCore Function License Agreement, or other applicable
8 # license agreement, including, without limitation, that your use is for the
9 # sole purpose of programming logic devices manufactured by Altera and sold by
10 # Altera or its authorized distributors. Please refer to the applicable
11 # agreement for further details.
12 
13 
14 # +-----------------------------------
15 # |
16 # | avalon_monitor "Avalon-MM Pipeline Bridge"
17 # |
18 # +-----------------------------------
19 
20 # +-----------------------------------
21 # | request TCL package from ACDS 10.0
22 # |
23 package require -exact sopc 10.0
24 # |
25 # +-----------------------------------
26 
27 # +-----------------------------------
28 # | module avalon_monitor
29 # |
30 set_module_property DESCRIPTION "Nios II Avalon monitor module"
31 set_module_property NAME nios_avalon_monitor
32 set_module_property VERSION 13.0
33 set_module_property GROUP gRTOS
34 set_module_property INTERNAL false
35 set_module_property AUTHOR "Ricardo Cayssials"
36 set_module_property DISPLAY_NAME "Nios II Avalon monitor module"
37 set_module_property TOP_LEVEL_HDL_FILE avalon_monitor.vhd
38 set_module_property TOP_LEVEL_HDL_MODULE avalon_monitor
39 set_module_property INSTANTIATE_IN_SYSTEM_MODULE true
40 set_module_property EDITABLE true
41 set_module_property ELABORATION_CALLBACK elaborate
42 set_module_property ANALYZE_HDL FALSE
43 set_module_property SIMULATION_MODEL_IN_VHDL true
44 set_module_property HIDE_FROM_SOPC true
45 #set_module_property DATASHEET_URL http://www.altera.com/literature/hb/qts/qsys_interconnect.pdf
46 
47 
48 # |
49 # +-----------------------------------
50 
51 # +-----------------------------------
52 # | files
53 # |
54 add_file avalon_monitor.vhd {SYNTHESIS SIMULATION}
55 add_file STD_FIFO.vhd {SYNTHESIS SIMULATION}
56 # |
57 # +-----------------------------------
58 
59 # +-----------------------------------
60 # | parameters
61 # |
62 
63 # Number of Processors
64 add_parameter NProcessors INTEGER 1 "Number of System Processors"
65 set_parameter_property NProcessors DEFAULT_VALUE 1
66 set_parameter_property NProcessors DISPLAY_NAME "Number of Processors"
67 set_parameter_property NProcessors TYPE INTEGER
68 set_parameter_property NProcessors UNITS None
69 set_parameter_property NProcessors ALLOWED_RANGES {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}
70 set_parameter_property NProcessors DESCRIPTION "Number of System Processors"
71 set_parameter_property NProcessors HDL_PARAMETER true
72 
73 
74 add_parameter DATA_WIDTH INTEGER 32
75 set_parameter_property DATA_WIDTH DEFAULT_VALUE 32
76 set_parameter_property DATA_WIDTH DISPLAY_NAME {Data width}
77 set_parameter_property DATA_WIDTH TYPE INTEGER
78 set_parameter_property DATA_WIDTH UNITS None
79 set_parameter_property DATA_WIDTH DISPLAY_HINT ""
80 set_parameter_property DATA_WIDTH AFFECTS_GENERATION false
81 set_parameter_property DATA_WIDTH HDL_PARAMETER true
82 set_parameter_property DATA_WIDTH DESCRIPTION {Bridge data width}
83 
84 add_parameter SYMBOL_WIDTH INTEGER 8
85 set_parameter_property SYMBOL_WIDTH DEFAULT_VALUE 8
86 set_parameter_property SYMBOL_WIDTH DISPLAY_NAME {Symbol width}
87 set_parameter_property SYMBOL_WIDTH TYPE INTEGER
88 set_parameter_property SYMBOL_WIDTH UNITS None
89 set_parameter_property SYMBOL_WIDTH DISPLAY_HINT ""
90 set_parameter_property SYMBOL_WIDTH AFFECTS_GENERATION false
91 set_parameter_property SYMBOL_WIDTH HDL_PARAMETER true
92 set_parameter_property SYMBOL_WIDTH DESCRIPTION {Symbol (byte) width}
93 
94 add_parameter ADDRESS_WIDTH INTEGER 32
95 set_parameter_property ADDRESS_WIDTH DEFAULT_VALUE 32
96 set_parameter_property ADDRESS_WIDTH DISPLAY_NAME {Address width}
97 set_parameter_property ADDRESS_WIDTH TYPE INTEGER
98 set_parameter_property ADDRESS_WIDTH UNITS None
99 set_parameter_property ADDRESS_WIDTH DISPLAY_HINT ""
100 set_parameter_property ADDRESS_WIDTH AFFECTS_GENERATION false
101 set_parameter_property ADDRESS_WIDTH HDL_PARAMETER true
102 set_parameter_property ADDRESS_WIDTH DESCRIPTION {Bridge address width}
103 
104 add_parameter BURSTCOUNT_WIDTH INTEGER 1
105 set_parameter_property BURSTCOUNT_WIDTH DEFAULT_VALUE 1
106 set_parameter_property BURSTCOUNT_WIDTH DISPLAY_NAME {Burstcount width}
107 set_parameter_property BURSTCOUNT_WIDTH VISIBLE false
108 set_parameter_property BURSTCOUNT_WIDTH DERIVED true
109 set_parameter_property BURSTCOUNT_WIDTH TYPE INTEGER
110 set_parameter_property BURSTCOUNT_WIDTH UNITS None
111 set_parameter_property BURSTCOUNT_WIDTH DISPLAY_HINT ""
112 set_parameter_property BURSTCOUNT_WIDTH AFFECTS_GENERATION false
113 set_parameter_property BURSTCOUNT_WIDTH HDL_PARAMETER true
114 set_parameter_property BURSTCOUNT_WIDTH DESCRIPTION {Bridge burstcount width}
115 
116 add_parameter AVALON_DATA_FIFO_DEPTH INTEGER 5 AVALON_DATA_FIFO_DEPTH
117 set_parameter_property AVALON_DATA_FIFO_DEPTH DEFAULT_VALUE 4
118 set_parameter_property AVALON_DATA_FIFO_DEPTH DISPLAY_NAME {Depth of the DATA FIFO}
119 set_parameter_property AVALON_DATA_FIFO_DEPTH TYPE INTEGER
120 set_parameter_property AVALON_DATA_FIFO_DEPTH UNITS None
121 set_parameter_property AVALON_DATA_FIFO_DEPTH DISPLAY_UNITS "Words"
122 set_parameter_property AVALON_DATA_FIFO_DEPTH ALLOWED_RANGES {2 4 8 16 32 64 128 256 512}
123 set_parameter_property AVALON_DATA_FIFO_DEPTH DESCRIPTION {Depth of the DATA FIFO}
124 set_parameter_property AVALON_DATA_FIFO_DEPTH HDL_PARAMETER true
125 
126 # add_parameter AVALON_DATA_FIFO_WIDTHU INTEGER
127 # set_parameter_property AVALON_DATA_FIFO_WIDTHU DERIVED true
128 # set_parameter_property AVALON_DATA_FIFO_WIDTHU TYPE INTEGER
129 # set_parameter_property AVALON_DATA_FIFO_WIDTHU UNITS None
130 # set_parameter_property AVALON_DATA_FIFO_WIDTHU HDL_PARAMETER true
131 # add_display_item "" AVALON_DATA_FIFO_WIDTHU PARAMETER
132 
133 add_parameter LINEWRAPBURSTS INTEGER 0
134 set_parameter_property LINEWRAPBURSTS DISPLAY_NAME "Line wrap bursts"
135 set_parameter_property LINEWRAPBURSTS TYPE INTEGER
136 set_parameter_property LINEWRAPBURSTS AFFECTS_ELABORATION true
137 set_parameter_property LINEWRAPBURSTS HDL_PARAMETER false
138 set_parameter_property LINEWRAPBURSTS DISPLAY_HINT BOOLEAN
139 set_parameter_property LINEWRAPBURSTS AFFECTS_GENERATION false
140 set_parameter_property LINEWRAPBURSTS DESCRIPTION "This parameter allows you to match the behavior of some memory devices that implement a wrapping burst instead of an incrementing burst. The difference between the two is that with a wrapping burst, when the address reaches a burst boundary, the address wraps back to the previous burst boundary so that only the low-order bits are required for address counting"
141 
142 add_parameter DEVICE_FAMILY STRING
143 set_parameter_property DEVICE_FAMILY SYSTEM_INFO {DEVICE_FAMILY}
144 set_parameter_property DEVICE_FAMILY DESCRIPTION DEVICE_FAMILY
145 set_parameter_property DEVICE_FAMILY HDL_PARAMETER true
146 add_display_item "" DEVICE_FAMILY PARAMETER
147 
148 add_parameter BYTEEN_WIDTH INTEGER
149 set_parameter_property BYTEEN_WIDTH DERIVED true
150 set_parameter_property BYTEEN_WIDTH TYPE INTEGER
151 set_parameter_property BYTEEN_WIDTH UNITS None
152 set_parameter_property BYTEEN_WIDTH HDL_PARAMETER true
153 add_display_item "" BYTEEN_WIDTH PARAMETER
154 
155 add_parameter MAX_BURST_SIZE INTEGER 1
156 set_parameter_property MAX_BURST_SIZE DISPLAY_NAME {Maximum burst size (words)}
157 set_parameter_property MAX_BURST_SIZE AFFECTS_GENERATION true
158 set_parameter_property MAX_BURST_SIZE HDL_PARAMETER false
159 set_parameter_property MAX_BURST_SIZE DESCRIPTION {Specifies the maximum burst size}
160 set_parameter_property MAX_BURST_SIZE ALLOWED_RANGES "1,2,4,8,16,32,64,128,256,512,1024"
161 
162 add_parameter ADDRESS_UNITS STRING "SYMBOLS"
163 set_parameter_property ADDRESS_UNITS DISPLAY_NAME {Address units}
164 set_parameter_property ADDRESS_UNITS UNITS None
165 set_parameter_property ADDRESS_UNITS DISPLAY_HINT ""
166 set_parameter_property ADDRESS_UNITS AFFECTS_GENERATION false
167 set_parameter_property ADDRESS_UNITS HDL_PARAMETER false
168 set_parameter_property ADDRESS_UNITS ALLOWED_RANGES "SYMBOLS,WORDS"
169 set_parameter_property ADDRESS_UNITS DESCRIPTION {Address units (Symbols[bytes]/Words)}
170 
171 add_parameter MAX_PENDING_RESPONSES INTEGER 32
172 set_parameter_property MAX_PENDING_RESPONSES DISPLAY_NAME {Maximum pending read transactions}
173 set_parameter_property MAX_PENDING_RESPONSES TYPE INTEGER
174 set_parameter_property MAX_PENDING_RESPONSES UNITS None
175 set_parameter_property MAX_PENDING_RESPONSES DISPLAY_HINT ""
176 set_parameter_property MAX_PENDING_RESPONSES AFFECTS_GENERATION false
177 set_parameter_property MAX_PENDING_RESPONSES DESCRIPTION {Controls the Avalon-MM maximum pending read transactions interface property of the bridge}
178 
179 
180 # |
181 # +-----------------------------------
182 
183 # +-----------------------------------
184 # | connection point clk
185 # |
186 add_interface clk clock end
187 add_interface reset reset end
188 
189 set_interface_property clk ENABLED true
190 set_interface_property reset ENABLED true
191 set_interface_property reset ASSOCIATED_CLOCK clk
192 
193 add_interface_port clk clk clk Input 1
194 add_interface_port reset reset reset Input 1
195 # |
196 # +-----------------------------------
197 
198 #
199 # connection point s_Global
200 #
201 add_interface s_Global avalon end
202 set_interface_property s_Global addressUnits WORDS
203 set_interface_property s_Global associatedClock clk
204 set_interface_property s_Global associatedReset reset
205 set_interface_property s_Global bitsPerSymbol 8
206 set_interface_property s_Global burstOnBurstBoundariesOnly false
207 set_interface_property s_Global burstcountUnits WORDS
208 set_interface_property s_Global explicitAddressSpan 0
209 set_interface_property s_Global holdTime 0
210 set_interface_property s_Global linewrapBursts false
211 set_interface_property s_Global maximumPendingReadTransactions 0
212 set_interface_property s_Global readLatency 0
213 set_interface_property s_Global readWaitStates 0
214 set_interface_property s_Global readWaitTime 0
215 set_interface_property s_Global setupTime 0
216 set_interface_property s_Global timingUnits Cycles
217 set_interface_property s_Global writeWaitTime 0
218 set_interface_property s_Global ENABLED true
219 
220 add_interface_port s_Global slave_AvalonMonitor_address address Input 6
221 add_interface_port s_Global slave_AvalonMonitor_read read Input 1
222 add_interface_port s_Global slave_AvalonMonitor_write write Input 1
223 add_interface_port s_Global slave_AvalonMonitor_readdata readdata Output 32
224 add_interface_port s_Global slave_AvalonMonitor_writedata writedata Input 32
225 add_interface_port s_Global slave_AvalonMonitor_chipselect chipselect Input 1
226 set_interface_assignment s_Global embeddedsw.configuration.isFlash 0
227 set_interface_assignment s_Global embeddedsw.configuration.isMemoryDevice 0
228 set_interface_assignment s_Global embeddedsw.configuration.isNonVolatileStorage 0
229 set_interface_assignment s_Global embeddedsw.configuration.isPrintableDevice 0
230 
231 
232 #
233 # connection point bus_internal
234 #
235 add_interface bus_internal conduit end
236 set_interface_property bus_internal associatedClock clk
237 set_interface_property bus_internal associatedReset reset
238 set_interface_property bus_internal ENABLED true
239 set_interface_property bus_internal EXPORT_OF ""
240 set_interface_property bus_internal PORT_NAME_MAP ""
241 set_interface_property bus_internal SVD_ADDRESS_GROUP ""
242 
243 #LEDS interface
244 add_interface_port bus_internal frozen_avalon_monitor export Output 1
245 
246 
247 # |
248 # +-----------------------------------
249 
250 
251 
252 proc elaborate { } {
253 
254  set data_width [ get_parameter_value DATA_WIDTH ]
255  set sym_width [ get_parameter_value SYMBOL_WIDTH ]
256  set byteen_width [ expr $data_width / $sym_width ]
257  set mprt [ get_parameter_value MAX_PENDING_RESPONSES ]
258  set aunits [ get_parameter_value ADDRESS_UNITS ]
259  set burst_size [ get_parameter_value MAX_BURST_SIZE ]
260  set linewrap [ get_parameter_value LINEWRAPBURSTS ]
261  set address_width [ get_parameter_value ADDRESS_WIDTH ]
262 
263 
264  set burstcount_width [ expr int (ceil (log($burst_size) / log(2))) + 1 ]
265  set_parameter_value BURSTCOUNT_WIDTH $burstcount_width
266 
267  # Internal parameters elaboration
268  set rx_fifo_data_depth [ get_parameter_value AVALON_DATA_FIFO_DEPTH ]
269  # set rx_fifo_data_widthu [ expr int (ceil (log($rx_fifo_data_depth) / log(2))) ]
270  # set_parameter_value AVALON_DATA_FIFO_WIDTHU $rx_fifo_data_widthu
271 
272  set data_width [ get_parameter_value DATA_WIDTH ]
273  set symbol_width [ get_parameter_value SYMBOL_WIDTH ]
274  set byteen_width [ expr int (ceil ($data_width / $symbol_width )) ]
275  set_parameter_value BYTEEN_WIDTH $byteen_width
276 
277  set Processors [get_parameter_value NProcessors]
278  for {set i 1} {$i <= $Processors} {incr i} {
279  # ############################################################
280  # +-----------------------------------
281  # | connection point s0
282  # |
283  add_interface s$i avalon end
284  set_interface_property s$i addressAlignment DYNAMIC
285  set_interface_property s$i associatedClock clk
286  set_interface_property s$i bridgesToMaster m$i
287  set_interface_property s$i burstOnBurstBoundariesOnly false
288  set_interface_property s$i explicitAddressSpan 0
289  set_interface_property s$i holdTime 0
290  set_interface_property s$i isMemoryDevice false
291  set_interface_property s$i isNonVolatileStorage false
292  set_interface_property s$i linewrapBursts false
293  set_interface_property s$i maximumPendingReadTransactions 4
294  set_interface_property s$i printableDevice false
295  set_interface_property s$i readLatency 0
296  set_interface_property s$i readWaitTime 0
297  set_interface_property s$i setupTime 0
298  set_interface_property s$i timingUnits Cycles
299  set_interface_property s$i writeWaitTime 0
300 
301  set_interface_property s$i ASSOCIATED_CLOCK clk
302  set_interface_property s$i associatedReset reset
303  set_interface_property s$i ENABLED true
304 
305  add_interface_port s$i s${i}_waitrequest waitrequest Output 1
306  add_interface_port s$i s${i}_readdata readdata Output DATA_WIDTH
307  add_interface_port s$i s${i}_readdatavalid readdatavalid Output 1
308  add_interface_port s$i s${i}_burstcount burstcount Input BURSTCOUNT_WIDTH
309  add_interface_port s$i s${i}_writedata writedata Input DATA_WIDTH
310  add_interface_port s$i s${i}_address address Input address_width
311  add_interface_port s$i s${i}_write write Input 1
312  add_interface_port s$i s${i}_read read Input 1
313  add_interface_port s$i s${i}_byteenable byteenable Input 4
314  add_interface_port s$i s${i}_debugaccess debugaccess Input 1
315 
316  # +-----------------------------------
317  # | connection point m0
318  # |
319  add_interface m$i avalon start
320  set_interface_property m$i associatedClock clk
321  set_interface_property m$i burstOnBurstBoundariesOnly false
322  set_interface_property m$i doStreamReads false
323  set_interface_property m$i doStreamWrites false
324  set_interface_property m$i linewrapBursts false
325 
326  set_interface_property m$i ASSOCIATED_CLOCK clk
327  set_interface_property m$i associatedReset reset
328  set_interface_property m$i ENABLED true
329 
330  add_interface_port m$i m${i}_waitrequest waitrequest Input 1
331  add_interface_port m$i m${i}_readdata readdata Input DATA_WIDTH
332  add_interface_port m$i m${i}_readdatavalid readdatavalid Input 1
333  add_interface_port m$i m${i}_burstcount burstcount Output BURSTCOUNT_WIDTH
334  add_interface_port m$i m${i}_writedata writedata Output DATA_WIDTH
335  add_interface_port m$i m${i}_address address Output ADDRESS_WIDTH
336  add_interface_port m$i m${i}_write write Output 1
337  add_interface_port m$i m${i}_read read Output 1
338  add_interface_port m$i m${i}_byteenable byteenable Output 4
339  add_interface_port m$i m${i}_debugaccess debugaccess Output 1
340  # |
341  # +-----------------------------------
342 
343 
344  # ############################################################
345 
346  set_port_property m${i}_byteenable WIDTH $byteen_width
347  set_port_property s${i}_byteenable WIDTH $byteen_width
348 
349  set_interface_property m${i} bitsPerSymbol $sym_width
350  set_interface_property s${i} bitsPerSymbol $sym_width
351 
352  set_interface_property m$i addressUnits $aunits
353  set_interface_property s$i addressUnits $aunits
354 
355  set_interface_property s$i maximumPendingReadTransactions $mprt
356 
357  set_interface_property m$i linewrapBursts $linewrap
358  set_interface_property s$i linewrapBursts $linewrap
359  }
360 
361 
362 
363 }