Cheatsheet / Reference
TLDR of Hardcaml
Installation and Setup
Package Installation
opam install hardcaml ppx_hardcaml hardcaml_waveterm
opam install hardcaml_c hardcaml_verilator hardcaml_step_testbenchProject Structure
project/
βββ src/
β βββ interfaces.ml (* Interface definitions *)
β βββ components/ (* Reusable components *)
β βββ top.ml (* Top-level module *)
β βββ utils.ml (* Utility functions *)
βββ test/
β βββ unit_tests.ml (* Unit tests *)
β βββ integration_tests.ml
βββ bin/
βββ main.ml (* RTL Code Generation *)Core Concepts and Fundamentals
What is Hardcaml?
Key Design Principles
Graph-Based Representation
Signal Types and Operations
Primary Signal Type
Bits vs Signals
Basic Operations
Module Definitions and Interfaces
Interface Pattern (ppx_deriving_hardcaml)
Interface Attributes
Parameterized Modules with Functors
Combinational Logic Constructs
Adder Example
Tree Operations
Sequential Logic (Registers, Memories, State Machines)
Register Creation
Memory Primitives
State Machines with Always DSL
Simulation and Testing
Basic Simulation
Expect Test with Waveforms
High-Performance Simulation Backends
Synthesis and Compilation
RTL Generation
Circuit Creation
Common Patterns and Idioms
Pipeline Pattern
Counter Pattern
FIFO Pattern
Error Handling and Debugging
Width Validation
Assertion-based Debugging
Interactive Debugging
Performance Considerations
Memory Usage Optimization
Timing Optimization
Code Examples for Major Concepts
FIR Filter
Linear Feedback Shift Register (LFSR)
Quick Reference Syntax
Essential Operations
Register and Memory
Best Practices and Conventions
Code Organization
Type Safety
Testing Strategy
Naming Conventions
Advanced Features and Techniques
Hierarchical Design
Custom Types
Verification and Formal Methods
Ecosystem Libraries
Core Libraries
Simulation Libraries
Xilinx Libraries
Integration Libraries
Last updated