tool to extract constids.inc

This commit is contained in:
Miodrag Milanovic 2025-02-05 13:34:07 +01:00
parent 1e60c0f6fb
commit ef07eb080e
1 changed files with 65 additions and 0 deletions

65
tools/extract_constids.py Normal file
View File

@ -0,0 +1,65 @@
import argparse
import sys
import os
import die
consts = set()
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('-yosys', dest='yosys', type=str,
help="Yosys share directory", default="/usr/local/share/yosys")
parser.add_argument('-o', '--outfile', dest='outfile', type=argparse.FileType('w'),
help="output HTML file")
def export_name(name,fout):
if name not in consts:
print(f"X({name})", file=fout)
consts.add(name)
else:
print(f"//X({name})", file=fout)
def parse_line(item,fout):
line = item.strip().split(" ")
if line[0] == "module":
name = line[1].split("(")[0]
print(f"// primitive {name}", file=fout)
export_name(name, fout)
elif line[0] == "parameter":
name = line[1]
if name.startswith("["):
name = line[2]
export_name(name, fout)
elif line[0] in ["input", "output" ,"inout"]:
items = " ".join(line[1:]).strip().split(",")
for it in items:
name = it.split(" ")[-1].strip()
if len(name)>0:
export_name(name, fout)
elif line[0].startswith("endmodule"):
print(file=fout)
def main(argv):
args = parser.parse_args(argv[1:])
fout = args.outfile
print("// autogenerated items", file=fout)
with open(os.path.join(args.yosys, "gatemate", "cells_sim.v"), "r") as f:
for item in f:
parse_line(item,fout)
with open(os.path.join(args.yosys, "gatemate", "cells_bb.v"), "r") as f:
for item in f:
parse_line(item,fout)
for name,v in die.PRIMITIVES_PINS.items():
print(f"// hardware primitive {name}", file=fout)
export_name(name, fout)
print(f"// {name} pins", file=fout)
for pin in v:
export_name(pin.name, fout)
print(file=fout)
print("// end of autogenerated items", file=fout)
print(file=fout)
if __name__ == "__main__":
main(sys.argv)