Skip to content

Add 3D Architectures #2444

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 18 commits into from
Nov 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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