Cement

Cycle-deterministic embedded HDL in Rust with event-based control synthesis

Cement is a hardware design framework comprising CmtHDL (an embedded HDL in Rust) and CmtC (a compiler with timing analysis and control synthesis). It enables productive FPGA programming while preserving cycle-deterministic behavior and timing awareness.

┌────────────────────────────────────────────────────────────┐
│                    Cement Framework                         │
├────────────────────────────────────────────────────────────┤
│                                                             │
│  CmtHDL (Rust)              CmtC Compiler                   │
│  ┌──────────────┐          ┌──────────────┐                │
│  │ RTL Layer    │          │  ir-rs       │                │
│  │ (ports,wires)│  ─────►  │  (SSA IR)    │                │
│  ├──────────────┤          ├──────────────┤                │
│  │ Event Layer  │          │  Timing      │                │
│  │ (occurrence) │  ─────►  │  Analysis    │                │
│  ├──────────────┤          ├──────────────┤                │
│  │ Ctrl Sub-lang│          │  Control     │                │
│  │ seq/par/if/  │  ─────►  │  Synthesis   │  ──► Verilog   │
│  │ for/while    │          │  (State Tree)│                │
│  └──────────────┘          └──────────────┘                │
└────────────────────────────────────────────────────────────┘

The FPGA Programming Gap

Approach Microarch Express. Cycle Determinism Timing Awareness
Chisel/eHDLs general no no
Bluespec general no no
HLS (Vitis) limited by directives no yes
DSLs limited partial yes
Cement general yes yes

Existing approaches force tradeoffs: HDLs lack timing awareness, HLS lacks determinism, DSLs limit expressiveness. Cement achieves all three.

Event-Based Extension

CmtHDL extends standard RTL with two key innovations:

Event Layer - Events guard hardware behavior with timing information:

let receive = event! {
    resend.i %= arbiter.resend;  // connection
    sel_reg.wr %= arbiter.sel;   // operation
};

Ctrl Sub-Language - Procedural statements specify deterministic timing:

let pipeline = stmt! {
    seq { send; wait; receive; xbar; }  // 4 stages, sequential
};
synth!(pipeline, Pipeline::new(clk, go, /*II=*/1));

Six statement types: step, seq, par, if, for, while - each with deterministic latency rules.

CmtC Compiler

  • ir-rs: Pure-Rust IR framework inspired by MLIR, with SSA operations
  • Timing Analysis: Static analysis detects violations at elaboration; dynamic monitoring catches data-dependent issues in simulation
  • Control Synthesis: State tree representation optimizes FSM encoding (balancing LUT vs FF usage)

Results

On PolyBench benchmarks vs Vitis HLS and Dahlia-Calyx:

  • 1.41×-3.49× speedup with cycle-deterministic scheduling
  • 23%-82% resource savings from optimized control synthesis
  • Comparable LoC to HLS (0.97× geomean)

Case study on systolic arrays: 51% LUT savings, 13% throughput improvement vs prior work, with 2 person-months development (vs 6 for Chisel-based EMS).

Related Publications

2025

  1. Preprint
    Cement2: Temporal Hardware Transactions for High-Level and Efficient FPGA Programming
    Youwei Xiao, Zizhang Luo, Weijie Peng, and 2 more authors
    2025

2025

  1. LATTE
    cmt2: Rule-Based Hardware Description in Rust with Temporal Semantics
    Youwei Xiao, Zizhang Luo, and Yun Liang
    In 5th Workshop on Languages, Tools, and Techniques for Accelerator Design (LATTE’25), 2025

2024

  1. FPGA
    Cement: Streamlining FPGA Hardware Design with Cycle-Deterministic eHDL and Synthesis
    Youwei Xiao, Zizhang Luo, Kexing Zhou, and 1 more author
    In Proceedings of the 2024 ACM/SIGDA International Symposium on Field Programmable Gate Arrays (FPGA ’24), 2024