<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.libresilicon.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Leviathan</id>
	<title>LibreSilicon - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.libresilicon.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Leviathan"/>
	<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=Special:Contributions/Leviathan"/>
	<updated>2026-09-13T06:07:03Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_GF180A@3.3V&amp;diff=818</id>
		<title>LibrePDK Padframe SPICE Verification Report GF180A@3.3V</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_GF180A@3.3V&amp;diff=818"/>
		<updated>2026-09-01T16:40:39Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* 4. Full Dynamic Loopback */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LibrePDK Padframe SPICE Verification Report =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technology:&#039;&#039;&#039; IHP SG13G2 (130nm BiCMOS)  &lt;br /&gt;
&#039;&#039;&#039;Operating Voltage:&#039;&#039;&#039; 3.3 V  &lt;br /&gt;
&#039;&#039;&#039;Verification Date:&#039;&#039;&#039; 2026-09-01 16:01:45 UTC  &lt;br /&gt;
&#039;&#039;&#039;Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt; (Magic VLSI Hierarchical Extraction)  &lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:90%;&amp;quot;&lt;br /&gt;
! Test Scenario !! Target Net / Pad !! Measured Values !! Design Specification !! Status&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;ESD Clamping Transient&#039;&#039;&#039; || PAD_GPIO_0 (ESD Clamps) || Peak Clamped: 4.30 V || &amp;lt; 15.0 V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Output Drive (Write)&#039;&#039;&#039; || gpio_out_0 → PAD_GPIO_0 || Low: 2.84 V, High: 0.65 V || Rail-to-rail driver transition || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Input Sensing (Read / Hi-Z)&#039;&#039;&#039; || PAD_GPIO_1 → gpio_in_1 || Pad 0V → 0.00 V, Pad 3.3V → 2.87 V || Pad 0V -&amp;gt; Core &amp;gt; 0.8V, Pad 3.3V -&amp;gt; Core &amp;lt; 0.2V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Pad-to-Pad Dynamic Loopback&#039;&#039;&#039; || PAD_GPIO_0 → PAD_GPIO_1 || Bus: 1.40V / 1.37V | Rx: 2.85V / -0.01V || Full rail-to-rail dynamic loopback across frame || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Core Signal &amp;amp; Bonding Pad Interface Mapping ==&lt;br /&gt;
The LibrePDK padframe generator exposed unique net names defined in the JSON configuration for seamless Coriolis LEF/DEF digital core integration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:90%; font-family:monospace;&amp;quot;&lt;br /&gt;
! Subcircuit Port Name !! Direction !! Interface Type !! Associated Physical Layer&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VDD&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VSS&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_0&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_0&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_1&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_1&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MISO&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_CS&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_TX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_RX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_SCLK&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MOSI&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Transient Simulation Waveforms ==&lt;br /&gt;
&lt;br /&gt;
=== 1. ESD Clamping Event ===&lt;br /&gt;
Transient simulation applying a 2kV / 1.33A peak Human Body Model (HBM) current pulse directly to the bonding pad:&lt;br /&gt;
[[File:Sim 1 esd clamping GF180A@3.3V.png|thumb|center|700px|ESD Diode and Rail Clamping Response under 1.33A Transient Current Pulse]]&lt;br /&gt;
&lt;br /&gt;
=== 2. Digital Output Drive (Write) ===&lt;br /&gt;
Driving output data from the digital core logic through the pad cell driver transistors onto the external bonding pad:&lt;br /&gt;
[[File:Sim 2 signal write GF180A@3.3V.png|thumb|center|700px|Signal Write: Core OUT driving Bonding Pad (0V to 3.3V)]]&lt;br /&gt;
&lt;br /&gt;
=== 3. Digital Input Sensing (Read / Hi-Z) ===&lt;br /&gt;
External signal applied to the bonding pad in tristate / Hi-Z mode, sensed by the internal core input buffer:&lt;br /&gt;
[[File:Sim 3 signal read hiz GF180A@3.3V.png|thumb|center|700px|Signal Read: External Bonding Pad voltage sensed at Core IN]]&lt;br /&gt;
&lt;br /&gt;
=== 4. Full Dynamic Loopback ===&lt;br /&gt;
End-to-end signal transmission across the entire chip: Core Transmitter (Pad A) drives the shared bonding wire bus, sensed by Core Receiver (Pad B):&lt;br /&gt;
[[File:Sim 4 pad to pad loopback GF180A@3.3V.png|thumb|center|700px|Pad-to-Pad Dynamic Loopback: Transmitter OUT to Receiver IN]]&lt;br /&gt;
&lt;br /&gt;
== Physical Verification &amp;amp; GDS Delivery ==&lt;br /&gt;
* &#039;&#039;&#039;GDSII Top Level:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.raw.gds&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;padframe.gds&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Magic Layout:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.mag&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SPICE Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Simulation Models:&#039;&#039;&#039; &amp;lt;code&amp;gt;model.spice&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;design_header.ngspice&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=Category:LibreSilicon Verification Reports]]&lt;br /&gt;
[[index.php?title=Category:LibrePDK]]&lt;br /&gt;
[[index.php?title=Category:SG13G2]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_GF180A@3.3V&amp;diff=817</id>
		<title>LibrePDK Padframe SPICE Verification Report GF180A@3.3V</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_GF180A@3.3V&amp;diff=817"/>
		<updated>2026-09-01T16:39:56Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LibrePDK Padframe SPICE Verification Report =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technology:&#039;&#039;&#039; IHP SG13G2 (130nm BiCMOS)  &lt;br /&gt;
&#039;&#039;&#039;Operating Voltage:&#039;&#039;&#039; 3.3 V  &lt;br /&gt;
&#039;&#039;&#039;Verification Date:&#039;&#039;&#039; 2026-09-01 16:01:45 UTC  &lt;br /&gt;
&#039;&#039;&#039;Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt; (Magic VLSI Hierarchical Extraction)  &lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:90%;&amp;quot;&lt;br /&gt;
! Test Scenario !! Target Net / Pad !! Measured Values !! Design Specification !! Status&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;ESD Clamping Transient&#039;&#039;&#039; || PAD_GPIO_0 (ESD Clamps) || Peak Clamped: 4.30 V || &amp;lt; 15.0 V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Output Drive (Write)&#039;&#039;&#039; || gpio_out_0 → PAD_GPIO_0 || Low: 2.84 V, High: 0.65 V || Rail-to-rail driver transition || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Input Sensing (Read / Hi-Z)&#039;&#039;&#039; || PAD_GPIO_1 → gpio_in_1 || Pad 0V → 0.00 V, Pad 3.3V → 2.87 V || Pad 0V -&amp;gt; Core &amp;gt; 0.8V, Pad 3.3V -&amp;gt; Core &amp;lt; 0.2V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Pad-to-Pad Dynamic Loopback&#039;&#039;&#039; || PAD_GPIO_0 → PAD_GPIO_1 || Bus: 1.40V / 1.37V | Rx: 2.85V / -0.01V || Full rail-to-rail dynamic loopback across frame || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Core Signal &amp;amp; Bonding Pad Interface Mapping ==&lt;br /&gt;
The LibrePDK padframe generator exposed unique net names defined in the JSON configuration for seamless Coriolis LEF/DEF digital core integration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:90%; font-family:monospace;&amp;quot;&lt;br /&gt;
! Subcircuit Port Name !! Direction !! Interface Type !! Associated Physical Layer&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VDD&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VSS&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_0&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_0&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_1&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_1&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MISO&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_CS&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_TX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_RX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_SCLK&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MOSI&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Transient Simulation Waveforms ==&lt;br /&gt;
&lt;br /&gt;
=== 1. ESD Clamping Event ===&lt;br /&gt;
Transient simulation applying a 2kV / 1.33A peak Human Body Model (HBM) current pulse directly to the bonding pad:&lt;br /&gt;
[[File:Sim 1 esd clamping GF180A@3.3V.png|thumb|center|700px|ESD Diode and Rail Clamping Response under 1.33A Transient Current Pulse]]&lt;br /&gt;
&lt;br /&gt;
=== 2. Digital Output Drive (Write) ===&lt;br /&gt;
Driving output data from the digital core logic through the pad cell driver transistors onto the external bonding pad:&lt;br /&gt;
[[File:Sim 2 signal write GF180A@3.3V.png|thumb|center|700px|Signal Write: Core OUT driving Bonding Pad (0V to 3.3V)]]&lt;br /&gt;
&lt;br /&gt;
=== 3. Digital Input Sensing (Read / Hi-Z) ===&lt;br /&gt;
External signal applied to the bonding pad in tristate / Hi-Z mode, sensed by the internal core input buffer:&lt;br /&gt;
[[File:Sim 3 signal read hiz GF180A@3.3V.png|thumb|center|700px|Signal Read: External Bonding Pad voltage sensed at Core IN]]&lt;br /&gt;
&lt;br /&gt;
=== 4. Full Dynamic Loopback ===&lt;br /&gt;
End-to-end signal transmission across the entire chip: Core Transmitter (Pad A) drives the shared bonding wire bus, sensed by Core Receiver (Pad B):&lt;br /&gt;
[[File:File:Sim 4 pad to pad loopback GF180A@3.3V.png|thumb|center|700px|Pad-to-Pad Dynamic Loopback: Transmitter OUT to Receiver IN]]&lt;br /&gt;
&lt;br /&gt;
== Physical Verification &amp;amp; GDS Delivery ==&lt;br /&gt;
* &#039;&#039;&#039;GDSII Top Level:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.raw.gds&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;padframe.gds&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Magic Layout:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.mag&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SPICE Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Simulation Models:&#039;&#039;&#039; &amp;lt;code&amp;gt;model.spice&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;design_header.ngspice&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=Category:LibreSilicon Verification Reports]]&lt;br /&gt;
[[index.php?title=Category:LibrePDK]]&lt;br /&gt;
[[index.php?title=Category:SG13G2]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_GF180A@3.3V&amp;diff=816</id>
		<title>LibrePDK Padframe SPICE Verification Report GF180A@3.3V</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_GF180A@3.3V&amp;diff=816"/>
		<updated>2026-09-01T16:39:29Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* 4. Full Dynamic Loopback */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LibrePDK Padframe SPICE Verification Report =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technology:&#039;&#039;&#039; IHP SG13G2 (130nm BiCMOS)  &lt;br /&gt;
&#039;&#039;&#039;Operating Voltage:&#039;&#039;&#039; 3.3 V  &lt;br /&gt;
&#039;&#039;&#039;Verification Date:&#039;&#039;&#039; 2026-09-01 16:01:45 UTC  &lt;br /&gt;
&#039;&#039;&#039;Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt; (Magic VLSI Hierarchical Extraction)  &lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:90%;&amp;quot;&lt;br /&gt;
! Test Scenario !! Target Net / Pad !! Measured Values !! Design Specification !! Status&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;ESD Clamping Transient&#039;&#039;&#039; || PAD_GPIO_0 (ESD Clamps) || Peak Clamped: 4.30 V || &amp;lt; 15.0 V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Output Drive (Write)&#039;&#039;&#039; || gpio_out_0 → PAD_GPIO_0 || Low: 2.84 V, High: 0.65 V || Rail-to-rail driver transition || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Input Sensing (Read / Hi-Z)&#039;&#039;&#039; || PAD_GPIO_1 → gpio_in_1 || Pad 0V → 0.00 V, Pad 3.3V → 2.87 V || Pad 0V -&amp;gt; Core &amp;gt; 0.8V, Pad 3.3V -&amp;gt; Core &amp;lt; 0.2V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Pad-to-Pad Dynamic Loopback&#039;&#039;&#039; || PAD_GPIO_0 → PAD_GPIO_1 || Bus: 1.40V / 1.37V | Rx: 2.85V / -0.01V || Full rail-to-rail dynamic loopback across frame || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Core Signal &amp;amp; Bonding Pad Interface Mapping ==&lt;br /&gt;
The LibrePDK padframe generator exposed unique net names defined in the JSON configuration for seamless Coriolis LEF/DEF digital core integration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:90%; font-family:monospace;&amp;quot;&lt;br /&gt;
! Subcircuit Port Name !! Direction !! Interface Type !! Associated Physical Layer&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VDD&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VSS&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_0&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_0&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_1&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_1&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MISO&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_CS&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_TX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_RX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_SCLK&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MOSI&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Transient Simulation Waveforms ==&lt;br /&gt;
&lt;br /&gt;
=== 1. ESD Clamping Event ===&lt;br /&gt;
Transient simulation applying a 2kV / 1.33A peak Human Body Model (HBM) current pulse directly to the bonding pad:&lt;br /&gt;
[[File:Sim 1 esd clamping GF180A@3.3V.png|thumb|center|700px|ESD Diode and Rail Clamping Response under 1.33A Transient Current Pulse]]&lt;br /&gt;
&lt;br /&gt;
=== 2. Digital Output Drive (Write) ===&lt;br /&gt;
Driving output data from the digital core logic through the pad cell driver transistors onto the external bonding pad:&lt;br /&gt;
[[File:Sim 2 signal write GF180A@3.3V.png|thumb|center|700px|Signal Write: Core OUT driving Bonding Pad (0V to 3.3V)]]&lt;br /&gt;
&lt;br /&gt;
=== 3. Digital Input Sensing (Read / Hi-Z) ===&lt;br /&gt;
External signal applied to the bonding pad in tristate / Hi-Z mode, sensed by the internal core input buffer:&lt;br /&gt;
☢&lt;br /&gt;
[[File:Sim 3 signal read hiz GF180A@3.3V.png|thumb|center|700px|Signal Read: External Bonding Pad voltage sensed at Core IN]]&lt;br /&gt;
&lt;br /&gt;
=== 4. Full Dynamic Loopback ===&lt;br /&gt;
End-to-end signal transmission across the entire chip: Core Transmitter (Pad A) drives the shared bonding wire bus, sensed by Core Receiver (Pad B):&lt;br /&gt;
☢&lt;br /&gt;
[[File:File:Sim 4 pad to pad loopback GF180A@3.3V.png|thumb|center|700px|Pad-to-Pad Dynamic Loopback: Transmitter OUT to Receiver IN]]&lt;br /&gt;
&lt;br /&gt;
== Physical Verification &amp;amp; GDS Delivery ==&lt;br /&gt;
* &#039;&#039;&#039;GDSII Top Level:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.raw.gds&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;padframe.gds&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Magic Layout:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.mag&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SPICE Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Simulation Models:&#039;&#039;&#039; &amp;lt;code&amp;gt;model.spice&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;design_header.ngspice&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=Category:LibreSilicon Verification Reports]]&lt;br /&gt;
[[index.php?title=Category:LibrePDK]]&lt;br /&gt;
[[index.php?title=Category:SG13G2]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_GF180A@3.3V&amp;diff=815</id>
		<title>LibrePDK Padframe SPICE Verification Report GF180A@3.3V</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_GF180A@3.3V&amp;diff=815"/>
		<updated>2026-09-01T16:39:11Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* 3. Digital Input Sensing (Read / Hi-Z) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LibrePDK Padframe SPICE Verification Report =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technology:&#039;&#039;&#039; IHP SG13G2 (130nm BiCMOS)  &lt;br /&gt;
&#039;&#039;&#039;Operating Voltage:&#039;&#039;&#039; 3.3 V  &lt;br /&gt;
&#039;&#039;&#039;Verification Date:&#039;&#039;&#039; 2026-09-01 16:01:45 UTC  &lt;br /&gt;
&#039;&#039;&#039;Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt; (Magic VLSI Hierarchical Extraction)  &lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:90%;&amp;quot;&lt;br /&gt;
! Test Scenario !! Target Net / Pad !! Measured Values !! Design Specification !! Status&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;ESD Clamping Transient&#039;&#039;&#039; || PAD_GPIO_0 (ESD Clamps) || Peak Clamped: 4.30 V || &amp;lt; 15.0 V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Output Drive (Write)&#039;&#039;&#039; || gpio_out_0 → PAD_GPIO_0 || Low: 2.84 V, High: 0.65 V || Rail-to-rail driver transition || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Input Sensing (Read / Hi-Z)&#039;&#039;&#039; || PAD_GPIO_1 → gpio_in_1 || Pad 0V → 0.00 V, Pad 3.3V → 2.87 V || Pad 0V -&amp;gt; Core &amp;gt; 0.8V, Pad 3.3V -&amp;gt; Core &amp;lt; 0.2V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Pad-to-Pad Dynamic Loopback&#039;&#039;&#039; || PAD_GPIO_0 → PAD_GPIO_1 || Bus: 1.40V / 1.37V | Rx: 2.85V / -0.01V || Full rail-to-rail dynamic loopback across frame || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Core Signal &amp;amp; Bonding Pad Interface Mapping ==&lt;br /&gt;
The LibrePDK padframe generator exposed unique net names defined in the JSON configuration for seamless Coriolis LEF/DEF digital core integration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:90%; font-family:monospace;&amp;quot;&lt;br /&gt;
! Subcircuit Port Name !! Direction !! Interface Type !! Associated Physical Layer&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VDD&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VSS&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_0&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_0&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_1&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_1&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MISO&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_CS&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_TX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_RX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_SCLK&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MOSI&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Transient Simulation Waveforms ==&lt;br /&gt;
&lt;br /&gt;
=== 1. ESD Clamping Event ===&lt;br /&gt;
Transient simulation applying a 2kV / 1.33A peak Human Body Model (HBM) current pulse directly to the bonding pad:&lt;br /&gt;
[[File:Sim 1 esd clamping GF180A@3.3V.png|thumb|center|700px|ESD Diode and Rail Clamping Response under 1.33A Transient Current Pulse]]&lt;br /&gt;
&lt;br /&gt;
=== 2. Digital Output Drive (Write) ===&lt;br /&gt;
Driving output data from the digital core logic through the pad cell driver transistors onto the external bonding pad:&lt;br /&gt;
[[File:Sim 2 signal write GF180A@3.3V.png|thumb|center|700px|Signal Write: Core OUT driving Bonding Pad (0V to 3.3V)]]&lt;br /&gt;
&lt;br /&gt;
=== 3. Digital Input Sensing (Read / Hi-Z) ===&lt;br /&gt;
External signal applied to the bonding pad in tristate / Hi-Z mode, sensed by the internal core input buffer:&lt;br /&gt;
☢&lt;br /&gt;
[[File:Sim 3 signal read hiz GF180A@3.3V.png|thumb|center|700px|Signal Read: External Bonding Pad voltage sensed at Core IN]]&lt;br /&gt;
&lt;br /&gt;
=== 4. Full Dynamic Loopback ===&lt;br /&gt;
End-to-end signal transmission across the entire chip: Core Transmitter (Pad A) drives the shared bonding wire bus, sensed by Core Receiver (Pad B):&lt;br /&gt;
&lt;br /&gt;
[[File:Sim 4 pad to pad loopback GF180A@3.3V.png|none|thumb]]&lt;br /&gt;
☢&lt;br /&gt;
&lt;br /&gt;
[[File:sim_4_pad_to_pad_loopback.png|thumb|center|700px|Pad-to-Pad Dynamic Loopback: Transmitter OUT to Receiver IN]]&lt;br /&gt;
&lt;br /&gt;
== Physical Verification &amp;amp; GDS Delivery ==&lt;br /&gt;
* &#039;&#039;&#039;GDSII Top Level:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.raw.gds&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;padframe.gds&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Magic Layout:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.mag&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SPICE Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Simulation Models:&#039;&#039;&#039; &amp;lt;code&amp;gt;model.spice&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;design_header.ngspice&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=Category:LibreSilicon Verification Reports]]&lt;br /&gt;
[[index.php?title=Category:LibrePDK]]&lt;br /&gt;
[[index.php?title=Category:SG13G2]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_GF180A@3.3V&amp;diff=814</id>
		<title>LibrePDK Padframe SPICE Verification Report GF180A@3.3V</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_GF180A@3.3V&amp;diff=814"/>
		<updated>2026-09-01T16:38:55Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* 2. Digital Output Drive (Write) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LibrePDK Padframe SPICE Verification Report =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technology:&#039;&#039;&#039; IHP SG13G2 (130nm BiCMOS)  &lt;br /&gt;
&#039;&#039;&#039;Operating Voltage:&#039;&#039;&#039; 3.3 V  &lt;br /&gt;
&#039;&#039;&#039;Verification Date:&#039;&#039;&#039; 2026-09-01 16:01:45 UTC  &lt;br /&gt;
&#039;&#039;&#039;Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt; (Magic VLSI Hierarchical Extraction)  &lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:90%;&amp;quot;&lt;br /&gt;
! Test Scenario !! Target Net / Pad !! Measured Values !! Design Specification !! Status&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;ESD Clamping Transient&#039;&#039;&#039; || PAD_GPIO_0 (ESD Clamps) || Peak Clamped: 4.30 V || &amp;lt; 15.0 V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Output Drive (Write)&#039;&#039;&#039; || gpio_out_0 → PAD_GPIO_0 || Low: 2.84 V, High: 0.65 V || Rail-to-rail driver transition || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Input Sensing (Read / Hi-Z)&#039;&#039;&#039; || PAD_GPIO_1 → gpio_in_1 || Pad 0V → 0.00 V, Pad 3.3V → 2.87 V || Pad 0V -&amp;gt; Core &amp;gt; 0.8V, Pad 3.3V -&amp;gt; Core &amp;lt; 0.2V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Pad-to-Pad Dynamic Loopback&#039;&#039;&#039; || PAD_GPIO_0 → PAD_GPIO_1 || Bus: 1.40V / 1.37V | Rx: 2.85V / -0.01V || Full rail-to-rail dynamic loopback across frame || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Core Signal &amp;amp; Bonding Pad Interface Mapping ==&lt;br /&gt;
The LibrePDK padframe generator exposed unique net names defined in the JSON configuration for seamless Coriolis LEF/DEF digital core integration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:90%; font-family:monospace;&amp;quot;&lt;br /&gt;
! Subcircuit Port Name !! Direction !! Interface Type !! Associated Physical Layer&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VDD&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VSS&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_0&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_0&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_1&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_1&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MISO&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_CS&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_TX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_RX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_SCLK&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MOSI&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Transient Simulation Waveforms ==&lt;br /&gt;
&lt;br /&gt;
=== 1. ESD Clamping Event ===&lt;br /&gt;
Transient simulation applying a 2kV / 1.33A peak Human Body Model (HBM) current pulse directly to the bonding pad:&lt;br /&gt;
[[File:Sim 1 esd clamping GF180A@3.3V.png|thumb|center|700px|ESD Diode and Rail Clamping Response under 1.33A Transient Current Pulse]]&lt;br /&gt;
&lt;br /&gt;
=== 2. Digital Output Drive (Write) ===&lt;br /&gt;
Driving output data from the digital core logic through the pad cell driver transistors onto the external bonding pad:&lt;br /&gt;
[[File:Sim 2 signal write GF180A@3.3V.png|thumb|center|700px|Signal Write: Core OUT driving Bonding Pad (0V to 3.3V)]]&lt;br /&gt;
&lt;br /&gt;
=== 3. Digital Input Sensing (Read / Hi-Z) ===&lt;br /&gt;
External signal applied to the bonding pad in tristate / Hi-Z mode, sensed by the internal core input buffer:&lt;br /&gt;
[[File:Sim 3 signal read hiz GF180A@3.3V.png|none|thumb]]&lt;br /&gt;
☢&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:sim_3_signal_read_hiz.png|thumb|center|700px|Signal Read: External Bonding Pad voltage sensed at Core IN]]&lt;br /&gt;
&lt;br /&gt;
=== 4. Full Dynamic Loopback ===&lt;br /&gt;
End-to-end signal transmission across the entire chip: Core Transmitter (Pad A) drives the shared bonding wire bus, sensed by Core Receiver (Pad B):&lt;br /&gt;
&lt;br /&gt;
[[File:Sim 4 pad to pad loopback GF180A@3.3V.png|none|thumb]]&lt;br /&gt;
☢&lt;br /&gt;
&lt;br /&gt;
[[File:sim_4_pad_to_pad_loopback.png|thumb|center|700px|Pad-to-Pad Dynamic Loopback: Transmitter OUT to Receiver IN]]&lt;br /&gt;
&lt;br /&gt;
== Physical Verification &amp;amp; GDS Delivery ==&lt;br /&gt;
* &#039;&#039;&#039;GDSII Top Level:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.raw.gds&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;padframe.gds&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Magic Layout:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.mag&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SPICE Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Simulation Models:&#039;&#039;&#039; &amp;lt;code&amp;gt;model.spice&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;design_header.ngspice&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=Category:LibreSilicon Verification Reports]]&lt;br /&gt;
[[index.php?title=Category:LibrePDK]]&lt;br /&gt;
[[index.php?title=Category:SG13G2]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_GF180A@3.3V&amp;diff=813</id>
		<title>LibrePDK Padframe SPICE Verification Report GF180A@3.3V</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_GF180A@3.3V&amp;diff=813"/>
		<updated>2026-09-01T16:38:39Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* 2. Digital Output Drive (Write) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LibrePDK Padframe SPICE Verification Report =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technology:&#039;&#039;&#039; IHP SG13G2 (130nm BiCMOS)  &lt;br /&gt;
&#039;&#039;&#039;Operating Voltage:&#039;&#039;&#039; 3.3 V  &lt;br /&gt;
&#039;&#039;&#039;Verification Date:&#039;&#039;&#039; 2026-09-01 16:01:45 UTC  &lt;br /&gt;
&#039;&#039;&#039;Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt; (Magic VLSI Hierarchical Extraction)  &lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:90%;&amp;quot;&lt;br /&gt;
! Test Scenario !! Target Net / Pad !! Measured Values !! Design Specification !! Status&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;ESD Clamping Transient&#039;&#039;&#039; || PAD_GPIO_0 (ESD Clamps) || Peak Clamped: 4.30 V || &amp;lt; 15.0 V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Output Drive (Write)&#039;&#039;&#039; || gpio_out_0 → PAD_GPIO_0 || Low: 2.84 V, High: 0.65 V || Rail-to-rail driver transition || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Input Sensing (Read / Hi-Z)&#039;&#039;&#039; || PAD_GPIO_1 → gpio_in_1 || Pad 0V → 0.00 V, Pad 3.3V → 2.87 V || Pad 0V -&amp;gt; Core &amp;gt; 0.8V, Pad 3.3V -&amp;gt; Core &amp;lt; 0.2V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Pad-to-Pad Dynamic Loopback&#039;&#039;&#039; || PAD_GPIO_0 → PAD_GPIO_1 || Bus: 1.40V / 1.37V | Rx: 2.85V / -0.01V || Full rail-to-rail dynamic loopback across frame || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Core Signal &amp;amp; Bonding Pad Interface Mapping ==&lt;br /&gt;
The LibrePDK padframe generator exposed unique net names defined in the JSON configuration for seamless Coriolis LEF/DEF digital core integration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:90%; font-family:monospace;&amp;quot;&lt;br /&gt;
! Subcircuit Port Name !! Direction !! Interface Type !! Associated Physical Layer&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VDD&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VSS&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_0&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_0&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_1&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_1&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MISO&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_CS&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_TX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_RX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_SCLK&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MOSI&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Transient Simulation Waveforms ==&lt;br /&gt;
&lt;br /&gt;
=== 1. ESD Clamping Event ===&lt;br /&gt;
Transient simulation applying a 2kV / 1.33A peak Human Body Model (HBM) current pulse directly to the bonding pad:&lt;br /&gt;
[[File:Sim 1 esd clamping GF180A@3.3V.png|thumb|center|700px|ESD Diode and Rail Clamping Response under 1.33A Transient Current Pulse]]&lt;br /&gt;
&lt;br /&gt;
=== 2. Digital Output Drive (Write) ===&lt;br /&gt;
Driving output data from the digital core logic through the pad cell driver transistors onto the external bonding pad:&lt;br /&gt;
[[File:Sim 2 signal write GF180A@3.3V.png|none|thumb]]&lt;br /&gt;
&lt;br /&gt;
[[File:sim_2_signal_write.png|thumb|center|700px|Signal Write: Core OUT driving Bonding Pad (0V to 3.3V)]]&lt;br /&gt;
&lt;br /&gt;
=== 3. Digital Input Sensing (Read / Hi-Z) ===&lt;br /&gt;
External signal applied to the bonding pad in tristate / Hi-Z mode, sensed by the internal core input buffer:&lt;br /&gt;
[[File:Sim 3 signal read hiz GF180A@3.3V.png|none|thumb]]&lt;br /&gt;
☢&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:sim_3_signal_read_hiz.png|thumb|center|700px|Signal Read: External Bonding Pad voltage sensed at Core IN]]&lt;br /&gt;
&lt;br /&gt;
=== 4. Full Dynamic Loopback ===&lt;br /&gt;
End-to-end signal transmission across the entire chip: Core Transmitter (Pad A) drives the shared bonding wire bus, sensed by Core Receiver (Pad B):&lt;br /&gt;
&lt;br /&gt;
[[File:Sim 4 pad to pad loopback GF180A@3.3V.png|none|thumb]]&lt;br /&gt;
☢&lt;br /&gt;
&lt;br /&gt;
[[File:sim_4_pad_to_pad_loopback.png|thumb|center|700px|Pad-to-Pad Dynamic Loopback: Transmitter OUT to Receiver IN]]&lt;br /&gt;
&lt;br /&gt;
== Physical Verification &amp;amp; GDS Delivery ==&lt;br /&gt;
* &#039;&#039;&#039;GDSII Top Level:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.raw.gds&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;padframe.gds&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Magic Layout:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.mag&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SPICE Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Simulation Models:&#039;&#039;&#039; &amp;lt;code&amp;gt;model.spice&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;design_header.ngspice&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=Category:LibreSilicon Verification Reports]]&lt;br /&gt;
[[index.php?title=Category:LibrePDK]]&lt;br /&gt;
[[index.php?title=Category:SG13G2]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=File:Sim_4_pad_to_pad_loopback_GF180A@3.3V.png&amp;diff=812</id>
		<title>File:Sim 4 pad to pad loopback GF180A@3.3V.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=File:Sim_4_pad_to_pad_loopback_GF180A@3.3V.png&amp;diff=812"/>
		<updated>2026-09-01T16:38:30Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sim 4 pad to pad loopback GF180A@3.3V&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=File:Sim_3_signal_read_hiz_GF180A@3.3V.png&amp;diff=811</id>
		<title>File:Sim 3 signal read hiz GF180A@3.3V.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=File:Sim_3_signal_read_hiz_GF180A@3.3V.png&amp;diff=811"/>
		<updated>2026-09-01T16:38:06Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sim 3 signal read hiz GF180A@3.3V&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=File:Sim_2_signal_write_GF180A@3.3V.png&amp;diff=810</id>
		<title>File:Sim 2 signal write GF180A@3.3V.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=File:Sim_2_signal_write_GF180A@3.3V.png&amp;diff=810"/>
		<updated>2026-09-01T16:37:41Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sim 2 signal write GF180A@3.3V&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_GF180A@3.3V&amp;diff=809</id>
		<title>LibrePDK Padframe SPICE Verification Report GF180A@3.3V</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_GF180A@3.3V&amp;diff=809"/>
		<updated>2026-09-01T16:37:12Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LibrePDK Padframe SPICE Verification Report =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technology:&#039;&#039;&#039; IHP SG13G2 (130nm BiCMOS)  &lt;br /&gt;
&#039;&#039;&#039;Operating Voltage:&#039;&#039;&#039; 3.3 V  &lt;br /&gt;
&#039;&#039;&#039;Verification Date:&#039;&#039;&#039; 2026-09-01 16:01:45 UTC  &lt;br /&gt;
&#039;&#039;&#039;Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt; (Magic VLSI Hierarchical Extraction)  &lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:90%;&amp;quot;&lt;br /&gt;
! Test Scenario !! Target Net / Pad !! Measured Values !! Design Specification !! Status&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;ESD Clamping Transient&#039;&#039;&#039; || PAD_GPIO_0 (ESD Clamps) || Peak Clamped: 4.30 V || &amp;lt; 15.0 V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Output Drive (Write)&#039;&#039;&#039; || gpio_out_0 → PAD_GPIO_0 || Low: 2.84 V, High: 0.65 V || Rail-to-rail driver transition || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Input Sensing (Read / Hi-Z)&#039;&#039;&#039; || PAD_GPIO_1 → gpio_in_1 || Pad 0V → 0.00 V, Pad 3.3V → 2.87 V || Pad 0V -&amp;gt; Core &amp;gt; 0.8V, Pad 3.3V -&amp;gt; Core &amp;lt; 0.2V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Pad-to-Pad Dynamic Loopback&#039;&#039;&#039; || PAD_GPIO_0 → PAD_GPIO_1 || Bus: 1.40V / 1.37V | Rx: 2.85V / -0.01V || Full rail-to-rail dynamic loopback across frame || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Core Signal &amp;amp; Bonding Pad Interface Mapping ==&lt;br /&gt;
The LibrePDK padframe generator exposed unique net names defined in the JSON configuration for seamless Coriolis LEF/DEF digital core integration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:90%; font-family:monospace;&amp;quot;&lt;br /&gt;
! Subcircuit Port Name !! Direction !! Interface Type !! Associated Physical Layer&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VDD&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VSS&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_0&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_0&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_1&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_1&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MISO&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_CS&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_TX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_RX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_SCLK&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MOSI&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Transient Simulation Waveforms ==&lt;br /&gt;
&lt;br /&gt;
=== 1. ESD Clamping Event ===&lt;br /&gt;
Transient simulation applying a 2kV / 1.33A peak Human Body Model (HBM) current pulse directly to the bonding pad:&lt;br /&gt;
[[File:Sim 1 esd clamping GF180A@3.3V.png|thumb|center|700px|ESD Diode and Rail Clamping Response under 1.33A Transient Current Pulse]]&lt;br /&gt;
&lt;br /&gt;
=== 2. Digital Output Drive (Write) ===&lt;br /&gt;
Driving output data from the digital core logic through the pad cell driver transistors onto the external bonding pad:&lt;br /&gt;
&lt;br /&gt;
[[File:sim_2_signal_write.png|thumb|center|700px|Signal Write: Core OUT driving Bonding Pad (0V to 3.3V)]]&lt;br /&gt;
&lt;br /&gt;
=== 3. Digital Input Sensing (Read / Hi-Z) ===&lt;br /&gt;
External signal applied to the bonding pad in tristate / Hi-Z mode, sensed by the internal core input buffer:&lt;br /&gt;
&lt;br /&gt;
[[File:sim_3_signal_read_hiz.png|thumb|center|700px|Signal Read: External Bonding Pad voltage sensed at Core IN]]&lt;br /&gt;
&lt;br /&gt;
=== 4. Full Dynamic Loopback ===&lt;br /&gt;
End-to-end signal transmission across the entire chip: Core Transmitter (Pad A) drives the shared bonding wire bus, sensed by Core Receiver (Pad B):&lt;br /&gt;
&lt;br /&gt;
[[File:sim_4_pad_to_pad_loopback.png|thumb|center|700px|Pad-to-Pad Dynamic Loopback: Transmitter OUT to Receiver IN]]&lt;br /&gt;
&lt;br /&gt;
== Physical Verification &amp;amp; GDS Delivery ==&lt;br /&gt;
* &#039;&#039;&#039;GDSII Top Level:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.raw.gds&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;padframe.gds&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Magic Layout:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.mag&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SPICE Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Simulation Models:&#039;&#039;&#039; &amp;lt;code&amp;gt;model.spice&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;design_header.ngspice&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=Category:LibreSilicon Verification Reports]]&lt;br /&gt;
[[index.php?title=Category:LibrePDK]]&lt;br /&gt;
[[index.php?title=Category:SG13G2]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_GF180A@3.3V&amp;diff=808</id>
		<title>LibrePDK Padframe SPICE Verification Report GF180A@3.3V</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_GF180A@3.3V&amp;diff=808"/>
		<updated>2026-09-01T16:36:44Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Sim 1 esd clamping GF180A@3.3V.png|none|thumb]]&lt;br /&gt;
&lt;br /&gt;
= LibrePDK Padframe SPICE Verification Report =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technology:&#039;&#039;&#039; IHP SG13G2 (130nm BiCMOS)  &lt;br /&gt;
&#039;&#039;&#039;Operating Voltage:&#039;&#039;&#039; 3.3 V  &lt;br /&gt;
&#039;&#039;&#039;Verification Date:&#039;&#039;&#039; 2026-09-01 16:01:45 UTC  &lt;br /&gt;
&#039;&#039;&#039;Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt; (Magic VLSI Hierarchical Extraction)  &lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:90%;&amp;quot;&lt;br /&gt;
! Test Scenario !! Target Net / Pad !! Measured Values !! Design Specification !! Status&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;ESD Clamping Transient&#039;&#039;&#039; || PAD_GPIO_0 (ESD Clamps) || Peak Clamped: 4.30 V || &amp;lt; 15.0 V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Output Drive (Write)&#039;&#039;&#039; || gpio_out_0 → PAD_GPIO_0 || Low: 2.84 V, High: 0.65 V || Rail-to-rail driver transition || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Input Sensing (Read / Hi-Z)&#039;&#039;&#039; || PAD_GPIO_1 → gpio_in_1 || Pad 0V → 0.00 V, Pad 3.3V → 2.87 V || Pad 0V -&amp;gt; Core &amp;gt; 0.8V, Pad 3.3V -&amp;gt; Core &amp;lt; 0.2V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Pad-to-Pad Dynamic Loopback&#039;&#039;&#039; || PAD_GPIO_0 → PAD_GPIO_1 || Bus: 1.40V / 1.37V | Rx: 2.85V / -0.01V || Full rail-to-rail dynamic loopback across frame || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Core Signal &amp;amp; Bonding Pad Interface Mapping ==&lt;br /&gt;
The LibrePDK padframe generator exposed unique net names defined in the JSON configuration for seamless Coriolis LEF/DEF digital core integration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:90%; font-family:monospace;&amp;quot;&lt;br /&gt;
! Subcircuit Port Name !! Direction !! Interface Type !! Associated Physical Layer&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VDD&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VSS&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_0&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_0&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_1&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_1&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MISO&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_CS&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_TX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_RX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_SCLK&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MOSI&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Transient Simulation Waveforms ==&lt;br /&gt;
&lt;br /&gt;
=== 1. ESD Clamping Event ===&lt;br /&gt;
Transient simulation applying a 2kV / 1.33A peak Human Body Model (HBM) current pulse directly to the bonding pad:&lt;br /&gt;
[[File:sim_1_esd_clamping.png|thumb|center|700px|ESD Diode and Rail Clamping Response under 1.33A Transient Current Pulse]]&lt;br /&gt;
&lt;br /&gt;
=== 2. Digital Output Drive (Write) ===&lt;br /&gt;
Driving output data from the digital core logic through the pad cell driver transistors onto the external bonding pad:&lt;br /&gt;
[[File:sim_2_signal_write.png|thumb|center|700px|Signal Write: Core OUT driving Bonding Pad (0V to 3.3V)]]&lt;br /&gt;
&lt;br /&gt;
=== 3. Digital Input Sensing (Read / Hi-Z) ===&lt;br /&gt;
External signal applied to the bonding pad in tristate / Hi-Z mode, sensed by the internal core input buffer:&lt;br /&gt;
[[File:sim_3_signal_read_hiz.png|thumb|center|700px|Signal Read: External Bonding Pad voltage sensed at Core IN]]&lt;br /&gt;
&lt;br /&gt;
=== 4. Full Dynamic Loopback ===&lt;br /&gt;
End-to-end signal transmission across the entire chip: Core Transmitter (Pad A) drives the shared bonding wire bus, sensed by Core Receiver (Pad B):&lt;br /&gt;
[[File:sim_4_pad_to_pad_loopback.png|thumb|center|700px|Pad-to-Pad Dynamic Loopback: Transmitter OUT to Receiver IN]]&lt;br /&gt;
&lt;br /&gt;
== Physical Verification &amp;amp; GDS Delivery ==&lt;br /&gt;
* &#039;&#039;&#039;GDSII Top Level:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.raw.gds&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;padframe.gds&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Magic Layout:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.mag&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SPICE Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Simulation Models:&#039;&#039;&#039; &amp;lt;code&amp;gt;model.spice&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;design_header.ngspice&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=Category:LibreSilicon Verification Reports]]&lt;br /&gt;
[[index.php?title=Category:LibrePDK]]&lt;br /&gt;
[[index.php?title=Category:SG13G2]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=File:Sim_1_esd_clamping_GF180A@3.3V.png&amp;diff=807</id>
		<title>File:Sim 1 esd clamping GF180A@3.3V.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=File:Sim_1_esd_clamping_GF180A@3.3V.png&amp;diff=807"/>
		<updated>2026-09-01T16:36:27Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sim 1 esd clamping GF180A@3.3V&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=806</id>
		<title>Pad Frame Generator</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=806"/>
		<updated>2026-09-01T16:35:51Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* Test cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Padframe Example.png|thumb|Example of a pad frame for SG13G2@1.2V]]&lt;br /&gt;
The Pad Frame Generator is part of the [[LibrePDK]] and provides the [[Pad Cell Generator]] functionality.&lt;br /&gt;
&lt;br /&gt;
It&#039;s job is to assemble a ready to use pad frame harness, with ESD protection and power rail wire width properly adjusted for accommodating the intended current driving capacity as well as the intended voltage levels to be used.&lt;br /&gt;
&lt;br /&gt;
== Types of Pad Cells produced ==&lt;br /&gt;
Currently we support only simple IO [[Pad Cell]], analog cells, and power cells, complex pad cells still are being in development.&lt;br /&gt;
&lt;br /&gt;
The very special impedance compensated pad cell in the works ([[High-Speed Impedance-Compensated Pad Cell]]) is needed in order to hook up DDR4 RAM to our chips or build a PCIe device.&lt;br /&gt;
&lt;br /&gt;
== How to use ==&lt;br /&gt;
There are two options on how you can run the Pad Frame Generator on your machine, you can go the easy route and use a docker container or you can [[Pad Frame Generator#Installation|set up LibrePDK locally]].&lt;br /&gt;
&lt;br /&gt;
An example for a paframe config can be found here [https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/tests/padframes/padframe_sg13g2_1v2.json?ref_type=heads padframe_sg13g2_1v2.json]&lt;br /&gt;
&lt;br /&gt;
=== Docker ===&lt;br /&gt;
First pull the docker image for the [[LibrePDK]] in order to make sure the image is up to date by running&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull leviathanch/librepdk:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Then you can feed your JSON config for the padframe you have configured to the pad frame generator script contained in the docker image.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;docker run -it --rm \&lt;br /&gt;
    -e HOST_UID=$(id -u) -e HOST_GID=$(id -g) \&lt;br /&gt;
    -v &amp;quot;$(pwd)&amp;quot;:/workspace leviathanch/librepdk:latest \&lt;br /&gt;
    librepdk_padframe_generator -i padframe_config.json \&lt;br /&gt;
    -o my_padframe&amp;lt;/syntaxhighlight&amp;gt;After running the generator you should have a folder named my_padframe containing the LEF, DEF, Magic and all the other files you need for running a full synthesis flow of your designs.&lt;br /&gt;
&lt;br /&gt;
=== Run Locally ===&lt;br /&gt;
After [[Pad Frame Generator#Installation|seting up LibrePDK locally]] you can generate your pad frame by running&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;uv run \&lt;br /&gt;
    librepdk_padframe_generator -i padframe_config.json \&lt;br /&gt;
    -o my_padframe&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Test cases ==&lt;br /&gt;
Proper ESD and switching behavior has been verified for all supported technologies in LibrePDK and reports for two of the most important test cases have been put onto our wiki page.&lt;br /&gt;
&lt;br /&gt;
SG13G2 is important because it&#039;s a complex high frequency process with many metal layers plus there is an opportunity for cooperating in a tapeout.&lt;br /&gt;
&lt;br /&gt;
GF180A only has 3 metal layers which best represents low tech nodes, so it was important to verify that we also can produce working pad frames for such a low metal count process.&lt;br /&gt;
&lt;br /&gt;
Tests have been performed for the sample pad frame configurations for [https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/tests/padframes/padframe_gf180a_3v3.json?ref_type=heads IHP&#039;s SG13G2 at 1.2V] and the [https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/tests/padframes/padframe_gf180a_3v3.json?ref_type=heads GF180A process at 3.3V] (by Global Foundries).&lt;br /&gt;
&lt;br /&gt;
Please look at [[LibrePDK Padframe SPICE Verification Report SG13G2@1.2V]] and [[LibrePDK Padframe SPICE Verification Report GF180A@3.3V]] for the simulation verification results and wave forms.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Since the Pad Frame Generator is part of [[LibrePDK]] you can find the guide on how to install all the dependencies in the [[LibrePDK#Installation|Installation section of the LibrePDK]] page&lt;br /&gt;
&lt;br /&gt;
== Benchmarks ==&lt;br /&gt;
Generating all those individual geometries takes a lot of time, an initial generation run can take up to half an hour due to the complexity and size of a pad frame and its pad cells, which is why we introduced component caching.&lt;br /&gt;
&lt;br /&gt;
=== Initial run ===&lt;br /&gt;
The initial run for GF180A takes around 20 minutes, IHP and Skywater with even more layers can take up to 32 minutes&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    20m48.886s&lt;br /&gt;
user    20m46.885s&lt;br /&gt;
sys     0m3.880s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Further runs ===&lt;br /&gt;
During the second run that generation time is cut in half when assembling the padframe and writing it out.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    8m43.972s&lt;br /&gt;
user    8m40.889s&lt;br /&gt;
sys     0m4.139s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_SG13G2@1.2V&amp;diff=805</id>
		<title>LibrePDK Padframe SPICE Verification Report SG13G2@1.2V</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_SG13G2@1.2V&amp;diff=805"/>
		<updated>2026-09-01T16:17:03Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* Physical Verification &amp;amp; GDS Delivery */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LibrePDK Padframe SPICE Verification Report =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technology:&#039;&#039;&#039; IHP SG13G2 (130nm BiCMOS)  &lt;br /&gt;
&#039;&#039;&#039;Operating Voltage:&#039;&#039;&#039; 1.2 V  &lt;br /&gt;
&#039;&#039;&#039;Verification Date:&#039;&#039;&#039; 2026-09-01 16:47:40 UTC  &lt;br /&gt;
&#039;&#039;&#039;Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt; (Magic VLSI Hierarchical Extraction)  &lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:90%;&amp;quot;&lt;br /&gt;
! Test Scenario !! Target Net / Pad !! Measured Values !! Design Specification !! Status&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;ESD Clamping Transient&#039;&#039;&#039; || PAD_GPIO_0 (ESD Clamps) || Peak Clamped: 2.75 V || &amp;lt; 15.0 V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Output Drive (Write)&#039;&#039;&#039; || gpio_out_0 → PAD_GPIO_0 || Low: 0.00 V, High: 1.15 V || Rail-to-rail driver transition || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Input Sensing (Read / Hi-Z)&#039;&#039;&#039; || PAD_GPIO_1 → gpio_in_1 || Pad 0V → 0.00 V, Pad 1.2V → 1.15 V || Pad 0V -&amp;gt; Core &amp;gt; 0.8V, Pad 1.2V -&amp;gt; Core &amp;lt; 0.2V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Pad-to-Pad Dynamic Loopback&#039;&#039;&#039; || PAD_GPIO_0 → PAD_GPIO_1 || Bus: 0.12V / 1.20V | Rx: 0.00V / 1.15V || Full rail-to-rail dynamic loopback across frame || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Core Signal &amp;amp; Bonding Pad Interface Mapping ==&lt;br /&gt;
The LibrePDK padframe generator exposed unique net names defined in the JSON configuration for seamless Coriolis LEF/DEF digital core integration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:90%; font-family:monospace;&amp;quot;&lt;br /&gt;
! Subcircuit Port Name !! Direction !! Interface Type !! Associated Physical Layer&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VDD&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VSS&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_0&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_0&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_1&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_1&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MISO&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_CS&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_TX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_RX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_SCLK&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MOSI&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Transient Simulation Waveforms ==&lt;br /&gt;
&lt;br /&gt;
=== 1. ESD Clamping Event ===&lt;br /&gt;
Transient simulation applying a 2kV / 1.33A peak Human Body Model (HBM) current pulse directly to the bonding pad:&lt;br /&gt;
☢&lt;br /&gt;
[[File:Sim 1 esd clamping SG13G2@1.2V.png|thumb|center|700px|ESD Diode and Rail Clamping Response under 1.33A Transient Current Pulse]]&lt;br /&gt;
&lt;br /&gt;
=== 2. Digital Output Drive (Write) ===&lt;br /&gt;
Driving output data from the digital core logic through the pad cell driver transistors onto the external bonding pad:&lt;br /&gt;
☢&lt;br /&gt;
[[File:Sim 2 signal write SG13G2@1.2V.png|thumb|center|700px|Signal Write: Core OUT driving Bonding Pad (0V to 1.2V)]]&lt;br /&gt;
&lt;br /&gt;
=== 3. Digital Input Sensing (Read / Hi-Z) ===&lt;br /&gt;
External signal applied to the bonding pad in tristate / Hi-Z mode, sensed by the internal core input buffer:&lt;br /&gt;
[[File:Sim 3 signal read hiz SG13G2@1.2V.png|thumb|center|700px|Signal Read: External Bonding Pad voltage sensed at Core IN]]&lt;br /&gt;
&lt;br /&gt;
=== 4. Full Dynamic Loopback ===&lt;br /&gt;
End-to-end signal transmission across the entire chip: Core Transmitter (Pad A) drives the shared bonding wire bus, sensed by Core Receiver (Pad B):&lt;br /&gt;
[[File:Sim 4 pad to pad loopback SG13G2@1.2V.png|thumb|center|700px|Pad-to-Pad Dynamic Loopback: Transmitter OUT to Receiver IN]]&lt;br /&gt;
&lt;br /&gt;
== Physical Verification &amp;amp; GDS Delivery ==&lt;br /&gt;
* &#039;&#039;&#039;GDSII Top Level:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.raw.gds&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;padframe.gds&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Magic Layout:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.mag&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SPICE Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Simulation Models:&#039;&#039;&#039; &amp;lt;code&amp;gt;model.spice&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;design_header.ngspice&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_SG13G2@1.2V&amp;diff=804</id>
		<title>LibrePDK Padframe SPICE Verification Report SG13G2@1.2V</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_SG13G2@1.2V&amp;diff=804"/>
		<updated>2026-09-01T16:16:46Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LibrePDK Padframe SPICE Verification Report =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technology:&#039;&#039;&#039; IHP SG13G2 (130nm BiCMOS)  &lt;br /&gt;
&#039;&#039;&#039;Operating Voltage:&#039;&#039;&#039; 1.2 V  &lt;br /&gt;
&#039;&#039;&#039;Verification Date:&#039;&#039;&#039; 2026-09-01 16:47:40 UTC  &lt;br /&gt;
&#039;&#039;&#039;Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt; (Magic VLSI Hierarchical Extraction)  &lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:90%;&amp;quot;&lt;br /&gt;
! Test Scenario !! Target Net / Pad !! Measured Values !! Design Specification !! Status&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;ESD Clamping Transient&#039;&#039;&#039; || PAD_GPIO_0 (ESD Clamps) || Peak Clamped: 2.75 V || &amp;lt; 15.0 V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Output Drive (Write)&#039;&#039;&#039; || gpio_out_0 → PAD_GPIO_0 || Low: 0.00 V, High: 1.15 V || Rail-to-rail driver transition || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Input Sensing (Read / Hi-Z)&#039;&#039;&#039; || PAD_GPIO_1 → gpio_in_1 || Pad 0V → 0.00 V, Pad 1.2V → 1.15 V || Pad 0V -&amp;gt; Core &amp;gt; 0.8V, Pad 1.2V -&amp;gt; Core &amp;lt; 0.2V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Pad-to-Pad Dynamic Loopback&#039;&#039;&#039; || PAD_GPIO_0 → PAD_GPIO_1 || Bus: 0.12V / 1.20V | Rx: 0.00V / 1.15V || Full rail-to-rail dynamic loopback across frame || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Core Signal &amp;amp; Bonding Pad Interface Mapping ==&lt;br /&gt;
The LibrePDK padframe generator exposed unique net names defined in the JSON configuration for seamless Coriolis LEF/DEF digital core integration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:90%; font-family:monospace;&amp;quot;&lt;br /&gt;
! Subcircuit Port Name !! Direction !! Interface Type !! Associated Physical Layer&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VDD&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VSS&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_0&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_0&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_1&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_1&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MISO&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_CS&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_TX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_RX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_SCLK&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MOSI&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Transient Simulation Waveforms ==&lt;br /&gt;
&lt;br /&gt;
=== 1. ESD Clamping Event ===&lt;br /&gt;
Transient simulation applying a 2kV / 1.33A peak Human Body Model (HBM) current pulse directly to the bonding pad:&lt;br /&gt;
☢&lt;br /&gt;
[[File:Sim 1 esd clamping SG13G2@1.2V.png|thumb|center|700px|ESD Diode and Rail Clamping Response under 1.33A Transient Current Pulse]]&lt;br /&gt;
&lt;br /&gt;
=== 2. Digital Output Drive (Write) ===&lt;br /&gt;
Driving output data from the digital core logic through the pad cell driver transistors onto the external bonding pad:&lt;br /&gt;
☢&lt;br /&gt;
[[File:Sim 2 signal write SG13G2@1.2V.png|thumb|center|700px|Signal Write: Core OUT driving Bonding Pad (0V to 1.2V)]]&lt;br /&gt;
&lt;br /&gt;
=== 3. Digital Input Sensing (Read / Hi-Z) ===&lt;br /&gt;
External signal applied to the bonding pad in tristate / Hi-Z mode, sensed by the internal core input buffer:&lt;br /&gt;
[[File:Sim 3 signal read hiz SG13G2@1.2V.png|thumb|center|700px|Signal Read: External Bonding Pad voltage sensed at Core IN]]&lt;br /&gt;
&lt;br /&gt;
=== 4. Full Dynamic Loopback ===&lt;br /&gt;
End-to-end signal transmission across the entire chip: Core Transmitter (Pad A) drives the shared bonding wire bus, sensed by Core Receiver (Pad B):&lt;br /&gt;
[[File:Sim 4 pad to pad loopback SG13G2@1.2V.png|thumb|center|700px|Pad-to-Pad Dynamic Loopback: Transmitter OUT to Receiver IN]]&lt;br /&gt;
&lt;br /&gt;
== Physical Verification &amp;amp; GDS Delivery ==&lt;br /&gt;
* &#039;&#039;&#039;GDSII Top Level:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.raw.gds&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;padframe.gds&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Magic Layout:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.mag&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SPICE Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Simulation Models:&#039;&#039;&#039; &amp;lt;code&amp;gt;model.spice&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;design_header.ngspice&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=Category:LibreSilicon Verification Reports]]&lt;br /&gt;
[[index.php?title=Category:LibrePDK]]&lt;br /&gt;
[[index.php?title=Category:SG13G2]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_SG13G2@1.2V&amp;diff=803</id>
		<title>LibrePDK Padframe SPICE Verification Report SG13G2@1.2V</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_SG13G2@1.2V&amp;diff=803"/>
		<updated>2026-09-01T16:15:06Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* 3. Digital Input Sensing (Read / Hi-Z) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LibrePDK Padframe SPICE Verification Report =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technology:&#039;&#039;&#039; IHP SG13G2 (130nm BiCMOS)  &lt;br /&gt;
&#039;&#039;&#039;Operating Voltage:&#039;&#039;&#039; 1.2 V  &lt;br /&gt;
&#039;&#039;&#039;Verification Date:&#039;&#039;&#039; 2026-09-01 16:47:40 UTC  &lt;br /&gt;
&#039;&#039;&#039;Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt; (Magic VLSI Hierarchical Extraction)  &lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:90%;&amp;quot;&lt;br /&gt;
! Test Scenario !! Target Net / Pad !! Measured Values !! Design Specification !! Status&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;ESD Clamping Transient&#039;&#039;&#039; || PAD_GPIO_0 (ESD Clamps) || Peak Clamped: 2.75 V || &amp;lt; 15.0 V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Output Drive (Write)&#039;&#039;&#039; || gpio_out_0 → PAD_GPIO_0 || Low: 0.00 V, High: 1.15 V || Rail-to-rail driver transition || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Input Sensing (Read / Hi-Z)&#039;&#039;&#039; || PAD_GPIO_1 → gpio_in_1 || Pad 0V → 0.00 V, Pad 1.2V → 1.15 V || Pad 0V -&amp;gt; Core &amp;gt; 0.8V, Pad 1.2V -&amp;gt; Core &amp;lt; 0.2V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Pad-to-Pad Dynamic Loopback&#039;&#039;&#039; || PAD_GPIO_0 → PAD_GPIO_1 || Bus: 0.12V / 1.20V | Rx: 0.00V / 1.15V || Full rail-to-rail dynamic loopback across frame || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Core Signal &amp;amp; Bonding Pad Interface Mapping ==&lt;br /&gt;
The LibrePDK padframe generator exposed unique net names defined in the JSON configuration for seamless Coriolis LEF/DEF digital core integration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:90%; font-family:monospace;&amp;quot;&lt;br /&gt;
! Subcircuit Port Name !! Direction !! Interface Type !! Associated Physical Layer&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VDD&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VSS&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_0&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_0&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_1&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_1&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MISO&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_CS&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_TX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_RX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_SCLK&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MOSI&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Transient Simulation Waveforms ==&lt;br /&gt;
&lt;br /&gt;
=== 1. ESD Clamping Event ===&lt;br /&gt;
Transient simulation applying a 2kV / 1.33A peak Human Body Model (HBM) current pulse directly to the bonding pad:&lt;br /&gt;
[[File:Sim 1 esd clamping SG13G2@1.2V.png|none|thumb]]&lt;br /&gt;
☢&lt;br /&gt;
[[File:sim_1_esd_clamping.png|thumb|center|700px|ESD Diode and Rail Clamping Response under 1.33A Transient Current Pulse]]&lt;br /&gt;
&lt;br /&gt;
=== 2. Digital Output Drive (Write) ===&lt;br /&gt;
Driving output data from the digital core logic through the pad cell driver transistors onto the external bonding pad:&lt;br /&gt;
[[File:Sim 2 signal write SG13G2@1.2V.png|none|thumb]]&lt;br /&gt;
☢&lt;br /&gt;
[[File:sim_2_signal_write.png|thumb|center|700px|Signal Write: Core OUT driving Bonding Pad (0V to 1.2V)]]&lt;br /&gt;
&lt;br /&gt;
=== 3. Digital Input Sensing (Read / Hi-Z) ===&lt;br /&gt;
External signal applied to the bonding pad in tristate / Hi-Z mode, sensed by the internal core input buffer:&lt;br /&gt;
[[File:Sim 3 signal read hiz SG13G2@1.2V.png|none|thumb]]&lt;br /&gt;
File:Sim 2 signal write.pngSignal Write: Core OUT driving Bonding Pad (0V to 1.2V)&lt;br /&gt;
[[File:sim_3_signal_read_hiz.png|thumb|center|700px|Signal Read: External Bonding Pad voltage sensed at Core IN]]&lt;br /&gt;
&lt;br /&gt;
=== 4. Full Dynamic Loopback ===&lt;br /&gt;
End-to-end signal transmission across the entire chip: Core Transmitter (Pad A) drives the shared bonding wire bus, sensed by Core Receiver (Pad B):&lt;br /&gt;
[[File:Sim 4 pad to pad loopback SG13G2@1.2V.png|thumb|center|700px|Pad-to-Pad Dynamic Loopback: Transmitter OUT to Receiver IN]]&lt;br /&gt;
&lt;br /&gt;
== Physical Verification &amp;amp; GDS Delivery ==&lt;br /&gt;
* &#039;&#039;&#039;GDSII Top Level:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.raw.gds&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;padframe.gds&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Magic Layout:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.mag&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SPICE Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Simulation Models:&#039;&#039;&#039; &amp;lt;code&amp;gt;model.spice&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;design_header.ngspice&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=Category:LibreSilicon Verification Reports]]&lt;br /&gt;
[[index.php?title=Category:LibrePDK]]&lt;br /&gt;
[[index.php?title=Category:SG13G2]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=File:Sim_1_esd_clamping_SG13G2@1.2V.png&amp;diff=802</id>
		<title>File:Sim 1 esd clamping SG13G2@1.2V.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=File:Sim_1_esd_clamping_SG13G2@1.2V.png&amp;diff=802"/>
		<updated>2026-09-01T16:14:53Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sim 1 esd clamping SG13G2@1.2V&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=File:Sim_2_signal_write_SG13G2@1.2V.png&amp;diff=801</id>
		<title>File:Sim 2 signal write SG13G2@1.2V.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=File:Sim_2_signal_write_SG13G2@1.2V.png&amp;diff=801"/>
		<updated>2026-09-01T16:14:27Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sim 2 signal write SG13G2@1.2V&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=File:Sim_3_signal_read_hiz_SG13G2@1.2V.png&amp;diff=800</id>
		<title>File:Sim 3 signal read hiz SG13G2@1.2V.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=File:Sim_3_signal_read_hiz_SG13G2@1.2V.png&amp;diff=800"/>
		<updated>2026-09-01T16:13:53Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sim 3 signal read hiz SG13G2@1.2V&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_SG13G2@1.2V&amp;diff=799</id>
		<title>LibrePDK Padframe SPICE Verification Report SG13G2@1.2V</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_SG13G2@1.2V&amp;diff=799"/>
		<updated>2026-09-01T16:12:50Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LibrePDK Padframe SPICE Verification Report =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technology:&#039;&#039;&#039; IHP SG13G2 (130nm BiCMOS)  &lt;br /&gt;
&#039;&#039;&#039;Operating Voltage:&#039;&#039;&#039; 1.2 V  &lt;br /&gt;
&#039;&#039;&#039;Verification Date:&#039;&#039;&#039; 2026-09-01 16:47:40 UTC  &lt;br /&gt;
&#039;&#039;&#039;Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt; (Magic VLSI Hierarchical Extraction)  &lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:90%;&amp;quot;&lt;br /&gt;
! Test Scenario !! Target Net / Pad !! Measured Values !! Design Specification !! Status&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;ESD Clamping Transient&#039;&#039;&#039; || PAD_GPIO_0 (ESD Clamps) || Peak Clamped: 2.75 V || &amp;lt; 15.0 V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Output Drive (Write)&#039;&#039;&#039; || gpio_out_0 → PAD_GPIO_0 || Low: 0.00 V, High: 1.15 V || Rail-to-rail driver transition || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Input Sensing (Read / Hi-Z)&#039;&#039;&#039; || PAD_GPIO_1 → gpio_in_1 || Pad 0V → 0.00 V, Pad 1.2V → 1.15 V || Pad 0V -&amp;gt; Core &amp;gt; 0.8V, Pad 1.2V -&amp;gt; Core &amp;lt; 0.2V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Pad-to-Pad Dynamic Loopback&#039;&#039;&#039; || PAD_GPIO_0 → PAD_GPIO_1 || Bus: 0.12V / 1.20V | Rx: 0.00V / 1.15V || Full rail-to-rail dynamic loopback across frame || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Core Signal &amp;amp; Bonding Pad Interface Mapping ==&lt;br /&gt;
The LibrePDK padframe generator exposed unique net names defined in the JSON configuration for seamless Coriolis LEF/DEF digital core integration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:90%; font-family:monospace;&amp;quot;&lt;br /&gt;
! Subcircuit Port Name !! Direction !! Interface Type !! Associated Physical Layer&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VDD&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VSS&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_0&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_0&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_1&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_1&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MISO&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_CS&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_TX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_RX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_SCLK&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MOSI&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Transient Simulation Waveforms ==&lt;br /&gt;
&lt;br /&gt;
=== 1. ESD Clamping Event ===&lt;br /&gt;
Transient simulation applying a 2kV / 1.33A peak Human Body Model (HBM) current pulse directly to the bonding pad:&lt;br /&gt;
[[File:sim_1_esd_clamping.png|thumb|center|700px|ESD Diode and Rail Clamping Response under 1.33A Transient Current Pulse]]&lt;br /&gt;
&lt;br /&gt;
=== 2. Digital Output Drive (Write) ===&lt;br /&gt;
Driving output data from the digital core logic through the pad cell driver transistors onto the external bonding pad:&lt;br /&gt;
[[File:sim_2_signal_write.png|thumb|center|700px|Signal Write: Core OUT driving Bonding Pad (0V to 1.2V)]]&lt;br /&gt;
&lt;br /&gt;
=== 3. Digital Input Sensing (Read / Hi-Z) ===&lt;br /&gt;
External signal applied to the bonding pad in tristate / Hi-Z mode, sensed by the internal core input buffer:&lt;br /&gt;
[[File:sim_3_signal_read_hiz.png|thumb|center|700px|Signal Read: External Bonding Pad voltage sensed at Core IN]]&lt;br /&gt;
&lt;br /&gt;
=== 4. Full Dynamic Loopback ===&lt;br /&gt;
End-to-end signal transmission across the entire chip: Core Transmitter (Pad A) drives the shared bonding wire bus, sensed by Core Receiver (Pad B):&lt;br /&gt;
[[File:Sim 4 pad to pad loopback SG13G2@1.2V.png|thumb|center|700px|Pad-to-Pad Dynamic Loopback: Transmitter OUT to Receiver IN]]&lt;br /&gt;
&lt;br /&gt;
== Physical Verification &amp;amp; GDS Delivery ==&lt;br /&gt;
* &#039;&#039;&#039;GDSII Top Level:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.raw.gds&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;padframe.gds&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Magic Layout:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.mag&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SPICE Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Simulation Models:&#039;&#039;&#039; &amp;lt;code&amp;gt;model.spice&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;design_header.ngspice&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=Category:LibreSilicon Verification Reports]]&lt;br /&gt;
[[index.php?title=Category:LibrePDK]]&lt;br /&gt;
[[index.php?title=Category:SG13G2]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_SG13G2@1.2V&amp;diff=798</id>
		<title>LibrePDK Padframe SPICE Verification Report SG13G2@1.2V</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_SG13G2@1.2V&amp;diff=798"/>
		<updated>2026-09-01T16:12:24Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LibrePDK Padframe SPICE Verification Report =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technology:&#039;&#039;&#039; IHP SG13G2 (130nm BiCMOS)  &lt;br /&gt;
&#039;&#039;&#039;Operating Voltage:&#039;&#039;&#039; 1.2 V  &lt;br /&gt;
&#039;&#039;&#039;Verification Date:&#039;&#039;&#039; 2026-09-01 16:47:40 UTC  &lt;br /&gt;
&#039;&#039;&#039;Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt; (Magic VLSI Hierarchical Extraction)  &lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:90%;&amp;quot;&lt;br /&gt;
! Test Scenario !! Target Net / Pad !! Measured Values !! Design Specification !! Status&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;ESD Clamping Transient&#039;&#039;&#039; || PAD_GPIO_0 (ESD Clamps) || Peak Clamped: 2.75 V || &amp;lt; 15.0 V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Output Drive (Write)&#039;&#039;&#039; || gpio_out_0 → PAD_GPIO_0 || Low: 0.00 V, High: 1.15 V || Rail-to-rail driver transition || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Input Sensing (Read / Hi-Z)&#039;&#039;&#039; || PAD_GPIO_1 → gpio_in_1 || Pad 0V → 0.00 V, Pad 1.2V → 1.15 V || Pad 0V -&amp;gt; Core &amp;gt; 0.8V, Pad 1.2V -&amp;gt; Core &amp;lt; 0.2V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Pad-to-Pad Dynamic Loopback&#039;&#039;&#039; || PAD_GPIO_0 → PAD_GPIO_1 || Bus: 0.12V / 1.20V | Rx: 0.00V / 1.15V || Full rail-to-rail dynamic loopback across frame || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Core Signal &amp;amp; Bonding Pad Interface Mapping ==&lt;br /&gt;
The LibrePDK padframe generator exposed unique net names defined in the JSON configuration for seamless Coriolis LEF/DEF digital core integration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:90%; font-family:monospace;&amp;quot;&lt;br /&gt;
! Subcircuit Port Name !! Direction !! Interface Type !! Associated Physical Layer&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VDD&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VSS&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_0&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_0&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_1&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_1&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MISO&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_CS&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_TX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_RX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_SCLK&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MOSI&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Transient Simulation Waveforms ==&lt;br /&gt;
&lt;br /&gt;
=== 1. ESD Clamping Event ===&lt;br /&gt;
Transient simulation applying a 2kV / 1.33A peak Human Body Model (HBM) current pulse directly to the bonding pad:&lt;br /&gt;
[[File:sim_1_esd_clamping.png|thumb|center|700px|ESD Diode and Rail Clamping Response under 1.33A Transient Current Pulse]]&lt;br /&gt;
&lt;br /&gt;
=== 2. Digital Output Drive (Write) ===&lt;br /&gt;
Driving output data from the digital core logic through the pad cell driver transistors onto the external bonding pad:&lt;br /&gt;
[[File:sim_2_signal_write.png|thumb|center|700px|Signal Write: Core OUT driving Bonding Pad (0V to 1.2V)]]&lt;br /&gt;
&lt;br /&gt;
=== 3. Digital Input Sensing (Read / Hi-Z) ===&lt;br /&gt;
External signal applied to the bonding pad in tristate / Hi-Z mode, sensed by the internal core input buffer:&lt;br /&gt;
[[File:sim_3_signal_read_hiz.png|thumb|center|700px|Signal Read: External Bonding Pad voltage sensed at Core IN]]&lt;br /&gt;
&lt;br /&gt;
=== 4. Full Dynamic Loopback ===&lt;br /&gt;
End-to-end signal transmission across the entire chip: Core Transmitter (Pad A) drives the shared bonding wire bus, sensed by Core Receiver (Pad B):&lt;br /&gt;
[[File:sim_4_pad_to_pad_loopback.png|thumb|center|700px|Pad-to-Pad Dynamic Loopback: Transmitter OUT to Receiver IN]]&lt;br /&gt;
[[File:Sim 4 pad to pad loopback SG13G2@1.2V.png|none|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Physical Verification &amp;amp; GDS Delivery ==&lt;br /&gt;
* &#039;&#039;&#039;GDSII Top Level:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.raw.gds&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;padframe.gds&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Magic Layout:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.mag&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SPICE Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Simulation Models:&#039;&#039;&#039; &amp;lt;code&amp;gt;model.spice&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;design_header.ngspice&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=Category:LibreSilicon Verification Reports]]&lt;br /&gt;
[[index.php?title=Category:LibrePDK]]&lt;br /&gt;
[[index.php?title=Category:SG13G2]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=File:Sim_4_pad_to_pad_loopback_SG13G2@1.2V.png&amp;diff=797</id>
		<title>File:Sim 4 pad to pad loopback SG13G2@1.2V.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=File:Sim_4_pad_to_pad_loopback_SG13G2@1.2V.png&amp;diff=797"/>
		<updated>2026-09-01T16:10:08Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sim 4 pad to pad loopback SG13G2@1.2V&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_GF180A@3.3V&amp;diff=796</id>
		<title>LibrePDK Padframe SPICE Verification Report GF180A@3.3V</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_GF180A@3.3V&amp;diff=796"/>
		<updated>2026-09-01T16:08:57Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: Created page with &amp;quot;= LibrePDK Padframe SPICE Verification Report =  &amp;#039;&amp;#039;&amp;#039;Technology:&amp;#039;&amp;#039;&amp;#039; IHP SG13G2 (130nm BiCMOS)   &amp;#039;&amp;#039;&amp;#039;Operating Voltage:&amp;#039;&amp;#039;&amp;#039; 3.3 V   &amp;#039;&amp;#039;&amp;#039;Verification Date:&amp;#039;&amp;#039;&amp;#039; 2026-09-01 16:01:45 UTC   &amp;#039;&amp;#039;&amp;#039;Extracted Netlist:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt; (Magic VLSI Hierarchical Extraction)    == Executive Summary == {| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:90%;&amp;quot; ! Test Scenario !! Target Net / Pad !! Measured Values !! Design Specification !! Status |- | style=&amp;quot;text-align:left;&amp;quot; |...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LibrePDK Padframe SPICE Verification Report =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technology:&#039;&#039;&#039; IHP SG13G2 (130nm BiCMOS)  &lt;br /&gt;
&#039;&#039;&#039;Operating Voltage:&#039;&#039;&#039; 3.3 V  &lt;br /&gt;
&#039;&#039;&#039;Verification Date:&#039;&#039;&#039; 2026-09-01 16:01:45 UTC  &lt;br /&gt;
&#039;&#039;&#039;Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt; (Magic VLSI Hierarchical Extraction)  &lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:90%;&amp;quot;&lt;br /&gt;
! Test Scenario !! Target Net / Pad !! Measured Values !! Design Specification !! Status&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;ESD Clamping Transient&#039;&#039;&#039; || PAD_GPIO_0 (ESD Clamps) || Peak Clamped: 4.30 V || &amp;lt; 15.0 V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Output Drive (Write)&#039;&#039;&#039; || gpio_out_0 → PAD_GPIO_0 || Low: 2.84 V, High: 0.65 V || Rail-to-rail driver transition || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Input Sensing (Read / Hi-Z)&#039;&#039;&#039; || PAD_GPIO_1 → gpio_in_1 || Pad 0V → 0.00 V, Pad 3.3V → 2.87 V || Pad 0V -&amp;gt; Core &amp;gt; 0.8V, Pad 3.3V -&amp;gt; Core &amp;lt; 0.2V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Pad-to-Pad Dynamic Loopback&#039;&#039;&#039; || PAD_GPIO_0 → PAD_GPIO_1 || Bus: 1.40V / 1.37V | Rx: 2.85V / -0.01V || Full rail-to-rail dynamic loopback across frame || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Core Signal &amp;amp; Bonding Pad Interface Mapping ==&lt;br /&gt;
The LibrePDK padframe generator exposed unique net names defined in the JSON configuration for seamless Coriolis LEF/DEF digital core integration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:90%; font-family:monospace;&amp;quot;&lt;br /&gt;
! Subcircuit Port Name !! Direction !! Interface Type !! Associated Physical Layer&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VDD&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VSS&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_0&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_0&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_1&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_1&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MISO&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_CS&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_TX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_RX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_SCLK&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MOSI&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Transient Simulation Waveforms ==&lt;br /&gt;
&lt;br /&gt;
=== 1. ESD Clamping Event ===&lt;br /&gt;
Transient simulation applying a 2kV / 1.33A peak Human Body Model (HBM) current pulse directly to the bonding pad:&lt;br /&gt;
[[File:sim_1_esd_clamping.png|thumb|center|700px|ESD Diode and Rail Clamping Response under 1.33A Transient Current Pulse]]&lt;br /&gt;
&lt;br /&gt;
=== 2. Digital Output Drive (Write) ===&lt;br /&gt;
Driving output data from the digital core logic through the pad cell driver transistors onto the external bonding pad:&lt;br /&gt;
[[File:sim_2_signal_write.png|thumb|center|700px|Signal Write: Core OUT driving Bonding Pad (0V to 3.3V)]]&lt;br /&gt;
&lt;br /&gt;
=== 3. Digital Input Sensing (Read / Hi-Z) ===&lt;br /&gt;
External signal applied to the bonding pad in tristate / Hi-Z mode, sensed by the internal core input buffer:&lt;br /&gt;
[[File:sim_3_signal_read_hiz.png|thumb|center|700px|Signal Read: External Bonding Pad voltage sensed at Core IN]]&lt;br /&gt;
&lt;br /&gt;
=== 4. Full Dynamic Loopback ===&lt;br /&gt;
End-to-end signal transmission across the entire chip: Core Transmitter (Pad A) drives the shared bonding wire bus, sensed by Core Receiver (Pad B):&lt;br /&gt;
[[File:sim_4_pad_to_pad_loopback.png|thumb|center|700px|Pad-to-Pad Dynamic Loopback: Transmitter OUT to Receiver IN]]&lt;br /&gt;
&lt;br /&gt;
== Physical Verification &amp;amp; GDS Delivery ==&lt;br /&gt;
* &#039;&#039;&#039;GDSII Top Level:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.raw.gds&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;padframe.gds&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Magic Layout:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.mag&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SPICE Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Simulation Models:&#039;&#039;&#039; &amp;lt;code&amp;gt;model.spice&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;design_header.ngspice&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:LibreSilicon Verification Reports]]&lt;br /&gt;
[[Category:LibrePDK]]&lt;br /&gt;
[[Category:SG13G2]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_SG13G2@1.2V&amp;diff=795</id>
		<title>LibrePDK Padframe SPICE Verification Report SG13G2@1.2V</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibrePDK_Padframe_SPICE_Verification_Report_SG13G2@1.2V&amp;diff=795"/>
		<updated>2026-09-01T16:08:24Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: Created page with &amp;quot;= LibrePDK Padframe SPICE Verification Report =  &amp;#039;&amp;#039;&amp;#039;Technology:&amp;#039;&amp;#039;&amp;#039; IHP SG13G2 (130nm BiCMOS)   &amp;#039;&amp;#039;&amp;#039;Operating Voltage:&amp;#039;&amp;#039;&amp;#039; 1.2 V   &amp;#039;&amp;#039;&amp;#039;Verification Date:&amp;#039;&amp;#039;&amp;#039; 2026-09-01 16:47:40 UTC   &amp;#039;&amp;#039;&amp;#039;Extracted Netlist:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt; (Magic VLSI Hierarchical Extraction)    == Executive Summary == {| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:90%;&amp;quot; ! Test Scenario !! Target Net / Pad !! Measured Values !! Design Specification !! Status |- | style=&amp;quot;text-align:left;&amp;quot; |...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LibrePDK Padframe SPICE Verification Report =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technology:&#039;&#039;&#039; IHP SG13G2 (130nm BiCMOS)  &lt;br /&gt;
&#039;&#039;&#039;Operating Voltage:&#039;&#039;&#039; 1.2 V  &lt;br /&gt;
&#039;&#039;&#039;Verification Date:&#039;&#039;&#039; 2026-09-01 16:47:40 UTC  &lt;br /&gt;
&#039;&#039;&#039;Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt; (Magic VLSI Hierarchical Extraction)  &lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:90%;&amp;quot;&lt;br /&gt;
! Test Scenario !! Target Net / Pad !! Measured Values !! Design Specification !! Status&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;ESD Clamping Transient&#039;&#039;&#039; || PAD_GPIO_0 (ESD Clamps) || Peak Clamped: 2.75 V || &amp;lt; 15.0 V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Output Drive (Write)&#039;&#039;&#039; || gpio_out_0 → PAD_GPIO_0 || Low: 0.00 V, High: 1.15 V || Rail-to-rail driver transition || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Digital Input Sensing (Read / Hi-Z)&#039;&#039;&#039; || PAD_GPIO_1 → gpio_in_1 || Pad 0V → 0.00 V, Pad 1.2V → 1.15 V || Pad 0V -&amp;gt; Core &amp;gt; 0.8V, Pad 1.2V -&amp;gt; Core &amp;lt; 0.2V || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | &#039;&#039;&#039;Pad-to-Pad Dynamic Loopback&#039;&#039;&#039; || PAD_GPIO_0 → PAD_GPIO_1 || Bus: 0.12V / 1.20V | Rx: 0.00V / 1.15V || Full rail-to-rail dynamic loopback across frame || style=&amp;quot;background:#d4edda; color:#155724; font-weight:bold;&amp;quot; | PASS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Core Signal &amp;amp; Bonding Pad Interface Mapping ==&lt;br /&gt;
The LibrePDK padframe generator exposed unique net names defined in the JSON configuration for seamless Coriolis LEF/DEF digital core integration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:90%; font-family:monospace;&amp;quot;&lt;br /&gt;
! Subcircuit Port Name !! Direction !! Interface Type !! Associated Physical Layer&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VDD&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VSS&#039;&#039;&#039; || Power Supply || Power / Ground Rail Tap || metal7 / multi-rail&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_0&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_0&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_0&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_in_1&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_out_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;gpio_en_1&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_GPIO_1&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_miso_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MISO&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_cs_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_CS&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_tx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_TX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;uart_rx_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_UART_RX&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_sclk_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_SCLK&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_in&#039;&#039;&#039; || Core Output (Pad -&amp;gt; Core) || Core Input Buffer (From Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_out&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Core Output Driver (To Pad) || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;spi_mosi_en&#039;&#039;&#039; || Core Input (Core -&amp;gt; Pad) || Output Driver Tristate Enable || metal1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PAD_SPI_MOSI&#039;&#039;&#039; || Bidirectional / Analog || Bonding Pad (Top Metal) || metal7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Transient Simulation Waveforms ==&lt;br /&gt;
&lt;br /&gt;
=== 1. ESD Clamping Event ===&lt;br /&gt;
Transient simulation applying a 2kV / 1.33A peak Human Body Model (HBM) current pulse directly to the bonding pad:&lt;br /&gt;
[[File:sim_1_esd_clamping.png|thumb|center|700px|ESD Diode and Rail Clamping Response under 1.33A Transient Current Pulse]]&lt;br /&gt;
&lt;br /&gt;
=== 2. Digital Output Drive (Write) ===&lt;br /&gt;
Driving output data from the digital core logic through the pad cell driver transistors onto the external bonding pad:&lt;br /&gt;
[[File:sim_2_signal_write.png|thumb|center|700px|Signal Write: Core OUT driving Bonding Pad (0V to 1.2V)]]&lt;br /&gt;
&lt;br /&gt;
=== 3. Digital Input Sensing (Read / Hi-Z) ===&lt;br /&gt;
External signal applied to the bonding pad in tristate / Hi-Z mode, sensed by the internal core input buffer:&lt;br /&gt;
[[File:sim_3_signal_read_hiz.png|thumb|center|700px|Signal Read: External Bonding Pad voltage sensed at Core IN]]&lt;br /&gt;
&lt;br /&gt;
=== 4. Full Dynamic Loopback ===&lt;br /&gt;
End-to-end signal transmission across the entire chip: Core Transmitter (Pad A) drives the shared bonding wire bus, sensed by Core Receiver (Pad B):&lt;br /&gt;
[[File:sim_4_pad_to_pad_loopback.png|thumb|center|700px|Pad-to-Pad Dynamic Loopback: Transmitter OUT to Receiver IN]]&lt;br /&gt;
&lt;br /&gt;
== Physical Verification &amp;amp; GDS Delivery ==&lt;br /&gt;
* &#039;&#039;&#039;GDSII Top Level:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.raw.gds&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;padframe.gds&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Magic Layout:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.mag&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SPICE Extracted Netlist:&#039;&#039;&#039; &amp;lt;code&amp;gt;padframe.spice&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Simulation Models:&#039;&#039;&#039; &amp;lt;code&amp;gt;model.spice&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;design_header.ngspice&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:LibreSilicon Verification Reports]]&lt;br /&gt;
[[Category:LibrePDK]]&lt;br /&gt;
[[Category:SG13G2]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=794</id>
		<title>Pad Frame Generator</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=794"/>
		<updated>2026-09-01T16:07:08Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Padframe Example.png|thumb|Example of a pad frame for SG13G2@1.2V]]&lt;br /&gt;
The Pad Frame Generator is part of the [[LibrePDK]] and provides the [[Pad Cell Generator]] functionality.&lt;br /&gt;
&lt;br /&gt;
It&#039;s job is to assemble a ready to use pad frame harness, with ESD protection and power rail wire width properly adjusted for accommodating the intended current driving capacity as well as the intended voltage levels to be used.&lt;br /&gt;
&lt;br /&gt;
== Types of Pad Cells produced ==&lt;br /&gt;
Currently we support only simple IO [[Pad Cell]], analog cells, and power cells, complex pad cells still are being in development.&lt;br /&gt;
&lt;br /&gt;
The very special impedance compensated pad cell in the works ([[High-Speed Impedance-Compensated Pad Cell]]) is needed in order to hook up DDR4 RAM to our chips or build a PCIe device.&lt;br /&gt;
&lt;br /&gt;
== How to use ==&lt;br /&gt;
There are two options on how you can run the Pad Frame Generator on your machine, you can go the easy route and use a docker container or you can [[Pad Frame Generator#Installation|set up LibrePDK locally]].&lt;br /&gt;
&lt;br /&gt;
An example for a paframe config can be found here [https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/tests/padframes/padframe_sg13g2_1v2.json?ref_type=heads padframe_sg13g2_1v2.json]&lt;br /&gt;
&lt;br /&gt;
=== Docker ===&lt;br /&gt;
First pull the docker image for the [[LibrePDK]] in order to make sure the image is up to date by running&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull leviathanch/librepdk:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Then you can feed your JSON config for the padframe you have configured to the pad frame generator script contained in the docker image.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;docker run -it --rm \&lt;br /&gt;
    -e HOST_UID=$(id -u) -e HOST_GID=$(id -g) \&lt;br /&gt;
    -v &amp;quot;$(pwd)&amp;quot;:/workspace leviathanch/librepdk:latest \&lt;br /&gt;
    librepdk_padframe_generator -i padframe_config.json \&lt;br /&gt;
    -o my_padframe&amp;lt;/syntaxhighlight&amp;gt;After running the generator you should have a folder named my_padframe containing the LEF, DEF, Magic and all the other files you need for running a full synthesis flow of your designs.&lt;br /&gt;
&lt;br /&gt;
=== Run Locally ===&lt;br /&gt;
After [[Pad Frame Generator#Installation|seting up LibrePDK locally]] you can generate your pad frame by running&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;uv run \&lt;br /&gt;
    librepdk_padframe_generator -i padframe_config.json \&lt;br /&gt;
    -o my_padframe&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Test cases ==&lt;br /&gt;
Tests have been performed for the sample pad frame configurations for [https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/tests/padframes/padframe_gf180a_3v3.json?ref_type=heads IHP&#039;s SG13G2 at 1.2V] and the [https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/tests/padframes/padframe_gf180a_3v3.json?ref_type=heads GF180A process at 3.3V] (by Global Foundries).&lt;br /&gt;
&lt;br /&gt;
Please look at [[LibrePDK Padframe SPICE Verification Report SG13G2@1.2V]] and [[LibrePDK Padframe SPICE Verification Report GF180A@3.3V]] for the simulation verification results and wave forms.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Since the Pad Frame Generator is part of [[LibrePDK]] you can find the guide on how to install all the dependencies in the [[LibrePDK#Installation|Installation section of the LibrePDK]] page&lt;br /&gt;
&lt;br /&gt;
== Benchmarks ==&lt;br /&gt;
Generating all those individual geometries takes a lot of time, an initial generation run can take up to half an hour due to the complexity and size of a pad frame and its pad cells, which is why we introduced component caching.&lt;br /&gt;
&lt;br /&gt;
=== Initial run ===&lt;br /&gt;
The initial run for GF180A takes around 20 minutes, IHP and Skywater with even more layers can take up to 32 minutes&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    20m48.886s&lt;br /&gt;
user    20m46.885s&lt;br /&gt;
sys     0m3.880s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Further runs ===&lt;br /&gt;
During the second run that generation time is cut in half when assembling the padframe and writing it out.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    8m43.972s&lt;br /&gt;
user    8m40.889s&lt;br /&gt;
sys     0m4.139s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=793</id>
		<title>Pad Frame Generator</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=793"/>
		<updated>2026-08-31T16:00:32Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* How to use */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Padframe Example.png|thumb|Example of a pad frame for SG13G2@1.2V]]&lt;br /&gt;
The Pad Frame Generator is part of the [[LibrePDK]] and provides the [[Pad Cell Generator]] functionality.&lt;br /&gt;
&lt;br /&gt;
It&#039;s job is to assemble a ready to use pad frame harness, with ESD protection and power rail wire width properly adjusted for accommodating the intended current driving capacity as well as the intended voltage levels to be used.&lt;br /&gt;
&lt;br /&gt;
== Types of Pad Cells produced ==&lt;br /&gt;
Currently we support only simple IO [[Pad Cell]], analog cells, and power cells, complex pad cells still are being in development.&lt;br /&gt;
&lt;br /&gt;
The very special impedance compensated pad cell in the works ([[High-Speed Impedance-Compensated Pad Cell]]) is needed in order to hook up DDR4 RAM to our chips or build a PCIe device.&lt;br /&gt;
&lt;br /&gt;
== How to use ==&lt;br /&gt;
There are two options on how you can run the Pad Frame Generator on your machine, you can go the easy route and use a docker container or you can [[Pad Frame Generator#Installation|set up LibrePDK locally]].&lt;br /&gt;
&lt;br /&gt;
An example for a paframe config can be found here [https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/tests/padframes/padframe_sg13g2_1v2.json?ref_type=heads padframe_sg13g2_1v2.json]&lt;br /&gt;
&lt;br /&gt;
=== Docker ===&lt;br /&gt;
First pull the docker image for the [[LibrePDK]] in order to make sure the image is up to date by running&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull leviathanch/librepdk:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Then you can feed your JSON config for the padframe you have configured to the pad frame generator script contained in the docker image.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;docker run -it --rm \&lt;br /&gt;
    -e HOST_UID=$(id -u) -e HOST_GID=$(id -g) \&lt;br /&gt;
    -v &amp;quot;$(pwd)&amp;quot;:/workspace leviathanch/librepdk:latest \&lt;br /&gt;
    librepdk_padframe_generator -i padframe_config.json \&lt;br /&gt;
    -o my_padframe&amp;lt;/syntaxhighlight&amp;gt;After running the generator you should have a folder named my_padframe containing the LEF, DEF, Magic and all the other files you need for running a full synthesis flow of your designs.&lt;br /&gt;
&lt;br /&gt;
=== Run Locally ===&lt;br /&gt;
After [[Pad Frame Generator#Installation|seting up LibrePDK locally]] you can generate your pad frame by running&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;uv run \&lt;br /&gt;
    librepdk_padframe_generator -i padframe_config.json \&lt;br /&gt;
    -o my_padframe&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Installation ==&lt;br /&gt;
Since the Pad Frame Generator is part of [[LibrePDK]] you can find the guide on how to install all the dependencies in the [[LibrePDK#Installation|Installation section of the LibrePDK]] page&lt;br /&gt;
&lt;br /&gt;
== Benchmarks ==&lt;br /&gt;
Generating all those individual geometries takes a lot of time, an initial generation run can take up to half an hour due to the complexity and size of a pad frame and its pad cells, which is why we introduced component caching.&lt;br /&gt;
&lt;br /&gt;
=== Initial run ===&lt;br /&gt;
The initial run for GF180A takes around 20 minutes, IHP and Skywater with even more layers can take up to 32 minutes&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    20m48.886s&lt;br /&gt;
user    20m46.885s&lt;br /&gt;
sys     0m3.880s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Further runs ===&lt;br /&gt;
During the second run that generation time is cut in half when assembling the padframe and writing it out.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    8m43.972s&lt;br /&gt;
user    8m40.889s&lt;br /&gt;
sys     0m4.139s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=792</id>
		<title>Pad Frame Generator</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=792"/>
		<updated>2026-08-31T15:58:52Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* How to use */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Padframe Example.png|thumb|Example of a pad frame for SG13G2@1.2V]]&lt;br /&gt;
The Pad Frame Generator is part of the [[LibrePDK]] and provides the [[Pad Cell Generator]] functionality.&lt;br /&gt;
&lt;br /&gt;
It&#039;s job is to assemble a ready to use pad frame harness, with ESD protection and power rail wire width properly adjusted for accommodating the intended current driving capacity as well as the intended voltage levels to be used.&lt;br /&gt;
&lt;br /&gt;
== Types of Pad Cells produced ==&lt;br /&gt;
Currently we support only simple IO [[Pad Cell]], analog cells, and power cells, complex pad cells still are being in development.&lt;br /&gt;
&lt;br /&gt;
The very special impedance compensated pad cell in the works ([[High-Speed Impedance-Compensated Pad Cell]]) is needed in order to hook up DDR4 RAM to our chips or build a PCIe device.&lt;br /&gt;
&lt;br /&gt;
== How to use ==&lt;br /&gt;
There are two options on how you can run the Pad Frame Generator on your machine, you can go the easy route and use a docker container or you can [[Pad Frame Generator#Installation|set up LibrePDK locally]]&lt;br /&gt;
&lt;br /&gt;
=== Docker ===&lt;br /&gt;
First pull the docker image for the [[LibrePDK]] in order to make sure the image is up to date by running&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull leviathanch/librepdk:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Then you can feed your JSON config for the padframe you have configured to the pad frame generator script contained in the docker image.&lt;br /&gt;
&lt;br /&gt;
An example for a paframe config can be found here [https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/tests/padframes/padframe_sg13g2_1v2.json?ref_type=heads padframe_sg13g2_1v2.json]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;docker run -it --rm \&lt;br /&gt;
    -e HOST_UID=$(id -u) -e HOST_GID=$(id -g) \&lt;br /&gt;
    -v &amp;quot;$(pwd)&amp;quot;:/workspace leviathanch/librepdk:latest \&lt;br /&gt;
    librepdk_padframe_generator -i padframe_config.json \&lt;br /&gt;
    -o my_padframe&amp;lt;/syntaxhighlight&amp;gt;After running the generator you should have a folder named my_padframe containing the LEF, DEF, Magic and all the other files you need for running a full synthesis flow of your designs.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Since the Pad Frame Generator is part of [[LibrePDK]] you can find the guide on how to install all the dependencies in the [[LibrePDK#Installation|Installation section of the LibrePDK]] page&lt;br /&gt;
&lt;br /&gt;
== Benchmarks ==&lt;br /&gt;
Generating all those individual geometries takes a lot of time, an initial generation run can take up to half an hour due to the complexity and size of a pad frame and its pad cells, which is why we introduced component caching.&lt;br /&gt;
&lt;br /&gt;
=== Initial run ===&lt;br /&gt;
The initial run for GF180A takes around 20 minutes, IHP and Skywater with even more layers can take up to 32 minutes&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    20m48.886s&lt;br /&gt;
user    20m46.885s&lt;br /&gt;
sys     0m3.880s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Further runs ===&lt;br /&gt;
During the second run that generation time is cut in half when assembling the padframe and writing it out.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    8m43.972s&lt;br /&gt;
user    8m40.889s&lt;br /&gt;
sys     0m4.139s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=791</id>
		<title>Pad Frame Generator</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=791"/>
		<updated>2026-08-31T13:38:54Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* How to use */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Padframe Example.png|thumb|Example of a pad frame for SG13G2@1.2V]]&lt;br /&gt;
The Pad Frame Generator is part of the [[LibrePDK]] and provides the [[Pad Cell Generator]] functionality.&lt;br /&gt;
&lt;br /&gt;
It&#039;s job is to assemble a ready to use pad frame harness, with ESD protection and power rail wire width properly adjusted for accommodating the intended current driving capacity as well as the intended voltage levels to be used.&lt;br /&gt;
&lt;br /&gt;
== Types of Pad Cells produced ==&lt;br /&gt;
Currently we support only simple IO [[Pad Cell]], analog cells, and power cells, complex pad cells still are being in development.&lt;br /&gt;
&lt;br /&gt;
The very special impedance compensated pad cell in the works ([[High-Speed Impedance-Compensated Pad Cell]]) is needed in order to hook up DDR4 RAM to our chips or build a PCIe device.&lt;br /&gt;
&lt;br /&gt;
== How to use ==&lt;br /&gt;
First pull the docker image for the [[LibrePDK]] in order to make sure the image is up to date by running&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull leviathanch/librepdk:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Then you can feed your JSON config for the padframe you have configured to the pad frame generator script contained in the docker image.&lt;br /&gt;
&lt;br /&gt;
An example for a paframe config can be found here [https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/tests/padframes/padframe_sg13g2_1v2.json?ref_type=heads padframe_sg13g2_1v2.json]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;docker run -it --rm \&lt;br /&gt;
    -e HOST_UID=$(id -u) -e HOST_GID=$(id -g) \&lt;br /&gt;
    -v &amp;quot;$(pwd)&amp;quot;:/workspace leviathanch/librepdk:latest \&lt;br /&gt;
    librepdk_padframe_generator -i padframe_config.json \&lt;br /&gt;
    -o my_padframe&amp;lt;/syntaxhighlight&amp;gt;After running the generator you should have a folder named my_padframe containing the LEF, DEF, Magic and all the other files you need for running a full synthesis flow of your designs.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Since the Pad Frame Generator is part of [[LibrePDK]] you can find the guide on how to install all the dependencies in the [[LibrePDK#Installation|Installation section of the LibrePDK]] page&lt;br /&gt;
&lt;br /&gt;
== Benchmarks ==&lt;br /&gt;
Generating all those individual geometries takes a lot of time, an initial generation run can take up to half an hour due to the complexity and size of a pad frame and its pad cells, which is why we introduced component caching.&lt;br /&gt;
&lt;br /&gt;
=== Initial run ===&lt;br /&gt;
The initial run for GF180A takes around 20 minutes, IHP and Skywater with even more layers can take up to 32 minutes&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    20m48.886s&lt;br /&gt;
user    20m46.885s&lt;br /&gt;
sys     0m3.880s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Further runs ===&lt;br /&gt;
During the second run that generation time is cut in half when assembling the padframe and writing it out.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    8m43.972s&lt;br /&gt;
user    8m40.889s&lt;br /&gt;
sys     0m4.139s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=790</id>
		<title>Pad Frame Generator</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=790"/>
		<updated>2026-08-31T13:38:26Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* Types of Pad Cells produced */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Padframe Example.png|thumb|Example of a pad frame for SG13G2@1.2V]]&lt;br /&gt;
The Pad Frame Generator is part of the [[LibrePDK]] and provides the [[Pad Cell Generator]] functionality.&lt;br /&gt;
&lt;br /&gt;
It&#039;s job is to assemble a ready to use pad frame harness, with ESD protection and power rail wire width properly adjusted for accommodating the intended current driving capacity as well as the intended voltage levels to be used.&lt;br /&gt;
&lt;br /&gt;
== Types of Pad Cells produced ==&lt;br /&gt;
Currently we support only simple IO [[Pad Cell]], analog cells, and power cells, complex pad cells still are being in development.&lt;br /&gt;
&lt;br /&gt;
The very special impedance compensated pad cell in the works ([[High-Speed Impedance-Compensated Pad Cell]]) is needed in order to hook up DDR4 RAM to our chips or build a PCIe device.&lt;br /&gt;
&lt;br /&gt;
== How to use ==&lt;br /&gt;
First pull the docker image for the [[LibrePDK]] in order to make sure the image is up to date by running&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull leviathanch/librepdk:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Then you can feed your JSON config for the padframe you have configured to the pad frame generator script contained in the docker image.&lt;br /&gt;
An example for a paframe config can be found here [https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/tests/padframes/padframe_sg13g2_1v2.json?ref_type=heads padframe_sg13g2_1v2.json]&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;docker run -it --rm \&lt;br /&gt;
    -e HOST_UID=$(id -u) -e HOST_GID=$(id -g) \&lt;br /&gt;
    -v &amp;quot;$(pwd)&amp;quot;:/workspace leviathanch/librepdk:latest \&lt;br /&gt;
    librepdk_padframe_generator -i padframe_config.json \&lt;br /&gt;
    -o my_padframe&amp;lt;/syntaxhighlight&amp;gt;After running the generator you should have a folder named my_padframe containing the LEF, DEF, Magic and all the other files you need for running a full synthesis flow of your designs.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Since the Pad Frame Generator is part of [[LibrePDK]] you can find the guide on how to install all the dependencies in the [[LibrePDK#Installation|Installation section of the LibrePDK]] page&lt;br /&gt;
&lt;br /&gt;
== Benchmarks ==&lt;br /&gt;
Generating all those individual geometries takes a lot of time, an initial generation run can take up to half an hour due to the complexity and size of a pad frame and its pad cells, which is why we introduced component caching.&lt;br /&gt;
&lt;br /&gt;
=== Initial run ===&lt;br /&gt;
The initial run for GF180A takes around 20 minutes, IHP and Skywater with even more layers can take up to 32 minutes&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    20m48.886s&lt;br /&gt;
user    20m46.885s&lt;br /&gt;
sys     0m3.880s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Further runs ===&lt;br /&gt;
During the second run that generation time is cut in half when assembling the padframe and writing it out.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    8m43.972s&lt;br /&gt;
user    8m40.889s&lt;br /&gt;
sys     0m4.139s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=789</id>
		<title>Pad Frame Generator</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=789"/>
		<updated>2026-08-31T13:38:14Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* How to use */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Padframe Example.png|thumb|Example of a pad frame for SG13G2@1.2V]]&lt;br /&gt;
The Pad Frame Generator is part of the [[LibrePDK]] and provides the [[Pad Cell Generator]] functionality.&lt;br /&gt;
&lt;br /&gt;
It&#039;s job is to assemble a ready to use pad frame harness, with ESD protection and power rail wire width properly adjusted for accommodating the intended current driving capacity as well as the intended voltage levels to be used.&lt;br /&gt;
&lt;br /&gt;
== Types of Pad Cells produced ==&lt;br /&gt;
Currently we support only simple IO [[Pad Cell]], analog cells, and power cells, complex pad cells still are being in development.&lt;br /&gt;
&lt;br /&gt;
The very special impedance compensated pad cell in the works ([[High-Speed Impedance-Compensated Pad Cell]]) is needed in order to hook up DDR4 RAM to our chips or build a PCIe device.&lt;br /&gt;
&lt;br /&gt;
== How to use ==&lt;br /&gt;
First pull the docker image for the [[LibrePDK]] in order to make sure the image is up to date by running&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull leviathanch/librepdk:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Then you can feed your JSON config for the padframe you have configured to the pad frame generator script contained in the docker image.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
An example for a paframe config can be found here [https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/tests/padframes/padframe_sg13g2_1v2.json?ref_type=heads padframe_sg13g2_1v2.json]&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;docker run -it --rm \&lt;br /&gt;
    -e HOST_UID=$(id -u) -e HOST_GID=$(id -g) \&lt;br /&gt;
    -v &amp;quot;$(pwd)&amp;quot;:/workspace leviathanch/librepdk:latest \&lt;br /&gt;
    librepdk_padframe_generator -i padframe_config.json \&lt;br /&gt;
    -o my_padframe&amp;lt;/syntaxhighlight&amp;gt;After running the generator you should have a folder named my_padframe containing the LEF, DEF, Magic and all the other files you need for running a full synthesis flow of your designs.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Since the Pad Frame Generator is part of [[LibrePDK]] you can find the guide on how to install all the dependencies in the [[LibrePDK#Installation|Installation section of the LibrePDK]] page&lt;br /&gt;
&lt;br /&gt;
== Benchmarks ==&lt;br /&gt;
Generating all those individual geometries takes a lot of time, an initial generation run can take up to half an hour due to the complexity and size of a pad frame and its pad cells, which is why we introduced component caching.&lt;br /&gt;
&lt;br /&gt;
=== Initial run ===&lt;br /&gt;
The initial run for GF180A takes around 20 minutes, IHP and Skywater with even more layers can take up to 32 minutes&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    20m48.886s&lt;br /&gt;
user    20m46.885s&lt;br /&gt;
sys     0m3.880s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Further runs ===&lt;br /&gt;
During the second run that generation time is cut in half when assembling the padframe and writing it out.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    8m43.972s&lt;br /&gt;
user    8m40.889s&lt;br /&gt;
sys     0m4.139s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=788</id>
		<title>Pad Frame Generator</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=788"/>
		<updated>2026-08-31T13:37:38Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* How to use */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Padframe Example.png|thumb|Example of a pad frame for SG13G2@1.2V]]&lt;br /&gt;
The Pad Frame Generator is part of the [[LibrePDK]] and provides the [[Pad Cell Generator]] functionality.&lt;br /&gt;
&lt;br /&gt;
It&#039;s job is to assemble a ready to use pad frame harness, with ESD protection and power rail wire width properly adjusted for accommodating the intended current driving capacity as well as the intended voltage levels to be used.&lt;br /&gt;
&lt;br /&gt;
== Types of Pad Cells produced ==&lt;br /&gt;
Currently we support only simple IO [[Pad Cell]], analog cells, and power cells, complex pad cells still are being in development.&lt;br /&gt;
&lt;br /&gt;
The very special impedance compensated pad cell in the works ([[High-Speed Impedance-Compensated Pad Cell]]) is needed in order to hook up DDR4 RAM to our chips or build a PCIe device.&lt;br /&gt;
&lt;br /&gt;
== How to use ==&lt;br /&gt;
First pull the docker image for the [[LibrePDK]] in order to make sure the image is up to date by running&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull leviathanch/librepdk:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Then you can feed your JSON config for the padframe you have configured to the pad frame generator script contained in the docker image&lt;br /&gt;
&lt;br /&gt;
An example for a paframe config can be found here [https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/tests/padframes/padframe_sg13g2_1v2.json?ref_type=heads padframe_sg13g2_1v2.json]&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;docker run -it --rm \&lt;br /&gt;
    -e HOST_UID=$(id -u) -e HOST_GID=$(id -g) \&lt;br /&gt;
    -v &amp;quot;$(pwd)&amp;quot;:/workspace leviathanch/librepdk:latest \&lt;br /&gt;
    librepdk_padframe_generator -i padframe_config.json \&lt;br /&gt;
    -o my_padframe&amp;lt;/syntaxhighlight&amp;gt;After running the generator you should have a folder named my_padframe containing the LEF, DEF, Magic and all the other files you need for running a full synthesis flow of your designs.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Since the Pad Frame Generator is part of [[LibrePDK]] you can find the guide on how to install all the dependencies in the [[LibrePDK#Installation|Installation section of the LibrePDK]] page&lt;br /&gt;
&lt;br /&gt;
== Benchmarks ==&lt;br /&gt;
Generating all those individual geometries takes a lot of time, an initial generation run can take up to half an hour due to the complexity and size of a pad frame and its pad cells, which is why we introduced component caching.&lt;br /&gt;
&lt;br /&gt;
=== Initial run ===&lt;br /&gt;
The initial run for GF180A takes around 20 minutes, IHP and Skywater with even more layers can take up to 32 minutes&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    20m48.886s&lt;br /&gt;
user    20m46.885s&lt;br /&gt;
sys     0m3.880s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Further runs ===&lt;br /&gt;
During the second run that generation time is cut in half when assembling the padframe and writing it out.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    8m43.972s&lt;br /&gt;
user    8m40.889s&lt;br /&gt;
sys     0m4.139s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=787</id>
		<title>Pad Frame Generator</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=787"/>
		<updated>2026-08-31T13:20:36Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* Benchmarks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Padframe Example.png|thumb|Example of a pad frame for SG13G2@1.2V]]&lt;br /&gt;
The Pad Frame Generator is part of the [[LibrePDK]] and provides the [[Pad Cell Generator]] functionality.&lt;br /&gt;
&lt;br /&gt;
It&#039;s job is to assemble a ready to use pad frame harness, with ESD protection and power rail wire width properly adjusted for accommodating the intended current driving capacity as well as the intended voltage levels to be used.&lt;br /&gt;
&lt;br /&gt;
== Types of Pad Cells produced ==&lt;br /&gt;
Currently we support only simple IO [[Pad Cell]], analog cells, and power cells, complex pad cells still are being in development.&lt;br /&gt;
&lt;br /&gt;
The very special impedance compensated pad cell in the works ([[High-Speed Impedance-Compensated Pad Cell]]) is needed in order to hook up DDR4 RAM to our chips or build a PCIe device.&lt;br /&gt;
&lt;br /&gt;
== How to use ==&lt;br /&gt;
First pull the docker image for the [[LibrePDK]] in order to make sure the image is up to date by running&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull leviathanch/librepdk:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Then you can feed your JSON config for the padframe you have configured to the pad frame generator script contained in the docker image&lt;br /&gt;
&lt;br /&gt;
An example for a paframe config can be found here https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/tests/padframes/padframe_sg13g2_1v2.json?ref_type=heads&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;docker run -it --rm \&lt;br /&gt;
    -e HOST_UID=$(id -u) -e HOST_GID=$(id -g) \&lt;br /&gt;
    -v &amp;quot;$(pwd)&amp;quot;:/workspace leviathanch/librepdk:latest \&lt;br /&gt;
    librepdk_padframe_generator -i padframe_config.json \&lt;br /&gt;
    -o my_padframe&amp;lt;/syntaxhighlight&amp;gt;After running the generator you should have a folder named my_padframe containing the LEF, DEF, Magic and all the other files you need for running a full synthesis flow of your designs.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Since the Pad Frame Generator is part of [[LibrePDK]] you can find the guide on how to install all the dependencies in the [[LibrePDK#Installation|Installation section of the LibrePDK]] page&lt;br /&gt;
&lt;br /&gt;
== Benchmarks ==&lt;br /&gt;
Generating all those individual geometries takes a lot of time, an initial generation run can take up to half an hour due to the complexity and size of a pad frame and its pad cells, which is why we introduced component caching.&lt;br /&gt;
&lt;br /&gt;
=== Initial run ===&lt;br /&gt;
The initial run for GF180A takes around 20 minutes, IHP and Skywater with even more layers can take up to 32 minutes&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    20m48.886s&lt;br /&gt;
user    20m46.885s&lt;br /&gt;
sys     0m3.880s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Further runs ===&lt;br /&gt;
During the second run that generation time is cut in half when assembling the padframe and writing it out.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    8m43.972s&lt;br /&gt;
user    8m40.889s&lt;br /&gt;
sys     0m4.139s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibreSilicon_stack&amp;diff=786</id>
		<title>LibreSilicon stack</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibreSilicon_stack&amp;diff=786"/>
		<updated>2026-08-31T08:26:20Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* Pad Frames */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LibreSilicon includes not only software but also a manufacturing process flow standard with recipes and machine designs.&lt;br /&gt;
A detailed overview with links goes onto this page.&lt;br /&gt;
&lt;br /&gt;
LibreSilicon can be roughly divided into two main categories, physical manufacturing as well as the tool chain part&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
For doing anything useful with your foundry, you need a way of verifying your setup, for which we provide you the test wafer generator [[Danube River]], then you need standard logic cells for synthesizing, placing and routing your layout, and of pad cells so that you can wire bond your chip;&lt;br /&gt;
&lt;br /&gt;
=== Process Verification ===&lt;br /&gt;
When setting up a new foundry, no matter the scale, the physical manufacturing needs to be verified, using a test wafer, for this purpose we provide a dynamic test wafer generator named [[Danube River]], which you can provide your own technology specs based on initial calculations for your setup and then verify and adjust your values until everything is correct.&lt;br /&gt;
[[File:Danube For New Foundry.png|none|thumb|653x653px]]&lt;br /&gt;
&lt;br /&gt;
=== Standard Cells ===&lt;br /&gt;
You need standard logic cells, small logic gate layouts made from place and routing discrete FETs, in order to turn the RTL level logic Yosys spits out into an actual digital chip layout.&lt;br /&gt;
&lt;br /&gt;
You can now use the [[LibreStandardCell]] generator and generate custom standard logic cell libraries where you decide the target technology, voltage, height and thermal budget.&lt;br /&gt;
[[File:LibreStandardCell screeny2.png|none|thumb]]&lt;br /&gt;
Originally Philip was working on [[StdCellLib]], but he re-licensed it under Apache which kind of defeats the purpose of a project calling itself &#039;&#039;&#039;Libre&#039;&#039;&#039;Silicon. Because Leviathan was a bit triggered by this due to his definition of Libre being the same as the Free Software Foundation, which means, that it&#039;s supposed under a GNU Public License, he decided to work on introducing the functionality for placing and routing standard logic cells in [[LibrePDK]] as well, in addition to analog and pad cell generation.&lt;br /&gt;
&lt;br /&gt;
=== Pad Cells ===&lt;br /&gt;
The [[Pad Cell Generator]] is part of the [[LibrePDK]] and can be used to created custom sets of pad cells with custom rail voltages and you can even define a set of currents your pad frame is supposed to end up driving.&lt;br /&gt;
[[File:Sg13g2 1v2 io cell 60mA 1p2V.png|none|thumb|padframe_sg13g2_1v2/io_cell_60mA_1p2V/]]&lt;br /&gt;
The pad cell has such thin wires, because the ultimate wire width has to be determined based on the final current which is supposed to be driven by the overall pad frame the cells are being generated for.&lt;br /&gt;
=== Pad Frames ===&lt;br /&gt;
The [[Pad Frame Generator]] has the job of taking in a JSON with pin assignment for the East, North, South and West bank and then calculate the wire dimensions of the overall padframe based on the projected peak currents as well as to choose the right pad cell type for each assigned pin.&lt;br /&gt;
[[File:Padframe Example.png|none|thumb|Pad Frame Example SG13G2@1.2V]]&lt;br /&gt;
The resulting output will be a pad frame in Magic, GDS2, LEF and DEF format, which you can use for placing and routing your internal logic to.&lt;br /&gt;
&lt;br /&gt;
==Physical manufacturing==&lt;br /&gt;
&lt;br /&gt;
The physical manufacturing includes things like:&lt;br /&gt;
&lt;br /&gt;
* [[Chemical processing]]&lt;br /&gt;
* [[Photolithography]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibreSilicon_stack&amp;diff=785</id>
		<title>LibreSilicon stack</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibreSilicon_stack&amp;diff=785"/>
		<updated>2026-08-31T08:17:10Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* Pad Cells */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LibreSilicon includes not only software but also a manufacturing process flow standard with recipes and machine designs.&lt;br /&gt;
A detailed overview with links goes onto this page.&lt;br /&gt;
&lt;br /&gt;
LibreSilicon can be roughly divided into two main categories, physical manufacturing as well as the tool chain part&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
For doing anything useful with your foundry, you need a way of verifying your setup, for which we provide you the test wafer generator [[Danube River]], then you need standard logic cells for synthesizing, placing and routing your layout, and of pad cells so that you can wire bond your chip;&lt;br /&gt;
&lt;br /&gt;
=== Process Verification ===&lt;br /&gt;
When setting up a new foundry, no matter the scale, the physical manufacturing needs to be verified, using a test wafer, for this purpose we provide a dynamic test wafer generator named [[Danube River]], which you can provide your own technology specs based on initial calculations for your setup and then verify and adjust your values until everything is correct.&lt;br /&gt;
[[File:Danube For New Foundry.png|none|thumb|653x653px]]&lt;br /&gt;
&lt;br /&gt;
=== Standard Cells ===&lt;br /&gt;
You need standard logic cells, small logic gate layouts made from place and routing discrete FETs, in order to turn the RTL level logic Yosys spits out into an actual digital chip layout.&lt;br /&gt;
&lt;br /&gt;
You can now use the [[LibreStandardCell]] generator and generate custom standard logic cell libraries where you decide the target technology, voltage, height and thermal budget.&lt;br /&gt;
[[File:LibreStandardCell screeny2.png|none|thumb]]&lt;br /&gt;
Originally Philip was working on [[StdCellLib]], but he re-licensed it under Apache which kind of defeats the purpose of a project calling itself &#039;&#039;&#039;Libre&#039;&#039;&#039;Silicon. Because Leviathan was a bit triggered by this due to his definition of Libre being the same as the Free Software Foundation, which means, that it&#039;s supposed under a GNU Public License, he decided to work on introducing the functionality for placing and routing standard logic cells in [[LibrePDK]] as well, in addition to analog and pad cell generation.&lt;br /&gt;
&lt;br /&gt;
=== Pad Cells ===&lt;br /&gt;
The [[Pad Cell Generator]] is part of the [[LibrePDK]] and can be used to created custom sets of pad cells with custom rail voltages and you can even define a set of currents your pad frame is supposed to end up driving.&lt;br /&gt;
[[File:Sg13g2 1v2 io cell 60mA 1p2V.png|none|thumb|padframe_sg13g2_1v2/io_cell_60mA_1p2V/]]&lt;br /&gt;
The pad cell has such thin wires, because the ultimate wire width has to be determined based on the final current which is supposed to be driven by the overall pad frame the cells are being generated for.&lt;br /&gt;
=== Pad Frames ===&lt;br /&gt;
The [[Pad Frame Generator]] has the job of taking in a JSON with pin assignment for the East, North, South and West bank and then calculate the wire dimensions of the overall padframe based on the projected peak currents as well as to choose the right pad cell type for each assigned pin.&lt;br /&gt;
[[File:Pad Frame v2 Example SG13G2@1V2.png|none|thumb|Pad Frame Example SG13G2@1.2V]]&lt;br /&gt;
The resulting output will be a pad frame in Magic, GDS2, LEF and DEF format, which you can use for placing and routing your internal logic to.&lt;br /&gt;
&lt;br /&gt;
==Physical manufacturing==&lt;br /&gt;
&lt;br /&gt;
The physical manufacturing includes things like:&lt;br /&gt;
&lt;br /&gt;
* [[Chemical processing]]&lt;br /&gt;
* [[Photolithography]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=File:Sg13g2_1v2_io_cell_60mA_1p2V.png&amp;diff=784</id>
		<title>File:Sg13g2 1v2 io cell 60mA 1p2V.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=File:Sg13g2_1v2_io_cell_60mA_1p2V.png&amp;diff=784"/>
		<updated>2026-08-31T08:16:44Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;padframe_sg13g2_1v2/io_cell_60mA_1p2V/&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=High-Speed_Impedance-Compensated_Pad_Cell&amp;diff=783</id>
		<title>High-Speed Impedance-Compensated Pad Cell</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=High-Speed_Impedance-Compensated_Pad_Cell&amp;diff=783"/>
		<updated>2026-08-19T06:53:48Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* 4.4 Pad Capacitance () and ESD Constraints */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= High-Speed Impedance-Compensated Pad Cell Architecture &amp;amp; Specification =&lt;br /&gt;
&#039;&#039;&#039;Document Status:&#039;&#039;&#039; Draft / Initial Specification&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Target Process:&#039;&#039;&#039; LibrePDK (IHP SG13G2 / Generic CMOS)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Target Applications:&#039;&#039;&#039; High-Speed Interfaces (DDR4 SSTL/POD, PCIe Gen 1–3, High-Speed GPIO)&lt;br /&gt;
== 1. Overview &amp;amp; Problem Statement ==&lt;br /&gt;
Standard single-stage push-pull digital I/O drivers (consisting of a single large PMOS and NMOS transistor pair) are strictly insufficient for high-speed transmission lines ( single-ended or  differential).&lt;br /&gt;
&lt;br /&gt;
Uncompensated drivers suffer from severe non-linearities:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Impedance Mismatch &amp;amp; Reflections:&#039;&#039;&#039; Driver output impedance varies drastically across Process, Voltage, and Temperature (PVT) corners. Unmatched termination causes destructive signal reflections, ringing, and inter-symbol interference (ISI).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lack of Dynamic Termination:&#039;&#039;&#039; Receiver modes require active On-Die Termination (ODT) to absorb incoming wave fronts without requiring discrete PCB resistors.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lack of Drive-Strength Control:&#039;&#039;&#039; Variable trace lengths on PCBs require programmable output impedance to match line characteristics (, , , , , ).&lt;br /&gt;
&lt;br /&gt;
To resolve these physical limitations, the next-generation LibreSilicon I/O library must move from static digital drivers to Segmented, PVT-Calibrated Output Drivers with Integrated ODT.&lt;br /&gt;
== 2. Core Architectural Pillars ==&lt;br /&gt;
An impedance-compensated pad cell consists of three mandatory functional subsystems:&lt;br /&gt;
[[File:Cell Corridor Macro.png|thumb|center|800px|High-Level Block Diagram of Calibrated Pad Cell Subsystem]]&lt;br /&gt;
=== 2.1 Multi-Leg / Segmented Output Driver ===&lt;br /&gt;
Rather than a single monolithic transistor, the output driver array is divided into  parallel driver legs (typically  to ).&lt;br /&gt;
&lt;br /&gt;
Each leg consists of a pull-up PMOS and pull-down NMOS in series with a precision poly-silicon resistor.&lt;br /&gt;
&lt;br /&gt;
Leg parameters are sized such that the total leg resistance satisfies:&lt;br /&gt;
&lt;br /&gt;
Enabling combinations of parallel legs provides discrete target output impedances:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Output Impedance Selection&lt;br /&gt;
! Enabled Legs !! Effective Driver Impedance !! Application Target&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||  || High-impedance termination leg / Low-power drive&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||  || ODT Receiver Mode (DDR4 half-strength)&lt;br /&gt;
|-&lt;br /&gt;
| 4 ||  || Standard  PCB Line Match&lt;br /&gt;
|-&lt;br /&gt;
| 5 ||  || DDR4 Nominal Output Impedance&lt;br /&gt;
|-&lt;br /&gt;
| 7 ||  || High-drive / PCIe  Nominal Output&lt;br /&gt;
|}&lt;br /&gt;
=== 2.2 On-Die Termination (ODT) Logic ===&lt;br /&gt;
When operating as a receiver, the driver logic overrides normal push-pull operation. The pre-driver controls enable both the PMOS pull-up and NMOS pull-down legs simultaneously to form a center-tapped Thevenin equivalent termination or pull-up termination (e.g., POD12 for DDR4) matched to the trace impedance .&lt;br /&gt;
=== 2.3 ZQ Calibration Engine (PVT Compensation) ===&lt;br /&gt;
Because silicon fabrication tolerances, operating temperature, and  fluctuations alter  and  by up to , dynamic digital calibration is required:&lt;br /&gt;
&lt;br /&gt;
An external precision resistor  is tied to a dedicated &#039;&#039;&#039;ZQ Pad&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
An internal state machine (using an analog comparator and SAR or Up/Down counter) adjusts binary weighted calibration vectors (CAL_PCODE[N:0] and CAL_NCODE[N:0]).&lt;br /&gt;
&lt;br /&gt;
The calibrated code vectors are distributed to all I/O pads across the die to trim active slice widths continuously.&lt;br /&gt;
&lt;br /&gt;
== 3. Pre-Driver &amp;amp; Driver Netlist Topology (JSON) ==&lt;br /&gt;
To support automated Place &amp;amp; Route (PnR) inside LibreSilicon, the single-channel gate output format must be refactored into a segmented pre-driver slice array (driver_logic_segmented).&lt;br /&gt;
&lt;br /&gt;
This is just a draft, we still have to re-introduce complex sub-components in [[LibrePDK]]&lt;br /&gt;
&lt;br /&gt;
=== Segmented Driver Logic ===&lt;br /&gt;
The JSON netlist for the segmented driver logic can be found here: https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/designs/driver_logic_segmented.json?ref_type=heads&lt;br /&gt;
&lt;br /&gt;
=== Pre-Drive Slice ===&lt;br /&gt;
The JSON netlist for the preslice can be found here: https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/designs/predriver_slice.json?ref_type=heads&lt;br /&gt;
[[File:Predriver slice schematic.png|none|thumb|800x800px|Preslice Schematic]]&lt;br /&gt;
&lt;br /&gt;
=== Predriver Slice Logic Specification ===&lt;br /&gt;
The pre-driver slice controls individual driver leg segments. It evaluates calibration bits (&amp;lt;tt&amp;gt;BIT_CAL_P&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;BIT_CAL_N&amp;lt;/tt&amp;gt;), global tri-state enable (&amp;lt;tt&amp;gt;GLOBAL_EN&amp;lt;/tt&amp;gt;), and On-Die Termination override (&amp;lt;tt&amp;gt;ODT_EN&amp;lt;/tt&amp;gt;) to drive the gates of the output stage (&amp;lt;tt&amp;gt;GATE_P&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;GATE_N&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Logic Table for predriver_slice&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Inputs !! colspan=&amp;quot;2&amp;quot; | Outputs&lt;br /&gt;
|-&lt;br /&gt;
! DATA_IN !! GLOBAL_EN !! ODT_EN !! BIT_CAL_P !! BIT_CAL_N !! GATE_P !! GATE_N&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || 0 || 0 || 0 || Z || Z&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || 0 || 0 || 1 || Z || Z&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || 0 || 1 || 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || 0 || 1 || 1 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || 1 || 0 || 0 || Z || Z&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || 1 || 0 || 1 || 1 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || 1 || 1 || 0 || Z || Z&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || 1 || 1 || 1 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || 0 || 0 || 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || 0 || 0 || 1 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || 0 || 1 || 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || 0 || 1 || 1 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || 1 || 0 || 0 || Z || Z&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || 1 || 0 || 1 || Z || Z&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || 1 || 1 || 0 || Z || Z&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || 1 || 1 || 1 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || 0 || 0 || 0 || Z || Z&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || 0 || 0 || 1 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || 0 || 1 || 0 || Z || Z&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || 0 || 1 || 1 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || 1 || 0 || 0 || Z || Z&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || 1 || 0 || 1 || Z || Z&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || 1 || 1 || 0 || 0 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || 1 || 1 || 1 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || 0 || 0 || 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || 0 || 0 || 1 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || 0 || 1 || 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || 0 || 1 || 1 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || 1 || 0 || 0 || Z || Z&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || 1 || 0 || 1 || Z || Z&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || 1 || 1 || 0 || Z || Z&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || 1 || 1 || 1 || 0 || 0&lt;br /&gt;
|}&lt;br /&gt;
==== Mode Functional Descriptions ====&lt;br /&gt;
* &#039;&#039;&#039;Disabled / Uncalibrated:&#039;&#039;&#039; When calibration code bits are low, the slice is fully isolated from the output pad, preventing uncalibrated drive strength contributions.&lt;br /&gt;
* &#039;&#039;&#039;Active Drive:&#039;&#039;&#039; Normal push-pull switching mode when &amp;lt;tt&amp;gt;GLOBAL_EN&amp;lt;/tt&amp;gt; is asserted and &amp;lt;tt&amp;gt;ODT_EN&amp;lt;/tt&amp;gt; is deasserted.&lt;br /&gt;
* &#039;&#039;&#039;On-Die Termination (ODT):&#039;&#039;&#039; Asserts both pull-up (&amp;lt;tt&amp;gt;GATE_P=0&amp;lt;/tt&amp;gt;) and pull-down (&amp;lt;tt&amp;gt;GATE_N=1&amp;lt;/tt&amp;gt;) networks simultaneously, forming a center-tapped Thevenin termination load ($R_{\text{eq}} = Z_0$) at the pad.&lt;br /&gt;
&lt;br /&gt;
== 4. LibrePDK Physical Layout &amp;amp; Silicon Process Rules ==&lt;br /&gt;
When laying out the physical pad cell in LibrePDK, engineers must adhere to four strict silicon process guidelines:&lt;br /&gt;
=== 4.1 Integrated Poly Resistors ===&lt;br /&gt;
Do NOT rely exclusively on transistor channel resistance for matching. Transistor channel resistance is non-linear with respect to drain-source voltage .&lt;br /&gt;
&lt;br /&gt;
Place STI-isolated poly resistors in series with transistor drains to linearize the driver output impedance curve.&lt;br /&gt;
Ensure  consumes  to  of total leg impedance ( poly resistor +  FET ).&lt;br /&gt;
=== 4.2 Metal Routing Congestion &amp;amp; Layer Budget ===&lt;br /&gt;
&#039;&#039;&#039;Metal Layer Allocation:&#039;&#039;&#039; Simple digital pads use  and . Segmented drivers routing 8–16 gate signals (PMOS_OUT[N], NMOS_OUT[N]) and calibration control buses MUST utilize  (and  where available).&lt;br /&gt;
&lt;br /&gt;
Set &amp;quot;max_signal_metal&amp;quot;: 3 in PnR configurations to prevent shorting routing tracks across standard cells.&lt;br /&gt;
=== 4.3 Slew Rate Mismatch &amp;amp; Skew Control ===&lt;br /&gt;
Asymmetrical routing from the pre-driver data input OUT to individual leg slices creates switching skew between driver branches.&lt;br /&gt;
&lt;br /&gt;
Inter-leg skew induces severe dynamic impedance transients and timing jitter during high-speed signal transitions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirement:&#039;&#039;&#039; The Place &amp;amp; Route engine must enforce symmetric -tree routing for signal paths into LEG_0_PREDRV through LEG_N_PREDRV.&lt;br /&gt;
=== 4.4 Pad Capacitance and ESD Constraints ===&lt;br /&gt;
Paralleling multiple driver transistors increases total junction capacitance on the output pad pin.&lt;br /&gt;
&lt;br /&gt;
Excessive degrades high-frequency edge rates.&lt;br /&gt;
&lt;br /&gt;
Ensure pad layout uses multi-finger folded transitors placed in close proximity to ESD diodes to minimize parasitic substrate capacitance.&lt;br /&gt;
== 5. Implementation Roadmap for LibreSilicon Team ==&lt;br /&gt;
&#039;&#039;&#039;Step 1: Standardize predriver_slice Sub-Macro&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Design and simulate the NOR/NAND gating matrix for a single pre-driver slice with ODT enable override.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 2: Poly Resistor Characterization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Extract exact sheet resistance  for poly silicon layer in IHP SG13G2 / LibrePDK to dimension the  base leg.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 3: ZQ Calibration State Machine Netlist&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Construct a centralized ZQ controller cell to generate CAL_PCODE and CAL_NCODE vectors across the IO ring.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 4: SPICE Corner Analysis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Run transient SPICE simulations across TT, FF, and SS process corners to verify output impedance holding tolerance within  of target .&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibrePDK&amp;diff=782</id>
		<title>LibrePDK</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibrePDK&amp;diff=782"/>
		<updated>2026-08-15T22:06:12Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* Ubuntu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The LibrePDK is the library driving [[Danube River]] and the [[Pad Cell Generator]]&lt;br /&gt;
[[File:LibrePDK.png|none|thumb|695x695px|ALibrePDK screen shot]]&lt;br /&gt;
It is responsible for generating discrete parts with specific parameters for a specific process.&lt;br /&gt;
&lt;br /&gt;
The properties of the parts can be optimized by utilizing the calibration values extracted from the measurements of taped out Danube River test wafers.&lt;br /&gt;
&lt;br /&gt;
== Adding a new technology ==&lt;br /&gt;
Technologies currently supported can be found in the technologies subfolder.&lt;br /&gt;
&lt;br /&gt;
https://gitlab.libresilicon.com/generator-tools/librepdk/-/tree/master/LibrePDK/technologies?ref_type=heads&lt;br /&gt;
&lt;br /&gt;
New technologies can be added by modifying &#039;&#039;&#039;scripts/update_technologies.sh&#039;&#039;&#039; and adding a tech.python script to the technologies folder.&lt;br /&gt;
&lt;br /&gt;
After that, LibrePDK should be capable of auto discovering the new process after running the update script.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu ===&lt;br /&gt;
We are using Ubuntu 25.04 in our Docker containers&lt;br /&gt;
&lt;br /&gt;
Simply run&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;apt-get update &amp;amp;&amp;amp; apt-get install -y --no-install-recommends \&lt;br /&gt;
    autoconf automake bash bison build-essential ca-certificates cargo checkinstall clang cmake \&lt;br /&gt;
    curl flex g++ gcc git git-lfs glpk-utils gosu imagemagick libblas-dev libcairo2-dev \&lt;br /&gt;
    libcurl4-gnutls-dev libeigen3-dev libfl-dev libgit2-dev libgit2-glib-1.0-dev libglpk-dev \&lt;br /&gt;
    libglu1-mesa-dev liblemon-dev libreadline-dev libsparsehash-dev libsqlite3-dev libtool \&lt;br /&gt;
    libxaw7-dev libz-dev llvm make mmv pdf2svg pkg-config python3-dev python3-full python3-pip \&lt;br /&gt;
    rsync ruby ruby-dev rustc software-properties-common sqlite3 sudo tcl tcl8.6-dev tcllib \&lt;br /&gt;
    texlive-latex-recommended time tk8.6-dev tklib unzip vim wget z3 zlib1g-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Boost ===&lt;br /&gt;
In order for [[LibrePDK#Limbo|Limbo]] to successfully compile we need to install Boost.&lt;br /&gt;
&lt;br /&gt;
We are currently using boost 1.91.0, of which the tar ball can be obtained here https://archives.boost.io/release/1.91.0/source/boost_1_91_0.tar.gz&lt;br /&gt;
&lt;br /&gt;
With the following command Boost can be installed quickly&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./bootstrap.sh \&lt;br /&gt;
    --prefix=/usr \&lt;br /&gt;
    --with-python-version=3.13&lt;br /&gt;
&lt;br /&gt;
./b2 install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Note that the Python version we compile boost for is 3.13, because LibrePDK hasn&#039;t been tested with any later version.&lt;br /&gt;
&lt;br /&gt;
=== ngspice ===&lt;br /&gt;
For the simulation and characterization of standard cells you will need the ngspice frontend and backend library&lt;br /&gt;
&lt;br /&gt;
Currently we are using version 44.2 of ngspice, the tar ball can be obtained from here: https://download.industrysoftware.automation.siemens.com/open-source/ngspice-44.2.tar.gz&lt;br /&gt;
&lt;br /&gt;
==== Backend configuration ====&lt;br /&gt;
The backend library is needed for Charlib in order to run characterization of our cells&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./autogen.sh&lt;br /&gt;
./configure --with-ngshared --enable-xspice --enable-cider --enable-openmp --disable-debug&lt;br /&gt;
make -j$(nproc)&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;After compilation and installation you should have a libngspice.so in your ldpath which charlib can pick up on and load it.&lt;br /&gt;
&lt;br /&gt;
==== Frontend configuration ====&lt;br /&gt;
This will compile and install the ngspice CLI binary which is needed when you wanna simulate your circuits.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./autogen.sh&lt;br /&gt;
../configure --with-x --with-readline=yes --enable-xspice&lt;br /&gt;
make -j$(nproc)&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;ngspice is also used when loading and importing new technologies into LibrePDK&lt;br /&gt;
&lt;br /&gt;
=== OpenVAF models ===&lt;br /&gt;
IHP&#039;s SG13G2 technology node uses OpenVAF models for the ngspice simulation tool.&lt;br /&gt;
&lt;br /&gt;
The following script will make sure that rust and the OpenVAF tool are present and then&lt;br /&gt;
compiles the models into the osdi format and places them into the technology directory&lt;br /&gt;
ready to be used by LibrePDK.&lt;br /&gt;
&lt;br /&gt;
Simply run the following script and confirm the installation by checking for the LibrePDK/technologies/spice/SG13G2/devices/*/*.osdi files.&lt;br /&gt;
&lt;br /&gt;
This requires the LibrePDK repo to already have [[LibrePDK#Installation|been cloned and updated]] as shown in.&lt;br /&gt;
&lt;br /&gt;
 ./scripts/update_ngspice_extensions.sh&lt;br /&gt;
&lt;br /&gt;
=== LP solver ===&lt;br /&gt;
&lt;br /&gt;
Google now officially runs the project and you can get the most recent version from GitHub&lt;br /&gt;
&lt;br /&gt;
Install is by cloning and building it&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/lp-solve/lp_solve&lt;br /&gt;
pushd lp_solve/lpsolve55&lt;br /&gt;
rm -rf bin/ux64&lt;br /&gt;
sh ccc&lt;br /&gt;
popd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;	Then you can copy the shared object file in solve/lpsolve55/bin/ux64 into your /usr/lib64 and copy the headers with&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/include/lpsolve&lt;br /&gt;
cp lp_solve/*.h /usr/include/lpsolve/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;OR, you can install the system package and devel package with your package manager&lt;br /&gt;
&lt;br /&gt;
=== Lemon ===&lt;br /&gt;
&lt;br /&gt;
That library has been developed by a Hungarian university which doesn&#039;t maintain their Mercurial setup. Best approach is to use the version you find in your distribution&lt;br /&gt;
=== Limbo ===&lt;br /&gt;
&lt;br /&gt;
The official version of Limbo has been a total mess when it comes to building libs and linking them. I had to make some severe modifications which makes CMake properly build shared object files and detects the system wide installation of the dependencies&lt;br /&gt;
using proper CMake detection functions&lt;br /&gt;
&lt;br /&gt;
Just run&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://gitlab.libresilicon.com/leviathan/limbo.git&lt;br /&gt;
mkdir Limbo/build&lt;br /&gt;
pushd Limbo/build&lt;br /&gt;
cmake ..&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
popd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Installation ==&lt;br /&gt;
Before you start installing LibrePDK, you first need to [[LibrePDK#Dependencies|install its dependencies]] so that its C++ extensions and other C++ tools compile successfully.&lt;br /&gt;
&lt;br /&gt;
After that, please clone the repo.&lt;br /&gt;
&lt;br /&gt;
 pip install [https://gitlab.libresilicon.com/generator-tools/librepdk.git https+git://gitlab.libresilicon.com/generator-tools/librepdk.git]&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to make sure that all the submodules and their submodules are cloned&lt;br /&gt;
&lt;br /&gt;
 git submodule update --init --recursive&lt;br /&gt;
&lt;br /&gt;
For placement of discrete componentes used in more complex components like Driver Circuits, OpAmps, etc. IdeaPlaceExPy is being used.&lt;br /&gt;
&lt;br /&gt;
IdeaPlaceExPy requires the Python system headers to be installed and the virtual env has to match the Python version with which it was compiled.&lt;br /&gt;
&lt;br /&gt;
=== Using LibrePDK in a Virtual Environment (FINAL SETUP) ===&lt;br /&gt;
It is recommended to use LibrePDK in a Python virtual environment to avoid dependency conflicts with&lt;br /&gt;
system-wide Python packages.&lt;br /&gt;
&lt;br /&gt;
After you&#039;ve installed all the below dependencies the recommended way of installing the remaining dependencies is to run&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uv sync --no-cache&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building your own Docker images ==&lt;br /&gt;
Inside of the LibrePDK source folder you will find a script where you can uncomment and comment specific build stages of the multistage Docker build covering all the dependencies&lt;br /&gt;
&lt;br /&gt;
Check out the script &#039;&#039;&#039;[https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/scripts/build_docker_images.sh?ref_type=heads scripts/build_docker_images.sh]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Components =&lt;br /&gt;
LibrePDK provides generators for the basic components usually found within a VLSI/ULSI design, such as resistors, capacitors, diodes and transistors.&lt;br /&gt;
&lt;br /&gt;
== Capacitors ==&lt;br /&gt;
LibrePDK can calculate the specific geometry based on the device rules and available parameters for generating any desired target capacitance value. Below a 50pF capacitor can be  seen. You will notice the enormous dimensions of the structure.&lt;br /&gt;
[[File:50pF MiMCap (GF180A, 3.3V).png|none|thumb|300x300px]]&lt;br /&gt;
Usually we deal with femto Farad in VLSI design so you should never be in a situation where you have large capacitors on your chip.&lt;br /&gt;
&lt;br /&gt;
LibrePDK still can generate you a device, you just won&#039;t be happy about it.&lt;br /&gt;
&lt;br /&gt;
== Resistors ==&lt;br /&gt;
There&#039;s two types of resistor structures available: Meander and strip resistors&lt;br /&gt;
&lt;br /&gt;
LibrePDK automatically adds a guard ring around any resistor which should be on a well&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The meander here is 200 Ohms for GF180A@3.3V&#039;&#039;&#039;[[File:LibrePDK Meander Example.png|none|thumb|300x300px]]&#039;&#039;&#039;The meander here is 500 Ohms for GF180A@3.3V&#039;&#039;&#039;[[File:Strip Resistor Example.png|none|thumb|300x300px]]&lt;br /&gt;
&lt;br /&gt;
== Diodes ==&lt;br /&gt;
[[File:Diode Example.png|none|thumb|300x300px|Example of a diode]]&lt;br /&gt;
While normal fingered diodes now have been implemented Schottky diodes still are work in progress.&lt;br /&gt;
&lt;br /&gt;
== Schottky diodes ==&lt;br /&gt;
Those are not yet implemented&lt;br /&gt;
&lt;br /&gt;
== Transistors ==&lt;br /&gt;
In order to make sure that our transistors don&#039;t go up in flame, we have to take the hot carrier migration and thermal budget into consideration when we decide what transistor to use and whether it should have only one gate or should be fingered.&lt;br /&gt;
&lt;br /&gt;
LibrePDK takes care of this and chooses the right transistor with the right amount of fingers for you based on the target operating voltage and current you plan to pump through it, you provide.&lt;br /&gt;
&lt;br /&gt;
Additionally, you can also overwrite the thermal budget which usually is assumed to be for an internal circuit which isn&#039;t bonded directly to the outside.&lt;br /&gt;
&lt;br /&gt;
When LibrePDK calculates that electron migration and thermal budget constraints don&#039;t allow for a single gate transistor it will dynamically create a fingered structure, either with bulk and source connected or not with the proper guard ring.&lt;br /&gt;
[[File:Fingered Transistor.png|none|thumb|300x300px|Example of a fingered transistor]]&lt;br /&gt;
Libre PDK may also decide to just generate a single gate transistor in cases where there&#039;s very little power involved&lt;br /&gt;
[[File:Single Gate Example.png|none|thumb|300x300px|Example of a single gate transistor]]&lt;br /&gt;
&lt;br /&gt;
== Pad Cells ==&lt;br /&gt;
Last but not least: It contains the [[Pad Cell Generator]] which produces beauties like this&lt;br /&gt;
[[File:30mA SG13G2@3V3 v2.png|none|thumb|356x356px]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibrePDK&amp;diff=781</id>
		<title>LibrePDK</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibrePDK&amp;diff=781"/>
		<updated>2026-08-15T21:54:42Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* Ubuntu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The LibrePDK is the library driving [[Danube River]] and the [[Pad Cell Generator]]&lt;br /&gt;
[[File:LibrePDK.png|none|thumb|695x695px|ALibrePDK screen shot]]&lt;br /&gt;
It is responsible for generating discrete parts with specific parameters for a specific process.&lt;br /&gt;
&lt;br /&gt;
The properties of the parts can be optimized by utilizing the calibration values extracted from the measurements of taped out Danube River test wafers.&lt;br /&gt;
&lt;br /&gt;
== Adding a new technology ==&lt;br /&gt;
Technologies currently supported can be found in the technologies subfolder.&lt;br /&gt;
&lt;br /&gt;
https://gitlab.libresilicon.com/generator-tools/librepdk/-/tree/master/LibrePDK/technologies?ref_type=heads&lt;br /&gt;
&lt;br /&gt;
New technologies can be added by modifying &#039;&#039;&#039;scripts/update_technologies.sh&#039;&#039;&#039; and adding a tech.python script to the technologies folder.&lt;br /&gt;
&lt;br /&gt;
After that, LibrePDK should be capable of auto discovering the new process after running the update script.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu ===&lt;br /&gt;
We are using Ubuntu 25.04 in our Docker containers&lt;br /&gt;
&lt;br /&gt;
Simply run&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;apt-get update &amp;amp;&amp;amp; apt-get install -y --no-install-recommends \&lt;br /&gt;
    build-essential cmake git gcc g++ bison flex libfl-dev libeigen3-dev autoconf automake libtool \&lt;br /&gt;
    libglpk-dev zlib1g-dev libcairo2-dev liblemon-dev libsparsehash-dev pkg-config curl ca-certificates cargo \&lt;br /&gt;
    rustc sqlite3 bash imagemagick libcairo2-dev tcllib tklib make g++ libreadline-dev libblas-dev \&lt;br /&gt;
    z3 texlive-latex-recommended unzip glpk-utils libglpk-dev git wget mmv libglu1-mesa-dev libcurl4-gnutls-dev rsync \&lt;br /&gt;
    pdf2svg libsqlite3-dev git-lfs clang llvm libxaw7-dev time tcl8.6-dev tk8.6-dev tcl software-properties-common vim \&lt;br /&gt;
    gcc libz-dev ruby ruby-dev libgit2-dev libgit2-glib-1.0-dev curl sudo python3-full python3-dev python3-pip checkinstall \&lt;br /&gt;
    gosu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Boost ===&lt;br /&gt;
In order for [[LibrePDK#Limbo|Limbo]] to successfully compile we need to install Boost.&lt;br /&gt;
&lt;br /&gt;
We are currently using boost 1.91.0, of which the tar ball can be obtained here https://archives.boost.io/release/1.91.0/source/boost_1_91_0.tar.gz&lt;br /&gt;
&lt;br /&gt;
With the following command Boost can be installed quickly&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./bootstrap.sh \&lt;br /&gt;
    --prefix=/usr \&lt;br /&gt;
    --with-python-version=3.13&lt;br /&gt;
&lt;br /&gt;
./b2 install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Note that the Python version we compile boost for is 3.13, because LibrePDK hasn&#039;t been tested with any later version.&lt;br /&gt;
&lt;br /&gt;
=== ngspice ===&lt;br /&gt;
For the simulation and characterization of standard cells you will need the ngspice frontend and backend library&lt;br /&gt;
&lt;br /&gt;
Currently we are using version 44.2 of ngspice, the tar ball can be obtained from here: https://download.industrysoftware.automation.siemens.com/open-source/ngspice-44.2.tar.gz&lt;br /&gt;
&lt;br /&gt;
==== Backend configuration ====&lt;br /&gt;
The backend library is needed for Charlib in order to run characterization of our cells&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./autogen.sh&lt;br /&gt;
./configure --with-ngshared --enable-xspice --enable-cider --enable-openmp --disable-debug&lt;br /&gt;
make -j$(nproc)&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;After compilation and installation you should have a libngspice.so in your ldpath which charlib can pick up on and load it.&lt;br /&gt;
&lt;br /&gt;
==== Frontend configuration ====&lt;br /&gt;
This will compile and install the ngspice CLI binary which is needed when you wanna simulate your circuits.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./autogen.sh&lt;br /&gt;
../configure --with-x --with-readline=yes --enable-xspice&lt;br /&gt;
make -j$(nproc)&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;ngspice is also used when loading and importing new technologies into LibrePDK&lt;br /&gt;
&lt;br /&gt;
=== OpenVAF models ===&lt;br /&gt;
IHP&#039;s SG13G2 technology node uses OpenVAF models for the ngspice simulation tool.&lt;br /&gt;
&lt;br /&gt;
The following script will make sure that rust and the OpenVAF tool are present and then&lt;br /&gt;
compiles the models into the osdi format and places them into the technology directory&lt;br /&gt;
ready to be used by LibrePDK.&lt;br /&gt;
&lt;br /&gt;
Simply run the following script and confirm the installation by checking for the LibrePDK/technologies/spice/SG13G2/devices/*/*.osdi files.&lt;br /&gt;
&lt;br /&gt;
This requires the LibrePDK repo to already have [[LibrePDK#Installation|been cloned and updated]] as shown in.&lt;br /&gt;
&lt;br /&gt;
 ./scripts/update_ngspice_extensions.sh&lt;br /&gt;
&lt;br /&gt;
=== LP solver ===&lt;br /&gt;
&lt;br /&gt;
Google now officially runs the project and you can get the most recent version from GitHub&lt;br /&gt;
&lt;br /&gt;
Install is by cloning and building it&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/lp-solve/lp_solve&lt;br /&gt;
pushd lp_solve/lpsolve55&lt;br /&gt;
rm -rf bin/ux64&lt;br /&gt;
sh ccc&lt;br /&gt;
popd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;	Then you can copy the shared object file in solve/lpsolve55/bin/ux64 into your /usr/lib64 and copy the headers with&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/include/lpsolve&lt;br /&gt;
cp lp_solve/*.h /usr/include/lpsolve/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;OR, you can install the system package and devel package with your package manager&lt;br /&gt;
&lt;br /&gt;
=== Lemon ===&lt;br /&gt;
&lt;br /&gt;
That library has been developed by a Hungarian university which doesn&#039;t maintain their Mercurial setup. Best approach is to use the version you find in your distribution&lt;br /&gt;
=== Limbo ===&lt;br /&gt;
&lt;br /&gt;
The official version of Limbo has been a total mess when it comes to building libs and linking them. I had to make some severe modifications which makes CMake properly build shared object files and detects the system wide installation of the dependencies&lt;br /&gt;
using proper CMake detection functions&lt;br /&gt;
&lt;br /&gt;
Just run&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://gitlab.libresilicon.com/leviathan/limbo.git&lt;br /&gt;
mkdir Limbo/build&lt;br /&gt;
pushd Limbo/build&lt;br /&gt;
cmake ..&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
popd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Installation ==&lt;br /&gt;
Before you start installing LibrePDK, you first need to [[LibrePDK#Dependencies|install its dependencies]] so that its C++ extensions and other C++ tools compile successfully.&lt;br /&gt;
&lt;br /&gt;
After that, please clone the repo.&lt;br /&gt;
&lt;br /&gt;
 pip install [https://gitlab.libresilicon.com/generator-tools/librepdk.git https+git://gitlab.libresilicon.com/generator-tools/librepdk.git]&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to make sure that all the submodules and their submodules are cloned&lt;br /&gt;
&lt;br /&gt;
 git submodule update --init --recursive&lt;br /&gt;
&lt;br /&gt;
For placement of discrete componentes used in more complex components like Driver Circuits, OpAmps, etc. IdeaPlaceExPy is being used.&lt;br /&gt;
&lt;br /&gt;
IdeaPlaceExPy requires the Python system headers to be installed and the virtual env has to match the Python version with which it was compiled.&lt;br /&gt;
&lt;br /&gt;
=== Using LibrePDK in a Virtual Environment (FINAL SETUP) ===&lt;br /&gt;
It is recommended to use LibrePDK in a Python virtual environment to avoid dependency conflicts with&lt;br /&gt;
system-wide Python packages.&lt;br /&gt;
&lt;br /&gt;
After you&#039;ve installed all the below dependencies the recommended way of installing the remaining dependencies is to run&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uv sync --no-cache&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building your own Docker images ==&lt;br /&gt;
Inside of the LibrePDK source folder you will find a script where you can uncomment and comment specific build stages of the multistage Docker build covering all the dependencies&lt;br /&gt;
&lt;br /&gt;
Check out the script &#039;&#039;&#039;[https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/scripts/build_docker_images.sh?ref_type=heads scripts/build_docker_images.sh]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Components =&lt;br /&gt;
LibrePDK provides generators for the basic components usually found within a VLSI/ULSI design, such as resistors, capacitors, diodes and transistors.&lt;br /&gt;
&lt;br /&gt;
== Capacitors ==&lt;br /&gt;
LibrePDK can calculate the specific geometry based on the device rules and available parameters for generating any desired target capacitance value. Below a 50pF capacitor can be  seen. You will notice the enormous dimensions of the structure.&lt;br /&gt;
[[File:50pF MiMCap (GF180A, 3.3V).png|none|thumb|300x300px]]&lt;br /&gt;
Usually we deal with femto Farad in VLSI design so you should never be in a situation where you have large capacitors on your chip.&lt;br /&gt;
&lt;br /&gt;
LibrePDK still can generate you a device, you just won&#039;t be happy about it.&lt;br /&gt;
&lt;br /&gt;
== Resistors ==&lt;br /&gt;
There&#039;s two types of resistor structures available: Meander and strip resistors&lt;br /&gt;
&lt;br /&gt;
LibrePDK automatically adds a guard ring around any resistor which should be on a well&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The meander here is 200 Ohms for GF180A@3.3V&#039;&#039;&#039;[[File:LibrePDK Meander Example.png|none|thumb|300x300px]]&#039;&#039;&#039;The meander here is 500 Ohms for GF180A@3.3V&#039;&#039;&#039;[[File:Strip Resistor Example.png|none|thumb|300x300px]]&lt;br /&gt;
&lt;br /&gt;
== Diodes ==&lt;br /&gt;
[[File:Diode Example.png|none|thumb|300x300px|Example of a diode]]&lt;br /&gt;
While normal fingered diodes now have been implemented Schottky diodes still are work in progress.&lt;br /&gt;
&lt;br /&gt;
== Schottky diodes ==&lt;br /&gt;
Those are not yet implemented&lt;br /&gt;
&lt;br /&gt;
== Transistors ==&lt;br /&gt;
In order to make sure that our transistors don&#039;t go up in flame, we have to take the hot carrier migration and thermal budget into consideration when we decide what transistor to use and whether it should have only one gate or should be fingered.&lt;br /&gt;
&lt;br /&gt;
LibrePDK takes care of this and chooses the right transistor with the right amount of fingers for you based on the target operating voltage and current you plan to pump through it, you provide.&lt;br /&gt;
&lt;br /&gt;
Additionally, you can also overwrite the thermal budget which usually is assumed to be for an internal circuit which isn&#039;t bonded directly to the outside.&lt;br /&gt;
&lt;br /&gt;
When LibrePDK calculates that electron migration and thermal budget constraints don&#039;t allow for a single gate transistor it will dynamically create a fingered structure, either with bulk and source connected or not with the proper guard ring.&lt;br /&gt;
[[File:Fingered Transistor.png|none|thumb|300x300px|Example of a fingered transistor]]&lt;br /&gt;
Libre PDK may also decide to just generate a single gate transistor in cases where there&#039;s very little power involved&lt;br /&gt;
[[File:Single Gate Example.png|none|thumb|300x300px|Example of a single gate transistor]]&lt;br /&gt;
&lt;br /&gt;
== Pad Cells ==&lt;br /&gt;
Last but not least: It contains the [[Pad Cell Generator]] which produces beauties like this&lt;br /&gt;
[[File:30mA SG13G2@3V3 v2.png|none|thumb|356x356px]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibrePDK&amp;diff=780</id>
		<title>LibrePDK</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibrePDK&amp;diff=780"/>
		<updated>2026-08-15T21:53:10Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: Undo revision 777 by Leviathan (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The LibrePDK is the library driving [[Danube River]] and the [[Pad Cell Generator]]&lt;br /&gt;
[[File:LibrePDK.png|none|thumb|695x695px|ALibrePDK screen shot]]&lt;br /&gt;
It is responsible for generating discrete parts with specific parameters for a specific process.&lt;br /&gt;
&lt;br /&gt;
The properties of the parts can be optimized by utilizing the calibration values extracted from the measurements of taped out Danube River test wafers.&lt;br /&gt;
&lt;br /&gt;
== Adding a new technology ==&lt;br /&gt;
Technologies currently supported can be found in the technologies subfolder.&lt;br /&gt;
&lt;br /&gt;
https://gitlab.libresilicon.com/generator-tools/librepdk/-/tree/master/LibrePDK/technologies?ref_type=heads&lt;br /&gt;
&lt;br /&gt;
New technologies can be added by modifying &#039;&#039;&#039;scripts/update_technologies.sh&#039;&#039;&#039; and adding a tech.python script to the technologies folder.&lt;br /&gt;
&lt;br /&gt;
After that, LibrePDK should be capable of auto discovering the new process after running the update script.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu ===&lt;br /&gt;
We are using Ubuntu 25.04 in our Docker containers&lt;br /&gt;
&lt;br /&gt;
Simply run&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;apt install autoconf automake bash bison build-essential ca-certificates cargo checkinstall clang cmake curl flex g++ gcc git git-lfs glpk-utils gosu imagemagick libblas-dev libcairo2-dev libcurl4-gnutls-dev libeigen3-dev libfl-dev libgit2-dev libgit2-glib-1.0-dev libglpk-dev libglu1-mesa-dev liblemon-dev libreadline-dev libsparsehash-dev libsqlite3-dev libtool libxaw7-dev libz-dev llvm make mmv pdf2svg pkg-config python3-dev python3-full python3-pip rsync ruby ruby-dev rustc software-properties-common sqlite3 sudo tcl tcl8.6-dev tcllib texlive-latex-recommended time tk8.6-dev tklib unzip vim wget z3 zlib1g-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Boost ===&lt;br /&gt;
In order for [[LibrePDK#Limbo|Limbo]] to successfully compile we need to install Boost.&lt;br /&gt;
&lt;br /&gt;
We are currently using boost 1.91.0, of which the tar ball can be obtained here https://archives.boost.io/release/1.91.0/source/boost_1_91_0.tar.gz&lt;br /&gt;
&lt;br /&gt;
With the following command Boost can be installed quickly&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./bootstrap.sh \&lt;br /&gt;
    --prefix=/usr \&lt;br /&gt;
    --with-python-version=3.13&lt;br /&gt;
&lt;br /&gt;
./b2 install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Note that the Python version we compile boost for is 3.13, because LibrePDK hasn&#039;t been tested with any later version.&lt;br /&gt;
&lt;br /&gt;
=== ngspice ===&lt;br /&gt;
For the simulation and characterization of standard cells you will need the ngspice frontend and backend library&lt;br /&gt;
&lt;br /&gt;
Currently we are using version 44.2 of ngspice, the tar ball can be obtained from here: https://download.industrysoftware.automation.siemens.com/open-source/ngspice-44.2.tar.gz&lt;br /&gt;
&lt;br /&gt;
==== Backend configuration ====&lt;br /&gt;
The backend library is needed for Charlib in order to run characterization of our cells&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./autogen.sh&lt;br /&gt;
./configure --with-ngshared --enable-xspice --enable-cider --enable-openmp --disable-debug&lt;br /&gt;
make -j$(nproc)&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;After compilation and installation you should have a libngspice.so in your ldpath which charlib can pick up on and load it.&lt;br /&gt;
&lt;br /&gt;
==== Frontend configuration ====&lt;br /&gt;
This will compile and install the ngspice CLI binary which is needed when you wanna simulate your circuits.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./autogen.sh&lt;br /&gt;
../configure --with-x --with-readline=yes --enable-xspice&lt;br /&gt;
make -j$(nproc)&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;ngspice is also used when loading and importing new technologies into LibrePDK&lt;br /&gt;
&lt;br /&gt;
=== OpenVAF models ===&lt;br /&gt;
IHP&#039;s SG13G2 technology node uses OpenVAF models for the ngspice simulation tool.&lt;br /&gt;
&lt;br /&gt;
The following script will make sure that rust and the OpenVAF tool are present and then&lt;br /&gt;
compiles the models into the osdi format and places them into the technology directory&lt;br /&gt;
ready to be used by LibrePDK.&lt;br /&gt;
&lt;br /&gt;
Simply run the following script and confirm the installation by checking for the LibrePDK/technologies/spice/SG13G2/devices/*/*.osdi files.&lt;br /&gt;
&lt;br /&gt;
This requires the LibrePDK repo to already have [[LibrePDK#Installation|been cloned and updated]] as shown in.&lt;br /&gt;
&lt;br /&gt;
 ./scripts/update_ngspice_extensions.sh&lt;br /&gt;
&lt;br /&gt;
=== LP solver ===&lt;br /&gt;
&lt;br /&gt;
Google now officially runs the project and you can get the most recent version from GitHub&lt;br /&gt;
&lt;br /&gt;
Install is by cloning and building it&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/lp-solve/lp_solve&lt;br /&gt;
pushd lp_solve/lpsolve55&lt;br /&gt;
rm -rf bin/ux64&lt;br /&gt;
sh ccc&lt;br /&gt;
popd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;	Then you can copy the shared object file in solve/lpsolve55/bin/ux64 into your /usr/lib64 and copy the headers with&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/include/lpsolve&lt;br /&gt;
cp lp_solve/*.h /usr/include/lpsolve/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;OR, you can install the system package and devel package with your package manager&lt;br /&gt;
&lt;br /&gt;
=== Lemon ===&lt;br /&gt;
&lt;br /&gt;
That library has been developed by a Hungarian university which doesn&#039;t maintain their Mercurial setup. Best approach is to use the version you find in your distribution&lt;br /&gt;
=== Limbo ===&lt;br /&gt;
&lt;br /&gt;
The official version of Limbo has been a total mess when it comes to building libs and linking them. I had to make some severe modifications which makes CMake properly build shared object files and detects the system wide installation of the dependencies&lt;br /&gt;
using proper CMake detection functions&lt;br /&gt;
&lt;br /&gt;
Just run&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://gitlab.libresilicon.com/leviathan/limbo.git&lt;br /&gt;
mkdir Limbo/build&lt;br /&gt;
pushd Limbo/build&lt;br /&gt;
cmake ..&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
popd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Installation ==&lt;br /&gt;
Before you start installing LibrePDK, you first need to [[LibrePDK#Dependencies|install its dependencies]] so that its C++ extensions and other C++ tools compile successfully.&lt;br /&gt;
&lt;br /&gt;
After that, please clone the repo.&lt;br /&gt;
&lt;br /&gt;
 pip install [https://gitlab.libresilicon.com/generator-tools/librepdk.git https+git://gitlab.libresilicon.com/generator-tools/librepdk.git]&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to make sure that all the submodules and their submodules are cloned&lt;br /&gt;
&lt;br /&gt;
 git submodule update --init --recursive&lt;br /&gt;
&lt;br /&gt;
For placement of discrete componentes used in more complex components like Driver Circuits, OpAmps, etc. IdeaPlaceExPy is being used.&lt;br /&gt;
&lt;br /&gt;
IdeaPlaceExPy requires the Python system headers to be installed and the virtual env has to match the Python version with which it was compiled.&lt;br /&gt;
&lt;br /&gt;
=== Using LibrePDK in a Virtual Environment (FINAL SETUP) ===&lt;br /&gt;
It is recommended to use LibrePDK in a Python virtual environment to avoid dependency conflicts with&lt;br /&gt;
system-wide Python packages.&lt;br /&gt;
&lt;br /&gt;
After you&#039;ve installed all the below dependencies the recommended way of installing the remaining dependencies is to run&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uv sync --no-cache&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building your own Docker images ==&lt;br /&gt;
Inside of the LibrePDK source folder you will find a script where you can uncomment and comment specific build stages of the multistage Docker build covering all the dependencies&lt;br /&gt;
&lt;br /&gt;
Check out the script &#039;&#039;&#039;[https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/scripts/build_docker_images.sh?ref_type=heads scripts/build_docker_images.sh]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Components =&lt;br /&gt;
LibrePDK provides generators for the basic components usually found within a VLSI/ULSI design, such as resistors, capacitors, diodes and transistors.&lt;br /&gt;
&lt;br /&gt;
== Capacitors ==&lt;br /&gt;
LibrePDK can calculate the specific geometry based on the device rules and available parameters for generating any desired target capacitance value. Below a 50pF capacitor can be  seen. You will notice the enormous dimensions of the structure.&lt;br /&gt;
[[File:50pF MiMCap (GF180A, 3.3V).png|none|thumb|300x300px]]&lt;br /&gt;
Usually we deal with femto Farad in VLSI design so you should never be in a situation where you have large capacitors on your chip.&lt;br /&gt;
&lt;br /&gt;
LibrePDK still can generate you a device, you just won&#039;t be happy about it.&lt;br /&gt;
&lt;br /&gt;
== Resistors ==&lt;br /&gt;
There&#039;s two types of resistor structures available: Meander and strip resistors&lt;br /&gt;
&lt;br /&gt;
LibrePDK automatically adds a guard ring around any resistor which should be on a well&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The meander here is 200 Ohms for GF180A@3.3V&#039;&#039;&#039;[[File:LibrePDK Meander Example.png|none|thumb|300x300px]]&#039;&#039;&#039;The meander here is 500 Ohms for GF180A@3.3V&#039;&#039;&#039;[[File:Strip Resistor Example.png|none|thumb|300x300px]]&lt;br /&gt;
&lt;br /&gt;
== Diodes ==&lt;br /&gt;
[[File:Diode Example.png|none|thumb|300x300px|Example of a diode]]&lt;br /&gt;
While normal fingered diodes now have been implemented Schottky diodes still are work in progress.&lt;br /&gt;
&lt;br /&gt;
== Schottky diodes ==&lt;br /&gt;
Those are not yet implemented&lt;br /&gt;
&lt;br /&gt;
== Transistors ==&lt;br /&gt;
In order to make sure that our transistors don&#039;t go up in flame, we have to take the hot carrier migration and thermal budget into consideration when we decide what transistor to use and whether it should have only one gate or should be fingered.&lt;br /&gt;
&lt;br /&gt;
LibrePDK takes care of this and chooses the right transistor with the right amount of fingers for you based on the target operating voltage and current you plan to pump through it, you provide.&lt;br /&gt;
&lt;br /&gt;
Additionally, you can also overwrite the thermal budget which usually is assumed to be for an internal circuit which isn&#039;t bonded directly to the outside.&lt;br /&gt;
&lt;br /&gt;
When LibrePDK calculates that electron migration and thermal budget constraints don&#039;t allow for a single gate transistor it will dynamically create a fingered structure, either with bulk and source connected or not with the proper guard ring.&lt;br /&gt;
[[File:Fingered Transistor.png|none|thumb|300x300px|Example of a fingered transistor]]&lt;br /&gt;
Libre PDK may also decide to just generate a single gate transistor in cases where there&#039;s very little power involved&lt;br /&gt;
[[File:Single Gate Example.png|none|thumb|300x300px|Example of a single gate transistor]]&lt;br /&gt;
&lt;br /&gt;
== Pad Cells ==&lt;br /&gt;
Last but not least: It contains the [[Pad Cell Generator]] which produces beauties like this&lt;br /&gt;
[[File:30mA SG13G2@3V3 v2.png|none|thumb|356x356px]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibrePDK&amp;diff=779</id>
		<title>LibrePDK</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibrePDK&amp;diff=779"/>
		<updated>2026-08-15T21:52:41Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: Undo revision 778 by Leviathan (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The LibrePDK is the library driving [[Danube River]] and the [[Pad Cell Generator]]&lt;br /&gt;
[[File:LibrePDK.png|none|thumb|695x695px|ALibrePDK screen shot]]&lt;br /&gt;
It is responsible for generating discrete parts with specific parameters for a specific process.&lt;br /&gt;
&lt;br /&gt;
The properties of the parts can be optimized by utilizing the calibration values extracted from the measurements of taped out Danube River test wafers.&lt;br /&gt;
&lt;br /&gt;
== Adding a new technology ==&lt;br /&gt;
Technologies currently supported can be found in the technologies subfolder.&lt;br /&gt;
&lt;br /&gt;
https://gitlab.libresilicon.com/generator-tools/librepdk/-/tree/master/LibrePDK/technologies?ref_type=heads&lt;br /&gt;
&lt;br /&gt;
New technologies can be added by modifying &#039;&#039;&#039;scripts/update_technologies.sh&#039;&#039;&#039; and adding a tech.python script to the technologies folder.&lt;br /&gt;
&lt;br /&gt;
After that, LibrePDK should be capable of auto discovering the new process after running the update script.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu ===&lt;br /&gt;
We are using Ubuntu 25.04 in our Docker containers&lt;br /&gt;
&lt;br /&gt;
Simply run&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;apt install autoconf automake bash binutils-dev bison build-essential ca-certificates cargo checkinstall clang cmake curl flex g++ gcc git git-lfs glpk-utils gosu imagemagick libblas-dev libboost-all-dev libboost-python-dev libbz2-dev libcairo2-dev libcurl4-gnutls-dev libeigen3-dev libfl-dev libgit2-dev libgit2-glib-1.0-dev libglpk-dev libglu1-mesa-dev liblemon-dev libreadline-dev libsparsehash-dev libsqlite3-dev libtool libxaw7-dev libxml2-dev libz-dev llvm make mmv pdf2svg pkg-config python-dev python3-dev python3-full python3-pip rapidjson-dev rsync ruby ruby-dev rustc software-properties-common sqlite3 sudo tcl tcl8.6-dev tcllib texlive-latex-recommended time tk8.6-dev tklib unzip vim wget z3 zlib1g-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Boost ===&lt;br /&gt;
In order for [[LibrePDK#Limbo|Limbo]] to successfully compile we need to install Boost.&lt;br /&gt;
&lt;br /&gt;
We are currently using boost 1.91.0, of which the tar ball can be obtained here https://archives.boost.io/release/1.91.0/source/boost_1_91_0.tar.gz&lt;br /&gt;
&lt;br /&gt;
With the following command Boost can be installed quickly&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./bootstrap.sh \&lt;br /&gt;
    --prefix=/usr \&lt;br /&gt;
    --with-python-version=3.13&lt;br /&gt;
&lt;br /&gt;
./b2 install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Note that the Python version we compile boost for is 3.13, because LibrePDK hasn&#039;t been tested with any later version.&lt;br /&gt;
&lt;br /&gt;
=== ngspice ===&lt;br /&gt;
For the simulation and characterization of standard cells you will need the ngspice frontend and backend library&lt;br /&gt;
&lt;br /&gt;
Currently we are using version 44.2 of ngspice, the tar ball can be obtained from here: https://download.industrysoftware.automation.siemens.com/open-source/ngspice-44.2.tar.gz&lt;br /&gt;
&lt;br /&gt;
==== Backend configuration ====&lt;br /&gt;
The backend library is needed for Charlib in order to run characterization of our cells&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./autogen.sh&lt;br /&gt;
./configure --with-ngshared --enable-xspice --enable-cider --enable-openmp --disable-debug&lt;br /&gt;
make -j$(nproc)&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;After compilation and installation you should have a libngspice.so in your ldpath which charlib can pick up on and load it.&lt;br /&gt;
&lt;br /&gt;
==== Frontend configuration ====&lt;br /&gt;
This will compile and install the ngspice CLI binary which is needed when you wanna simulate your circuits.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./autogen.sh&lt;br /&gt;
../configure --with-x --with-readline=yes --enable-xspice&lt;br /&gt;
make -j$(nproc)&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;ngspice is also used when loading and importing new technologies into LibrePDK&lt;br /&gt;
&lt;br /&gt;
=== OpenVAF models ===&lt;br /&gt;
IHP&#039;s SG13G2 technology node uses OpenVAF models for the ngspice simulation tool.&lt;br /&gt;
&lt;br /&gt;
The following script will make sure that rust and the OpenVAF tool are present and then&lt;br /&gt;
compiles the models into the osdi format and places them into the technology directory&lt;br /&gt;
ready to be used by LibrePDK.&lt;br /&gt;
&lt;br /&gt;
Simply run the following script and confirm the installation by checking for the LibrePDK/technologies/spice/SG13G2/devices/*/*.osdi files.&lt;br /&gt;
&lt;br /&gt;
This requires the LibrePDK repo to already have [[LibrePDK#Installation|been cloned and updated]] as shown in.&lt;br /&gt;
&lt;br /&gt;
 ./scripts/update_ngspice_extensions.sh&lt;br /&gt;
&lt;br /&gt;
=== LP solver ===&lt;br /&gt;
&lt;br /&gt;
Google now officially runs the project and you can get the most recent version from GitHub&lt;br /&gt;
&lt;br /&gt;
Install is by cloning and building it&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/lp-solve/lp_solve&lt;br /&gt;
pushd lp_solve/lpsolve55&lt;br /&gt;
rm -rf bin/ux64&lt;br /&gt;
sh ccc&lt;br /&gt;
popd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;	Then you can copy the shared object file in solve/lpsolve55/bin/ux64 into your /usr/lib64 and copy the headers with&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/include/lpsolve&lt;br /&gt;
cp lp_solve/*.h /usr/include/lpsolve/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;OR, you can install the system package and devel package with your package manager&lt;br /&gt;
&lt;br /&gt;
=== Lemon ===&lt;br /&gt;
&lt;br /&gt;
That library has been developed by a Hungarian university which doesn&#039;t maintain their Mercurial setup. Best approach is to use the version you find in your distribution&lt;br /&gt;
=== Limbo ===&lt;br /&gt;
&lt;br /&gt;
The official version of Limbo has been a total mess when it comes to building libs and linking them. I had to make some severe modifications which makes CMake properly build shared object files and detects the system wide installation of the dependencies&lt;br /&gt;
using proper CMake detection functions&lt;br /&gt;
&lt;br /&gt;
Just run&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://gitlab.libresilicon.com/leviathan/limbo.git&lt;br /&gt;
mkdir Limbo/build&lt;br /&gt;
pushd Limbo/build&lt;br /&gt;
cmake ..&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
popd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Installation ==&lt;br /&gt;
Before you start installing LibrePDK, you first need to [[LibrePDK#Dependencies|install its dependencies]] so that its C++ extensions and other C++ tools compile successfully.&lt;br /&gt;
&lt;br /&gt;
After that, please clone the repo.&lt;br /&gt;
&lt;br /&gt;
 pip install [https://gitlab.libresilicon.com/generator-tools/librepdk.git https+git://gitlab.libresilicon.com/generator-tools/librepdk.git]&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to make sure that all the submodules and their submodules are cloned&lt;br /&gt;
&lt;br /&gt;
 git submodule update --init --recursive&lt;br /&gt;
&lt;br /&gt;
For placement of discrete componentes used in more complex components like Driver Circuits, OpAmps, etc. IdeaPlaceExPy is being used.&lt;br /&gt;
&lt;br /&gt;
IdeaPlaceExPy requires the Python system headers to be installed and the virtual env has to match the Python version with which it was compiled.&lt;br /&gt;
&lt;br /&gt;
=== Using LibrePDK in a Virtual Environment (FINAL SETUP) ===&lt;br /&gt;
It is recommended to use LibrePDK in a Python virtual environment to avoid dependency conflicts with&lt;br /&gt;
system-wide Python packages.&lt;br /&gt;
&lt;br /&gt;
After you&#039;ve installed all the below dependencies the recommended way of installing the remaining dependencies is to run&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uv sync --no-cache&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building your own Docker images ==&lt;br /&gt;
Inside of the LibrePDK source folder you will find a script where you can uncomment and comment specific build stages of the multistage Docker build covering all the dependencies&lt;br /&gt;
&lt;br /&gt;
Check out the script &#039;&#039;&#039;[https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/scripts/build_docker_images.sh?ref_type=heads scripts/build_docker_images.sh]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Components =&lt;br /&gt;
LibrePDK provides generators for the basic components usually found within a VLSI/ULSI design, such as resistors, capacitors, diodes and transistors.&lt;br /&gt;
&lt;br /&gt;
== Capacitors ==&lt;br /&gt;
LibrePDK can calculate the specific geometry based on the device rules and available parameters for generating any desired target capacitance value. Below a 50pF capacitor can be  seen. You will notice the enormous dimensions of the structure.&lt;br /&gt;
[[File:50pF MiMCap (GF180A, 3.3V).png|none|thumb|300x300px]]&lt;br /&gt;
Usually we deal with femto Farad in VLSI design so you should never be in a situation where you have large capacitors on your chip.&lt;br /&gt;
&lt;br /&gt;
LibrePDK still can generate you a device, you just won&#039;t be happy about it.&lt;br /&gt;
&lt;br /&gt;
== Resistors ==&lt;br /&gt;
There&#039;s two types of resistor structures available: Meander and strip resistors&lt;br /&gt;
&lt;br /&gt;
LibrePDK automatically adds a guard ring around any resistor which should be on a well&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The meander here is 200 Ohms for GF180A@3.3V&#039;&#039;&#039;[[File:LibrePDK Meander Example.png|none|thumb|300x300px]]&#039;&#039;&#039;The meander here is 500 Ohms for GF180A@3.3V&#039;&#039;&#039;[[File:Strip Resistor Example.png|none|thumb|300x300px]]&lt;br /&gt;
&lt;br /&gt;
== Diodes ==&lt;br /&gt;
[[File:Diode Example.png|none|thumb|300x300px|Example of a diode]]&lt;br /&gt;
While normal fingered diodes now have been implemented Schottky diodes still are work in progress.&lt;br /&gt;
&lt;br /&gt;
== Schottky diodes ==&lt;br /&gt;
Those are not yet implemented&lt;br /&gt;
&lt;br /&gt;
== Transistors ==&lt;br /&gt;
In order to make sure that our transistors don&#039;t go up in flame, we have to take the hot carrier migration and thermal budget into consideration when we decide what transistor to use and whether it should have only one gate or should be fingered.&lt;br /&gt;
&lt;br /&gt;
LibrePDK takes care of this and chooses the right transistor with the right amount of fingers for you based on the target operating voltage and current you plan to pump through it, you provide.&lt;br /&gt;
&lt;br /&gt;
Additionally, you can also overwrite the thermal budget which usually is assumed to be for an internal circuit which isn&#039;t bonded directly to the outside.&lt;br /&gt;
&lt;br /&gt;
When LibrePDK calculates that electron migration and thermal budget constraints don&#039;t allow for a single gate transistor it will dynamically create a fingered structure, either with bulk and source connected or not with the proper guard ring.&lt;br /&gt;
[[File:Fingered Transistor.png|none|thumb|300x300px|Example of a fingered transistor]]&lt;br /&gt;
Libre PDK may also decide to just generate a single gate transistor in cases where there&#039;s very little power involved&lt;br /&gt;
[[File:Single Gate Example.png|none|thumb|300x300px|Example of a single gate transistor]]&lt;br /&gt;
&lt;br /&gt;
== Pad Cells ==&lt;br /&gt;
Last but not least: It contains the [[Pad Cell Generator]] which produces beauties like this&lt;br /&gt;
[[File:30mA SG13G2@3V3 v2.png|none|thumb|356x356px]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibrePDK&amp;diff=778</id>
		<title>LibrePDK</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibrePDK&amp;diff=778"/>
		<updated>2026-08-15T21:51:36Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* Ubuntu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The LibrePDK is the library driving [[Danube River]] and the [[Pad Cell Generator]]&lt;br /&gt;
[[File:LibrePDK.png|none|thumb|695x695px|ALibrePDK screen shot]]&lt;br /&gt;
It is responsible for generating discrete parts with specific parameters for a specific process.&lt;br /&gt;
&lt;br /&gt;
The properties of the parts can be optimized by utilizing the calibration values extracted from the measurements of taped out Danube River test wafers.&lt;br /&gt;
&lt;br /&gt;
== Adding a new technology ==&lt;br /&gt;
Technologies currently supported can be found in the technologies subfolder.&lt;br /&gt;
&lt;br /&gt;
https://gitlab.libresilicon.com/generator-tools/librepdk/-/tree/master/LibrePDK/technologies?ref_type=heads&lt;br /&gt;
&lt;br /&gt;
New technologies can be added by modifying &#039;&#039;&#039;scripts/update_technologies.sh&#039;&#039;&#039; and adding a tech.python script to the technologies folder.&lt;br /&gt;
&lt;br /&gt;
After that, LibrePDK should be capable of auto discovering the new process after running the update script.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu ===&lt;br /&gt;
We are using Ubuntu 25.04 in our Docker containers&lt;br /&gt;
&lt;br /&gt;
Simply run&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;apt install autoconf automake bash binutils-dev bison build-essential ca-certificates cargo \&lt;br /&gt;
    checkinstall clang cmake curl flex g++ gcc git git-lfs glpk-utils gosu imagemagick libblas-dev \&lt;br /&gt;
    libboost-all-dev libboost-python-dev libbz2-dev libcairo2-dev libcurl4-gnutls-dev libeigen3-dev \&lt;br /&gt;
    libfl-dev libgit2-dev libgit2-glib-1.0-dev libglpk-dev libglu1-mesa-dev liblemon-dev \&lt;br /&gt;
    libreadline-dev libsparsehash-dev libsqlite3-dev libtool libxaw7-dev libxml2-dev libz-dev \&lt;br /&gt;
    llvm make mmv pdf2svg pkg-config python-dev python3-dev python3-full python3-pip rapidjson-dev \&lt;br /&gt;
    rsync ruby ruby-dev rustc software-properties-common sqlite3 sudo tcl tcl8.6-dev tcllib \&lt;br /&gt;
    texlive-latex-recommended time tk8.6-dev tklib unzip vim wget z3 zlib1g-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Boost ===&lt;br /&gt;
In order for [[LibrePDK#Limbo|Limbo]] to successfully compile we need to install Boost.&lt;br /&gt;
&lt;br /&gt;
We are currently using boost 1.91.0, of which the tar ball can be obtained here https://archives.boost.io/release/1.91.0/source/boost_1_91_0.tar.gz&lt;br /&gt;
&lt;br /&gt;
With the following command Boost can be installed quickly&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./bootstrap.sh \&lt;br /&gt;
    --prefix=/usr \&lt;br /&gt;
    --with-python-version=3.13&lt;br /&gt;
&lt;br /&gt;
./b2 install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Note that the Python version we compile boost for is 3.13, because LibrePDK hasn&#039;t been tested with any later version.&lt;br /&gt;
&lt;br /&gt;
=== ngspice ===&lt;br /&gt;
For the simulation and characterization of standard cells you will need the ngspice frontend and backend library&lt;br /&gt;
&lt;br /&gt;
Currently we are using version 44.2 of ngspice, the tar ball can be obtained from here: https://download.industrysoftware.automation.siemens.com/open-source/ngspice-44.2.tar.gz&lt;br /&gt;
&lt;br /&gt;
==== Backend configuration ====&lt;br /&gt;
The backend library is needed for Charlib in order to run characterization of our cells&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./autogen.sh&lt;br /&gt;
./configure --with-ngshared --enable-xspice --enable-cider --enable-openmp --disable-debug&lt;br /&gt;
make -j$(nproc)&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;After compilation and installation you should have a libngspice.so in your ldpath which charlib can pick up on and load it.&lt;br /&gt;
&lt;br /&gt;
==== Frontend configuration ====&lt;br /&gt;
This will compile and install the ngspice CLI binary which is needed when you wanna simulate your circuits.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./autogen.sh&lt;br /&gt;
../configure --with-x --with-readline=yes --enable-xspice&lt;br /&gt;
make -j$(nproc)&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;ngspice is also used when loading and importing new technologies into LibrePDK&lt;br /&gt;
&lt;br /&gt;
=== OpenVAF models ===&lt;br /&gt;
IHP&#039;s SG13G2 technology node uses OpenVAF models for the ngspice simulation tool.&lt;br /&gt;
&lt;br /&gt;
The following script will make sure that rust and the OpenVAF tool are present and then&lt;br /&gt;
compiles the models into the osdi format and places them into the technology directory&lt;br /&gt;
ready to be used by LibrePDK.&lt;br /&gt;
&lt;br /&gt;
Simply run the following script and confirm the installation by checking for the LibrePDK/technologies/spice/SG13G2/devices/*/*.osdi files.&lt;br /&gt;
&lt;br /&gt;
This requires the LibrePDK repo to already have [[LibrePDK#Installation|been cloned and updated]] as shown in.&lt;br /&gt;
&lt;br /&gt;
 ./scripts/update_ngspice_extensions.sh&lt;br /&gt;
&lt;br /&gt;
=== LP solver ===&lt;br /&gt;
&lt;br /&gt;
Google now officially runs the project and you can get the most recent version from GitHub&lt;br /&gt;
&lt;br /&gt;
Install is by cloning and building it&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/lp-solve/lp_solve&lt;br /&gt;
pushd lp_solve/lpsolve55&lt;br /&gt;
rm -rf bin/ux64&lt;br /&gt;
sh ccc&lt;br /&gt;
popd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;	Then you can copy the shared object file in solve/lpsolve55/bin/ux64 into your /usr/lib64 and copy the headers with&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/include/lpsolve&lt;br /&gt;
cp lp_solve/*.h /usr/include/lpsolve/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;OR, you can install the system package and devel package with your package manager&lt;br /&gt;
&lt;br /&gt;
=== Lemon ===&lt;br /&gt;
&lt;br /&gt;
That library has been developed by a Hungarian university which doesn&#039;t maintain their Mercurial setup. Best approach is to use the version you find in your distribution&lt;br /&gt;
=== Limbo ===&lt;br /&gt;
&lt;br /&gt;
The official version of Limbo has been a total mess when it comes to building libs and linking them. I had to make some severe modifications which makes CMake properly build shared object files and detects the system wide installation of the dependencies&lt;br /&gt;
using proper CMake detection functions&lt;br /&gt;
&lt;br /&gt;
Just run&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://gitlab.libresilicon.com/leviathan/limbo.git&lt;br /&gt;
mkdir Limbo/build&lt;br /&gt;
pushd Limbo/build&lt;br /&gt;
cmake ..&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
popd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Installation ==&lt;br /&gt;
Before you start installing LibrePDK, you first need to [[LibrePDK#Dependencies|install its dependencies]] so that its C++ extensions and other C++ tools compile successfully.&lt;br /&gt;
&lt;br /&gt;
After that, please clone the repo.&lt;br /&gt;
&lt;br /&gt;
 pip install [https://gitlab.libresilicon.com/generator-tools/librepdk.git https+git://gitlab.libresilicon.com/generator-tools/librepdk.git]&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to make sure that all the submodules and their submodules are cloned&lt;br /&gt;
&lt;br /&gt;
 git submodule update --init --recursive&lt;br /&gt;
&lt;br /&gt;
For placement of discrete componentes used in more complex components like Driver Circuits, OpAmps, etc. IdeaPlaceExPy is being used.&lt;br /&gt;
&lt;br /&gt;
IdeaPlaceExPy requires the Python system headers to be installed and the virtual env has to match the Python version with which it was compiled.&lt;br /&gt;
&lt;br /&gt;
=== Using LibrePDK in a Virtual Environment (FINAL SETUP) ===&lt;br /&gt;
It is recommended to use LibrePDK in a Python virtual environment to avoid dependency conflicts with&lt;br /&gt;
system-wide Python packages.&lt;br /&gt;
&lt;br /&gt;
After you&#039;ve installed all the below dependencies the recommended way of installing the remaining dependencies is to run&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uv sync --no-cache&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building your own Docker images ==&lt;br /&gt;
Inside of the LibrePDK source folder you will find a script where you can uncomment and comment specific build stages of the multistage Docker build covering all the dependencies&lt;br /&gt;
&lt;br /&gt;
Check out the script &#039;&#039;&#039;[https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/scripts/build_docker_images.sh?ref_type=heads scripts/build_docker_images.sh]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Components =&lt;br /&gt;
LibrePDK provides generators for the basic components usually found within a VLSI/ULSI design, such as resistors, capacitors, diodes and transistors.&lt;br /&gt;
&lt;br /&gt;
== Capacitors ==&lt;br /&gt;
LibrePDK can calculate the specific geometry based on the device rules and available parameters for generating any desired target capacitance value. Below a 50pF capacitor can be  seen. You will notice the enormous dimensions of the structure.&lt;br /&gt;
[[File:50pF MiMCap (GF180A, 3.3V).png|none|thumb|300x300px]]&lt;br /&gt;
Usually we deal with femto Farad in VLSI design so you should never be in a situation where you have large capacitors on your chip.&lt;br /&gt;
&lt;br /&gt;
LibrePDK still can generate you a device, you just won&#039;t be happy about it.&lt;br /&gt;
&lt;br /&gt;
== Resistors ==&lt;br /&gt;
There&#039;s two types of resistor structures available: Meander and strip resistors&lt;br /&gt;
&lt;br /&gt;
LibrePDK automatically adds a guard ring around any resistor which should be on a well&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The meander here is 200 Ohms for GF180A@3.3V&#039;&#039;&#039;[[File:LibrePDK Meander Example.png|none|thumb|300x300px]]&#039;&#039;&#039;The meander here is 500 Ohms for GF180A@3.3V&#039;&#039;&#039;[[File:Strip Resistor Example.png|none|thumb|300x300px]]&lt;br /&gt;
&lt;br /&gt;
== Diodes ==&lt;br /&gt;
[[File:Diode Example.png|none|thumb|300x300px|Example of a diode]]&lt;br /&gt;
While normal fingered diodes now have been implemented Schottky diodes still are work in progress.&lt;br /&gt;
&lt;br /&gt;
== Schottky diodes ==&lt;br /&gt;
Those are not yet implemented&lt;br /&gt;
&lt;br /&gt;
== Transistors ==&lt;br /&gt;
In order to make sure that our transistors don&#039;t go up in flame, we have to take the hot carrier migration and thermal budget into consideration when we decide what transistor to use and whether it should have only one gate or should be fingered.&lt;br /&gt;
&lt;br /&gt;
LibrePDK takes care of this and chooses the right transistor with the right amount of fingers for you based on the target operating voltage and current you plan to pump through it, you provide.&lt;br /&gt;
&lt;br /&gt;
Additionally, you can also overwrite the thermal budget which usually is assumed to be for an internal circuit which isn&#039;t bonded directly to the outside.&lt;br /&gt;
&lt;br /&gt;
When LibrePDK calculates that electron migration and thermal budget constraints don&#039;t allow for a single gate transistor it will dynamically create a fingered structure, either with bulk and source connected or not with the proper guard ring.&lt;br /&gt;
[[File:Fingered Transistor.png|none|thumb|300x300px|Example of a fingered transistor]]&lt;br /&gt;
Libre PDK may also decide to just generate a single gate transistor in cases where there&#039;s very little power involved&lt;br /&gt;
[[File:Single Gate Example.png|none|thumb|300x300px|Example of a single gate transistor]]&lt;br /&gt;
&lt;br /&gt;
== Pad Cells ==&lt;br /&gt;
Last but not least: It contains the [[Pad Cell Generator]] which produces beauties like this&lt;br /&gt;
[[File:30mA SG13G2@3V3 v2.png|none|thumb|356x356px]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=LibrePDK&amp;diff=777</id>
		<title>LibrePDK</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=LibrePDK&amp;diff=777"/>
		<updated>2026-08-15T21:49:23Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* Ubuntu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The LibrePDK is the library driving [[Danube River]] and the [[Pad Cell Generator]]&lt;br /&gt;
[[File:LibrePDK.png|none|thumb|695x695px|ALibrePDK screen shot]]&lt;br /&gt;
It is responsible for generating discrete parts with specific parameters for a specific process.&lt;br /&gt;
&lt;br /&gt;
The properties of the parts can be optimized by utilizing the calibration values extracted from the measurements of taped out Danube River test wafers.&lt;br /&gt;
&lt;br /&gt;
== Adding a new technology ==&lt;br /&gt;
Technologies currently supported can be found in the technologies subfolder.&lt;br /&gt;
&lt;br /&gt;
https://gitlab.libresilicon.com/generator-tools/librepdk/-/tree/master/LibrePDK/technologies?ref_type=heads&lt;br /&gt;
&lt;br /&gt;
New technologies can be added by modifying &#039;&#039;&#039;scripts/update_technologies.sh&#039;&#039;&#039; and adding a tech.python script to the technologies folder.&lt;br /&gt;
&lt;br /&gt;
After that, LibrePDK should be capable of auto discovering the new process after running the update script.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu ===&lt;br /&gt;
We are using Ubuntu 25.04 in our Docker containers&lt;br /&gt;
&lt;br /&gt;
Simply run&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;apt install autoconf automake bash binutils-dev bison build-essential ca-certificates cargo checkinstall clang cmake curl flex g++ gcc git git-lfs glpk-utils gosu imagemagick libblas-dev libboost-all-dev libboost-python-dev libbz2-dev libcairo2-dev libcurl4-gnutls-dev libeigen3-dev libfl-dev libgit2-dev libgit2-glib-1.0-dev libglpk-dev libglu1-mesa-dev liblemon-dev libreadline-dev libsparsehash-dev libsqlite3-dev libtool libxaw7-dev libxml2-dev libz-dev llvm make mmv pdf2svg pkg-config python-dev python3-dev python3-full python3-pip rapidjson-dev rsync ruby ruby-dev rustc software-properties-common sqlite3 sudo tcl tcl8.6-dev tcllib texlive-latex-recommended time tk8.6-dev tklib unzip vim wget z3 zlib1g-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Boost ===&lt;br /&gt;
In order for [[LibrePDK#Limbo|Limbo]] to successfully compile we need to install Boost.&lt;br /&gt;
&lt;br /&gt;
We are currently using boost 1.91.0, of which the tar ball can be obtained here https://archives.boost.io/release/1.91.0/source/boost_1_91_0.tar.gz&lt;br /&gt;
&lt;br /&gt;
With the following command Boost can be installed quickly&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./bootstrap.sh \&lt;br /&gt;
    --prefix=/usr \&lt;br /&gt;
    --with-python-version=3.13&lt;br /&gt;
&lt;br /&gt;
./b2 install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Note that the Python version we compile boost for is 3.13, because LibrePDK hasn&#039;t been tested with any later version.&lt;br /&gt;
&lt;br /&gt;
=== ngspice ===&lt;br /&gt;
For the simulation and characterization of standard cells you will need the ngspice frontend and backend library&lt;br /&gt;
&lt;br /&gt;
Currently we are using version 44.2 of ngspice, the tar ball can be obtained from here: https://download.industrysoftware.automation.siemens.com/open-source/ngspice-44.2.tar.gz&lt;br /&gt;
&lt;br /&gt;
==== Backend configuration ====&lt;br /&gt;
The backend library is needed for Charlib in order to run characterization of our cells&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./autogen.sh&lt;br /&gt;
./configure --with-ngshared --enable-xspice --enable-cider --enable-openmp --disable-debug&lt;br /&gt;
make -j$(nproc)&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;After compilation and installation you should have a libngspice.so in your ldpath which charlib can pick up on and load it.&lt;br /&gt;
&lt;br /&gt;
==== Frontend configuration ====&lt;br /&gt;
This will compile and install the ngspice CLI binary which is needed when you wanna simulate your circuits.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./autogen.sh&lt;br /&gt;
../configure --with-x --with-readline=yes --enable-xspice&lt;br /&gt;
make -j$(nproc)&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;ngspice is also used when loading and importing new technologies into LibrePDK&lt;br /&gt;
&lt;br /&gt;
=== OpenVAF models ===&lt;br /&gt;
IHP&#039;s SG13G2 technology node uses OpenVAF models for the ngspice simulation tool.&lt;br /&gt;
&lt;br /&gt;
The following script will make sure that rust and the OpenVAF tool are present and then&lt;br /&gt;
compiles the models into the osdi format and places them into the technology directory&lt;br /&gt;
ready to be used by LibrePDK.&lt;br /&gt;
&lt;br /&gt;
Simply run the following script and confirm the installation by checking for the LibrePDK/technologies/spice/SG13G2/devices/*/*.osdi files.&lt;br /&gt;
&lt;br /&gt;
This requires the LibrePDK repo to already have [[LibrePDK#Installation|been cloned and updated]] as shown in.&lt;br /&gt;
&lt;br /&gt;
 ./scripts/update_ngspice_extensions.sh&lt;br /&gt;
&lt;br /&gt;
=== LP solver ===&lt;br /&gt;
&lt;br /&gt;
Google now officially runs the project and you can get the most recent version from GitHub&lt;br /&gt;
&lt;br /&gt;
Install is by cloning and building it&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/lp-solve/lp_solve&lt;br /&gt;
pushd lp_solve/lpsolve55&lt;br /&gt;
rm -rf bin/ux64&lt;br /&gt;
sh ccc&lt;br /&gt;
popd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;	Then you can copy the shared object file in solve/lpsolve55/bin/ux64 into your /usr/lib64 and copy the headers with&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/include/lpsolve&lt;br /&gt;
cp lp_solve/*.h /usr/include/lpsolve/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;OR, you can install the system package and devel package with your package manager&lt;br /&gt;
&lt;br /&gt;
=== Lemon ===&lt;br /&gt;
&lt;br /&gt;
That library has been developed by a Hungarian university which doesn&#039;t maintain their Mercurial setup. Best approach is to use the version you find in your distribution&lt;br /&gt;
=== Limbo ===&lt;br /&gt;
&lt;br /&gt;
The official version of Limbo has been a total mess when it comes to building libs and linking them. I had to make some severe modifications which makes CMake properly build shared object files and detects the system wide installation of the dependencies&lt;br /&gt;
using proper CMake detection functions&lt;br /&gt;
&lt;br /&gt;
Just run&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://gitlab.libresilicon.com/leviathan/limbo.git&lt;br /&gt;
mkdir Limbo/build&lt;br /&gt;
pushd Limbo/build&lt;br /&gt;
cmake ..&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
popd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Installation ==&lt;br /&gt;
Before you start installing LibrePDK, you first need to [[LibrePDK#Dependencies|install its dependencies]] so that its C++ extensions and other C++ tools compile successfully.&lt;br /&gt;
&lt;br /&gt;
After that, please clone the repo.&lt;br /&gt;
&lt;br /&gt;
 pip install [https://gitlab.libresilicon.com/generator-tools/librepdk.git https+git://gitlab.libresilicon.com/generator-tools/librepdk.git]&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to make sure that all the submodules and their submodules are cloned&lt;br /&gt;
&lt;br /&gt;
 git submodule update --init --recursive&lt;br /&gt;
&lt;br /&gt;
For placement of discrete componentes used in more complex components like Driver Circuits, OpAmps, etc. IdeaPlaceExPy is being used.&lt;br /&gt;
&lt;br /&gt;
IdeaPlaceExPy requires the Python system headers to be installed and the virtual env has to match the Python version with which it was compiled.&lt;br /&gt;
&lt;br /&gt;
=== Using LibrePDK in a Virtual Environment (FINAL SETUP) ===&lt;br /&gt;
It is recommended to use LibrePDK in a Python virtual environment to avoid dependency conflicts with&lt;br /&gt;
system-wide Python packages.&lt;br /&gt;
&lt;br /&gt;
After you&#039;ve installed all the below dependencies the recommended way of installing the remaining dependencies is to run&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uv sync --no-cache&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building your own Docker images ==&lt;br /&gt;
Inside of the LibrePDK source folder you will find a script where you can uncomment and comment specific build stages of the multistage Docker build covering all the dependencies&lt;br /&gt;
&lt;br /&gt;
Check out the script &#039;&#039;&#039;[https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/scripts/build_docker_images.sh?ref_type=heads scripts/build_docker_images.sh]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Components =&lt;br /&gt;
LibrePDK provides generators for the basic components usually found within a VLSI/ULSI design, such as resistors, capacitors, diodes and transistors.&lt;br /&gt;
&lt;br /&gt;
== Capacitors ==&lt;br /&gt;
LibrePDK can calculate the specific geometry based on the device rules and available parameters for generating any desired target capacitance value. Below a 50pF capacitor can be  seen. You will notice the enormous dimensions of the structure.&lt;br /&gt;
[[File:50pF MiMCap (GF180A, 3.3V).png|none|thumb|300x300px]]&lt;br /&gt;
Usually we deal with femto Farad in VLSI design so you should never be in a situation where you have large capacitors on your chip.&lt;br /&gt;
&lt;br /&gt;
LibrePDK still can generate you a device, you just won&#039;t be happy about it.&lt;br /&gt;
&lt;br /&gt;
== Resistors ==&lt;br /&gt;
There&#039;s two types of resistor structures available: Meander and strip resistors&lt;br /&gt;
&lt;br /&gt;
LibrePDK automatically adds a guard ring around any resistor which should be on a well&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The meander here is 200 Ohms for GF180A@3.3V&#039;&#039;&#039;[[File:LibrePDK Meander Example.png|none|thumb|300x300px]]&#039;&#039;&#039;The meander here is 500 Ohms for GF180A@3.3V&#039;&#039;&#039;[[File:Strip Resistor Example.png|none|thumb|300x300px]]&lt;br /&gt;
&lt;br /&gt;
== Diodes ==&lt;br /&gt;
[[File:Diode Example.png|none|thumb|300x300px|Example of a diode]]&lt;br /&gt;
While normal fingered diodes now have been implemented Schottky diodes still are work in progress.&lt;br /&gt;
&lt;br /&gt;
== Schottky diodes ==&lt;br /&gt;
Those are not yet implemented&lt;br /&gt;
&lt;br /&gt;
== Transistors ==&lt;br /&gt;
In order to make sure that our transistors don&#039;t go up in flame, we have to take the hot carrier migration and thermal budget into consideration when we decide what transistor to use and whether it should have only one gate or should be fingered.&lt;br /&gt;
&lt;br /&gt;
LibrePDK takes care of this and chooses the right transistor with the right amount of fingers for you based on the target operating voltage and current you plan to pump through it, you provide.&lt;br /&gt;
&lt;br /&gt;
Additionally, you can also overwrite the thermal budget which usually is assumed to be for an internal circuit which isn&#039;t bonded directly to the outside.&lt;br /&gt;
&lt;br /&gt;
When LibrePDK calculates that electron migration and thermal budget constraints don&#039;t allow for a single gate transistor it will dynamically create a fingered structure, either with bulk and source connected or not with the proper guard ring.&lt;br /&gt;
[[File:Fingered Transistor.png|none|thumb|300x300px|Example of a fingered transistor]]&lt;br /&gt;
Libre PDK may also decide to just generate a single gate transistor in cases where there&#039;s very little power involved&lt;br /&gt;
[[File:Single Gate Example.png|none|thumb|300x300px|Example of a single gate transistor]]&lt;br /&gt;
&lt;br /&gt;
== Pad Cells ==&lt;br /&gt;
Last but not least: It contains the [[Pad Cell Generator]] which produces beauties like this&lt;br /&gt;
[[File:30mA SG13G2@3V3 v2.png|none|thumb|356x356px]]&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=776</id>
		<title>Pad Frame Generator</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=776"/>
		<updated>2026-08-15T12:20:10Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Padframe Example.png|thumb|Example of a pad frame for SG13G2@1.2V]]&lt;br /&gt;
The Pad Frame Generator is part of the [[LibrePDK]] and provides the [[Pad Cell Generator]] functionality.&lt;br /&gt;
&lt;br /&gt;
It&#039;s job is to assemble a ready to use pad frame harness, with ESD protection and power rail wire width properly adjusted for accommodating the intended current driving capacity as well as the intended voltage levels to be used.&lt;br /&gt;
&lt;br /&gt;
== Types of Pad Cells produced ==&lt;br /&gt;
Currently we support only simple IO [[Pad Cell]], analog cells, and power cells, complex pad cells still are being in development.&lt;br /&gt;
&lt;br /&gt;
The very special impedance compensated pad cell in the works ([[High-Speed Impedance-Compensated Pad Cell]]) is needed in order to hook up DDR4 RAM to our chips or build a PCIe device.&lt;br /&gt;
&lt;br /&gt;
== How to use ==&lt;br /&gt;
First pull the docker image for the [[LibrePDK]] in order to make sure the image is up to date by running&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull leviathanch/librepdk:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Then you can feed your JSON config for the padframe you have configured to the pad frame generator script contained in the docker image&lt;br /&gt;
&lt;br /&gt;
An example for a paframe config can be found here https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/tests/padframes/padframe_sg13g2_1v2.json?ref_type=heads&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;docker run -it --rm \&lt;br /&gt;
    -e HOST_UID=$(id -u) -e HOST_GID=$(id -g) \&lt;br /&gt;
    -v &amp;quot;$(pwd)&amp;quot;:/workspace leviathanch/librepdk:latest \&lt;br /&gt;
    librepdk_padframe_generator -i padframe_config.json \&lt;br /&gt;
    -o my_padframe&amp;lt;/syntaxhighlight&amp;gt;After running the generator you should have a folder named my_padframe containing the LEF, DEF, Magic and all the other files you need for running a full synthesis flow of your designs.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Since the Pad Frame Generator is part of [[LibrePDK]] you can find the guide on how to install all the dependencies in the [[LibrePDK#Installation|Installation section of the LibrePDK]] page&lt;br /&gt;
&lt;br /&gt;
== Benchmarks ==&lt;br /&gt;
&lt;br /&gt;
=== Initial run ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    20m48.886s&lt;br /&gt;
user    20m46.885s&lt;br /&gt;
sys     0m3.880s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Further runs ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    8m43.972s&lt;br /&gt;
user    8m40.889s&lt;br /&gt;
sys     0m4.139s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=775</id>
		<title>Pad Frame Generator</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=775"/>
		<updated>2026-08-15T12:19:10Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Padframe Example.png|thumb]]&lt;br /&gt;
The Pad Frame Generator is part of the [[LibrePDK]] and provides the [[Pad Cell Generator]] functionality.&lt;br /&gt;
&lt;br /&gt;
It&#039;s job is to assemble a ready to use pad frame harness, with ESD protection and power rail wire width properly adjusted for accommodating the intended current driving capacity as well as the intended voltage levels to be used.&lt;br /&gt;
&lt;br /&gt;
== Types of Pad Cells produced ==&lt;br /&gt;
Currently we support only simple IO [[Pad Cell]], analog cells, and power cells, complex pad cells still are being in development.&lt;br /&gt;
&lt;br /&gt;
The very special impedance compensated pad cell in the works ([[High-Speed Impedance-Compensated Pad Cell]]) is needed in order to hook up DDR4 RAM to our chips or build a PCIe device.&lt;br /&gt;
&lt;br /&gt;
== How to use ==&lt;br /&gt;
First pull the docker image for the [[LibrePDK]] in order to make sure the image is up to date by running&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull leviathanch/librepdk:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Then you can feed your JSON config for the padframe you have configured to the pad frame generator script contained in the docker image&lt;br /&gt;
&lt;br /&gt;
An example for a paframe config can be found here https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/tests/padframes/padframe_sg13g2_1v2.json?ref_type=heads&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;docker run -it --rm \&lt;br /&gt;
    -e HOST_UID=$(id -u) -e HOST_GID=$(id -g) \&lt;br /&gt;
    -v &amp;quot;$(pwd)&amp;quot;:/workspace leviathanch/librepdk:latest \&lt;br /&gt;
    librepdk_padframe_generator -i padframe_config.json \&lt;br /&gt;
    -o my_padframe&amp;lt;/syntaxhighlight&amp;gt;After running the generator you should have a folder named my_padframe containing the LEF, DEF, Magic and all the other files you need for running a full synthesis flow of your designs.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Since the Pad Frame Generator is part of [[LibrePDK]] you can find the guide on how to install all the dependencies in the [[LibrePDK#Installation|Installation section of the LibrePDK]] page&lt;br /&gt;
&lt;br /&gt;
== Benchmarks ==&lt;br /&gt;
&lt;br /&gt;
=== Initial run ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    20m48.886s&lt;br /&gt;
user    20m46.885s&lt;br /&gt;
sys     0m3.880s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Further runs ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    8m43.972s&lt;br /&gt;
user    8m40.889s&lt;br /&gt;
sys     0m4.139s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=774</id>
		<title>Pad Frame Generator</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=774"/>
		<updated>2026-08-15T12:18:44Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Padframe Example.png|none|thumb]]&lt;br /&gt;
[[File:Pad Frame v2 Example SG13G2@1V2.png|thumb]]&lt;br /&gt;
The Pad Frame Generator is part of the [[LibrePDK]] and provides the [[Pad Cell Generator]] functionality.&lt;br /&gt;
&lt;br /&gt;
It&#039;s job is to assemble a ready to use pad frame harness, with ESD protection and power rail wire width properly adjusted for accommodating the intended current driving capacity as well as the intended voltage levels to be used.&lt;br /&gt;
&lt;br /&gt;
== Types of Pad Cells produced ==&lt;br /&gt;
Currently we support only simple IO [[Pad Cell]], analog cells, and power cells, complex pad cells still are being in development.&lt;br /&gt;
&lt;br /&gt;
The very special impedance compensated pad cell in the works ([[High-Speed Impedance-Compensated Pad Cell]]) is needed in order to hook up DDR4 RAM to our chips or build a PCIe device.&lt;br /&gt;
&lt;br /&gt;
== How to use ==&lt;br /&gt;
First pull the docker image for the [[LibrePDK]] in order to make sure the image is up to date by running&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull leviathanch/librepdk:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Then you can feed your JSON config for the padframe you have configured to the pad frame generator script contained in the docker image&lt;br /&gt;
&lt;br /&gt;
An example for a paframe config can be found here https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/tests/padframes/padframe_sg13g2_1v2.json?ref_type=heads&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;docker run -it --rm \&lt;br /&gt;
    -e HOST_UID=$(id -u) -e HOST_GID=$(id -g) \&lt;br /&gt;
    -v &amp;quot;$(pwd)&amp;quot;:/workspace leviathanch/librepdk:latest \&lt;br /&gt;
    librepdk_padframe_generator -i padframe_config.json \&lt;br /&gt;
    -o my_padframe&amp;lt;/syntaxhighlight&amp;gt;After running the generator you should have a folder named my_padframe containing the LEF, DEF, Magic and all the other files you need for running a full synthesis flow of your designs.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Since the Pad Frame Generator is part of [[LibrePDK]] you can find the guide on how to install all the dependencies in the [[LibrePDK#Installation|Installation section of the LibrePDK]] page&lt;br /&gt;
&lt;br /&gt;
== Benchmarks ==&lt;br /&gt;
&lt;br /&gt;
=== Initial run ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    20m48.886s&lt;br /&gt;
user    20m46.885s&lt;br /&gt;
sys     0m3.880s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Further runs ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    8m43.972s&lt;br /&gt;
user    8m40.889s&lt;br /&gt;
sys     0m4.139s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=File:Padframe_Example.png&amp;diff=773</id>
		<title>File:Padframe Example.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=File:Padframe_Example.png&amp;diff=773"/>
		<updated>2026-08-15T12:18:31Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Screenshot Magic VLSI&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=772</id>
		<title>Pad Frame Generator</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=772"/>
		<updated>2026-08-13T09:41:38Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* Further runs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Pad Frame v2 Example SG13G2@1V2.png|thumb]]&lt;br /&gt;
The Pad Frame Generator is part of the [[LibrePDK]] and provides the [[Pad Cell Generator]] functionality.&lt;br /&gt;
&lt;br /&gt;
It&#039;s job is to assemble a ready to use pad frame harness, with ESD protection and power rail wire width properly adjusted for accommodating the intended current driving capacity as well as the intended voltage levels to be used.&lt;br /&gt;
&lt;br /&gt;
== Types of Pad Cells produced ==&lt;br /&gt;
Currently we support only simple IO [[Pad Cell]], analog cells, and power cells, complex pad cells still are being in development.&lt;br /&gt;
&lt;br /&gt;
The very special impedance compensated pad cell in the works ([[High-Speed Impedance-Compensated Pad Cell]]) is needed in order to hook up DDR4 RAM to our chips or build a PCIe device.&lt;br /&gt;
&lt;br /&gt;
== How to use ==&lt;br /&gt;
First pull the docker image for the [[LibrePDK]] in order to make sure the image is up to date by running&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull leviathanch/librepdk:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Then you can feed your JSON config for the padframe you have configured to the pad frame generator script contained in the docker image&lt;br /&gt;
&lt;br /&gt;
An example for a paframe config can be found here https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/tests/padframes/padframe_sg13g2_1v2.json?ref_type=heads&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;docker run -it --rm \&lt;br /&gt;
    -e HOST_UID=$(id -u) -e HOST_GID=$(id -g) \&lt;br /&gt;
    -v &amp;quot;$(pwd)&amp;quot;:/workspace leviathanch/librepdk:latest \&lt;br /&gt;
    librepdk_padframe_generator -i padframe_config.json \&lt;br /&gt;
    -o my_padframe&amp;lt;/syntaxhighlight&amp;gt;After running the generator you should have a folder named my_padframe containing the LEF, DEF, Magic and all the other files you need for running a full synthesis flow of your designs.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Since the Pad Frame Generator is part of [[LibrePDK]] you can find the guide on how to install all the dependencies in the [[LibrePDK#Installation|Installation section of the LibrePDK]] page&lt;br /&gt;
&lt;br /&gt;
== Benchmarks ==&lt;br /&gt;
&lt;br /&gt;
=== Initial run ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    20m48.886s&lt;br /&gt;
user    20m46.885s&lt;br /&gt;
sys     0m3.880s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Further runs ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    8m43.972s&lt;br /&gt;
user    8m40.889s&lt;br /&gt;
sys     0m4.139s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=771</id>
		<title>Pad Frame Generator</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=771"/>
		<updated>2026-08-13T09:41:15Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* Initial run */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Pad Frame v2 Example SG13G2@1V2.png|thumb]]&lt;br /&gt;
The Pad Frame Generator is part of the [[LibrePDK]] and provides the [[Pad Cell Generator]] functionality.&lt;br /&gt;
&lt;br /&gt;
It&#039;s job is to assemble a ready to use pad frame harness, with ESD protection and power rail wire width properly adjusted for accommodating the intended current driving capacity as well as the intended voltage levels to be used.&lt;br /&gt;
&lt;br /&gt;
== Types of Pad Cells produced ==&lt;br /&gt;
Currently we support only simple IO [[Pad Cell]], analog cells, and power cells, complex pad cells still are being in development.&lt;br /&gt;
&lt;br /&gt;
The very special impedance compensated pad cell in the works ([[High-Speed Impedance-Compensated Pad Cell]]) is needed in order to hook up DDR4 RAM to our chips or build a PCIe device.&lt;br /&gt;
&lt;br /&gt;
== How to use ==&lt;br /&gt;
First pull the docker image for the [[LibrePDK]] in order to make sure the image is up to date by running&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull leviathanch/librepdk:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Then you can feed your JSON config for the padframe you have configured to the pad frame generator script contained in the docker image&lt;br /&gt;
&lt;br /&gt;
An example for a paframe config can be found here https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/tests/padframes/padframe_sg13g2_1v2.json?ref_type=heads&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;docker run -it --rm \&lt;br /&gt;
    -e HOST_UID=$(id -u) -e HOST_GID=$(id -g) \&lt;br /&gt;
    -v &amp;quot;$(pwd)&amp;quot;:/workspace leviathanch/librepdk:latest \&lt;br /&gt;
    librepdk_padframe_generator -i padframe_config.json \&lt;br /&gt;
    -o my_padframe&amp;lt;/syntaxhighlight&amp;gt;After running the generator you should have a folder named my_padframe containing the LEF, DEF, Magic and all the other files you need for running a full synthesis flow of your designs.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Since the Pad Frame Generator is part of [[LibrePDK]] you can find the guide on how to install all the dependencies in the [[LibrePDK#Installation|Installation section of the LibrePDK]] page&lt;br /&gt;
&lt;br /&gt;
== Benchmarks ==&lt;br /&gt;
&lt;br /&gt;
=== Initial run ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
real    20m48.886s&lt;br /&gt;
user    20m46.885s&lt;br /&gt;
sys     0m3.880s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Further runs ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Successfully generated pad cell elements to: padframe_sg13g2_1v2&lt;br /&gt;
Files: io_cell.gds/mag, corner_cell.gds/mag&lt;br /&gt;
&lt;br /&gt;
real    32m18.562s&lt;br /&gt;
user    32m9.834s&lt;br /&gt;
sys     0m8.844s&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=770</id>
		<title>Pad Frame Generator</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=770"/>
		<updated>2026-08-13T07:02:43Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: /* Benchmarks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Pad Frame v2 Example SG13G2@1V2.png|thumb]]&lt;br /&gt;
The Pad Frame Generator is part of the [[LibrePDK]] and provides the [[Pad Cell Generator]] functionality.&lt;br /&gt;
&lt;br /&gt;
It&#039;s job is to assemble a ready to use pad frame harness, with ESD protection and power rail wire width properly adjusted for accommodating the intended current driving capacity as well as the intended voltage levels to be used.&lt;br /&gt;
&lt;br /&gt;
== Types of Pad Cells produced ==&lt;br /&gt;
Currently we support only simple IO [[Pad Cell]], analog cells, and power cells, complex pad cells still are being in development.&lt;br /&gt;
&lt;br /&gt;
The very special impedance compensated pad cell in the works ([[High-Speed Impedance-Compensated Pad Cell]]) is needed in order to hook up DDR4 RAM to our chips or build a PCIe device.&lt;br /&gt;
&lt;br /&gt;
== How to use ==&lt;br /&gt;
First pull the docker image for the [[LibrePDK]] in order to make sure the image is up to date by running&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull leviathanch/librepdk:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Then you can feed your JSON config for the padframe you have configured to the pad frame generator script contained in the docker image&lt;br /&gt;
&lt;br /&gt;
An example for a paframe config can be found here https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/tests/padframes/padframe_sg13g2_1v2.json?ref_type=heads&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;docker run -it --rm \&lt;br /&gt;
    -e HOST_UID=$(id -u) -e HOST_GID=$(id -g) \&lt;br /&gt;
    -v &amp;quot;$(pwd)&amp;quot;:/workspace leviathanch/librepdk:latest \&lt;br /&gt;
    librepdk_padframe_generator -i padframe_config.json \&lt;br /&gt;
    -o my_padframe&amp;lt;/syntaxhighlight&amp;gt;After running the generator you should have a folder named my_padframe containing the LEF, DEF, Magic and all the other files you need for running a full synthesis flow of your designs.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Since the Pad Frame Generator is part of [[LibrePDK]] you can find the guide on how to install all the dependencies in the [[LibrePDK#Installation|Installation section of the LibrePDK]] page&lt;br /&gt;
&lt;br /&gt;
== Benchmarks ==&lt;br /&gt;
&lt;br /&gt;
=== Initial run ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Successfully generated pad cell elements to: padframe_sg13g2_1v2&lt;br /&gt;
Files: io_cell.gds/mag, corner_cell.gds/mag&lt;br /&gt;
&lt;br /&gt;
real    36m55.595s&lt;br /&gt;
user    36m36.021s&lt;br /&gt;
sys     0m6.958s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Further runs ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Successfully generated pad cell elements to: padframe_sg13g2_1v2&lt;br /&gt;
Files: io_cell.gds/mag, corner_cell.gds/mag&lt;br /&gt;
&lt;br /&gt;
real    32m18.562s&lt;br /&gt;
user    32m9.834s&lt;br /&gt;
sys     0m8.844s&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
	<entry>
		<id>https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=769</id>
		<title>Pad Frame Generator</title>
		<link rel="alternate" type="text/html" href="https://wiki.libresilicon.com/index.php?title=Pad_Frame_Generator&amp;diff=769"/>
		<updated>2026-08-13T06:23:40Z</updated>

		<summary type="html">&lt;p&gt;Leviathan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Pad Frame v2 Example SG13G2@1V2.png|thumb]]&lt;br /&gt;
The Pad Frame Generator is part of the [[LibrePDK]] and provides the [[Pad Cell Generator]] functionality.&lt;br /&gt;
&lt;br /&gt;
It&#039;s job is to assemble a ready to use pad frame harness, with ESD protection and power rail wire width properly adjusted for accommodating the intended current driving capacity as well as the intended voltage levels to be used.&lt;br /&gt;
&lt;br /&gt;
== Types of Pad Cells produced ==&lt;br /&gt;
Currently we support only simple IO [[Pad Cell]], analog cells, and power cells, complex pad cells still are being in development.&lt;br /&gt;
&lt;br /&gt;
The very special impedance compensated pad cell in the works ([[High-Speed Impedance-Compensated Pad Cell]]) is needed in order to hook up DDR4 RAM to our chips or build a PCIe device.&lt;br /&gt;
&lt;br /&gt;
== How to use ==&lt;br /&gt;
First pull the docker image for the [[LibrePDK]] in order to make sure the image is up to date by running&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull leviathanch/librepdk:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Then you can feed your JSON config for the padframe you have configured to the pad frame generator script contained in the docker image&lt;br /&gt;
&lt;br /&gt;
An example for a paframe config can be found here https://gitlab.libresilicon.com/generator-tools/librepdk/-/blob/master/tests/padframes/padframe_sg13g2_1v2.json?ref_type=heads&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;docker run -it --rm \&lt;br /&gt;
    -e HOST_UID=$(id -u) -e HOST_GID=$(id -g) \&lt;br /&gt;
    -v &amp;quot;$(pwd)&amp;quot;:/workspace leviathanch/librepdk:latest \&lt;br /&gt;
    librepdk_padframe_generator -i padframe_config.json \&lt;br /&gt;
    -o my_padframe&amp;lt;/syntaxhighlight&amp;gt;After running the generator you should have a folder named my_padframe containing the LEF, DEF, Magic and all the other files you need for running a full synthesis flow of your designs.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Since the Pad Frame Generator is part of [[LibrePDK]] you can find the guide on how to install all the dependencies in the [[LibrePDK#Installation|Installation section of the LibrePDK]] page&lt;br /&gt;
&lt;br /&gt;
== Benchmarks ==&lt;br /&gt;
&lt;br /&gt;
=== Initial run ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Creating magic wrapper for  padframe&lt;br /&gt;
Using Magic tech file: /run/media/leviathan/dde9e2a1-4a6e-4d1b-afec-7c557d080ef8/LibrePDK/librepdk/LibrePDK/technologies/magic_tech/SG13G2/libresilicon.tech&lt;br /&gt;
Changing back to top directory for  padframe&lt;br /&gt;
&lt;br /&gt;
Successfully generated pad cell elements to: padframe_sg13g2_1v2&lt;br /&gt;
Files: io_cell.gds/mag, corner_cell.gds/mag&lt;br /&gt;
&lt;br /&gt;
real    36m55.595s&lt;br /&gt;
user    36m36.021s&lt;br /&gt;
sys     0m6.958s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Leviathan</name></author>
	</entry>
</feed>