[test] add a new testcase to validate subtile with tile annotations
This commit is contained in:
parent
19d4d9a16d
commit
5ac8919ce0
|
@ -158,6 +158,13 @@
|
||||||
<port type="input" prefix="outpad" lib_name="A" size="1"/>
|
<port type="input" prefix="outpad" lib_name="A" size="1"/>
|
||||||
<port type="output" prefix="inpad" lib_name="Y" size="1"/>
|
<port type="output" prefix="inpad" lib_name="Y" size="1"/>
|
||||||
</circuit_model>
|
</circuit_model>
|
||||||
|
<circuit_model type="iopad" name="GPIN" prefix="GPIN" is_default="true" verilog_netlist="${OPENFPGA_PATH}/openfpga_flow/openfpga_cell_library/verilog/gpio.v">
|
||||||
|
<design_technology type="cmos"/>
|
||||||
|
<input_buffer exist="true" circuit_model_name="sky130_fd_sc_hd__inv_1"/>
|
||||||
|
<output_buffer exist="true" circuit_model_name="sky130_fd_sc_hd__inv_1"/>
|
||||||
|
<port type="inout" prefix="PAD" lib_name="A" size="1" is_global="true" is_io="true" is_data_io="true"/>
|
||||||
|
<port type="output" prefix="inpad" lib_name="Y" size="1"/>
|
||||||
|
</circuit_model>
|
||||||
</circuit_library>
|
</circuit_library>
|
||||||
<configuration_protocol>
|
<configuration_protocol>
|
||||||
<organization type="scan_chain" circuit_model_name="DFF"/>
|
<organization type="scan_chain" circuit_model_name="DFF"/>
|
||||||
|
@ -175,6 +182,7 @@
|
||||||
<global_port name="clk" is_clock="true" default_val="0">
|
<global_port name="clk" is_clock="true" default_val="0">
|
||||||
<tile name="clb" port="clk" x="-1" y="-1"/>
|
<tile name="clb" port="clk" x="-1" y="-1"/>
|
||||||
<tile name="io" port="clk" x="-1" y="-1"/>
|
<tile name="io" port="clk" x="-1" y="-1"/>
|
||||||
|
<tile name="io_input" port="clk" x="-1" y="-1"/>
|
||||||
</global_port>
|
</global_port>
|
||||||
</tile_annotations>
|
</tile_annotations>
|
||||||
<pb_type_annotations>
|
<pb_type_annotations>
|
||||||
|
@ -186,6 +194,12 @@
|
||||||
<pb_type name="io[inpad_registered].inpad" physical_pb_type_name="io[physical].iopad" mode_bits="1"/>
|
<pb_type name="io[inpad_registered].inpad" physical_pb_type_name="io[physical].iopad" mode_bits="1"/>
|
||||||
<pb_type name="io[inpad_registered].ff" physical_pb_type_name="io[physical].ff"/>
|
<pb_type name="io[inpad_registered].ff" physical_pb_type_name="io[physical].ff"/>
|
||||||
<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"/>
|
||||||
|
<pb_type name="io_input" physical_mode_name="physical" idle_mode_name="inpad"/>
|
||||||
|
<pb_type name="io_input[physical].iopad" circuit_model_name="GPIN" mode_bits="1"/>
|
||||||
|
<pb_type name="io_input[physical].ff" circuit_model_name="DFFSRQ"/>
|
||||||
|
<pb_type name="io_input[inpad].inpad" physical_pb_type_name="io_input[physical].iopad" mode_bits="1"/>
|
||||||
|
<pb_type name="io_input[inpad_registered].inpad" physical_pb_type_name="io_input[physical].iopad" mode_bits="1"/>
|
||||||
|
<pb_type name="io_input[inpad_registered].ff" physical_pb_type_name="io_input[physical].ff"/>
|
||||||
<!-- End physical pb_type binding in complex block IO -->
|
<!-- End physical pb_type binding in complex block IO -->
|
||||||
<!-- physical pb_type binding in complex block CLB -->
|
<!-- physical pb_type binding in complex block CLB -->
|
||||||
<!-- physical mode will be the default mode if not specified -->
|
<!-- physical mode will be the default mode if not specified -->
|
||||||
|
|
|
@ -198,6 +198,7 @@ run-task basic_tests/group_config_block/group_config_block_hetero_fabric_tile_Ls
|
||||||
|
|
||||||
echo -e "Testing global port definition from tiles";
|
echo -e "Testing global port definition from tiles";
|
||||||
run-task basic_tests/global_tile_ports/global_tile_clock $@
|
run-task basic_tests/global_tile_ports/global_tile_clock $@
|
||||||
|
run-task basic_tests/global_tile_ports/global_tile_clock_subtile $@
|
||||||
run-task basic_tests/global_tile_ports/global_tile_reset $@
|
run-task basic_tests/global_tile_ports/global_tile_reset $@
|
||||||
run-task basic_tests/global_tile_ports/global_tile_4clock $@
|
run-task basic_tests/global_tile_ports/global_tile_4clock $@
|
||||||
run-task basic_tests/global_tile_ports/global_tile_4clock_pin $@
|
run-task basic_tests/global_tile_ports/global_tile_4clock_pin $@
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
|
||||||
|
# Configuration file for running experiments
|
||||||
|
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
|
||||||
|
# timeout_each_job : FPGA Task script splits fpga flow into multiple jobs
|
||||||
|
# Each job execute fpga_flow script on combination of architecture & benchmark
|
||||||
|
# timeout_each_job is timeout for each job
|
||||||
|
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
|
||||||
|
|
||||||
|
[GENERAL]
|
||||||
|
run_engine=openfpga_shell
|
||||||
|
power_tech_file = ${PATH:OPENFPGA_PATH}/openfpga_flow/tech/PTM_45nm/45nm.xml
|
||||||
|
power_analysis = true
|
||||||
|
spice_output=false
|
||||||
|
verilog_output=true
|
||||||
|
timeout_each_job = 20*60
|
||||||
|
fpga_flow=yosys_vpr
|
||||||
|
|
||||||
|
[OpenFPGA_SHELL]
|
||||||
|
openfpga_shell_template=${PATH:OPENFPGA_PATH}/openfpga_flow/openfpga_shell_scripts/global_tile_clock_full_testbench_example_script.openfpga
|
||||||
|
openfpga_arch_file=${PATH:OPENFPGA_PATH}/openfpga_flow/openfpga_arch/k4_N4_40nm_GlobalTileClk_registerable_io_cc_openfpga.xml
|
||||||
|
openfpga_sim_setting_file=${PATH:OPENFPGA_PATH}/openfpga_flow/openfpga_simulation_settings/auto_sim_openfpga.xml
|
||||||
|
openfpga_vpr_device_layout=2x2_hybrid_io
|
||||||
|
|
||||||
|
[ARCHITECTURES]
|
||||||
|
arch0=${PATH:OPENFPGA_PATH}/openfpga_flow/vpr_arch/k4_N4_tileable_GlobalTileClk_registerable_io_40nm.xml
|
||||||
|
|
||||||
|
[BENCHMARKS]
|
||||||
|
bench0=${PATH:OPENFPGA_PATH}/openfpga_flow/benchmarks/micro_benchmark/and2_pipelined/and2_pipelined.v
|
||||||
|
|
||||||
|
[SYNTHESIS_PARAM]
|
||||||
|
bench_read_verilog_options_common = -nolatches
|
||||||
|
bench0_top = and2_pipelined
|
||||||
|
|
||||||
|
[SCRIPT_PARAM_MIN_ROUTE_CHAN_WIDTH]
|
||||||
|
end_flow_with_test=
|
|
@ -34,6 +34,11 @@
|
||||||
<port name="inpad"/>
|
<port name="inpad"/>
|
||||||
</output_ports>
|
</output_ports>
|
||||||
</model>
|
</model>
|
||||||
|
<model name="io_inpad">
|
||||||
|
<output_ports>
|
||||||
|
<port name="inpad"/>
|
||||||
|
</output_ports>
|
||||||
|
</model>
|
||||||
</models>
|
</models>
|
||||||
<tiles>
|
<tiles>
|
||||||
<tile name="io" area="0">
|
<tile name="io" area="0">
|
||||||
|
@ -55,6 +60,41 @@
|
||||||
</pinlocations>
|
</pinlocations>
|
||||||
</sub_tile>
|
</sub_tile>
|
||||||
</tile>
|
</tile>
|
||||||
|
<tile name="io_hybrid" area="0">
|
||||||
|
<sub_tile name="io_input" capacity="2">
|
||||||
|
<equivalent_sites>
|
||||||
|
<site pb_type="io_input"/>
|
||||||
|
</equivalent_sites>
|
||||||
|
<output name="inpad" num_pins="1"/>
|
||||||
|
<clock name="clk" num_pins="1"/>
|
||||||
|
<fc in_type="frac" in_val="0.15" out_type="frac" out_val="0.10">
|
||||||
|
<fc_override port_name="clk" fc_type="frac" fc_val="0"/>
|
||||||
|
</fc>
|
||||||
|
<pinlocations pattern="custom">
|
||||||
|
<loc side="left">io_input.inpad io_input.clk</loc>
|
||||||
|
<loc side="top">io_input.inpad io_input.clk</loc>
|
||||||
|
<loc side="right">io_input.inpad io_input.clk</loc>
|
||||||
|
<loc side="bottom">io_input.inpad io_input.clk</loc>
|
||||||
|
</pinlocations>
|
||||||
|
</sub_tile>
|
||||||
|
<sub_tile name="io" capacity="6">
|
||||||
|
<equivalent_sites>
|
||||||
|
<site pb_type="io"/>
|
||||||
|
</equivalent_sites>
|
||||||
|
<input name="outpad" num_pins="1"/>
|
||||||
|
<output name="inpad" num_pins="1"/>
|
||||||
|
<clock name="clk" num_pins="1"/>
|
||||||
|
<fc in_type="frac" in_val="0.15" out_type="frac" out_val="0.10">
|
||||||
|
<fc_override port_name="clk" fc_type="frac" fc_val="0"/>
|
||||||
|
</fc>
|
||||||
|
<pinlocations pattern="custom">
|
||||||
|
<loc side="left">io.outpad io.inpad io.clk</loc>
|
||||||
|
<loc side="top">io.outpad io.inpad io.clk</loc>
|
||||||
|
<loc side="right">io.outpad io.inpad io.clk</loc>
|
||||||
|
<loc side="bottom">io.outpad io.inpad io.clk</loc>
|
||||||
|
</pinlocations>
|
||||||
|
</sub_tile>
|
||||||
|
</tile>
|
||||||
<tile name="clb" area="53894">
|
<tile name="clb" area="53894">
|
||||||
<sub_tile name="clb">
|
<sub_tile name="clb">
|
||||||
<equivalent_sites>
|
<equivalent_sites>
|
||||||
|
@ -87,6 +127,13 @@
|
||||||
<!--Fill with 'clb'-->
|
<!--Fill with 'clb'-->
|
||||||
<fill type="clb" priority="10"/>
|
<fill type="clb" priority="10"/>
|
||||||
</fixed_layout>
|
</fixed_layout>
|
||||||
|
<fixed_layout name="2x2_hybrid_io" width="4" height="4">
|
||||||
|
<!--Perimeter of 'io' blocks with 'EMPTY' blocks at corners-->
|
||||||
|
<perimeter type="io_hybrid" priority="100"/>
|
||||||
|
<corners type="EMPTY" priority="101"/>
|
||||||
|
<!--Fill with 'clb'-->
|
||||||
|
<fill type="clb" priority="10"/>
|
||||||
|
</fixed_layout>
|
||||||
</layout>
|
</layout>
|
||||||
<device>
|
<device>
|
||||||
<!-- VB & JL: Using Ian Kuon's transistor sizing and drive strength data for routing, at 40 nm. Ian used BPTM
|
<!-- VB & JL: Using Ian Kuon's transistor sizing and drive strength data for routing, at 40 nm. Ian used BPTM
|
||||||
|
@ -232,6 +279,75 @@
|
||||||
<!-- Place I/Os on the sides of the FPGA -->
|
<!-- Place I/Os on the sides of the FPGA -->
|
||||||
<power method="ignore"/>
|
<power method="ignore"/>
|
||||||
</pb_type>
|
</pb_type>
|
||||||
|
<pb_type name="io_input">
|
||||||
|
<output name="inpad" num_pins="1"/>
|
||||||
|
<clock name="clk" num_pins="1"/>
|
||||||
|
<!-- A mode denotes the physical implementation of an I/O
|
||||||
|
This mode will be not packable but is mainly used for fabric verilog generation
|
||||||
|
-->
|
||||||
|
<mode name="physical" disable_packing="true">
|
||||||
|
<pb_type name="iopad" blif_model=".subckt io_inpad" num_pb="1">
|
||||||
|
<output name="inpad" num_pins="1"/>
|
||||||
|
</pb_type>
|
||||||
|
<pb_type name="ff" blif_model=".latch" num_pb="1" class="flipflop">
|
||||||
|
<input name="D" num_pins="1" port_class="D"/>
|
||||||
|
<output name="Q" num_pins="1" port_class="Q"/>
|
||||||
|
<clock name="clk" num_pins="1" port_class="clock"/>
|
||||||
|
<T_setup value="66e-12" port="ff.D" clock="clk"/>
|
||||||
|
<T_clock_to_Q max="124e-12" port="ff.Q" clock="clk"/>
|
||||||
|
</pb_type>
|
||||||
|
<interconnect>
|
||||||
|
<direct name="clk" input="io.clk" output="ff.clk"/>
|
||||||
|
<!-- Create a selector between registered/combinational I/O -->
|
||||||
|
<direct name="inpad" input="iopad.inpad" output="ff.D"/>
|
||||||
|
<mux name="mux1" input="iopad.inpad ff.Q" output="io.inpad">
|
||||||
|
<delay_constant max="4.5e-11" in_port="iopad.inpad" out_port="io.inpad"/>
|
||||||
|
<delay_constant max="4.243e-11" in_port="ff.Q" out_port="io.inpad"/>
|
||||||
|
</mux>
|
||||||
|
</interconnect>
|
||||||
|
</mode>
|
||||||
|
<!-- 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.
|
||||||
|
-->
|
||||||
|
<mode name="inpad">
|
||||||
|
<pb_type name="inpad" blif_model=".input" num_pb="1">
|
||||||
|
<output name="inpad" num_pins="1"/>
|
||||||
|
</pb_type>
|
||||||
|
<interconnect>
|
||||||
|
<direct name="inpad" input="inpad.inpad" output="io.inpad">
|
||||||
|
<delay_constant max="4.243e-11" in_port="inpad.inpad" out_port="io.inpad"/>
|
||||||
|
</direct>
|
||||||
|
</interconnect>
|
||||||
|
</mode>
|
||||||
|
<mode name="inpad_registered">
|
||||||
|
<pb_type name="inpad" blif_model=".input" num_pb="1">
|
||||||
|
<output name="inpad" num_pins="1"/>
|
||||||
|
</pb_type>
|
||||||
|
<pb_type name="ff" blif_model=".latch" num_pb="1" class="flipflop">
|
||||||
|
<input name="D" num_pins="1" port_class="D"/>
|
||||||
|
<output name="Q" num_pins="1" port_class="Q"/>
|
||||||
|
<clock name="clk" num_pins="1" port_class="clock"/>
|
||||||
|
<T_setup value="66e-12" port="ff.D" clock="clk"/>
|
||||||
|
<T_clock_to_Q max="124e-12" port="ff.Q" clock="clk"/>
|
||||||
|
</pb_type>
|
||||||
|
<interconnect>
|
||||||
|
<direct name="clk" input="io.clk" output="ff.clk"/>
|
||||||
|
<direct name="inpad" input="inpad.inpad" output="ff.D">
|
||||||
|
<pack_pattern name="registered_io" in_port="inpad.inpad" out_port="ff.D"/>
|
||||||
|
</direct>
|
||||||
|
<direct name="ff2inpad" input="ff.Q" output="io.inpad"/>
|
||||||
|
</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 -->
|
||||||
|
<power method="ignore"/>
|
||||||
|
</pb_type>
|
||||||
<!-- Define I/O pads ends -->
|
<!-- Define I/O pads ends -->
|
||||||
<!-- Define general purpose logic block (CLB) begin -->
|
<!-- Define general purpose logic block (CLB) begin -->
|
||||||
<!--- Area calculation: Total Stratix IV tile area is about 8100 um^2, and a minimum width transistor
|
<!--- Area calculation: Total Stratix IV tile area is about 8100 um^2, and a minimum width transistor
|
||||||
|
|
Loading…
Reference in New Issue