Chapter 1: Getting Started

Your first skalp entity — an 8-bit counter that introduces the entity/impl split, port declarations, signal types, sequential logic with on(clk.rise), and combinational assignment.

July 15, 2025 · 8 min · Giri

Chapter 2: State Machines — UART Transmitter

Build a complete UART transmitter with FSM states, baud rate timing, and shift register serialization. Covers state encoding, counter-based timing, bit-level data shifting, and forward references for combinational signals.

July 15, 2025 · 14 min · Giri

Chapter 5: Const Generics and Parameterization

Make your designs fully configurable with generic defaults, explicit instantiation, compile-time width computation, const expressions, and test vs. production parameterization – all applied to the running UART project.

July 15, 2025 · 15 min · Giri

Chapter 6: Structs and Hierarchical Composition

Group related signals into structs for cleaner interfaces, then compose entities hierarchically with let-binding to build the complete UART top-level module.

July 15, 2025 · 13 min · Giri

Chapter 7: Enums and Pattern Matching

Enum types with explicit bit encoding, match expressions that return values, exhaustiveness checking that catches missing cases at compile time — refactor FSM states and build a UART command parser.

July 15, 2025 · 15 min · Giri

Chapter 8: Clock Domain Crossing

Clock domain lifetimes, CDC compile-time safety, dual-clock entities, 2-flop synchronizers, Gray code pointers, and async FIFOs — make the UART dual-clock with compile-time guarantees against metastability bugs.

July 15, 2025 · 22 min · Giri

Chapter 9: Safety and Annotations

Add safety mechanisms and debug infrastructure to your designs with TMR voting, detection signals, retention hints, trace grouping, and simulation breakpoints – all zero-cost annotations that travel with your source code.

July 15, 2025 · 24 min · Giri

Chapter 10: Testing and Verification

Async Rust testbench API – Testbench::with_top_module(), tb.set(), tb.clock().await, tb.expect().await, tb.get_u64().await. Test organization, helper functions, multiple test cases, waveform generation, and a complete UART test suite.

July 15, 2025 · 17 min · Giri

skalp v0.2.0 Released

skalp v0.2.0 adds VHDL as a first-class input language — write VHDL, get the same synthesis pipeline, simulation, and verification that skalp programs get.

March 4, 2026 · 3 min · Giri

VHDL as a First-Class Frontend: Thirty Years of IP, Modern Tooling

skalp now accepts VHDL directly — including VHDL-2019 interfaces and views that no free tool supports. Your existing designs get CDC analysis, formal verification, gate-level simulation, and Rust async testbenches without rewriting a single line.

March 3, 2026 · 21 min · Giri