Danube River: Difference between revisions

From LibreSilicon
Jump to navigation Jump to search
 
(28 intermediate revisions by the same user not shown)
Line 12: Line 12:


== Successful tapeouts ==
== Successful tapeouts ==
We successfully taped out Danube River for Global Foundries 180nm: [[Danube River (GF180)]]


So far, the only opportunity we had to try the new test layout generator, was with Global Foundries on their 180nm node, of which the result can be seen in the picture below:
[[File:Danube GF180.png|A successful tapeout with GF180|none|thumb|400x400px|alt=A successful tapeout with GF180]]The tapeout happened with the GDS2 files from the patch level at commit 42f33bb0988a81749da30af46769e721983bb5b1:
https://gitlab.libresilicon.com/generator-tools/danube-river/-/tree/42f33bb0988a81749da30af46769e721983bb5b1
McMaster made a zoomable animated image where you even can zoom in so much that you can read the text
https://siliconpr0n.org/map/efabless/gf180mcu-mpw18h1-18100001/mcmaster_mz_mit20x/#x=8416&y=11120&z=2


So far, the only opportunity we had to try the new test layout generator, was with Global Foundries on their 180nm node, of which the result can be seen in the picture below:
[[File:Danube GF180.png|A successful tapeout with GF180|alt=A successful tapeout with GF180|frame|none]]
== GDS2 view ==
== GDS2 view ==
The upper left section in the above image corresponds with the layout extracted from KLayout, when opening up the [https://gitlab.libresilicon.com/generator-tools/danube-river/-/blob/master/tapeout/gf180.gds?ref_type=heads layout used for the tape-out]
The upper left section in the above image corresponds with the layout extracted from KLayout, when opening up the [https://gitlab.libresilicon.com/generator-tools/danube-river/-/blob/master/tapeout/gf180.gds?ref_type=heads layout used for the tape-out]
Line 33: Line 37:


=== Resistors ===
=== Resistors ===
There's three types of resistive test structures on Danube River, due to variations in sheet resistance vs. area and length requirements.
For each sheet resistance characterization there's each a vertical and horizontal configuration in order to catch any potential variance in sheet resistance due to the orientation, which might occur due to the crystal orientation of the substrate being used, like <100>, <110>, and <111><ref>https://www.universitywafer.com/silicon-orientation.html</ref>
After having determined the voltage over each test resistor, when applying a constant current, the resistance can be calculated using simple Ohm's law <math>R={U \over I}</math>
==== Strip Resistors ====
The most simple form of a resistor simply is a straight sheet resistor between pad 1/2 and 3/4 for the vertical sheet resistance characterization and pad 1/4 to 2/3 for horizontal characterization respectively.[[File:Strip resistors.png|none|thumb|KLayout view of strip resistors]]The resistance is being measured by applying a constant current between two of the pads and measuring the voltage over the other two pads.
Horizontal resistor: Apply constant current over 1 (one) and 2 (two), measure voltage over 4 (four) and 3 (three)
Vertical resistor: Apply constant current over 2 (two) and 3 (three), measure voltage over 1 (one) and 4 (four)
==== Small Meander Resistors ====
Danube River checks during generation whether the initial sheet resistance estimate in the initial calculated value map would result in a straight sheet resistor which still fits between the pads.
If the target resistance of for instance 100 Ohms can not be fit between the pads using a straight resistor, Danube River will generate a Meander structure instead, which if small enough for fitting between the pads will be placed as shown below.[[File:Small Meander Resistors.png|none|thumb|KLayout view of Small Meander Resistors]]The resistance is being measured by applying a constant current between two of the pads and measuring the voltage over the other two pads.
Horizontal resistor: Apply constant current over 2 (two) and 3 (three), measure voltage over 1 (one) and 4 (four)
Vertical resistor: Apply constant current over 1 (one) and 2 (two), measure voltage over 4 (four) and 3 (three)
==== Large Meander Resistors ====
[[File:Large Meander Resistors.png|none|thumb|KLayout view of Large Meander Resistors]]The resistance is being measured by applying a constant current between two of the pads and measuring the voltage over the other two pads.
Horizontal resistor: Apply constant current over 1 (one) and 4 (four), measure voltage over 2 (two) and 3 (three)
Vertical resistor: Apply constant current over 4 (four) and 3 (three), measure voltage over 1 (one) and 2 (two)


=== Capacitors ===
=== Capacitors ===
Those capacitors are of interest when it comes to determining parasitic factors like leakage current as well as parasitic capacity between layers.
The values extracted from measuring those structures will go into the optimization functions of the [[StdCellLib]] generator as well as the [[Pad Cell Generator]]
Below some of the capacitors on the test wafer can be seen in more detail.
Below some of the capacitors on the test wafer can be seen in more detail.
[[File:Capacitors in GDS2.png|none|frame|Closeup of capacitors in KLayout]]
[[File:Capacitors in GDS2.png|none|frame|Closeup of capacitors in KLayout]]With each capacitor pad 3 (three) and 4 (four) are connected to one electrode, 1 (one) and 2 (two) to the second electrode.
 
There's several ways of measuring the impedance of those structures,. Devices like keysight can directly measure the capacity and also an impedance vs. frequency curve.


=== Transistors ===
=== Transistors ===
On Danube River there are those very small structures connected the four pads, which for a change aren't connected and configured in a Kelvin configuration, because the pads go to source, drain, gate and bulk each.[[File:Transistor Structures.png|none|thumb|View of Transistor Structures in KLayout]]In the closeup below you can see an annotated zoom in onto one of the structures, with each contact being labeled.
[[File:Closeup FETs.png|none|thumb|Closeup FETs]]
Those structures are probably the most difficult ones to identify.
It's the smallest ones without any pads being shorted to each other with large strips.
Simply use the Field Effect characterization function in your keysight or so and determine the gain and other values.
The pad assignments are:
# ONE: Source
# TWO: Gate
# THREE: Bulk
# FOUR: Drain
== Setup and Generation ==
You can either pull the latest Docker image, build your own Docker image using the Docker file linked below, or go through the Docker file and install the dependencies locally:
https://gitlab.libresilicon.com/leviathan/docker-files/-/blob/master/tools/Dockerfile?ref_type=heads<nowiki/>'
A pre-built Docker image has been pushed to leviathan's Dockerhub, and can be retrieved by running
docker pull leviathanch/libresilicon-tools:latest
In case you are adding a new technology node in [[LibrePDK]], it's better you install everything locally, make a pull request and wait until your technology node is being included in the Docker build
Generating a new test wafer is as easy as providing it the wafer configuration as well as the name of the output GDSII file, it will also generate you a PDF with all the structures and info on how to measure it as well as a CSV file with the coordinates for automated measurement.
Installing the dependencies, minus the LaTeX stuff (see the Docker file for it), basically goes something like
python3 -m venv .venv
. .venv/bin/activate
pip install git+<nowiki>https://gitlab.libresilicon.com/generator-tools/librepdk.git</nowiki>
git clone <nowiki>https://gitlab.libresilicon.com/generator-tools/danube-river.git</nowiki>
cd danube-river && pip install . && cd ..
You can for instance run this command for generating the wafer for LS1U (LibreSilicon 1 micron)
. .venv/bin/activate
cd danube-river
danube_generate -c configs/kacst-ls1u.cfg -o tapeout/kacst-ls1u.gds
== Releases and pipelining ==
Check the pipeline artifacts for the most recent generation outputs from out GitLab CI/CD pipeline and see whether the foundry you wanna target already had a Danube River generated and one in tapeout.
As soon as we get more than just GF180, for which we don't even have all the data, we will start providing pages with tables of all the measurements.
https://gitlab.libresilicon.com/generator-tools/danube-river/-/pipelines/130


== Measuring method ==
== References ==
TODO: Elaborate Kelvin structures
<references />

Latest revision as of 02:50, 24 November 2025

Danube River is a tool, which generates you GDS2 files which you then can manufacture with your prototype process flow in order to validate parameters and adjust your recipes until the values are within a desired range.

Use cases

Setting up a new fab

In case you wanna build a new factory, you basically tape out your Danube River layout over and over again while adjusting the recipes and design rules until the structures aren't broken anymore under the microscope and the values you measure match the predictions you've calculated.

Danube River flow for setting up a new fab

Setting up support for an existing fab

In case you already have a working process and foundry available, but you're not sure that the timing characteristics they've provided are accurate, you can use Danube River for extracting your own timing characteristics.

Danube River flow for supporting existing process

Successful tapeouts

So far, the only opportunity we had to try the new test layout generator, was with Global Foundries on their 180nm node, of which the result can be seen in the picture below:

A successful tapeout with GF180
A successful tapeout with GF180

The tapeout happened with the GDS2 files from the patch level at commit 42f33bb0988a81749da30af46769e721983bb5b1:

https://gitlab.libresilicon.com/generator-tools/danube-river/-/tree/42f33bb0988a81749da30af46769e721983bb5b1

McMaster made a zoomable animated image where you even can zoom in so much that you can read the text

https://siliconpr0n.org/map/efabless/gf180mcu-mpw18h1-18100001/mcmaster_mz_mit20x/#x=8416&y=11120&z=2

GDS2 view

The upper left section in the above image corresponds with the layout extracted from KLayout, when opening up the layout used for the tape-out

KLayout view of the Danube GF180 layout

Structures

The Danube test wafer has the purpose of allowing to characterize basic analog properties resulting from the manufacturing process flow.

Each of those properties measured can be linked to a specific recipe in the process flow, which allows to fine tune a process and all its process recipes through repeatedly manufacturing and measuring the Danube river layout.

The Danube river contains 3 types of devices, which allows you to determine edge parameters:

  • Resistors
  • Capacitors
  • Transistors

Resistors

There's three types of resistive test structures on Danube River, due to variations in sheet resistance vs. area and length requirements.

For each sheet resistance characterization there's each a vertical and horizontal configuration in order to catch any potential variance in sheet resistance due to the orientation, which might occur due to the crystal orientation of the substrate being used, like <100>, <110>, and <111>[1]

After having determined the voltage over each test resistor, when applying a constant current, the resistance can be calculated using simple Ohm's law R=UI

Strip Resistors

The most simple form of a resistor simply is a straight sheet resistor between pad 1/2 and 3/4 for the vertical sheet resistance characterization and pad 1/4 to 2/3 for horizontal characterization respectively.

KLayout view of strip resistors

The resistance is being measured by applying a constant current between two of the pads and measuring the voltage over the other two pads.

Horizontal resistor: Apply constant current over 1 (one) and 2 (two), measure voltage over 4 (four) and 3 (three)

Vertical resistor: Apply constant current over 2 (two) and 3 (three), measure voltage over 1 (one) and 4 (four)

Small Meander Resistors

Danube River checks during generation whether the initial sheet resistance estimate in the initial calculated value map would result in a straight sheet resistor which still fits between the pads.

If the target resistance of for instance 100 Ohms can not be fit between the pads using a straight resistor, Danube River will generate a Meander structure instead, which if small enough for fitting between the pads will be placed as shown below.

KLayout view of Small Meander Resistors

The resistance is being measured by applying a constant current between two of the pads and measuring the voltage over the other two pads.

Horizontal resistor: Apply constant current over 2 (two) and 3 (three), measure voltage over 1 (one) and 4 (four)

Vertical resistor: Apply constant current over 1 (one) and 2 (two), measure voltage over 4 (four) and 3 (three)

Large Meander Resistors

KLayout view of Large Meander Resistors

The resistance is being measured by applying a constant current between two of the pads and measuring the voltage over the other two pads.

Horizontal resistor: Apply constant current over 1 (one) and 4 (four), measure voltage over 2 (two) and 3 (three)

Vertical resistor: Apply constant current over 4 (four) and 3 (three), measure voltage over 1 (one) and 2 (two)

Capacitors

Those capacitors are of interest when it comes to determining parasitic factors like leakage current as well as parasitic capacity between layers.

The values extracted from measuring those structures will go into the optimization functions of the StdCellLib generator as well as the Pad Cell Generator

Below some of the capacitors on the test wafer can be seen in more detail.

Closeup of capacitors in KLayout

With each capacitor pad 3 (three) and 4 (four) are connected to one electrode, 1 (one) and 2 (two) to the second electrode.

There's several ways of measuring the impedance of those structures,. Devices like keysight can directly measure the capacity and also an impedance vs. frequency curve.

Transistors

On Danube River there are those very small structures connected the four pads, which for a change aren't connected and configured in a Kelvin configuration, because the pads go to source, drain, gate and bulk each.

View of Transistor Structures in KLayout

In the closeup below you can see an annotated zoom in onto one of the structures, with each contact being labeled.

Closeup FETs

Those structures are probably the most difficult ones to identify.

It's the smallest ones without any pads being shorted to each other with large strips.

Simply use the Field Effect characterization function in your keysight or so and determine the gain and other values.

The pad assignments are:

  1. ONE: Source
  2. TWO: Gate
  3. THREE: Bulk
  4. FOUR: Drain

Setup and Generation

You can either pull the latest Docker image, build your own Docker image using the Docker file linked below, or go through the Docker file and install the dependencies locally:

https://gitlab.libresilicon.com/leviathan/docker-files/-/blob/master/tools/Dockerfile?ref_type=heads'

A pre-built Docker image has been pushed to leviathan's Dockerhub, and can be retrieved by running

docker pull leviathanch/libresilicon-tools:latest

In case you are adding a new technology node in LibrePDK, it's better you install everything locally, make a pull request and wait until your technology node is being included in the Docker build

Generating a new test wafer is as easy as providing it the wafer configuration as well as the name of the output GDSII file, it will also generate you a PDF with all the structures and info on how to measure it as well as a CSV file with the coordinates for automated measurement.

Installing the dependencies, minus the LaTeX stuff (see the Docker file for it), basically goes something like

python3 -m venv .venv
. .venv/bin/activate
pip install git+https://gitlab.libresilicon.com/generator-tools/librepdk.git
git clone https://gitlab.libresilicon.com/generator-tools/danube-river.git
cd danube-river && pip install . && cd ..

You can for instance run this command for generating the wafer for LS1U (LibreSilicon 1 micron)

. .venv/bin/activate
cd danube-river
danube_generate -c configs/kacst-ls1u.cfg -o tapeout/kacst-ls1u.gds

Releases and pipelining

Check the pipeline artifacts for the most recent generation outputs from out GitLab CI/CD pipeline and see whether the foundry you wanna target already had a Danube River generated and one in tapeout.

As soon as we get more than just GF180, for which we don't even have all the data, we will start providing pages with tables of all the measurements.

https://gitlab.libresilicon.com/generator-tools/danube-river/-/pipelines/130

References