Surelog
System Verilog 2017 Pre-processor, Parser
Goal
This project aims at providing a complete System Verilog 2017 front-end: a preprocessor, a parser, an elaborator for both design and testbench.
Applications
Linter, Simulator, Synthesis tool, Formal tools can use this front-end. They either can be developed as plugins (linked with) or use this front-end as an intermediate step of their compilation flows using the on-disk serialized models.
Contributing to this project
This project is open to contributions from any users! From the commercial vendor to the Verilog enthousiast, all are welcome.
Features
- The preprocessor and the parser use Antlr 4.72 as a parser generator.
- The preprocessor and the parser ASTs are made persistent on disk using Google Flatbuffers, enabling incremental compilation.
- The tool is built thread safe and performs multithread parsing.
- Large files/modules/packages are splitted for multi-threading compilation.
- Surelog accepts IEEE Simulator-compliant project specification.
- Surelog issues Errors/Warning/Info/Notes about language compliance.
- Surelog allows for pre-compiled packages (UVM,...).
- A comprehensive Python API allows to:
- listen or visit the Parser grammar and create custom linting rules
- Visit the design data model and create custom linting rules
- Customize the message formats
- Waive messages
Build instructions and test:
make
make install (/usr/local/bin and /usr/local/lib/surelog by default, use DESTDIR= for alternative locations)
For more build/test options and system requirements for building see src/README
file.
Surelog commands
Python API
The file slformatmsg.py
illustrates how messages can be reformated.
- Place a modified version of this file either in the execution directory, or install directory /usr/local/lib/surelog/python
The file src/API/slSV3_1aPythonListener.py
illustrates how a listener can be created to listen to the Parser AST.
- Place a modified version of this file either in the execution directory, or install directory /usr/local/lib/surelog/python
A simple example of creating a new error message and generating errors can be found here: python_listener.py
A simple example for design-level data model exploration can be found here: myscriptPerDesign.py
The complete Python API is described in the following files: SLAPI.h
vobjecttypes
Waivers can be installed in slwaivers.py files in the execution directory or install directory /usr/local/lib/surelog/python
Creating your own executable using libsurelog.a
Similar projects:
- hdlConvertor - System Verilog and VHDL parser, preprocessor and code generator for Python/C++ written in C++
- cl-vhdl - lisp, Parser of VHDL into lisp-expressions
- HDL_ANTLR4 - C# projects that use ANTLR4 library to analyse VHDL and Verilog code
- hdlparse - vhdl/verilog parser in python
- ieee1800_2017 - Java, SystemVerilog preprocessor
- Pyverilog - python verilog toolkit
- pyVHDLParser - python vhdl parser with 2008 support
- rust_hdl - rust vhdl 2008 parser
- slang - Parser and compiler library for SystemVerilog.
- sv-parser - Rust, SystemVerilog parser library fully complient with IEEE 1800-2017
- systemc-clang - SystemC Parser using the Clang Front-end
- v2sc - vhdl to systemc
- veelox - Java+ANTLR, An experiment in SystemVerilog Preprocessing
- verilog-parser - A Flex/Bison Parser for the IEEE 1364-2001 Verilog Standard.
- vbpp - C, Verilog PreProcessor
- tree-sitter-verilog - JS, Verilog grammar for tree-sitter
- Verilog-Perl
- vpp.pl - verilog preprocessor with integrated Perl
- sv2v- Haskell, SystemVerilog to Verilog