50 lines
1.7 KiB
Python
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()
|