Bab 4: Eksekusi Alur LibreLane Berbasis Python
Selain dijalankan secara otomatis melalui satu perintah antarmuka baris perintah (CLI), alur kerja LibreLane dapat dikendalikan dan diinspeksi secara bertahap menggunakan bahasa pemrograman Python. Pendekatan ini memungkinkan peneliti dan perancang sirkuit untuk mengintervensi parameter pada setiap titik alur, mengekstraksi metrik secara terprogram, dan mengamati transformasi geometris sirkuit pada setiap tahapan perancangan fisik (Physical Design Flow).
4.1 Inisialisasi Lingkungan & Konfigurasi Alur
Section titled “4.1 Inisialisasi Lingkungan & Konfigurasi Alur”Tahap awal diawali dengan konfigurasi Process Design Kit (PDK) dan pendefinisian objek alur (Flow).
1. Konfigurasi PDK (pdk.py)
Section titled “1. Konfigurasi PDK (pdk.py)”import librelanefrom librelane.config import Configfrom librelane.pdk.sky130A import Sky130A
# Mengakses PDK SkyWater 130nm varian High-Densitypdk = Sky130A(scl="sky130_fd_sc_hd")2. Konfigurasi Proyek (config.py)
Section titled “2. Konfigurasi Proyek (config.py)”config = Config( pdk=pdk, design_name="adder", verilog_files=["adder.v"], clock_port="clk", clock_period=20.0, core_utilization=50)3. Menginisialisasi Objek State (steps.py)
Section titled “3. Menginisialisasi Objek State (steps.py)”Setiap tahapan (step) dalam LibreLane mengonsumsi status desain (State) dari langkah sebelumnya dan menghasilkan State baru yang telah diperbarui:
from librelane.steps import Step, Statestate = State(config=config)4.2 Sintesis Logika dengan Yosys (synth.py)
Section titled “4.2 Sintesis Logika dengan Yosys (synth.py)”Tahap sintesis mengubah kode deskripsi Register-Transfer Level (RTL) Verilog menjadi netlist tingkat gerbang (gate-level netlist) yang terpetakan ke sel standar SKY130:
from librelane.steps.yosys import Synthesis
step_synth = Synthesis(config)state = step_synth.run(state)Yosys mengoptimasi fungsi Boolean menggunakan algoritma pemetaan teknologi ABC. Hasilnya disimpan dalam berkas netlist adder.nl.v.
4.3 Floorplanning, Sel Tap, & Penempatan Pin I/O
Section titled “4.3 Floorplanning, Sel Tap, & Penempatan Pin I/O”Tahap perancangan lantai sirkuit (Floorplanning) menetapkan batas fisik area die, rasio aspek silikon, serta alokasi pin masukan dan keluaran:
from librelane.steps.openroad import Floorplan, TapEndCapCells, IOPlacement
# 1. Menetapkan batas die dan baris sel standarstate = Floorplan(config).run(state)
# 2. Menyisipkan sel Tap dan Endcapstate = TapEndCapCells(config).run(state)
# 3. Menempatkan pin I/O pada perimeter diestate = IOPlacement(config).run(state)- Sel Endcap (Endcap Cells): Ditempatkan di kedua ujung setiap baris sel standar untuk mengisolasi lapisan difusi dan mencegah efek batas optis fotolitografi.
- Sel Tap (Well Tap Cells): Menghubungkan substrat bertipe-p ke VSS dan sumur-n (n-well) ke VDD pada interval jarak teratur untuk mencegah fenomena korsleting parasitik destruktif yang dikenal sebagai Latch-up.
4.4 Jaringan Distribusi Daya (Power Distribution Network - PDN)
Section titled “4.4 Jaringan Distribusi Daya (Power Distribution Network - PDN)”Sirkuit terpadu membutuhkan jala-jala penghantar arus berdensitas tinggi untuk menyalurkan suplai tegangan secara merata ke seluruh die tanpa memicu penurunan tegangan parasitik (IR drop):
from librelane.steps.openroad import GeneratePDNstate = GeneratePDN(config).run(state)
Gambar 4.1: Tata letak fisik sirkuit setelah pembentukan PDN, memperlihatkan cincin daya eksternal (power ring) serta pita-pita logam tebal vertikal dan horizontal (power straps) penyuplai tegangan VPWR dan VGND.
4.5 Penempatan Sel: Global Placement & Detailed Placement
Section titled “4.5 Penempatan Sel: Global Placement & Detailed Placement”Proses penempatan sel standar ke dalam baris silikon dibagi menjadi dua fase matematis:
1. Penempatan Global (Global Placement)
Section titled “1. Penempatan Global (Global Placement)”Algoritma penempatan global (seperti RePlAce pada OpenROAD) memperlakukan sel sebagai partikel kontinu dan meminimalkan total estimasi panjang kawat interkoneksi (Half-Perimeter Wire Length - HPWL). Pada fase ini, sel-sel dapat saling bertumpukan (overlapping).
from librelane.steps.openroad import GlobalPlacementstate = GlobalPlacement(config).run(state)
Gambar 4.2: Penempatan Global (Global Placement). Sel-sel standar ditempatkan pada posisi estimasi optimal namun belum terikat pada batas kisi grid, sehingga masih terjadi tumpang tindih fisik antar-sel.
2. Penempatan Detail & Legalisasi (Detailed Placement)
Section titled “2. Penempatan Detail & Legalisasi (Detailed Placement)”Tahap legalisasi menggeser sel-sel ke lokasi grid terdekat yang sah secara geometris, memastikan tidak ada dua sel yang bertumpukan dan setiap sel duduk tepat di atas baris silikon.
from librelane.steps.openroad import DetailedPlacementstate = DetailedPlacement(config).run(state)
Gambar 4.3: Penempatan Detail Legal (Detailed Placement). Seluruh sel standar tersusun rapi di dalam baris silikon tanpa tumpang tindih, siap menerima sambungan kawat interkoneksi.
4.6 Sintesis Pohon Detak (Clock Tree Synthesis - CTS)
Section titled “4.6 Sintesis Pohon Detak (Clock Tree Synthesis - CTS)”Sinyal detak harus tiba di puluhan hingga ribuan flip-flop secara simultan. Jika sinyal detak tiba pada waktu yang berbeda-beda antar-register, selisih waktu tersebut (clock skew) akan memicu pelanggaran hold time.
from librelane.steps.openroad import CTSstate = CTS(config).run(state)OpenROAD menggunakan algoritma TritonCTS untuk membangun pohon penyangga (inverter/buffer tree) yang simetris, menyeimbangkan beban kapasitif dan meminimalkan clock skew serta insertion delay.
4.7 Perutean Kawat Logika (Global & Detailed Routing)
Section titled “4.7 Perutean Kawat Logika (Global & Detailed Routing)”Setelah lokasi sel dan pohon detak terkunci, sambungan sinyal antar-pin logam direalisasikan melintasi berbagai lapisan interkoneksi (Metal 1 hingga Metal 5 pada SKY130):
from librelane.steps.openroad import GlobalRouting, DetailedRouting
# 1. Global Routing (FastRoute): Estimasi rute pada grid kasarstate = GlobalRouting(config).run(state)
# 2. Detailed Routing (TritonRoute): Penetapan jalur konduktor fisik riilstate = DetailedRouting(config).run(state)
Gambar 4.4: Tata letak fisik sirkuit setelah perutean detail selesai (routed design). Seluruh jalur kawat logam dan via penghubung antar-lapisan telah terbentuk secara utuh.
4.8 Penyisipan Sel Pengisi, Ekstraksi RCX, & Verifikasi Fisik
Section titled “4.8 Penyisipan Sel Pengisi, Ekstraksi RCX, & Verifikasi Fisik”Tahap penutup memastikan kelaikan fisik sebelum pengiriman berkas ke pabrik fabrikasi:
- Sel Pengisi (Fill Insertion): Celah kosong di antara sel standar diisi dengan sel dummy (fillers) untuk menjaga kontinuitas rel daya, sumur difusi, dan kepadatan lapisan logam fotolitografi.
- Ekstraksi Parasitik (RCX): Menghitung nilai resistansi ($R$) dan kapasitansi ($C$) riil dari setiap kawat logam untuk analisis STA pasca-rute akhir.
- Pengecekan Aturan Desain (Design Rule Checking - DRC): Dijalankan menggunakan Magic atau KLayout untuk memastikan lebar lintasan kawat, jarak bebas spasi (spacing), dan penutup via memenuhi batas toleransi manufaktur pabrik.
- Pemeriksaan Skematik vs. Tata Letak (Layout Versus Schematic - LVS): Menggunakan perangkat Netgen untuk membandingkan netlist sirkuit hasil ekstraksi fisik GDSII dengan netlist gerbang hasil sintesis logika. Jika kedua representasi identik secara topologi kelistrikan (LVS Clean), chip dinyatakan siap untuk diproduksi (tapeout).