Programlama Dili Chisel

Chisel Dili

Chisel'in Genel Görünümü

Chisel (Scala Gömülü Dili ile Donanım İnşası), donanım tasarımını ve doğrulamasını kolaylaştıran bir donanım inşa dilidir. Scala programlama dilinin üzerine inşa edilmiştir ve tasarımcıların karmaşık donanım tasarımları ve test tezgahları oluşturmasını kolaylaştırmak için ifade gücünden ve fonksiyonel programlama yeteneklerinden yararlanır. Chisel, esas olarak dijital devrelerin geliştirilmesinde, özellikle FPGA ve ASIC tasarımı alanında kullanılmaktadır.

Tarihsel Boyutlar

Oluşum ve Erken Gelişim

Chisel, Kaliforniya Üniversitesi, Berkeley'de, Berkeley Mimarlık Araştırma grubunun himayesinde bir araştırma projesi olarak geliştirilmiştir. Oluşumundaki motivasyon, geleneksel Donanım Tanım Dilleri (HDL'ler) olan Verilog veya VHDL gibi dillerle karşılaştırıldığında donanım tasarımında daha üretken ve verimli bir yöntem sunmaktı. Donanım tasarımını yüksek seviyeli bir programlama dilinin içine yerleştirerek, Chisel daha iyi soyutlama, daha yüksek seviyeli yapılar ve kod yeniden kullanımını hedeflemiştir.

Evrim ve Mevcut Durum

Başlangıcından bu yana, Chisel akademik ve endüstriyel ortamlarda popülerlik kazanmıştır. Dil, birçok geliştiricinin katkılarıyla evrim geçirmiş ve özellikleri, kütüphaneleri ve kullanılabilirliği konusunda iyileştirmeler sağlanmıştır. Scala ile entegrasyonu, tasarımcıların fonksiyonel programlama, tür güvenliği ve gelişmiş koleksiyon kütüphaneleri gibi güçlü özelliklerden yararlanmalarını sağlamıştır. Chisel, artık akademik araştırmalardan ticari ürünlere kadar modern donanım geliştirme projelerinde yaygın olarak kullanılmaktadır.

Diğer Diller ve Platformlarla İlişki

Chisel, Verilog ve VHDL gibi HDL'lerden ilham almakta ve bu dillerin temel kavramlarını alarak Scala'dan programlama paradigmaları ile geliştirmektedir. Ayrıca, benzer şekilde üretkenlik ve ifade gücüne odaklanan SpinalHDL gibi diğer donanım inşa çerçeveleriyle de yakından ilişkilidir. Chisel tasarımları Verilog'a dönüştürülebilir, bu da mevcut sentez araçları ve iş akışlarının kullanılmasını sağlar.

Söz Dizimi Özellikleri

Gömülü DSL

Chisel, donanım tasarımcılarının donanım tanımı için Scala'nın sözdizimini kullanmalarını sağlayan gömülü bir Alan-Spesifik Dil (DSL) sunar. Örneğin, basit bir 2-girişli çoklayıcı tanımlamak şöyle ifade edilebilir:

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)
}

Türler ve Bit Genişlikleri

Chisel, çeşitli türleri destekler ve tasarımcıların bit genişliklerini açıkça belirtmelerine olanak tanır, bu da donanım kaynaklarının kullanımını daha iyi kontrol etmeyi sağlar. Örneğin:

val myWire = Wire(UInt(8.W)) // 8-bit işaretsiz tam sayı

Donanım Bileşenleri Soyutlaması

Dil, yaygın donanım bileşenleri için soyutlamalar sunar. Örneğin, basit bir kayıt oluşturmak için:

val reg = RegInit(0.U(8.W)) // 0 ile başlatılmış 8-bit kayıt

Parametreli Modüller

Chisel, farklı yapılandırmalarla yeniden kullanılabilir tasarımlar oluşturmayı sağlayan parametreli modüllerin oluşturulmasına olanak tanır:

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
}

Koşullu İfadeler

Chisel, karmaşık donanım mantığını kolaylaştırmak için koşullu ifadeleri destekler:

val result = Mux(condition, trueValue, falseValue) // Çoklayıcı

Donanım Üreticileri

Modüler donanım bileşenlerini oluşturmak için yüksek dereceli fonksiyonlar kullanarak donanım yapılandırmaları oluşturun:

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
}

Koleksiyon Araçları

Chisel, donanım elemanlarını etkili bir şekilde manipüle etmek için Scala koleksiyon araçlarının kullanılmasına olanak tanır:

val wires = VecInit(Seq.fill(4)(Wire(UInt(8.W)))) // 4 telden oluşan bir vektör oluştur

Sıralı Mantık

Sıralı mantık, Chisel'in özel yapıları kullanılarak kolayca ifade edilir, örneğin kayıtlar:

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

Yerleşik Test Çerçevesi

Chisel, geliştiricilerin donanım tasarımları için doğal bir şekilde test yazmalarını sağlayan ScalaTest ile entegre olur:

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

Metot Zincirleme

Chisel, karmaşık donanım devrelerinin tanımlarını kısa ve okunabilir hale getiren metot zincirlemeyi destekler:

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

Geliştirici Araçları ve Çalışma Zamanları

IDE'ler ve Derleyici

Chisel, Scala'yı destekleyen herhangi bir IDE kullanılarak geliştirilebilir; örneğin, Scala eklentisi ile IntelliJ IDEA. Ayrıca, projeleri ve bağımlılıkları yönetmek, Chisel projelerini Verilog koduna derlemek için genellikle sbt (Scala Build Tool) kullanılır.

Bir Proje Oluşturma

Bir Chisel projesi oluşturmak için standart bir sbt proje yapısı kurabilirsiniz. Basit bir build.sbt dosyası şöyle görünebilir:

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

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

Derlemek için, komut satırından sbt run komutunu çalıştırırsınız ve çıktı Verilog dosyaları hedef dizinde oluşturulacaktır.

Uygulamalar

Chisel, esas olarak dijital donanım tasarımı ve doğrulamasında kullanılmaktadır. Aşağıdaki alanlarda uygulama bulur:

Diğer Dillerle Karşılaştırma

Chisel, fonksiyonel programlama, tür güvenliği ve daha yüksek seviyeli soyutlamalar gibi yüksek seviyeli programlama dillerinde bulunan özellikler sunarak geleneksel HDL'lerden, örneğin Verilog ve VHDL'den ayrılır.

Diğer dillerle karşılaştırıldığında:

Kaynak-Kaynağa Çeviri İpuçları

Chisel'i diğer donanım tanım dillerine çevirmek için, Chisel derleyicisi gibi araçlar doğrudan Chisel kaynak kodundan Verilog üretebilir. Chisel'i doğrudan başka bir HDL'ye çeviren yaygın olarak bilinen kaynak-kaynağa çeviri araçları yoktur, ancak üretilen Verilog gerektiğinde manuel olarak uyarlanabilir.

Mevcut Kaynak-Kaynağa Araçlar

Şu anda, en tanınmış araç, kullanıcıların Chisel tasarımlarını sentezlenebilir Verilog koduna derlemelerine olanak tanıyan Chisel araç zincirinin kendisidir. Ayrıca, çeşitli kütüphaneler ve araçlar aracılığıyla Chisel'in diğer donanım çerçeveleriyle entegrasyonu için çabalar bulunmaktadır ve bu da farklı donanım tasarım metodolojileri arasında iş birliği ve birlikte çalışabilirliği teşvik etmektedir.