tool to extract constids.inc
This commit is contained in:
parent
1e60c0f6fb
commit
ef07eb080e
|
|
@ -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)
|
||||||
Loading…
Reference in New Issue