SpinalHDL ist eine quelloffene, in Scala eingebettete Hardwarebeschreibungssprache von Charles Papon (Projektstart um 2015). Anders als die ereignisgetriebenen Klassiker VHDL und Verilog fokussiert SpinalHDL auf effiziente Hardware-Beschreibung: Konstrukte wie Clock Domains, Streams und State Machines sind fest eingebaut. Die Designs werden in synthetisierbares Verilog oder VHDL übersetzt und sind damit kompatibel zu gängigen EDA-Tools.

Grundlagen

Ein Design besteht aus einer Klasse, die von Component erbt. Mit SpinalVerilog wird daraus Verilog erzeugt:

import spinal.core._

case class Zaehler(max: Int) extends Component {
  val io = new Bundle {
    val enable = in Bool()
    val wert   = out UInt(8 bits)
  }

  val reg = Reg(UInt(8 bits)) init (0)
  when(io.enable) {
    reg := reg + 1
    when(reg === max) { reg := 0 }
  }
  io.wert := reg
}

object Main extends App {
  SpinalVerilog(Zaehler(255))
}

Wichtige Konstrukte

  • Component, Bundle, in/out – Modul- und Portdefinition
  • Reg, RegNext, RegInit – Register mit Initialwert und Taktverzögerung
  • ClockDomain – getrennte Takt-/Reset-Domänen; when/switch – Bedingungen und Zustandsautomaten
  • Stream, Flow – Handshake-basierte Verbindungen (valid/ready) für Pipelines und Busse
  • SpinalVerilog, SpinalVhdl – Codegeneratoren

Einsatz

Das bekannteste SpinalHDL-Projekt ist VexRiscv, ein parametrisierbarer 32-Bit-RISC-V-Prozessor. Weil die Beschreibungssprache auf Scala aufbaut, lassen sich Busse (z. B. AXI) als wiederverwendbare Abstraktionen definieren und in einer Zeile instanziieren. Damit steht SpinalHDL in direkter Konkurrenz zu Chisel, der zweiten großen Scala-basierten Hardware-Konstruktionssprache.

Verwandte Grundlagen: Scala-Befehle, Verilog-Befehle, Chisel-Befehle, SystemC-Befehle (System-Level-Modellierung).