Quick Start
This page shows the shape of a typical najaeda.netlist script.
Load a design
from najaeda import netlist
netlist.reset()
netlist.load_liberty(["NangateOpenCellLibrary_typical.lib"])
top = netlist.load_verilog("counter.v")
print(top.get_name())
Browse hierarchy
for child in top.get_child_instances():
print(child.get_name(), child.get_model_name())
for leaf in top.get_leaf_instances():
print("leaf", leaf.get_name(), leaf.get_model_name())
Inspect ports and nets
for term in top.get_terms():
print(term.get_name(), term.get_direction(), term.get_width())
clk = top.get_term("clk")
print(clk.get_net())
Follow flat connectivity
Use an equipotential when you want connectivity across hierarchy boundaries.
reset_equi = top.get_term("reset").get_equipotential()
print("drivers")
for term in reset_equi.get_leaf_drivers():
print(term)
print("readers")
for term in reset_equi.get_leaf_readers():
print(term)
Edit and save
old = top.get_net("old_name")
old.set_name("renamed_signal")
netlist.dump_naja_if("edited.naja")
The high-level API automatically uniquifies shared models before edits that must be localized to a hierarchical occurrence.