Chisel (hardware language)
By UC Berkeley (originally), now a broader open-source community
Chisel is a hardware description language embedded in Scala that lets engineers describe digital circuits using object-oriented and functional programming constructs, then generate synthesizable Verilog for fabrication or FPGA deployment.…
Definition
Chisel is a hardware description language embedded in Scala that lets engineers describe digital circuits using object-oriented and functional programming constructs, then generate synthesizable Verilog for fabrication or FPGA deployment. Rather than inventing a new syntax from scratch, Chisel builds circuit-design abstractions as a library on top of Scala, so designers can use ordinary Scala features like classes, type parameters, and higher-order functions to build reusable, parameterizable hardware generators.
Overview
Traditional hardware description languages like Verilog and VHDL were designed decades ago around a text-based register-transfer-level style that makes it verbose to express reusable, highly parameterized designs. Chisel emerged from research at UC Berkeley aiming to bring modern software engineering abstractions into hardware design, on the theory that a general-purpose host language with strong typing and metaprogramming could describe hardware generators more concisely than a dedicated HDL syntax, and it grew alongside processor projects that needed to explore many design variants quickly. Mechanically, a Chisel program is a Scala program that, when executed, builds an internal graph representing wires, registers, and combinational logic, which the Chisel compiler then elaborates into a lower-level intermediate representation called FIRRTL before finally emitting synthesizable Verilog. Because circuit descriptions are just Scala objects being constructed, designers can use loops, conditionals, and functions to generate hardware structures programmatically—for example, writing a single generator that produces an N-stage pipeline for any N passed as a parameter, rather than hand-writing separate Verilog for each pipeline depth. The FIRRTL intermediate layer also lets other tools perform circuit transformations without needing to understand Scala at all. Within the hardware design language landscape, Chisel sits alongside Verilog and VHDL but at a higher level of abstraction: those languages are the direct targets that synthesis and place-and-route tools consume, while Chisel is a generator language that produces Verilog as an output rather than replacing the toolchain built around it. This makes Chisel complementary to, rather than a replacement for, existing EDA tools from vendors like Synopsys and Cadence, which still operate on the Verilog Chisel emits, meaning a design team's downstream synthesis and verification flow does not need to change to adopt Chisel upstream. In practice, Chisel has been used most prominently in academic and open-source processor design projects, including RISC-V core implementations, where its parameterization features make it easier to generate families of related processor configurations from one codebase rather than maintaining separate hand-written implementations for each variant. Some organizations have also used it internally to generate configurable IP blocks that need to be retargeted across multiple chip projects. Adoption outside of research and open hardware communities has been more limited than mainstream Verilog and VHDL, partly because most commercial EDA tooling, verification methodology, and hardware engineer training remains centered on those established languages, so teams adopting Chisel often still need Verilog expertise to work with the generated output and integrate it into existing sign-off flows.
Key Features
- Embedded as a library within the Scala programming language
- Generates synthesizable Verilog through an intermediate FIRRTL representation
- Supports functional and object-oriented abstractions for reusable hardware generators
- Enables parameterized designs like configurable-width pipelines from one codebase
- Open-source and originated from academic hardware research
- Complements rather than replaces existing Verilog-based EDA toolchains
- Popular in open-source RISC-V processor design projects
- Requires Scala familiarity in addition to hardware design knowledge
Use Cases
Alternatives
Frequently Asked Questions
From the Blog
What Is a MAC Address? The Hardware ID Behind Every Device
A MAC address is a unique hardware identifier burned into every network interface, used to deliver data to the right device on a local network. This guide explains its format, purpose, and how it differs from an IP address.
Read More AI & TechnologySmall Language Models: When Smaller Is Better
Small language models run fast, cheap, and private on modest hardware. Learn when smaller beats bigger and how to choose the right model for your task.
Read More ProgrammingC Programming: What It Is and Why It Still Matters
C is a low-level, compiled programming language that gives direct control over memory and hardware, and it still underpins operating systems, embedded devices, and most language runtimes. Here's what it is, how it works, and how to start.
Read More ProgrammingWhat Is an Operating System? Core Concepts Explained
An operating system is the software layer that manages a computer's hardware and runs other programs on top of it, handling memory, processes, and files so applications don't have to. Here's how it works and why every device needs one.
Read More