-
Notifications
You must be signed in to change notification settings - Fork 95
Home
This wiki is currently undergoing a major overhaul (as of August 2026). Pages are being rewritten, restructured, and moved, so expect inconsistencies: some pages are already up to date while others are outdated, incomplete, or missing entirely. Content may change or relocate without notice.
Where the wiki and the C++ or Python API documentation disagree, trust the API documentation — it is generated from the source.
If something is wrong, unclear, or missing, please open an issue. Pointers to the parts that gave you trouble are genuinely useful while we work through this.
-
Introduction to HAL - The idea of HAL and an overview of its core components.
- Building HAL - How to build HAL on your own machine.
- Starting HAL - How to start HAL with or without its GUI.
- Using HAL - First steps in HAL.
-
Example Projects - A description of the example projects shipped with HAL.
- FSM - A stand-alone finite state machine, and the smallest example netlist.
- Simple ALU - An 8-bit ALU that introduces Boolean function analysis and SMT solving.
- Toy Cipher - A small block cipher that introduces dataflow analysis and simulation.
- UART - A realistic protocol core to practice on without a guided script.
- Crypto Trojan - A case study on locating a hardware Trojan in an AES netlist.
- HAL in Academia - Applications of HAL in academia.
-
Core - The part of HAL that provides its underlying functionality.
-
Netlist - Represents the connectivity of an electronic circuit.
- Data Container - A general structure to hold arbitrary data.
- Gate - Represents the functional or sequential building blocks of a netlist.
- Net - Serves as a connection between gates within the netlist.
- Module - Represents a functional unit of gates fulfilling a dedicated purpose.
- Grouping - Provides an easy way to group gates, nets, and modules.
- Endpoint - The point where a net connects to a gate.
-
Gate Library - Holds all available gate types of a specific standard cell library.
- Gate Type - Specifies details of the underlying type of a gate.
- Boolean Function - Specifies the Boolean function of a gate (type).
- Decorators - Higher-level operations wrapping a netlist, net, or Boolean function.
- Netlist Utilities - A set of utility functions operating on the netlist providing diverse functionality.
-
Netlist - Represents the connectivity of an electronic circuit.
-
GUI - An in-depth description of the HAL GUI and its functionalities.
- General Concepts - Some of the concepts that are important to understand when dealing with the GUI.
- Widgets - Details regarding each of the GUI's widgets.
- Graph View - Displays the netlist and substructures as a visual graph.
- Modules Widget - An overview about the netlist's module hierarchy.
- Views Widget - Shows and manages all existing views.
- Groupings Widget - Shows and manages all existing groupings.
- Selection Details Widget - Presents detailed information on all items of the current selection.
- Log Widget - Provides a live view of the HAL log.
- Python Editor Widget - A lightweight tool for developing HAL python scripts.
- Python Console Widget - Fast and easy access to the HAL Python API.
- Python GUI API - Interact with GUI selections via python.
- Python Thread - Running Python interpreter in background thread.
- Settings - Settings for the HAL GUI.
- Plugin Management - Manage plugins from GUI.
-
Provided Plugins - The set of plugins that come with the off-the-shelf variant of HAL.
- Gate Library Files - The gate libraries supported by HAL by default.
- Python Shell - Use the HAL Python API from the command line, without the GUI.
- Netlist Preprocessing (WIP)
- Graph Algorithms - An interface to igraph that enables running graph algorithms on a netlist.
- Dataflow Analysis - DANA tool to automatically analyze the flow of data through the netlist.
- Module Identification - Automatically identify word-level operations such as additions, counters, and comparisons.
- HAWKEYE - A tool to automatically locate symmetric cryptographic primitives within a gate-level netlist.
- Bitorder Propagation - Recover the bit order of module pin groups by propagating known orderings.
- Logic Evaluator - A tool to evaluate the behavior of (sub-)networks comprising only combinatorical logic.
- Netlist Simulator and Waveform Viewer - A simulation framework with integrated viewer for waveform analysis.
- Solve FSM - Extract the state transition graph of a finite state machine.
- Boolean Influence - Measure how much each input actually affects the output of a function.
- Resynthesis - Rewrite parts of the netlist onto a reduced, uniform gate set.
- Z3 Utilities - SMT solving and formal equivalence checking via Z3.
- Sequential Symbolic Execution - Symbolic execution spanning multiple clock cycles.
- Xilinx Toolbox - Functions specific to Xilinx FPGA netlists.
- Dot Viewer - Interactive display of Graphviz .dot files produced by other plugins.
- Netlist Parsers & Writers - Reading and writing netlist files such as Verilog and VHDL.
- Gate Library Parsers & Writers - Reading and writing gate library files in liberty and HGL format.
-
- Creating an Empty Plugin
- Adding Functionality to a Plugin (WIP)
- Creating Python Bindings for a Plugin (WIP)
- outdated:
- Standard Plugin (outdated)
- Netlist Parser (TODO)
- Netlist Writer (TODO)
- Gate Library Parser (TODO)
- Gate Library Writer (TODO)
- Gate Library - Create a gate library file that can be read by HAL.
-
Contributing (WIP)