Update architecture

This commit is contained in:
Ganesh Gore 2023-02-10 01:40:10 -07:00
parent 1fca83f9c7
commit a71d5d3606
2 changed files with 234 additions and 218 deletions

View File

@ -1,11 +1,3 @@
<!-- Architecture annotation for OpenFPGA framework
This annotation supports the k6_N10_40nm.xml
- General purpose logic block
- K = 6, N = 10, I = 40
- Single mode
- Routing architecture
- L = 4, fc_in = 0.15, fc_out = 0.1
-->
<openfpga_architecture> <openfpga_architecture>
<technology_library> <technology_library>
<device_library> <device_library>
@ -157,21 +149,18 @@
<segment name="L4" circuit_model_name="chan_segment"/> <segment name="L4" circuit_model_name="chan_segment"/>
</routing_segment> </routing_segment>
<pb_type_annotations> <pb_type_annotations>
<!-- physical pb_type binding in complex block IO --> <pb_type name="clb">
<interconnect name="crossbar" circuit_model_name="mux_2level"/>
</pb_type>
<pb_type name="clb.fle" physical_mode_name="physical"/>
<pb_type name="clb.fle[physical].ble6.lut6" circuit_model_name="lut6"/>
<pb_type name="clb.fle[physical].ble6.ff" circuit_model_name="DFFSRQ"/>
<pb_type name="clb.fle[n1_lut6].ble6.lut6" physical_pb_type_name="clb.fle[physical].ble6.lut6"/>
<pb_type name="clb.fle[n1_lut6].ble6.ff" physical_pb_type_name="clb.fle[physical].ble6.ff"/>
<pb_type name="io" physical_mode_name="physical"/> <pb_type name="io" physical_mode_name="physical"/>
<pb_type name="io[physical].iopad" circuit_model_name="GPIO" mode_bits="1"/> <pb_type name="io[physical].iopad" circuit_model_name="GPIO" mode_bits="1"/>
<pb_type name="io[inpad].inpad" physical_pb_type_name="io[physical].iopad" mode_bits="1"/> <pb_type name="io[inpad].inpad" physical_pb_type_name="io[physical].iopad" mode_bits="1"/>
<pb_type name="io[outpad].outpad" physical_pb_type_name="io[physical].iopad" mode_bits="0"/> <pb_type name="io[outpad].outpad" physical_pb_type_name="io[physical].iopad" mode_bits="0"/>
<!-- End physical pb_type binding in complex block IO -->
<!-- physical pb_type binding in complex block CLB -->
<!-- physical mode will be the default mode if not specified -->
<pb_type name="clb">
<!-- Binding interconnect to circuit models as their physical implementation, if not defined, we use the default model -->
<interconnect name="crossbar" circuit_model_name="mux_2level"/>
</pb_type>
<pb_type name="clb.fle[n1_lut6].ble6.lut6" circuit_model_name="lut6"/>
<pb_type name="clb.fle[n1_lut6].ble6.ff" circuit_model_name="DFFSRQ"/>
<!-- End physical pb_type binding in complex block IO -->
</pb_type_annotations> </pb_type_annotations>
</openfpga_architecture> </openfpga_architecture>

View File

@ -1,199 +1,226 @@
<?xml version="1.0" ?><!-- <?xml version="1.0" ?>
Architecture with no fracturable LUTs <architecture>
<models>
- 40 nm technology <model name="io">
- General purpose logic block: <input_ports>
K = 6, N = 10 <port name="outpad"/>
- Routing architecture: L = 4, fc_in = 0.15, Fc_out = 0.1 </input_ports>
<output_ports>
Details on Modelling: <port name="inpad"/>
</output_ports>
Based on flagship k6_frac_N10_mem32K_40nm.xml architecture. This architecture has no fracturable LUTs nor any heterogeneous blocks. </model>
</models>
<tiles>
Authors: Jason Luu, Jeff Goeders, Vaughn Betz <tile name="io" area="0">
--><architecture> <sub_tile name="io" capacity="8">
<models> <equivalent_sites>
<!-- A virtual model for I/O to be used in the physical mode of io block --> <site pb_type="io"/>
<model name="io"> </equivalent_sites>
<input_ports> <input name="outpad" num_pins="1"/>
<port name="outpad"/> <output name="inpad" num_pins="1"/>
</input_ports> <fc in_type="frac" in_val="0.15" out_type="frac" out_val="0.10"/>
<output_ports> <pinlocations pattern="custom">
<port name="inpad"/> <loc side="left">io.outpad io.inpad</loc>
</output_ports> <loc side="top">io.outpad io.inpad</loc>
</model> <loc side="right">io.outpad io.inpad</loc>
</models> <loc side="bottom">io.outpad io.inpad</loc>
<tiles> </pinlocations>
<tile name="io" area="0"> <sub_tile name="io" capacity="8"> </sub_tile>
<equivalent_sites> </tile>
<site pb_type="io"/> <tile name="clb" area="53894">
</equivalent_sites> <sub_tile name="clb">
<input name="outpad" num_pins="1"/> <equivalent_sites>
<output name="inpad" num_pins="1"/> <site pb_type="clb"/>
<fc in_type="frac" in_val="0.15" out_type="frac" out_val="0.10"/> </equivalent_sites>
<pinlocations pattern="custom"> <input name="I" num_pins="40" equivalent="full"/>
<loc side="left">io.outpad io.inpad</loc> <output name="O" num_pins="20" equivalent="none"/>
<loc side="top">io.outpad io.inpad</loc> <clock name="clk" num_pins="1"/>
<loc side="right">io.outpad io.inpad</loc> <fc in_type="frac" in_val="0.15" out_type="frac" out_val="0.10"/>
<loc side="bottom">io.outpad io.inpad</loc> <pinlocations pattern="spread"/>
</pinlocations> </sub_tile>
</sub_tile> </tile> </tile>
<tile name="clb" area="53894"> <sub_tile name="clb"> </tiles>
<equivalent_sites> <!-- Physical descriptions begin -->
<site pb_type="clb"/> <layout tileable="true">
</equivalent_sites> <auto_layout aspect_ratio="1.0">
<input name="I" num_pins="40" equivalent="full"/> <!--Perimeter of 'io' blocks with 'EMPTY' blocks at corners-->
<output name="O" num_pins="10" equivalent="none"/> <perimeter type="io" priority="100"/>
<clock name="clk" num_pins="1"/> <corners type="EMPTY" priority="101"/>
<fc in_type="frac" in_val="0.15" out_type="frac" out_val="0.10"/> <!--Fill with 'clb'-->
<pinlocations pattern="spread"/> <fill type="clb" priority="10"/>
</sub_tile> </tile> </auto_layout>
</tiles> </layout>
<!-- ODIN II specific config ends --> <device>
<!-- Physical descriptions begin --> <sizing R_minW_nmos="8926" R_minW_pmos="16067"/>
<layout tileable="true"> <area grid_logic_tile_area="0"/>
<auto_layout aspect_ratio="1.0"> <chan_width_distr>
<!--Perimeter of 'io' blocks with 'EMPTY' blocks at corners--> <x distr="uniform" peak="1.000000"/>
<perimeter type="io" priority="100"/> <y distr="uniform" peak="1.000000"/>
<corners type="EMPTY" priority="101"/> </chan_width_distr>
<!--Fill with 'clb'--> <switch_block type="wilton" fs="3"/>
<fill type="clb" priority="10"/> <connection_block input_switch_name="ipin_cblock"/>
</auto_layout> </device>
</layout> <switchlist>
<device> <switch type="mux" name="0" R="551" Cin=".77e-15" Cout="4e-15" Tdel="58e-12" mux_trans_size="2.630740" buf_size="27.645901"/>
<sizing R_minW_nmos="8926" R_minW_pmos="16067"/> <switch type="mux" name="ipin_cblock" R="2231.5" Cout="0." Cin="1.47e-15" Tdel="7.247000e-11" mux_trans_size="1.222260" buf_size="auto"/>
<area grid_logic_tile_area="0"/> </switchlist>
<chan_width_distr> <segmentlist>
<x distr="uniform" peak="1.000000"/> <segment name="L4" freq="1.000000" length="4" type="unidir" Rmetal="101" Cmetal="22.5e-15">
<y distr="uniform" peak="1.000000"/> <mux name="0"/>
</chan_width_distr> <sb type="pattern">1 1 1 1 1</sb>
<switch_block type="wilton" fs="3"/> <cb type="pattern">1 1 1 1</cb>
<connection_block input_switch_name="ipin_cblock"/> </segment>
</device> </segmentlist>
<switchlist> <complexblocklist>
<switch type="mux" name="0" R="551" Cin=".77e-15" Cout="4e-15" Tdel="58e-12" mux_trans_size="2.630740" buf_size="27.645901"/> <pb_type name="io">
<switch type="mux" name="ipin_cblock" R="2231.5" Cout="0." Cin="1.47e-15" Tdel="7.247000e-11" mux_trans_size="1.222260" buf_size="auto"/> <input name="outpad" num_pins="1"/>
</switchlist> <output name="inpad" num_pins="1"/>
<segmentlist> <mode name="physical" disable_packing="true">
<segment name="L4" freq="1.000000" length="4" type="unidir" Rmetal="101" Cmetal="22.5e-15"> <pb_type name="iopad" blif_model=".subckt io" num_pb="1">
<mux name="0"/> <input name="outpad" num_pins="1"/>
<sb type="pattern">1 1 1 1 1</sb> <output name="inpad" num_pins="1"/>
<cb type="pattern">1 1 1 1</cb> </pb_type>
</segment> <interconnect>
</segmentlist> <direct name="outpad" input="io.outpad" output="iopad.outpad">
<complexblocklist> <delay_constant max="1.394e-11" in_port="io.outpad" out_port="iopad.outpad"/>
<pb_type name="io"> </direct>
<input name="outpad" num_pins="1"/> <direct name="inpad" input="iopad.inpad" output="io.inpad">
<output name="inpad" num_pins="1"/> <delay_constant max="4.243e-11" in_port="iopad.inpad" out_port="io.inpad"/>
<mode name="physical" disable_packing="true"> </direct>
<pb_type name="iopad" blif_model=".subckt io" num_pb="1"> </interconnect>
<input name="outpad" num_pins="1"/> </mode>
<output name="inpad" num_pins="1"/> <mode name="inpad">
</pb_type> <pb_type name="inpad" blif_model=".input" num_pb="1">
<interconnect> <output name="inpad" num_pins="1"/>
<direct name="outpad" input="io.outpad" output="iopad.outpad"> </pb_type>
<delay_constant max="1.394e-11" in_port="io.outpad" out_port="iopad.outpad"/> <interconnect>
</direct> <direct name="inpad" input="inpad.inpad" output="io.inpad">
<direct name="inpad" input="iopad.inpad" output="io.inpad"> <delay_constant max="4.243e-11" in_port="inpad.inpad" out_port="io.inpad"/>
<delay_constant max="4.243e-11" in_port="iopad.inpad" out_port="io.inpad"/> </direct>
</direct> </interconnect>
</interconnect> </mode>
</mode> <mode name="outpad">
<mode name="inpad"> <pb_type name="outpad" blif_model=".output" num_pb="1">
<pb_type name="inpad" blif_model=".input" num_pb="1"> <input name="outpad" num_pins="1"/>
<output name="inpad" num_pins="1"/> </pb_type>
</pb_type> <interconnect>
<interconnect> <direct name="outpad" input="io.outpad" output="outpad.outpad">
<direct name="inpad" input="inpad.inpad" output="io.inpad"> <delay_constant max="1.394e-11" in_port="io.outpad" out_port="outpad.outpad"/>
<delay_constant max="4.243e-11" in_port="inpad.inpad" out_port="io.inpad"/> </direct>
</direct> </interconnect>
</interconnect> </mode>
</mode> <power method="ignore"/>
<mode name="outpad"> </pb_type>
<pb_type name="outpad" blif_model=".output" num_pb="1"> <pb_type name="clb">
<input name="outpad" num_pins="1"/> <input name="I" num_pins="40" equivalent="full"/>
</pb_type> <output name="O" num_pins="20" equivalent="none"/>
<interconnect> <clock name="clk" num_pins="1"/>
<direct name="outpad" input="io.outpad" output="outpad.outpad"> <pb_type name="fle" num_pb="10">
<delay_constant max="1.394e-11" in_port="io.outpad" out_port="outpad.outpad"/> <input name="in" num_pins="6"/>
</direct> <output name="out" num_pins="1"/>
</interconnect> <clock name="clk" num_pins="1"/>
</mode> <!-- physical mode -->
<power method="ignore"/> <mode name="physical" disable_packing="true">
</pb_type> <!-- Define 6-LUT mode -->
<pb_type name="clb"> <pb_type name="ble6" num_pb="1">
<input name="I" num_pins="40" equivalent="full"/> <input name="in" num_pins="6"/>
<output name="O" num_pins="10" equivalent="none"/> <output name="out" num_pins="1"/>
<clock name="clk" num_pins="1"/> <clock name="clk" num_pins="1"/>
<!-- Describe basic logic element. <!-- Define LUT -->
Each basic logic element has a 6-LUT that can be optionally registered <pb_type name="lut6" blif_model=".names" num_pb="1" class="lut">
--> <input name="in" num_pins="6" port_class="lut_in"/>
<pb_type name="fle" num_pb="10"> <output name="out" num_pins="1" port_class="lut_out"/>
<input name="in" num_pins="6"/> <delay_matrix type="max" in_port="lut6.in" out_port="lut6.out">
<output name="out" num_pins="1"/> 261e-12
<clock name="clk" num_pins="1"/> 261e-12
<!-- 6-LUT mode definition begin --> 261e-12
<mode name="n1_lut6"> 261e-12
<!-- Define 6-LUT mode --> 261e-12
<pb_type name="ble6" num_pb="1"> 261e-12
<input name="in" num_pins="6"/> </delay_matrix>
<output name="out" num_pins="1"/> </pb_type>
<clock name="clk" num_pins="1"/> <pb_type name="ff" blif_model=".latch" num_pb="1" class="flipflop">
<!-- Define LUT --> <input name="D" num_pins="1" port_class="D"/>
<pb_type name="lut6" blif_model=".names" num_pb="1" class="lut"> <output name="Q" num_pins="1" port_class="Q"/>
<input name="in" num_pins="6" port_class="lut_in"/> <clock name="clk" num_pins="1" port_class="clock"/>
<output name="out" num_pins="1" port_class="lut_out"/> <T_setup value="66e-12" port="ff.D" clock="clk"/>
<delay_matrix type="max" in_port="lut6.in" out_port="lut6.out"> <T_clock_to_Q max="124e-12" port="ff.Q" clock="clk"/>
261e-12 </pb_type>
261e-12 <interconnect>
261e-12 <direct name="direct1" input="ble6.in" output="lut6[0:0].in"/>
261e-12 <direct name="direct2" input="lut6.out" output="ff.D">
261e-12 <pack_pattern name="ble6" in_port="lut6.out" out_port="ff.D"/>
261e-12 </direct>
</delay_matrix> <direct name="direct3" input="ble6.clk" output="ff.clk"/>
</pb_type> <mux name="mux1" input="ff.Q lut6.out" output="ble6.out">
<!-- Define flip-flop --> <delay_constant max="25e-12" in_port="lut6.out" out_port="ble6.out"/>
<pb_type name="ff" blif_model=".latch" num_pb="1" class="flipflop"> <delay_constant max="45e-12" in_port="ff.Q" out_port="ble6.out"/>
<input name="D" num_pins="1" port_class="D"/> </mux>
<output name="Q" num_pins="1" port_class="Q"/> </interconnect>
<clock name="clk" num_pins="1" port_class="clock"/> </pb_type>
<T_setup value="66e-12" port="ff.D" clock="clk"/> <interconnect>
<T_clock_to_Q max="124e-12" port="ff.Q" clock="clk"/> <direct name="direct1" input="fle.in[5:0]" output="ble6.in"/>
</pb_type> <direct name="direct2" input="ble6.out" output="fle.out[0:0]"/>
<interconnect> <direct name="direct3" input="fle.clk" output="ble6.clk"/>
<direct name="direct1" input="ble6.in" output="lut6[0:0].in"/> </interconnect>
<direct name="direct2" input="lut6.out" output="ff.D"> </mode>
<!-- Advanced user option that tells CAD tool to find LUT+FF pairs in netlist --> <!-- end of physical mode -->
<pack_pattern name="ble6" in_port="lut6.out" out_port="ff.D"/> <!-- 6-LUT mode definition begin -->
</direct> <mode name="n1_lut6">
<direct name="direct3" input="ble6.clk" output="ff.clk"/> <!-- Define 6-LUT mode -->
<mux name="mux1" input="ff.Q lut6.out" output="ble6.out"> <pb_type name="ble6" num_pb="1">
<!-- LUT to output is faster than FF to output on a Stratix IV --> <input name="in" num_pins="6"/>
<delay_constant max="25e-12" in_port="lut6.out" out_port="ble6.out"/> <output name="out" num_pins="1"/>
<delay_constant max="45e-12" in_port="ff.Q" out_port="ble6.out"/> <clock name="clk" num_pins="1"/>
</mux> <!-- Define LUT -->
</interconnect> <pb_type name="lut6" blif_model=".names" num_pb="1" class="lut">
</pb_type> <input name="in" num_pins="6" port_class="lut_in"/>
<interconnect> <output name="out" num_pins="1" port_class="lut_out"/>
<direct name="direct1" input="fle.in" output="ble6.in"/> <delay_matrix type="max" in_port="lut6.in" out_port="lut6.out">
<direct name="direct2" input="ble6.out" output="fle.out[0:0]"/> 261e-12
<direct name="direct3" input="fle.clk" output="ble6.clk"/> 261e-12
</interconnect> 261e-12
</mode> 261e-12
<!-- 6-LUT mode definition end --> 261e-12
</pb_type> 261e-12
<interconnect> </delay_matrix>
<complete name="crossbar" input="clb.I fle[9:0].out" output="fle[9:0].in"> </pb_type>
<delay_constant max="95e-12" in_port="clb.I" out_port="fle[9:0].in"/> <pb_type name="ff" blif_model=".latch" num_pb="1" class="flipflop">
<delay_constant max="75e-12" in_port="fle[9:0].out" out_port="fle[9:0].in"/> <input name="D" num_pins="1" port_class="D"/>
</complete> <output name="Q" num_pins="1" port_class="Q"/>
<complete name="clks" input="clb.clk" output="fle[9:0].clk"> <clock name="clk" num_pins="1" port_class="clock"/>
</complete> <T_setup value="66e-12" port="ff.D" clock="clk"/>
<direct name="clbouts1" input="fle[9:0].out" output="clb.O"/> <T_clock_to_Q max="124e-12" port="ff.Q" clock="clk"/>
</interconnect> </pb_type>
<!-- Every input pin is driven by 15% of the tracks in a channel, every output pin is driven by 10% of the tracks in a channel --> <interconnect>
<!-- Place this general purpose logic block in any unspecified column --> <direct name="direct1" input="ble6.in" output="lut6[0:0].in"/>
</pb_type> <direct name="direct2" input="lut6.out" output="ff.D">
</complexblocklist> <pack_pattern name="ble6" in_port="lut6.out" out_port="ff.D"/>
</direct>
<direct name="direct3" input="ble6.clk" output="ff.clk"/>
<mux name="mux1" input="ff.Q lut6.out" output="ble6.out">
<delay_constant max="25e-12" in_port="lut6.out" out_port="ble6.out"/>
<delay_constant max="45e-12" in_port="ff.Q" out_port="ble6.out"/>
</mux>
</interconnect>
</pb_type>
<interconnect>
<direct name="direct1" input="fle.in[5:0]" output="ble6.in"/>
<direct name="direct2" input="ble6.out" output="fle.out[0:0]"/>
<direct name="direct3" input="fle.clk" output="ble6.clk"/>
</interconnect>
</mode>
<!-- n1_lut6 -->
</pb_type>
<interconnect>
<complete name="crossbar" input="clb.I fle[9:0].out" output="fle[9:0].in">
<delay_constant max="95e-12" in_port="clb.I" out_port="fle[9:0].in"/>
<delay_constant max="75e-12" in_port="fle[9:0].out" out_port="fle[9:0].in"/>
</complete>
<complete name="clks" input="clb.clk" output="fle[9:0].clk">
</complete>
<direct name="clbouts1" input="fle[9:0].out" output="clb.O[9:0]"/>
</interconnect>
</pb_type>
</complexblocklist>
</architecture> </architecture>