Pre-routing Timing Prediction (TIME)

Overview

TIME is originally from A Timing Engine Inspired Graph Neural Network Model for Pre-Routing Slack Prediction.

Similar to timing analysis tools, circuits in this dataset are represented as heterogeneous graphs consisting of two types of edges: net edges and cell edges. The nodes in graphs denote pins in circuits. The TIME dataset collects 21 real-world benchmark circuits from OpenCores with OpenROAD on SkyWater 130nm technology (i.e. blabla, usb_cdc_core, BM64, salsa20, aes128, aes192, aes256, wbqspiflash, cic_decimator, des, aes_cipher, picorv32a, zipdiv, genericfir, usb, jpeg_encoder, usbf_device, xtea, spm, y_huff, and synth_ram). More information can be found in the original paper.

../_images/time_slack.png

Interface

Runner

class TIMERunner():
    def __init__(self, config):
      # init takes a config
    def train_ray(self, tune_parameter_config):
      # function to implement training when tuning with ray
    def train(self):
      # function to implement training when evaluation
    def train_one_epoch(self, data_loader, mode, epoch_idx):
      # function that do back propogation for one epoch
    def test(self, load_statedict = True, test_num_idx = 0):
      # function for testing
    def raytune(self, tune_config, num_samples, num_cpu, num_gpu_per_trial):
      # main function to take the hyper-parameter search space in RAY

Details are in ./runner/TIME_runner.py.

DataProcessor

class TIMEDataProcessor(InMemoryDataset):
    def __init__(self, config, mode):
      # init takes a config, mode takes from `tune' for tuning, `get_result' for evaluation
    def process(self):
      # key functions to implement TIME data processing
    def read_csv_graph_raw(self, raw_dir, check_repeat_edge):
      # key function to process raw data into PyG data

Details are in ./data_processor/TIME_data_processor.py.