Skip to main content

A pure-Python parser for Verilog cell library files used in EDA automation workflows

Project description

verilog-parser

A pure-Python parser for Verilog cell-library (.v) files — used in EDA flows to describe the pins and port directions of standard cells.

CI Python License: MIT

Related article

Building a Python Verilog Cell Library Parser for EDA Automation — A walkthrough of the design decisions and real-world use cases behind this library.

Features

  • Parses `celldefine / `endcelldefine blocks with module, input, output, and inout declarations
  • Supports mixed and non-mixed mode variants via `ifdef MIXEDMODE
  • Zero required dependencies — only the Python standard library
  • Optional colored warnings via termcolor
  • CLI included: verilog-parser cells.v --cell INV_X1

Installation

pip install eda-verilog-parser                  # no extra dependencies
pip install "eda-verilog-parser[color]"         # adds termcolor for colored warnings

Or for development:

git clone https://github.com/rohaansch/verilog-parser
cd verilog-parser
pip install -e ".[dev]"

Quick start

from verilog_parser import VerilogParser

parser = VerilogParser()
verilog = parser.read("cells.v")

print(repr(verilog))
# Verilog(cells=4, files=1)

print(verilog.get_pins("INV_X1"))
# ['A', 'ZN']

print(verilog.get_pin_directions("INV_X1"))
# {'input': ['A'], 'output': ['ZN'], 'inout': []}

print(verilog.get_pin_directions("INV_X1", mode="mixed"))
# {'input': ['A'], 'output': [], 'inout': ['ZN']}

Supported Verilog structure

The parser recognises cells defined with `celldefine / `endcelldefine and `ifdef MIXEDMODE / `else / `endif sections:

`celldefine
`ifdef MIXEDMODE
module INV_X1 (A, ZN);
  input A;
  inout ZN;
`else
module INV_X1 (A, ZN);
  input A;
  output ZN;
`endif
`endcelldefine

Modes

Mode When used
"non-mixed" (default) Digital-only simulation; outputs declared as output
"mixed" Mixed-signal simulation; outputs declared as inout

API reference

VerilogParser(path=None)

Create a parser. path sets the default file used by read().

VerilogParser.read(path=None) → Verilog

Argument Type Description
path str .v file path. Falls back to the constructor path.

Raises ValueError / FileNotFoundError / IOError on bad input.

VerilogParser.reset()

Clear internal state to reuse the parser for a different file:

v_fast = parser.read("lib_fast.v")
parser.reset()
v_slow = parser.read("lib_slow.v")

Verilog object

Attribute Type Description
header str Leading comment block from the parsed file
cells dict[str, dict] Cell name → mode → pin data
files list[str] Absolute paths of files contributing to this object

Verilog.get_pins(cell_name, mode="non-mixed") → list[str]

Return the ordered list of all pins for the given cell and mode.

Verilog.get_pin_directions(cell_name, mode="non-mixed") → dict

Return a mapping of "input" / "output" / "inout" → pin list.

format_cell(cell) → str

Format a cell's mode data as a human-readable multi-line string:

from verilog_parser import format_cell
print(format_cell(verilog.cells["DFFS_X2"]))
# [mixed]
#     pins:   D, CK, SN, Q, QN
#     input:  D, CK, SN
#     inout:  Q, QN
# [non-mixed]
#     pins:   D, CK, SN, Q, QN
#     input:  D, CK, SN
#     output: Q, QN

Command-line usage

verilog-parser cells.v
verilog-parser cells.v --cell INV_X1
verilog-parser cells.v --cell INV_X1 --mode mixed
verilog-parser cells.v --header
verilog-parser --version

Or without installing:

python -m verilog_parser cells.v --cell INV_X1

Running the tests

pip install -e ".[dev]"
pytest -v

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

eda_verilog_parser-0.1.1.tar.gz (9.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

eda_verilog_parser-0.1.1-py3-none-any.whl (9.7 kB view details)

Uploaded Python 3

File details

Details for the file eda_verilog_parser-0.1.1.tar.gz.

File metadata

  • Download URL: eda_verilog_parser-0.1.1.tar.gz
  • Upload date:
  • Size: 9.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for eda_verilog_parser-0.1.1.tar.gz
Algorithm Hash digest
SHA256 fa782c50d2ec7c4a2c4ca108f9d646bde812eba3e8f7fb33fe09d130ba14b424
MD5 4f6f88dd9d1711472d764e4736a9fe74
BLAKE2b-256 18f9fe4a2018a45f7b222e12479eb2a33466dc9f66de41c6786e1152d158c47c

See more details on using hashes here.

File details

Details for the file eda_verilog_parser-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for eda_verilog_parser-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 7b1faa4eaf4bea323bde41041f810bdf8855676fbd40fd8b706d70f11d0d76c3
MD5 dad698e9bfb10c1e71d5622a7fa69c68
BLAKE2b-256 bb3e7828ca03b206e6ae9e8c3d81c48ff73191acc95e421edb84cc39f402f743

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page