Lewati ke konten
chip.peruri.co.id

Bab 6: Verifikasi & Simulasi Sirkuit Terintegrasi

Biaya memperbaiki kesalahan logika (bug) pada sirkuit terpadu pasca-fabrikasi sangat tinggi. Berbeda dengan rekayasa perangkat lunak yang memungkinkan penerbitan pembaruan instan (patching), kesalahan pada silikon menuntut pembuatan ulang set fotomask (mask respin) dengan biaya puluhan ribu dolar dan waktu tunggu berbulan-bulan.

Oleh karena itu, metodologi verifikasi yang komprehensif pada setiap tingkatan abstraksi desain merupakan syarat mutlak sebelum berkas diserahkan ke fasilitas manufaktur.


6.1 Verifikasi Berbasis Python Menggunakan Cocotb

Section titled “6.1 Verifikasi Berbasis Python Menggunakan Cocotb”

Secara tradisional, bangku uji (testbench) ditulis dalam bahasa Verilog atau SystemVerilog. Pendekatan ini memiliki keterbatasan dalam hal manipulasi data kompleks dan pengujian acak terkontrol. Cocotb (Coroutine-based Co-simulation Testbench Environment) menghadirkan paradigma modern: menulis logika pengujian sirkuit digital secara langsung menggunakan bahasa Python.

Cocotb berkomunikasi dengan simulator digital (seperti Icarus Verilog atau Verilator) melalui antarmuka standar Verilog Procedural Interface (VPI):

test_adder.py
import cocotb
from cocotb.triggers import RisingEdge, Timer
from cocotb.clock import Clock
@cocotb.test()
async def test_adder_randomized(dut):
"""Menguji fungsionalitas penambahan pada adder berpipa."""
# 1. Menghasilkan sinyal detak periode 20 ns (50 MHz)
clock = Clock(dut.clk, 20, units="ns")
cocotb.start_soon(clock.start())
# 2. Inisialisasi masukan
dut.a.value = 0
dut.b.value = 0
await Timer(40, units="ns")
# 3. Uji coba vektor data
test_cases = [(5, 7), (120, 35), (255, 1), (0, 0)]
for val_a, val_b in test_cases:
dut.a.value = val_a
dut.b.value = val_b
# Menunggu siklus pipa (2 siklus detak akibat register internal)
await RisingEdge(dut.clk)
await RisingEdge(dut.clk)
expected = val_a + val_b
actual = int(dut.sum.value)
assert actual == expected, f"Gagal: {val_a} + {val_b} = {actual}, seharusnya {expected}"
  • Pemanfaatan coroutines Python (async dan await) untuk menyinkronkan eksekusi dengan tepi detak (RisingEdge) dan penundaan waktu fisik (Timer).
  • Akses penuh terhadap pustaka eksternal Python (seperti NumPy, SciPy, atau model perangkat lunak referensi) untuk memverifikasi keluaran sirkuit secara otomatis.
  • Integritas pengujian deterministik dan pembuatan laporan regresi otomatis (continuous integration).

6.2 Simulasi Netlist Tingkat Gerbang (Gate-Level Netlist Simulation)

Section titled “6.2 Simulasi Netlist Tingkat Gerbang (Gate-Level Netlist Simulation)”

Setelah kode RTL disintesis menjadi netlist gerbang logika (adder.nl.v), rangkaian perlu disimulasikan ulang sebelum melangkah ke implementasi fisik.

  1. Simulasi RTL Fungsional: Menguji kebenaran algoritma logika murni tanpa memperhitungkan sel fisik.
  2. Simulasi Netlist Gerbang (Gate-Level): Menggabungkan berkas netlist hasil sintesis dengan model fungsional sel standar PDK (sky130_fd_sc_hd.v).
    • Mendeteksi galat pemetaan teknologi Yosys.
    • Mengidentifikasi potensi bahaya logika (glitches).
    • Memvalidasi perilaku propagasi nilai tak terdefinisi (X-state propagation) pada kondisi inisialisasi reset.

Eksekusi kompilasi netlist dengan Icarus Verilog:

Terminal window
iverilog -o sim_netlist.vvp \
-DFUNCTIONAL -DUNIT_DELAY=#1 \
/path/to/sky130_fd_sc_hd.v \
adder.nl.v test_adder.v
vvp sim_netlist.vvp

6.3 Analisis Bentuk Gelombang (Waveform Visualization)

Section titled “6.3 Analisis Bentuk Gelombang (Waveform Visualization)”

Simulator menghasilkan berkas jejak perubahan nilai logika dalam format VCD (Value Change Dump) atau FST. Berkas ini divisualisasikan menggunakan perangkat penganalisis bentuk gelombang seperti Surfer atau GTKWave:

Bentuk Gelombang Simulasi Adder pada Surfer

Gambar 6.1: Bentuk gelombang simulasi sirkuit adder yang divisualisasikan melalui antarmuka Surfer. Terlihat transisi sinyal masukan a dan b, pulsa detak clk, serta pembaruan nilai keluaran sum setelah dua siklus propagasi pipa register.


6.4 Simulasi Transien Rangkaian Penuh dengan SPICE

Section titled “6.4 Simulasi Transien Rangkaian Penuh dengan SPICE”

Tingkat verifikasi tertinggi dilakukan pada lapisan analog sirkuit transistor menggunakan simulator ngspice.

Simulasi SPICE mengekstrak netlist transistor dari berkas tata letak fisik GDSII (melalui Magic) yang memuat kapasitansi kawat dan resistansi kontak parasitik riil. Simulasi ini memberikan kurva tegangan analog kontinu ($V$ terhadap $t$), laju naik-turun sinyal (rise and fall times), disipasi daya sesaat, serta potensi penurunan voltase suplai (IR-drop).


Evaluasi Bab
Kuis Evaluasi Pemahaman Bab 6: Verifikasi & Simulasi Sirkuit Terpadu
Belum selesai
1. Mengapa verifikasi Cocotb berbasis coroutine Python sangat diminati dalam perancangan chip modern dibandingkan testbench Verilog murni?
2. Apa perbedaan krusial antara simulasi tingkat RTL fungsional dan simulasi netlist tingkat gerbang (gate-level netlist simulation)?
3. Informasi fisik apa yang hanya dapat diperoleh secara akurat melalui simulasi analog SPICE (ngspice) dan tidak tersedia pada simulasi logika digital diskret?