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ögerung
  • Wire – kombinatorische Verbindung; Mux(cond, a, b) – Auswahl
  • Bundle, Vec – strukturierte Bündel und Felder; when/elsewhen/otherwise – Bedingungen
  • Bool(), UInt, SInt, FixedPoint – Datentypen mit fester Bitbreite
  • Module, 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).