Chisel (Constructing Hardware In a Scala Embedded Language) ist eine Hardware-Konstruktionssprache, die als DSL in Scala eingebettet ist. Sie wurde ab 2012 an der UC Berkeley entwickelt (u. a. von Jonathan Bachrach) und wird heute von der Chips Alliance gepflegt. Chisel erzeugt aus Scala-Code synthesetaugliches Verilog – die Beschreibung bleibt parametrisierbar, weil sie die volle Ausdruckskraft von Scala nutzt.
Grundlagen
Ein Chisel-Modul ist eine Scala-Klasse, die von Module erbt. Ein- und Ausgänge werden mit IO und Bundle beschrieben, Register mit Reg, Kombinatorik mit Wire und Mux:
import chisel3._
class Zaehler(max: Int) extends Module {
val io = IO(new Bundle {
val enable = Input(Bool())
val wert = Output(UInt(8.W))
})
val reg = RegInit(0.U(8.W))
when(io.enable) {
reg := Mux(reg === max.U, 0.U, reg + 1.U)
}
io.wert := reg
}
Wichtige Konstrukte
Reg,RegInit,RegNext– Register mit optionalem Initialwert beziehungsweise TaktverzögerungWire– kombinatorische Verbindung;Mux(cond, a, b)– AuswahlBundle,Vec– strukturierte Bündel und Felder;when/elsewhen/otherwise– BedingungenBool(),UInt,SInt,FixedPoint– Datentypen mit fester BitbreiteModule,BlackBox– Modul- und Fremdsprachen-Anbindung
FIRRTL und Ökosystem
Chisel kompiliert zuerst nach FIRRTL (Flexible Intermediate Representation for RTL), einer Zwischenrepräsentation, die Optimierungen und die Verilog-Generierung ermöglicht. Das bekannteste Chisel-Projekt ist der Rocket Chip Generator, auf dem die RISC-V-Referenzprozessoren aufbauen. Auch SystemVerilog-Strukturen lassen sich über Chisel abstrahieren.
Verwandte Grundlagen: Scala-Befehle, Verilog-Befehle, SpinalHDL-Befehle (zweite Scala-basierte HDL), SystemC-Befehle (C++-basiertes System-Level-Modeling).