Skip to content

Commit 8df4e15

Browse files
committed
Updated documentation to address the tiles tag addition
Signed-off-by: Alessandro Comodi <[email protected]>
1 parent c112067 commit 8df4e15

File tree

2 files changed

+339
-193
lines changed

2 files changed

+339
-193
lines changed

doc/src/arch/example_arch.xml

Lines changed: 84 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
<!-- VPR Architecture Specification File --><!-- Quick XML Primer:
1+
<!-- VPR Architecture Specification File -->
2+
<!-- Quick XML Primer:
23
* Data is hierarchical and composed of tags (similar to HTML)
34
* 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.
45
* Inside a start tag you may specify attributes in the form key="value". Refer to manual for the valid attributes for each element.
56
* Comments may be included anywhere in the document except inside a tag where it's attribute list is defined.
67
* Comments may contain any characters except two dashes.
7-
--><!-- Architecture based off Stratix IV
8+
-->
9+
<!-- Architecture based off Stratix IV
810
Use closest ifar architecture: K06 N10 45nm fc 0.15 area-delay optimized, scale to 40 nm using linear scaling
911
n10k06l04.fc15.area1delay1.cmos45nm.bptm.cmos45nm.xml
1012
* 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,7 +23,8 @@
2123
created 4 18x18 mulitpliers, logiclocked them to a single DSP block, compile
2224
result - 2 18x18 multipliers got packed together, the other 2 got ejected out of the logiclock region without error
2325
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>
2528
<!-- ODIN II specific config -->
2629
<models>
2730
<model name="multiply">
@@ -74,23 +77,73 @@
7477
</output_ports>
7578
</model>
7679
</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>
77130
<!-- ODIN II specific config ends -->
78131
<!-- Physical descriptions begin (area optimized for N8-K6-L4 -->
79132
<layout>
80133
<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>
94147
<device>
95148
<sizing R_minW_nmos="6065.520020" R_minW_pmos="18138.500000"/>
96149
<area grid_logic_tile_area="14813.392"/>
@@ -100,13 +153,13 @@
100153
<y distr="uniform" peak="1.000000"/>
101154
</chan_width_distr>
102155
<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>
105158
<switchlist>
106159
<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>
110163
<segmentlist>
111164
<segment freq="1.000000" length="4" type="unidir" Rmetal="0.000000" Cmetal="0.000000e+00">
112165
<mux name="0"/>
@@ -116,7 +169,7 @@
116169
</segmentlist>
117170
<complexblocklist>
118171
<!-- 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">
120173
<input name="outpad" num_pins="1"/>
121174
<output name="inpad" num_pins="1"/>
122175
<clock name="clock" num_pins="1"/>
@@ -141,22 +194,14 @@
141194
</direct>
142195
</interconnect>
143196
</mode>
144-
<fc in_type="frac" in_val="0.15" out_type="frac" out_val="0.10"/>
145197
<!-- IOs go on the periphery of the FPGA, for consistency,
146198
make it physically equivalent on all sides so that only one definition of I/Os is needed.
147199
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
148200
-->
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>
157202
<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 -->
160205
<clock name="clk" num_pins="1"/>
161206
<!-- Describe basic logic element -->
162207
<pb_type name="ble" num_pb="10">
@@ -209,12 +254,9 @@
209254
<complete name="clks" input="clb.clk" output="ble[9:0].clk"/>
210255
<direct name="clbouts" input="ble[9:0].out" output="clb.O"/>
211256
</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>
216258
<!-- This is the 36*36 uniform mult -->
217-
<pb_type name="mult_36" height="4">
259+
<pb_type name="mult_36">
218260
<input name="a" num_pins="36"/>
219261
<input name="b" num_pins="36"/>
220262
<output name="out" num_pins="72"/>
@@ -304,11 +346,9 @@
304346
</mode>
305347
<fc_in type="frac">0.15</fc_in>
306348
<fc_out type="frac">0.10</fc_out>
307-
<pinlocations pattern="spread"/>
308-
</pb_type>
309-
349+
</pb_type>
310350
<!-- 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">
312352
<input name="addr1" num_pins="17"/>
313353
<input name="addr2" num_pins="17"/>
314354
<input name="data" num_pins="72"/>
@@ -492,8 +532,6 @@
492532
<direct name="clk" input="memory.clk" output="mem_18194x9_sp.clk"/>
493533
</interconnect>
494534
</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>
498536
</complexblocklist>
499-
</architecture>
537+
</architecture>

0 commit comments

Comments
 (0)