Reference. Modular Hardware Design with Timeline Types
Modular design is a key challenge for enabling large-scale reuse of hardware modules. Unlike software, however, hardware designs correspond to physical circuits and inherit constraints from them. Timing constraints—which cycle a signal arrives, when an input is read—and structural constraints—how often a multiplier accepts new inputs—are fundamental to hardware interfaces. Existing hardware design languages do not provide a way to encode these constraints; a user must read documentation, build scripts, or in the worst case, a module’s implementation to understand how to use it. We present Filament, a language for modular hardware design that supports the specification and enforcement of timing and structural constraints for statically scheduled pipelines. Filament uses timeline types, which describe the intervals of clock-cycle time when a given signal is available or required. Filament enables safe composition of hardware modules, ensures that the resulting designs are correctly pipelined, and predictably lowers them to efficient hardware.
Cite
Cited by (2)
Parameterized Hardware Design with Latency-Abstract Interfaces nigam-2026-parameterized
Unifying Static and Dynamic Intermediate Languages for Accelerator Generators kim-2024-unifying
Compilers for accelerator design languages (ADLs) translate high-level languages into application-specific hardware. ADL compilers rely on a hardware control interface to compose hardware units. There are two choices: static control, which relies on cycle-level timing; or dynamic control, which uses explicit signalling to avoid depending on timing details. Static control is efficient but brittle; dynamic control incurs hardware costs to support compositional reasoning. Piezo is an ADL compiler that unifies static and dynamic control in a single intermediate language (IL). Its key insight is that the IL’s static fragment is a refinement of its dynamic fragment: static code admits a subset of the run-time behaviors of the dynamic equivalent. Piezo can optimize code by combining facts from static and dynamic submodules, and it opportunistically converts code from dynamic to static control styles. We implement Piezo as an extension to an existing dynamic ADL compiler, Calyx. We use Piezo to implement a frontend for an existing ADL, a systolic array generator, and a packet-scheduling hardware generator to demonstrate its optimizations and the static–dynamic interactions it enables.
Cites 54 works (3 here)
With notes (3)
A compiler infrastructure for accelerator generators nigam-2021-a
Predictable accelerator design with time-sensitive affine types nigam-2020-predictable
Separation logic: A logic for shared mutable data structures reynolds_separation_2002
In joint work with Peter O’Hearn and others, based on early ideas of Burstall, we have developed an extension of Hoare logic that permits reasoning about low-level imperative programs that use shared mutable data structure. The simple imperative programming language is extended with commands (not expressions) for accessing and modifying shared structures, and for explicit allocation and deallocation of storage. Assertions are extended by introducing a “separating conjunction” that asserts that its subformulas hold for disjoint parts of the heap, and a closely related “separating implication”. Coupled with the inductive definition of predicates on abstract data structures, this extension permits the concise and flexible description of structures with controlled sharing. In this paper, we survey the current development of this program logic, including extensions that permit unrestricted address arithmetic, dynamically allocated arrays, and recursive procedures. We also discuss promising future directions.
External (51)
- Cocotb: A coroutine based cosimulation library for writing VHDL and Verilog testbenches in Python (2023)
- Artifact for "Modular Hardware Design with Timeline Types" (2023)
- Modular Hardware Design with Timeline Types (2023)
- Spade: An Expression-Based HDL With Pipelines (2023)
- IP-XACT (IP-XACT Working Group / Accellera standard) (2023)
- Synopsys Design Constraints (Synopsys Inc., web page) (2023)
- Xilinx LogiCORE IP Multiplier v11.2 (AMD Inc., web documentation) (2022)
- Jasper Gold FPV App (Cadence Inc., web page) (2022)
- HardCaml: Register Transfer Level Hardware Design in OCaml (Jane Street, GitHub) (2022)
- PipelineC (Julian Kemmerer, GitHub) (2022)
- Wire sorts: a language abstraction for safe hardware composition (2021)
- HIR: An MLIR-based Intermediate Representation for Hardware Accelerator Description (2021)
- Reticle: a virtual machine for programming modern FPGAs (2021)
- Formal verification of high-level synthesis (2021)
- The essence of Bluespec: a core language for rule-based hardware design (2020)
- Type-directed scheduling of streaming accelerators (2020)
- A Typing Discipline for Hardware Interfaces (2019)
- PolySA: Polyhedral-based systolic array auto-compilation (2018)
- Parallel complexity analysis with temporal session types (2018)
- Spatial: a language and compiler for application accelerators (2018)
- CoSA: Integrated Verification for Agile Hardware Design (2018)
- Vivado Design Suite User Guide: High-Level Synthesis (2017)
- Kami: a platform for high-level parametric hardware specification and its modular verification (2017)
- A pythonic approach for rapid hardware prototyping and instrumentation (2017)
- Programming Heterogeneous Systems from an Image Processing DSL (2017)
- Rigel: Flexible multi-rate image processing hardware (2016)
- Darkroom: Compiling high-level image processing code into hardware pipelines (2014)
- PyMTL: A Unified Framework for Vertically Integrated Computer Architecture Research (2014)
- Quantifying the cost and benefit of latency insensitive communication on FPGAs (2014)
- Pi-Ware: An Embedded Hardware Description Language using Dependent Types (Master's thesis, J.P. Pizani Flor) (2014)
- Bambu: A modular framework for the high level synthesis of memory-intensive applications (2013)
- Halide: A language and compiler for optimizing parallelism, locality, and recomputation in image processing pipelines (2013)
- Chisel: constructing hardware in a Scala embedded language (2012)
- LegUp: High-level synthesis for FPGA-based processor/accelerator systems (2011)
- CλaSH: Structural Descriptions of Synchronous Hardware Using Haskell (2010)
- Function Interface Models for Hardware Compilation: Types, Signatures, Protocols (2009)
- Synchronous functional programming: The Lucid Synchrone experiment (2008)
- AutoPilot: A Platform-Based ESL Synthesis System (2008)
- Validating High-Level Synthesis (2008)
- An efficient and versatile scheduling algorithm based on SDC formulation (2006)
- A practical guide for SystemVerilog assertions (2005)
- A Semantics for Concurrent Separation Logic (2004)
- Bluespec System Verilog: efficient, correct RTL from high-level specifications (2004)
- StreamIt: A Language for Streaming Applications (2002)
- From system F to typed assembly language (1999)
- Lava: hardware design in Haskell (1998)
- Model checking (1997)
- A hardware implementation of pure ESTEREL (1992)
- The ESTEREL language (1991)
- The synchronous data flow programming language LUSTRE (1991)
- Why systolic architectures? (1982)