Tclslang is a Tcl extension that provides a programmable interface for analyzing Verilog hardware modules using Slang as a backend. It allows Verilog parsing and structured introspection of modules, ports, cells, and drivers directly from Tcl scripts.
Developed by Ben Stahl
GitHub: github.com/benastahl/tclslang
-
Tcl (>= 8.1)
sudo yum group install "Development Tools"
sudo yum install cmake
git clone https://github.com/MikePopoloski/slang.git
cd slang
sudo yum install python3-pip
pip3 install conan
conan install . -b missing -o fmt/*:shared=True
cmake -B build -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON
cmake --build build -j$(nproc)
cd build
ctest --output-on-failure
cd .. (cd slang dir)
sudo cmake --install build --strip
cd .. (to main dir)
make clean
make build TCL_SCRIPT_PATH=./yerrr.tcl
- Parses Verilog files and builds a syntax tree
- Exposes structural elements as Tcl commands:
tree,module,port,cell,connection,driver
- Navigate HDL hierarchies using commands like:
get_module,get_ports,get_cells,get_driver
- Driver objects support types:
const,var, andnet - Dynamically registers commands based on parsed structure
set tree [slang_parse foo.sv]
set module [$tree get_module top]
set ports [$module get_ports]
set port [lindex $ports 0]
$port nameCreated by parsing Verilog files:
set tree [slang_parse file1.sv file2.sv ...]Methods:
$tree get_module <module_name>Created via $tree get_module.
Methods:
$module name
$module get_ports
$module get_cellsReturned by $module get_ports or $cell get_ports.
Methods:
$port name ;# Port name
$port type ;# Data type
$port direction ;# Input/output/inout
$port portType ;# e.g., "modport", "interface"
$port dimType ;# Dimension type info
$port dimensions ;# List of index pairs (e.g., {{3 0}})Returned by $module get_cells or $cell get_cells.
Methods:
$cell name
$cell get_ports
$cell get_connections
$cell get_cells ;# For hierarchical cellsReturned by $cell get_connections.
Methods:
$conn name ;# Port name being connected
$conn get_port ;# Returns a port object
$conn get_driver ;# Returns a driver objectReturned by $conn get_driver.
Use $driver type to determine subtype: const, var, or net.
$driver name ;# Identifier name (not for const)
$driver type ;# "const", "var", or "net"$driver const ;# Returns constant value (e.g., 1'b1)$driver data_type ;# Returns Verilog data type (e.g., logic [3:0])$driver data_type ;# Same as for var
$driver net_type ;# e.g., "wire", "tri"Dependencies:
- Slang Verilog Compiler
- Tcl (β₯ 8.1)
Build Instructions:
mkdir build && cd build
cmake ..
make
make installload ./libtclslang.so
package require tclslangMIT License. See LICENSE file for details.