Xplace_for_ICCAD/tool/timer.py
2025-05-08 01:39:08 +08:00

50 lines
1.7 KiB
Python

import sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from utils import *
from src import Flute, load_dataset, GPUTimer
from main import get_option
def main():
Flute.register(8)
# Read input file
design_name = "example"
params = {
"benchmark": "custom",
"design_name": "test",
"lef": f"{design_name}/NangateOpenCellLibrary.lef",
"lib": f"{design_name}/NangateOpenCellLibrary.lib",
"def": f"{design_name}/example.def",
"verilog": f"{design_name}/example.v",
"sdc": f"{design_name}/example.sdc",
"spef": f"{design_name}/example.spef",
}
args = get_option()
logger = setup_logger(args, sys.argv)
data, rawdb, gpdb = load_dataset(args, logger, params)
device = torch.device(
"cuda:{}".format(args.gpu) if torch.cuda.is_available() else "cpu"
)
data = data.to(device)
data = data.preprocess()
gputimer = GPUTimer(data, rawdb, gpdb, params, args)
# timing analysis for extracted RC network
gputimer.timer.read_spef(params["spef"])
gputimer.update_timing_spef()
wns_early, tns_early, wns_late, tns_late = gputimer.report_timing_slack()
logger.info("SPEf evaluation: wns_early: %.3f, tns_early: %.3f, wns_late: %.3f, tns_late: %.3f" % (wns_early, tns_early, wns_late, tns_late))
# timing analysis for normalized FLUTE RC tree
gputimer.update_timing_eval(data.node_pos)
wns_early, tns_early, wns_late, tns_late = gputimer.report_timing_slack()
logger.info("Flute Tree Evaluation wns_early: %.3f, tns_early: %.3f, wns_late: %.3f, tns_late: %.3f" % (wns_early, tns_early, wns_late, tns_late))
# run main
__name__ == "__main__" and main()