CIRCT — the Comprehensive IR Compiler for Hardware — is an open-source compiler infrastructure for hardware design. Built on MLIR, it provides a modular, extensible framework for representing and transforming hardware descriptions at multiple levels of abstraction.

A Hub-and-Spoke Architecture

At the core of CIRCT is a set of intermediate representations (IRs) organized as dialects. Each dialect captures a specific level of hardware abstraction — from high-level RTL constructs down to primitive gates. This hub-and-spoke model allows frontends (like the RHDL Ruby DSL) and backends (like Verilog export or simulation) to connect through a shared, well-defined IR.

Why CIRCT Matters

Traditional hardware design tools operate as monolithic black boxes. CIRCT takes a different approach — a composable compiler infrastructure where each transformation is an explicit, testable pass. This brings software engineering best practices to hardware design:

  • Reproducible builds — deterministic compilation from source to netlist
  • Incremental compilation — only reprocess what changed
  • Extensibility — add new frontends, backends, or optimization passes without modifying the core
  • Interoperability — mix and match tools across the ecosystem

Key Dialects

DialectPurpose
HWCore hardware types — modules, ports, wires
CombCombinational operations — arithmetic, logic, muxes
SeqSequential elements — registers, clock domains
SVSystemVerilog constructs for export
FIRRTLChisel/FIRRTL compatibility
ArcSimulation-oriented representation

Getting Started

If you are new to CIRCT, start with the Installation guide to set up your environment, then explore the Ruby DSL Fundamentals to write your first hardware description.