<!-- Architecture file translated from ifar repository N04K04L01.FC15FO25.AREA1DELAY1.CMOS90NM.BPTM Simple architecture file consisting of clusters of 4 BLEs, each BLE contains a 4-LUT+FF pair. Delay models from 90nm PTM. --> <architecture> <!-- ODIN II specific config begins Describes the types of user-specified netlist blocks (in blif, this corresponds to ".model [type_of_block]") that this architecture supports. Note: Basic LUTs, I/Os, and flip-flops are not included here as there are already special structures in blif (.names, .input, .output, and .latch) that describe them. --> <models> </models> <tiles> <tilename="io"> <sub_tilename="io"capacity="3"> <equivalent_sites> <sitepb_type="io"pin_mapping="direct"/> </equivalent_sites> <inputname="outpad"num_pins="1"/> <outputname="inpad"num_pins="1"/> <clockname="clock"num_pins="1"/> <fcin_type="frac"in_val="1.0"out_type="frac"out_val="0.25"/> <pinlocationspattern="custom"> <locside="left">io.outpad io.inpad io.clock</loc> <locside="top">io.outpad io.inpad io.clock</loc> <locside="right">io.outpad io.inpad io.clock</loc> <locside="bottom">io.outpad io.inpad io.clock</loc> </pinlocations> </sub_tile> </tile> <tilename="clb"> <sub_tilename="clb"> <equivalent_sites> <sitepb_type="clb"pin_mapping="direct"/> </equivalent_sites> <inputname="I"num_pins="10"equivalent="full"/> <outputname="O"num_pins="4"equivalent="instance"/> <clockname="clk"num_pins="1"/> <fcin_type="frac"in_val="0.15"out_type="frac"out_val="0.25"/> <pinlocationspattern="spread"/> </sub_tile> </tile> </tiles> <!-- ODIN II specific config ends --> <!-- Physical descriptions begin --> <layout> <auto_layoutaspect_ratio="1.000000"> <!--Perimeter of 'io' blocks with 'EMPTY' blocks at corners--> <perimetertype="io"priority="100"/> <cornerstype="EMPTY"priority="101"/> <!--Fill with 'clb'--> <filltype="clb"priority="10"/> </auto_layout> </layout> <device> <sizingR_minW_nmos="4220.930176"R_minW_pmos="11207.599609"/> <areagrid_logic_tile_area="2229.320068"/> <chan_width_distr> <xdistr="uniform"peak="1.000000"/> <ydistr="uniform"peak="1.000000"/> </chan_width_distr> <switch_blocktype="wilton"fs="3"/> <connection_blockinput_switch_name="ipin_cblock"/> </device> <switchlist> <switchtype="mux"name="0"R="0.000000"Cin="0.000000e+00"Cout="0.000000e+00"Tdel="6.244000e-11"mux_trans_size="1.835460"buf_size="10.498600"/> <!--switch ipin_cblock resistance set to yeild for 4x minimum drive strength buffer--> <switchtype="mux"name="ipin_cblock"R="1055.232544"Cout="0."Cin="0.000000e+00"Tdel="8.045000e-11"mux_trans_size="0.983352"buf_size="auto"/> </switchlist> <segmentlist> <segmentfreq="1.000000"length="1"type="unidir"Rmetal="0.000000"Cmetal="0.000000e+00"> <muxname="0"/> <sbtype="pattern">1 1</sb> <cbtype="pattern">1</cb> </segment> </segmentlist> <complexblocklist> <!-- Define I/O pads begin --> <!-- 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 --> <pb_typename="io"> <inputname="outpad"num_pins="1"/> <outputname="inpad"num_pins="1"/> <clockname="clock"num_pins="1"/> <!-- IOs can operate as either inputs or outputs. Delays below come from Ian Kuon. They are small, so they should be interpreted as the delays to and from registers in the I/O (and generally I/Os are registered today and that is when you timing analyze them. --> <modename="inpad"> <pb_typename="inpad"blif_model=".input"num_pb="1"> <outputname="inpad"num_pins="1"/> </pb_type> <interconnect> <directname="inpad"input="inpad.inpad"output="io.inpad"> <delay_constantmax="9.492000e-11"in_port="inpad.inpad"out_port="io.inpad"/> </direct> </interconnect> </mode> <modename="outpad"> <pb_typename="outpad"blif_model=".output"num_pb="1"> <inputname="outpad"num_pins="1"/> </pb_type> <interconnect> <directname="outpad"input="io.outpad"output="outpad.outpad"> <delay_constantmax="2.675000e-11"in_port="io.outpad"out_port="outpad.outpad"/> </direct> </interconnect> </mode> <!-- 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 --> <!-- IOs go on the periphery of the FPGA, for consistency, make it physically equivalent on all sides so that only one definition of I/Os is needed. 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 --> <!-- Place I/Os on the sides of the FPGA --> <powermethod="ignore"/> </pb_type> <!-- Define I/O pads ends --> <!-- Define general purpose logic block (CLB) begin --> <pb_typename="clb"> <inputname="I"num_pins="10"equivalent="full"/> <outputname="O"num_pins="4"equivalent="instance"/> <clockname="clk"num_pins="1"/> <!-- Describe basic logic element. --> <pb_typename="fle"num_pb="4"> <inputname="in"num_pins="4"/> <outputname="out"num_pins="1"/> <clockname="clk"num_pins="1"/> <!-- 4-LUT mode definition begin --> <modename="n1_lut4"> <!-- Define 4-LUT mode --> <pb_typename="ble4"num_pb="1"> <inputname="in"num_pins="4"/> <outputname="out"num_pins="1"/> <clockname="clk"num_pins="1"/> <!-- Define LUT --> <pb_typename="lut4"blif_model=".names"num_pb="1"class="lut"> <inputname="in"num_pins="4"port_class="lut_in"/> <outputname="out"num_pins="1"port_class="lut_out"/> <!-- LUT timing using delay matrix --> <delay_matrixtype="max"in_port="lut4.in"out_port="lut4.out"> 2.253000e-10 2.253000e-10 2.253000e-10 2.253000e-10 </delay_matrix> </pb_type> <!-- Define flip-flop --> <pb_typename="ff"blif_model=".latch"num_pb="1"class="flipflop"> <inputname="D"num_pins="1"port_class="D"/> <outputname="Q"num_pins="1"port_class="Q"/> <clockname="clk"num_pins="1"port_class="clock"/> <T_setupvalue="2.160000e-10"port="ff.D"clock="clk"/> <T_clock_to_Qmax="1.426000e-10"port="ff.Q"clock="clk"/> </pb_type> <interconnect> <directname="direct1"input="ble4.in"output="lut4[0:0].in"/> <directname="direct2"input="lut4.out"output="ff.D"> <!-- Advanced user option that tells CAD tool to find LUT+FF pairs in netlist --> <pack_patternname="ble6"in_port="lut4.out"out_port="ff.D"/> </direct> <directname="direct3"input="ble4.clk"output="ff.clk"/> <muxname="mux1"input="ff.Q lut4.out"output="ble4.out"> </mux> </interconnect> </pb_type> <interconnect> <directname="direct1"input="fle.in"output="ble4.in"/> <directname="direct2"input="ble4.out"output="fle.out[0:0]"/> <directname="direct3"input="fle.clk"output="ble4.clk"/> </interconnect> </mode> <!-- 4-LUT mode definition end --> </pb_type> <interconnect> <!-- We use a full crossbar to get logical equivalence at inputs of CLB --> <completename="crossbar"input="clb.I fle[3:0].out"output="fle[3:0].in"> <delay_constantmax="5.735000e-11"in_port="clb.I"out_port="fle[3:0].in"/> <delay_constantmax="5.428000e-11"in_port="fle[3:0].out"out_port="fle[3:0].in"/> </complete> <completename="clks"input="clb.clk"output="fle[3:0].clk"> </complete> <directname="clbouts1"input="fle[3:0].out"output="clb.O"/> </interconnect> <!-- Every input pin is driven by 15% of the tracks in a channel, every output pin is driven by 25% of the tracks in a channel --> <!-- Place this general purpose logic block in any unspecified column --> </pb_type> <!-- Define general purpose logic block (CLB) ends --> </complexblocklist> </architecture>
<!-- Define I/O pads begin --> <pb_typename="io"> <inputname="outpad"num_pins="1"/> <outputname="inpad"num_pins="1"/>
<!-- A mode denotes the physical implementation of an I/O This mode will not be used by packer but is mainly used for fabric verilog generation --> <modename="physical"packable="false"> <pb_typename="iopad"blif_model=".subckt io"num_pb="1"> <inputname="outpad"num_pins="1"/> <outputname="inpad"num_pins="1"/> </pb_type> <interconnect> <directname="outpad"input="io.outpad"output="iopad.outpad"> <delay_constantmax="1.394e-11"in_port="io.outpad"out_port="iopad.outpad"/> </direct> <directname="inpad"input="iopad.inpad"output="io.inpad"> <delay_constantmax="4.243e-11"in_port="iopad.inpad"out_port="io.inpad"/> </direct> </interconnect> </mode>
<!-- Operating modes of I/O used by VPR IOs can operate as either inputs or outputs. --> <modename="inpad"> <pb_typename="inpad"blif_model=".input"num_pb="1"> <outputname="inpad"num_pins="1"/> </pb_type> <interconnect> <directname="inpad"input="inpad.inpad"output="io.inpad"> <delay_constantmax="9.492000e-11"in_port="inpad.inpad"out_port="io.inpad"/> </direct> </interconnect> </mode> <modename="outpad"> <pb_typename="outpad"blif_model=".output"num_pb="1"> <inputname="outpad"num_pins="1"/> </pb_type> <interconnect> <directname="outpad"input="io.outpad"output="outpad.outpad"> <delay_constantmax="2.675000e-11"in_port="io.outpad"out_port="outpad.outpad"/> </direct> </interconnect> </mode> </pb_type>
<models> <!-- A virtual model for I/O to be used in the physical mode of io block --> <modelname="io"> <input_ports> <portname="outpad"/> </input_ports> <output_ports> <portname="inpad"/> </output_ports> </model> </models>
<pb_type_annotations> <!-- physical pb_type binding in complex block IO --> <pb_typename="io"physical_mode_name="physical"/> <pb_typename="io[physical].iopad"circuit_model_name="iopad"mode_bits="1"/> <pb_typename="io[inpad].inpad"physical_pb_type_name="io[physical].iopad"mode_bits="1"/> <pb_typename="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_typename="clb"> <!-- Binding interconnect to circuit models as their physical implementation, if not defined, we use the default model --> <interconnectname="crossbar"circuit_model_name="mux_2level"/> </pb_type> <pb_typename="clb.fle[n1_lut4].ble4.lut4"circuit_model_name="lut4"/> <pb_typename="clb.fle[n1_lut4].ble4.ff"circuit_model_name="static_dff"/> <!-- End physical pb_type binding in complex block IO --> </pb_type_annotations>