Bahasa Pemrograman Chisel

Bahasa Chisel

Ikhtisar Chisel

Chisel (Constructing Hardware In a Scala Embedded Language) adalah bahasa konstruksi perangkat keras yang memfasilitasi desain dan verifikasi perangkat keras. Bahasa ini dibangun di atas bahasa pemrograman Scala, memanfaatkan ekspresivitas dan kemampuan pemrograman fungsionalnya untuk memungkinkan desainer membuat desain perangkat keras yang canggih dan testbench dengan mudah. Chisel terutama digunakan dalam pengembangan sirkuit digital, khususnya dalam bidang desain FPGA dan ASIC.

Aspek Historis

Penciptaan dan Pengembangan Awal

Chisel dikembangkan sebagai proyek penelitian di Universitas California, Berkeley, di bawah naungan kelompok Penelitian Arsitektur Berkeley. Motivasi di balik penciptaannya adalah untuk menyediakan cara yang lebih produktif dan efisien dalam mendesain perangkat keras dibandingkan dengan Bahasa Deskripsi Perangkat Keras (HDL) tradisional seperti Verilog atau VHDL. Dengan menggabungkan desain perangkat keras dalam bahasa pemrograman tingkat tinggi, Chisel bertujuan untuk menawarkan abstraksi yang lebih baik, konstruksi tingkat tinggi, dan penggunaan kembali kode.

Evolusi dan Kondisi Saat Ini

Sejak awal, Chisel telah mendapatkan popularitas di lingkungan akademis dan industri. Bahasa ini telah berkembang dengan kontribusi dari banyak pengembang, yang mengarah pada perbaikan dalam fitur, pustaka, dan kegunaannya. Integrasinya dengan Scala telah memungkinkan desainer untuk memanfaatkan fitur-fitur kuat seperti pemrograman fungsional, keamanan tipe, dan pustaka koleksi yang canggih. Chisel kini banyak digunakan dalam proyek pengembangan perangkat keras modern, mulai dari penelitian akademis hingga produk komersial.

Hubungan dengan Bahasa dan Platform Lain

Chisel mengambil inspirasi dari HDL seperti Verilog dan VHDL, meminjam konsep inti mereka sambil meningkatkan dengan paradigma pemrograman dari Scala. Ini juga berhubungan erat dengan kerangka konstruksi perangkat keras lainnya seperti SpinalHDL, yang juga fokus pada produktivitas dan ekspresivitas. Desain Chisel dapat diubah menjadi Verilog, memungkinkan penggunaan alat sintesis dan alur kerja yang sudah ada.

Fitur Sintaksis

DSL Tertanam

Chisel menyediakan Domain-Specific Language (DSL) yang tertanam dalam Scala, memungkinkan desainer perangkat keras untuk memanfaatkan sintaks Scala untuk deskripsi perangkat keras. Misalnya, mendefinisikan multiplexer 2-input sederhana dapat diekspresikan sebagai:

class SimpleMux extends Module {
    val io = IO(new Bundle {
        val a = Input(Bool())
        val b = Input(Bool())
        val sel = Input(Bool())
        val out = Output(Bool())
    })
    
    io.out := Mux(io.sel, io.b, io.a)
}

Tipe dan Lebar Bit

Chisel mendukung berbagai tipe dan memungkinkan desainer untuk menentukan lebar bit secara eksplisit, memberikan kontrol yang lebih baik atas pemanfaatan sumber daya perangkat keras. Misalnya:

val myWire = Wire(UInt(8.W)) // integer tanpa tanda 8-bit

Abstraksi Komponen Perangkat Keras

Bahasa ini menawarkan abstraksi untuk komponen perangkat keras umum. Misalnya, untuk membuat register sederhana:

val reg = RegInit(0.U(8.W)) // register 8-bit yang diinisialisasi ke 0

Modul Parameterisasi

Chisel memungkinkan pembuatan modul parameterisasi, memungkinkan desain yang dapat digunakan kembali dengan konfigurasi yang berbeda:

class ParamModule(val size: Int) extends Module {
    val io = IO(new Bundle {
        val input = Input(UInt(size.W))
        val output = Output(UInt(size.W))
    })
    
    io.output := io.input + 1.U
}

Ekspresi Kondisional

Chisel mendukung ekspresi kondisional untuk memfasilitasi logika perangkat keras yang kompleks:

val result = Mux(condition, trueValue, falseValue) // Multiplexer

Generator Perangkat Keras

Membangun komponen perangkat keras modular menggunakan fungsi tingkat tinggi untuk menghasilkan konfigurasi perangkat keras:

def makeAdder(n: Int) = new Module {
    val io = IO(new Bundle {
        val a = Input(UInt(n.W))
        val b = Input(UInt(n.W))
        val sum = Output(UInt(n.W))
    })
    io.sum := io.a + io.b
}

Utilitas Koleksi

Chisel memungkinkan penggunaan utilitas koleksi Scala untuk memanipulasi elemen perangkat keras secara efektif:

val wires = VecInit(Seq.fill(4)(Wire(UInt(8.W)))) // Membuat vektor dari 4 kawat

Logika Berurutan

Logika berurutan diekspresikan dengan mudah menggunakan konstruksi khusus Chisel, seperti register:

when(condition) {
    reg := newValue
} .otherwise {
    reg := oldValue
}

Kerangka Pengujian Bawaan

Chisel terintegrasi dengan ScalaTest, memungkinkan pengembang untuk menulis tes untuk desain perangkat keras mereka secara alami:

class MyModuleTester extends PeekPokeTester(new MyModule) {
    poke(dut.a, 1)
    poke(dut.b, 0)
    expect(dut.out, 1)
}

Metode Rantai

Chisel mendukung rantai metode, memungkinkan definisi sirkuit perangkat keras yang kompleks secara ringkas dan mudah dibaca:

val result = (a + b).asUInt + c

Alat dan Runtime Pengembang

IDE dan Kompiler

Chisel dapat dikembangkan menggunakan IDE apa pun yang mendukung Scala, seperti IntelliJ IDEA dengan plugin Scala. Selain itu, sbt (Scala Build Tool) biasanya digunakan untuk mengelola proyek dan ketergantungan, serta untuk mengompilasi proyek Chisel menjadi kode Verilog.

Membangun Proyek

Untuk membuat proyek Chisel, Anda dapat mengatur struktur proyek sbt standar. File build.sbt yang sederhana mungkin terlihat seperti ini:

name := "MyChiselProject"
version := "0.1"
scalaVersion := "2.12.10"

libraryDependencies += "edu.berkeley.cs" %% "chisel3" % "3.4.4"

Untuk membangun, Anda dapat menjalankan sbt run dari baris perintah dan file Verilog keluaran akan dihasilkan di direktori target.

Aplikasi

Chisel terutama digunakan dalam desain dan verifikasi perangkat keras digital. Ini menemukan aplikasi di bidang seperti:

Perbandingan dengan Bahasa Lain

Chisel berbeda dari HDL tradisional seperti Verilog dan VHDL dengan menawarkan fitur yang ditemukan dalam bahasa pemrograman tingkat tinggi, seperti pemrograman fungsional, keamanan tipe, dan abstraksi tingkat tinggi.

Dibandingkan dengan bahasa lain:

Tips Terjemahan Sumber ke Sumber

Untuk menerjemahkan Chisel ke bahasa deskripsi perangkat keras lainnya, alat seperti kompiler Chisel dapat menghasilkan Verilog langsung dari kode sumber Chisel. Saat ini tidak ada alat terjemahan sumber ke sumber yang dikenal luas yang mengonversi Chisel langsung ke HDL lain, tetapi Verilog yang dihasilkan dapat disesuaikan secara manual jika diperlukan.

Alat Sumber ke Sumber yang Ada

Saat ini, alat yang paling dikenal adalah rangkaian alat Chisel itu sendiri, yang memungkinkan pengguna untuk mengompilasi desain Chisel menjadi kode Verilog yang dapat disintesis. Ada juga upaya untuk mengintegrasikan Chisel dengan kerangka perangkat keras lainnya melalui berbagai pustaka dan alat, mendorong kolaborasi dan interoperabilitas di antara berbagai metodologi desain perangkat keras.