hgdb: Hardware Generator Debugger
This documentation describes the design philosophy and usages of hgdb.
What is hgdb?
hgdb is designed to be versatile and provides an abstraction to facilitate hardware debugging. It offers the following features:
- Breakpoints, including step-over and conditional breakpoint.
- Frame/context reconstruction with complex data types.
- Full reverse debugging in replay mode, and limited capability in interactive debugging.
- Set signal values in interactive debugging
- Symbol table and query. No RTL modification required.
- High-level synthesis (HLS) support.
hgdb is not:
- An actual debugger. Although the naming is a little misleading, hgdb offers a unified debugger interface.
See supported debuggers here.
Unless you want to debug with
curl
commands, it's highly recommended using a supported debugger. - A framework that helps you maintain symbol table in your hardware compiler. hgdb only offers means to create and query symbol table.
Supported simulators
The simulators listed below have been tested in regression tests. Theoretically hgdb can run on any Verilog/SystemVerilog specification compliant simulator.
- Cadence® Xcelium™
- Synopsys VCS®
- Mentor Questa®
- Verilator
- Icarus Verilog
Supported hardware generator frameworks
- Chisel/Firrtl, via hgdb-firrtl.
- CIRCT, native support. Current requires patch here.
- Kratos, native support.
- LegUp (HLS), experimental support, via hgdb-legup.
- Xilinx Vitis, via hgdb-vitis
- Hand-written Verilog/SystemVerilog, via hgdb-rtl.
Supported debuggers
- VSCode extension: hgdb-vscode
- Console: hgdb-debugger