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.
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.