1
- <!-- VPR Architecture Specification File --><!-- Quick XML Primer:
1
+ <!-- VPR Architecture Specification File -->
2
+ <!-- Quick XML Primer:
2
3
* Data is hierarchical and composed of tags (similar to HTML)
3
4
* All tags must be of the form <foo>content</foo> OR <foo /> with the latter form indicating no content. Don't forget the slash at the end.
4
5
* Inside a start tag you may specify attributes in the form key="value". Refer to manual for the valid attributes for each element.
5
6
* Comments may be included anywhere in the document except inside a tag where it's attribute list is defined.
6
7
* Comments may contain any characters except two dashes.
7
- --><!-- Architecture based off Stratix IV
8
+ -->
9
+ <!-- Architecture based off Stratix IV
8
10
Use closest ifar architecture: K06 N10 45nm fc 0.15 area-delay optimized, scale to 40 nm using linear scaling
9
11
n10k06l04.fc15.area1delay1.cmos45nm.bptm.cmos45nm.xml
10
12
* because documentation sparser for soft logic (delays not in QUIP), harder to track down, not worth our time considering the level of accuracy is approximate
21
23
created 4 18x18 mulitpliers, logiclocked them to a single DSP block, compile
22
24
result - 2 18x18 multipliers got packed together, the other 2 got ejected out of the logiclock region without error
23
25
conclusion - just take the 600 MHz as is, and Quartus II logiclock hasn't fixed the bug that I've seen it do to registers when I worked at Altera (ie. eject without warning)
24
- --> <architecture >
26
+ -->
27
+ <architecture >
25
28
<!-- ODIN II specific config -->
26
29
<models >
27
30
<model name =" multiply" >
74
77
</output_ports >
75
78
</model >
76
79
</models >
80
+ <tiles >
81
+ <tile name =" io" capacity =" 8" >
82
+ <equivalent_sites >
83
+ <site pb_type =" io" />
84
+ </equivalent_sites >
85
+ <input name =" outpad" num_pins =" 1" />
86
+ <output name =" inpad" num_pins =" 1" />
87
+ <clock name =" clock" num_pins =" 1" />
88
+ <fc in_type =" frac" in_val =" 0.15" out_type =" frac" out_val =" 0.10" />
89
+ <pinlocations pattern =" custom" >
90
+ <loc side =" left" >io.outpad io.inpad io.clock</loc >
91
+ <loc side =" top" >io.outpad io.inpad io.clock</loc >
92
+ <loc side =" right" >io.outpad io.inpad io.clock</loc >
93
+ <loc side =" bottom" >io.outpad io.inpad io.clock</loc >
94
+ </pinlocations >
95
+ </tile >
96
+ <tile name =" clb" >
97
+ <equivalent_sites >
98
+ <site pb_type =" clb" />
99
+ </equivalent_sites >
100
+ <input name =" I" num_pins =" 33" equivalent =" full" />
101
+ <output name =" O" num_pins =" 10" equivalent =" instance" />
102
+ <clock name =" clk" num_pins =" 1" />
103
+ <fc in_type =" frac" in_val =" 0.15" out_type =" frac" out_val =" 0.10" />
104
+ <pinlocations pattern =" spread" />
105
+ </tile >
106
+ <tile name =" mult_36" height =" 4" >
107
+ <equivalent_sites >
108
+ <site pb_type =" mult_36" />
109
+ </equivalent_sites >
110
+ <input name =" a" num_pins =" 36" />
111
+ <input name =" b" num_pins =" 36" />
112
+ <output name =" out" num_pins =" 72" />
113
+ <pinlocations pattern =" spread" />
114
+ </tile >
115
+ <tile name =" memory" height =" 6" >
116
+ <equivalent_sites >
117
+ <site pb_type =" memory" />
118
+ </equivalent_sites >
119
+ <input name =" addr1" num_pins =" 17" />
120
+ <input name =" addr2" num_pins =" 17" />
121
+ <input name =" data" num_pins =" 72" />
122
+ <input name =" we1" num_pins =" 1" />
123
+ <input name =" we2" num_pins =" 1" />
124
+ <output name =" out" num_pins =" 72" />
125
+ <clock name =" clk" num_pins =" 1" />
126
+ <fc in_type =" frac" in_val =" 0.15" out_type =" frac" out_val =" 0.10" />
127
+ <pinlocations pattern =" spread" />
128
+ </tile >
129
+ </tiles >
77
130
<!-- ODIN II specific config ends -->
78
131
<!-- Physical descriptions begin (area optimized for N8-K6-L4 -->
79
132
<layout >
80
133
<auto_layout aspect_ratio =" 1.0" >
81
- <!-- Perimeter of 'io' blocks with 'EMPTY' blocks at corners-->
82
- <perimeter type =" io" priority =" 100" />
83
- <corners type =" EMPTY" priority =" 101" />
84
- <!-- Fill with 'clb'-->
85
- <fill type =" clb" priority =" 10" />
86
- <!-- Column of 'mult_36' with 'EMPTY' blocks wherever a 'mult_36' does not fit. Vertical offset by 1 for perimeter.-->
87
- <col type =" mult_36" startx =" 4" starty =" 1" repeatx =" 8" priority =" 20" />
88
- <col type =" EMPTY" startx =" 4" repeatx =" 8" starty =" 1" priority =" 19" />
89
- <!-- Column of 'memory' with 'EMPTY' blocks wherever a 'memory' does not fit. Vertical offset by 1 for perimeter.-->
90
- <col type =" memory" startx =" 2" starty =" 1" repeatx =" 8" priority =" 20" />
91
- <col type =" EMPTY" startx =" 2" repeatx =" 8" starty =" 1" priority =" 19" />
92
- </auto_layout >
93
- </layout >
134
+ <!-- Perimeter of 'io' blocks with 'EMPTY' blocks at corners-->
135
+ <perimeter type =" io" priority =" 100" />
136
+ <corners type =" EMPTY" priority =" 101" />
137
+ <!-- Fill with 'clb'-->
138
+ <fill type =" clb" priority =" 10" />
139
+ <!-- Column of 'mult_36' with 'EMPTY' blocks wherever a 'mult_36' does not fit. Vertical offset by 1 for perimeter.-->
140
+ <col type =" mult_36" startx =" 4" starty =" 1" repeatx =" 8" priority =" 20" />
141
+ <col type =" EMPTY" startx =" 4" repeatx =" 8" starty =" 1" priority =" 19" />
142
+ <!-- Column of 'memory' with 'EMPTY' blocks wherever a 'memory' does not fit. Vertical offset by 1 for perimeter.-->
143
+ <col type =" memory" startx =" 2" starty =" 1" repeatx =" 8" priority =" 20" />
144
+ <col type =" EMPTY" startx =" 2" repeatx =" 8" starty =" 1" priority =" 19" />
145
+ </auto_layout >
146
+ </layout >
94
147
<device >
95
148
<sizing R_minW_nmos =" 6065.520020" R_minW_pmos =" 18138.500000" />
96
149
<area grid_logic_tile_area =" 14813.392" />
100
153
<y distr =" uniform" peak =" 1.000000" />
101
154
</chan_width_distr >
102
155
<switch_block type =" wilton" fs =" 3" />
103
- <connection_block input_switch_name =" ipin_cblock" />
104
- </device >
156
+ <connection_block input_switch_name =" ipin_cblock" />
157
+ </device >
105
158
<switchlist >
106
159
<switch type =" mux" name =" 0" R =" 0.000000" Cin =" 0.000000e+00" Cout =" 0.000000e+00" Tdel =" 6.837e-11" mux_trans_size =" 2.630740" buf_size =" 27.645901" />
107
- <!-- switch ipin_cblock resistance set to yeild for 4x minimum drive strength buffer-->
108
- <switch type =" mux" name =" ipin_cblock" R =" 1516.380005" Cout =" 0." Cin =" 0.000000e+00" Tdel =" 7.247000e-11" mux_trans_size =" 1.222260" buf_size =" auto" />
109
- </switchlist >
160
+ <!-- switch ipin_cblock resistance set to yeild for 4x minimum drive strength buffer-->
161
+ <switch type =" mux" name =" ipin_cblock" R =" 1516.380005" Cout =" 0." Cin =" 0.000000e+00" Tdel =" 7.247000e-11" mux_trans_size =" 1.222260" buf_size =" auto" />
162
+ </switchlist >
110
163
<segmentlist >
111
164
<segment freq =" 1.000000" length =" 4" type =" unidir" Rmetal =" 0.000000" Cmetal =" 0.000000e+00" >
112
165
<mux name =" 0" />
116
169
</segmentlist >
117
170
<complexblocklist >
118
171
<!-- Capacity is a unique property of I/Os, it is the maximum number of I/Os that can be placed at the same (X,Y) location on the FPGA -->
119
- <pb_type name =" io" capacity = " 8 " >
172
+ <pb_type name =" io" >
120
173
<input name =" outpad" num_pins =" 1" />
121
174
<output name =" inpad" num_pins =" 1" />
122
175
<clock name =" clock" num_pins =" 1" />
141
194
</direct >
142
195
</interconnect >
143
196
</mode >
144
- <fc in_type =" frac" in_val =" 0.15" out_type =" frac" out_val =" 0.10" />
145
197
<!-- IOs go on the periphery of the FPGA, for consistency,
146
198
make it physically equivalent on all sides so that only one definition of I/Os is needed.
147
199
If I do not make a physically equivalent definition, then I need to define 4 different I/Os, one for each side of the FPGA
148
200
-->
149
- <pinlocations pattern =" custom" >
150
- <loc side =" left" >io.outpad io.inpad io.clock</loc >
151
- <loc side =" top" >io.outpad io.inpad io.clock</loc >
152
- <loc side =" right" >io.outpad io.inpad io.clock</loc >
153
- <loc side =" bottom" >io.outpad io.inpad io.clock</loc >
154
- </pinlocations >
155
- </pb_type >
156
-
201
+ </pb_type >
157
202
<pb_type name =" clb" >
158
- <input name =" I" num_pins =" 33" equivalent =" full" /> <!-- NOTE: Logically Equivalent -->
159
- <output name =" O" num_pins =" 10" equivalent =" instance" /> <!-- NOTE: Logically Equivalent -->
203
+ <input name =" I" num_pins =" 33" equivalent =" full" /><!-- NOTE: Logically Equivalent -->
204
+ <output name =" O" num_pins =" 10" equivalent =" instance" /><!-- NOTE: Logically Equivalent -->
160
205
<clock name =" clk" num_pins =" 1" />
161
206
<!-- Describe basic logic element -->
162
207
<pb_type name =" ble" num_pb =" 10" >
209
254
<complete name =" clks" input =" clb.clk" output =" ble[9:0].clk" />
210
255
<direct name =" clbouts" input =" ble[9:0].out" output =" clb.O" />
211
256
</interconnect >
212
- <fc in_type =" frac" in_val =" 0.15" out_type =" frac" out_val =" 0.10" />
213
- <pinlocations pattern =" spread" />
214
- </pb_type >
215
-
257
+ </pb_type >
216
258
<!-- This is the 36*36 uniform mult -->
217
- <pb_type name =" mult_36" height = " 4 " >
259
+ <pb_type name =" mult_36" >
218
260
<input name =" a" num_pins =" 36" />
219
261
<input name =" b" num_pins =" 36" />
220
262
<output name =" out" num_pins =" 72" />
304
346
</mode >
305
347
<fc_in type =" frac" >0.15</fc_in >
306
348
<fc_out type =" frac" >0.10</fc_out >
307
- <pinlocations pattern =" spread" />
308
- </pb_type >
309
-
349
+ </pb_type >
310
350
<!-- Memory based off Stratix IV 144K memory. Setup time set to match flip-flop setup time at 45 nm. Clock to q based off 144K max MHz -->
311
- <pb_type name =" memory" height = " 6 " >
351
+ <pb_type name =" memory" >
312
352
<input name =" addr1" num_pins =" 17" />
313
353
<input name =" addr2" num_pins =" 17" />
314
354
<input name =" data" num_pins =" 72" />
492
532
<direct name =" clk" input =" memory.clk" output =" mem_18194x9_sp.clk" />
493
533
</interconnect >
494
534
</mode >
495
- <fc in_type =" frac" in_val =" 0.15" out_type =" frac" out_val =" 0.10" />
496
- <pinlocations pattern =" spread" />
497
- </pb_type >
535
+ </pb_type >
498
536
</complexblocklist >
499
- </architecture >
537
+ </architecture >
0 commit comments