Skip to content

Commit

Permalink
Merge pull request verilog-to-routing#2444 from verilog-to-routing/3d…
Browse files Browse the repository at this point in the history
…_arch

Add 3D Architectures
  • Loading branch information
vaughnbetz authored Nov 22, 2023
2 parents 49ed025 + 7533449 commit ad7057f
Show file tree
Hide file tree
Showing 15 changed files with 601 additions and 6,786 deletions.
39 changes: 39 additions & 0 deletions vtr_flow/arch/multi_die/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# 3D FPGA Architectures

This directory contains architecture files for 3D FPGAs. The architectures are divided into three sub-directories:

1. **koios_3d:**
- Contains architecture files based on the [k6FracN10LB_mem20K_complexDSP_customSB_22nm](../COFFE_22nm/k6FracN10LB_mem20K_complexDSP_customSB_22nm.clustered.xml) architecture, utilized in Koios benchmarks.
- Inside the architecture file, the fabric with multiple sizes based on the sector size is defined.
- Routing resource and switch delays in this architecture are configured for 7 nm technology. The inter-die connection delay is 73 ps.
- Detailed information on how these delays are obtained can be found in the paper "Into the Third Dimension: Architecture Exploration Tools for 3D Reconfigurable Acceleration Devices," presented at FPT '23.
- **Architectures:**
- `3d_full_OPIN_inter_die_k6FracN10LB_mem20k_complexDSP_customSB_7nm.xml`
- The inter-die connection is only from output pins, with all output pins connected to the channel on the same die and the other.
- Inside the architecture file, the fabric with multiple sizes based on the sector size is defined.
- `3d_limited_OPIN_inter_die_k6FracN10LB_mem20k_complexDSP_customSB_7nm.xml`
- The inter-die connection is only from output pins, with all OPINs of BRAMs and DSPs connected to the channels on the same die and the other die.
- Only 60% of the OPINs of CLBs are connected to the channels on the other die and all of them can get connected to the channels on the same die.

2. **stratixiv_3d:**
- Contains architecture files based on a [StratixIV-like](../titan/stratixiv_arch.timing.xml) architecture.
- Delays of switches and routing resources are similar to those reported in the capture of the StratixIV architecture.
- For the inter-die connection, we multiply the L4 wire delay of SIV by the ratio of the inter-die connection delay to the L4 wire delay of the Koios_3d benchmark.
- **Architectures:**
- `3d_10x10_noc_base_stratixiv_up.xml`
- A 10x10 NoC mech is put on the base die.
- The upper die is SIV-like FPGA fabric.
- `3d_full_inter_die_stratixiv_arch.timing.xml`
- The architecture has two dice.
- Both dice are SIV-like FPGA fabric.
- All pins can cross die.
- `3d_full_OPIN_inter_die_stratixiv_arch.timing.xml`
- The architecture has two dice.
- Both dice are SIV-like FPGA fabric.
- Only OPINs can cross die.

3. **simple_arch:**
- Simple architectures primarily used for quick testing in the flow.
- The inter-die delay of architectures in this file is considered to be zero.
- Contains two dice and both have the simple fabric.
- All pins can cross die.
3,272 changes: 0 additions & 3,272 deletions vtr_flow/arch/multi_die/k6FracN10LB_mem20K_complexDSP_customSB_22nm.xml

This file was deleted.

3,290 changes: 0 additions & 3,290 deletions vtr_flow/arch/multi_die/k6FracN10LB_mem20K_complexDSP_customSB_22nm_OPINs.xml

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@
<!-- ODIN II specific config ends -->
<layout>
<!-- Physical descriptions begin -->
<fixed_layout name="coffe_7nm" width="328" height="288">
<auto_layout aspect_ratio="1.0">
<layer die="0">
<perimeter type="io" priority="101"/>

Expand Down Expand Up @@ -272,8 +272,236 @@
<col type="dsp_top" startx="31" starty="1" repeatx="41" priority="20"/>

</layer>
</fixed_layout>
</auto_layout>
</layout>
<fixed_layout name="sector_1_1" width="41" height="36">
<layer die="0">
<perimeter type="io" priority="101"/>

<corners type="EMPTY" priority="102"/>

<fill type="clb" priority="10"/>

<col type="memory" startx="11" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="25" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="37" starty="1" repeatx="41" priority="20"/>

<col type="dsp_top" startx="18" starty="1" repeatx="41" priority="20"/>
<col type="dsp_top" startx="31" starty="1" repeatx="41" priority="20"/>

<!-- PW -->
<col type="tsv_hole" startx="8" starty="5" repeatx="13" incry="12" priority="103"/>

<!-- GND -->
<col type="tsv_hole" startx="14" starty="11" repeatx="13" incry="12" priority="103"/>

</layer>
<layer die="1">
<perimeter type="io" priority="101"/>

<corners type="EMPTY" priority="102"/>

<fill type="clb" priority="10"/>

<col type="memory" startx="11" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="25" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="37" starty="1" repeatx="41" priority="20"/>

<col type="dsp_top" startx="18" starty="1" repeatx="41" priority="20"/>
<col type="dsp_top" startx="31" starty="1" repeatx="41" priority="20"/>

</layer>
</fixed_layout>
<fixed_layout name="sector_2_1" width="82" height="36">
<layer die="0">
<perimeter type="io" priority="101"/>

<corners type="EMPTY" priority="102"/>

<fill type="clb" priority="10"/>

<col type="memory" startx="11" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="25" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="37" starty="1" repeatx="41" priority="20"/>

<col type="dsp_top" startx="18" starty="1" repeatx="41" priority="20"/>
<col type="dsp_top" startx="31" starty="1" repeatx="41" priority="20"/>

<!-- PW -->
<col type="tsv_hole" startx="8" starty="5" repeatx="13" incry="12" priority="103"/>

<!-- GND -->
<col type="tsv_hole" startx="14" starty="11" repeatx="13" incry="12" priority="103"/>

</layer>
<layer die="1">
<perimeter type="io" priority="101"/>

<corners type="EMPTY" priority="102"/>

<fill type="clb" priority="10"/>

<col type="memory" startx="11" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="25" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="37" starty="1" repeatx="41" priority="20"/>

<col type="dsp_top" startx="18" starty="1" repeatx="41" priority="20"/>
<col type="dsp_top" startx="31" starty="1" repeatx="41" priority="20"/>

</layer>
</fixed_layout>
<fixed_layout name="sector_2_2" width="82" height="72">
<layer die="0">
<perimeter type="io" priority="101"/>

<corners type="EMPTY" priority="102"/>

<fill type="clb" priority="10"/>

<col type="memory" startx="11" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="25" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="37" starty="1" repeatx="41" priority="20"/>

<col type="dsp_top" startx="18" starty="1" repeatx="41" priority="20"/>
<col type="dsp_top" startx="31" starty="1" repeatx="41" priority="20"/>

<!-- PW -->
<col type="tsv_hole" startx="8" starty="5" repeatx="13" incry="12" priority="103"/>

<!-- GND -->
<col type="tsv_hole" startx="14" starty="11" repeatx="13" incry="12" priority="103"/>

</layer>
<layer die="1">
<perimeter type="io" priority="101"/>

<corners type="EMPTY" priority="102"/>

<fill type="clb" priority="10"/>

<col type="memory" startx="11" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="25" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="37" starty="1" repeatx="41" priority="20"/>

<col type="dsp_top" startx="18" starty="1" repeatx="41" priority="20"/>
<col type="dsp_top" startx="31" starty="1" repeatx="41" priority="20"/>

</layer>
</fixed_layout>
<fixed_layout name="sector_4_2" width="164" height="72">
<layer die="0">
<perimeter type="io" priority="101"/>

<corners type="EMPTY" priority="102"/>

<fill type="clb" priority="10"/>

<col type="memory" startx="11" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="25" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="37" starty="1" repeatx="41" priority="20"/>

<col type="dsp_top" startx="18" starty="1" repeatx="41" priority="20"/>
<col type="dsp_top" startx="31" starty="1" repeatx="41" priority="20"/>

<!-- PW -->
<col type="tsv_hole" startx="8" starty="5" repeatx="13" incry="12" priority="103"/>

<!-- GND -->
<col type="tsv_hole" startx="14" starty="11" repeatx="13" incry="12" priority="103"/>

</layer>
<layer die="1">
<perimeter type="io" priority="101"/>

<corners type="EMPTY" priority="102"/>

<fill type="clb" priority="10"/>

<col type="memory" startx="11" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="25" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="37" starty="1" repeatx="41" priority="20"/>

<col type="dsp_top" startx="18" starty="1" repeatx="41" priority="20"/>
<col type="dsp_top" startx="31" starty="1" repeatx="41" priority="20"/>

</layer>
</fixed_layout>
<fixed_layout name="sector_4_4" width="164" height="144">
<layer die="0">
<perimeter type="io" priority="101"/>

<corners type="EMPTY" priority="102"/>

<fill type="clb" priority="10"/>

<col type="memory" startx="11" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="25" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="37" starty="1" repeatx="41" priority="20"/>

<col type="dsp_top" startx="18" starty="1" repeatx="41" priority="20"/>
<col type="dsp_top" startx="31" starty="1" repeatx="41" priority="20"/>

<!-- PW -->
<col type="tsv_hole" startx="8" starty="5" repeatx="13" incry="12" priority="103"/>

<!-- GND -->
<col type="tsv_hole" startx="14" starty="11" repeatx="13" incry="12" priority="103"/>

</layer>
<layer die="1">
<perimeter type="io" priority="101"/>

<corners type="EMPTY" priority="102"/>

<fill type="clb" priority="10"/>

<col type="memory" startx="11" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="25" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="37" starty="1" repeatx="41" priority="20"/>

<col type="dsp_top" startx="18" starty="1" repeatx="41" priority="20"/>
<col type="dsp_top" startx="31" starty="1" repeatx="41" priority="20"/>

</layer>
</fixed_layout>
<fixed_layout name="coffe_7nm" width="205" height="180">
<layer die="0">
<perimeter type="io" priority="101"/>

<corners type="EMPTY" priority="102"/>

<fill type="clb" priority="10"/>

<col type="memory" startx="11" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="25" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="37" starty="1" repeatx="41" priority="20"/>

<col type="dsp_top" startx="18" starty="1" repeatx="41" priority="20"/>
<col type="dsp_top" startx="31" starty="1" repeatx="41" priority="20"/>

<!-- PW -->
<col type="tsv_hole" startx="8" starty="5" repeatx="13" incry="12" priority="103"/>

<!-- GND -->
<col type="tsv_hole" startx="14" starty="11" repeatx="13" incry="12" priority="103"/>

</layer>
<layer die="1">
<perimeter type="io" priority="101"/>

<corners type="EMPTY" priority="102"/>

<fill type="clb" priority="10"/>

<col type="memory" startx="11" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="25" starty="1" repeatx="41" priority="20"/>
<col type="memory" startx="37" starty="1" repeatx="41" priority="20"/>

<col type="dsp_top" startx="18" starty="1" repeatx="41" priority="20"/>
<col type="dsp_top" startx="31" starty="1" repeatx="41" priority="20"/>

</layer>
</fixed_layout>
<device>
<sizing R_minW_nmos="13090" R_minW_pmos="19086.83"/>
<area grid_logic_tile_area="0"/>
Expand All @@ -282,7 +510,7 @@
<y distr="uniform" peak="1.000000"/>
</chan_width_distr>
<switch_block type="custom"/>
<connection_block input_switch_name="ipin_cblock" input_inter_die_switch_name="die_connection"/>
<connection_block input_switch_name="ipin_cblock" input_inter_die_switch_name="ipin_inter_layer_cblock"/>
</device>
<switchlist>
<switch type="mux" name="L4_driver" R="0.0" Cin="0.0" Cout="0.0" Tdel="9.877e-11" mux_trans_size="2.6482996805637553" buf_size="18.744014602932605"/>
Expand All @@ -292,7 +520,7 @@
<switch type="mux" name="L16_driver" R="0.0" Cin="0.0" Cout="0.0" Tdel="2.016e-10" mux_trans_size="3.1851297470059468" buf_size="39.327334265524485"/>
<switch type="mux" name="L16_inter_layer_driver" R="0.0" Cin="0.0" Cout="0.0" Tdel="2.746e-10" mux_trans_size="3.1851297470059468" buf_size="39.327334265524485"/>
<switch type="mux" name="ipin_cblock" R="0.0" Cout="0.0" Cin="0.0" Tdel="5.636e-11" mux_trans_size="2.008" buf_size="9.624436045683868"/>
<switch type="mux" name="die_connection" R="0.0" Cout="0.0" Cin="0.0" Tdel="130e-12" mux_trans_size="1.508" buf_size="11.71"/>
<switch type="mux" name="ipin_inter_layer_cblock" R="0.0" Cout="0.0" Cin="0.0" Tdel="130e-12" mux_trans_size="1.508" buf_size="11.71"/>
</switchlist>
<segmentlist>
<segment name="L4" freq="280" length="4" type="unidir" Rmetal="0.0" Cmetal="0.0">
Expand Down
Loading

0 comments on commit ad7057f

Please sign in to comment.