コード例 #1
0
ファイル: main.py プロジェクト: maddoxyuan1202/DFT
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("-ckt",
                        type=str,
                        required=True,
                        help="name of the ircuit, e.g. c17, no extension")
    parser.add_argument("-tp",
                        type=int,
                        required=True,
                        help="name of the ircuit, e.g. c17, no extension")
    parser.add_argument("-cpu",
                        type=int,
                        required=True,
                        help="name of the ircuit, e.g. c17, no extension")
    args = parser.parse_args()

    print("\n======================================================")
    print("Run | circuit: {} | Test Count: {} | CPUs: {}".format(
        args.ckt, args.tp, args.cpu))
    start_time = time.time()
    circuit = Circuit(args.ckt)
    circuit.read_circuit()
    circuit.lev()

    # inputnum = len(circuit.input_num_list)
    # limit = [0, pow(2, inputnum)-1]
    # for i in range(100):
    #     b = ('{:0%db}'%inputnum).format(randint(limit[0], limit[1]))
    #     list_to_logicsim = []
    #     for j in range(inputnum):
    #         list_to_logicsim.append(int(b[j]))
    #     circuit.logic_sim(list_to_logicsim)
    #     print(b)
    #     # print_nodes(circuit)

    # observability() need to follow controllability()
    circuit.SCOAP_CC()
    circuit.SCOAP_CO()
    # circuit.STAFAN_CS(100)
    # circuit.STAFAN_B()

    circuit.STAFAN(args.tp, num_proc=args.cpu)
    # circuit.co_ob_info()
    graph = circuit.gen_graph()
    suffix = round(math.log10(args.tp))
    fname = ("10e" + str(suffix)) if (suffix % 1 == 0) else str(args.tp)
    fname = "./../data/graph/" + args.ckt + "_" + fname + ".graphml"
    print("Saving graph in ", fname)
    nx.write_graphml(graph, fname)
    print("Saved!")
    print("Total simulation ime: {:.2f} seconds".format(time.time() -
                                                        start_time))
    print()
コード例 #2
0
ファイル: gnn.py プロジェクト: erfaneshrati/DFT
def load_data_with_model():
    """
    This function loads the circuit graph, then returns the features, labels, model, split train/test sets
    """
    # Load the circuit
    circuit = Circuit(options.circuit)
    circuit.read_circuit()
    circuit.lev()
    circuit.STAFAN(10000, num_proc=8)
    circuit.co_ob_info()
    graph = circuit.gen_graph()
    g = DGLGraph(graph)

    # Extract the unique gate types present in the circuit for creating the labels
    if options.objective == "level":
        all_types = []
        for n in circuit.nodes_lev:
            n_num_trans = circuit.node_ids.index(n.num)
            if n.gtype not in all_types:
                all_types.append(n.gtype)
        features = np.zeros((len(circuit.nodes_lev), len(all_types)))
    else:
        raise ValueError('The objective ' + options.objective +
                         ' is not available')

    labels = np.zeros(len(circuit.nodes_lev), dtype=np.float32)
    for n in circuit.nodes_lev:
        n_num_trans = circuit.node_ids.index(n.num)
        if options.objective == "level":
            #            features[n_num_trans, all_types.index(n.gtype)] = 1.0
            labels[n_num_trans] = circuit.nodes_lev[n_num_trans].lev

        if options.objective == "C1":
            labels[n_num_trans] = circuit.nodes_lev[n_num_trans].C1

    random_bools = np.random.choice(a=[False, True],
                                    size=(len(circuit.nodes_lev)),
                                    p=[0.2, 0.8])
    train_mask = th.BoolTensor(random_bools).cuda()
    test_mask = th.BoolTensor(np.invert(random_bools)).cuda()
    features = th.FloatTensor(features).cuda()

    if options.problem == "regression":
        labels = th.FloatTensor(labels).cuda()
        if options.model == "VanillaGCN":
            net = VanillaGCN(feature_dim=features.shape[1],
                             output_dim=1,
                             weight_dim=options.weight_dim,
                             depth=options.depth).cuda()
        if options.model == "LSTMGCN":
            net = LSTMGCN(feature_dim=features.shape[1],
                          output_dim=1,
                          weight_dim=options.weight_dim,
                          depth=options.depth).cuda()

    if options.problem == "classification":
        labels = th.LongTensor(labels).cuda()
        if options.model == "VanillaGCN":
            net = VanillaGCN(feature_dim=features.shape[1],
                             output_dim=len(np.unique(labels.cpu().numpy())),
                             weight_dim=options.weight_dim,
                             depth=options.depth).cuda()
        if options.model == "LSTMGCN":
            net = LSTMGCN(feature_dim=features.shape[1],
                          output_dim=len(np.unique(labels.cpu().numpy())),
                          weight_dim=options.weight_dim,
                          depth=options.depth).cuda()
    print(np.unique(labels.cpu().numpy()))

    return g, features, labels, train_mask, test_mask, net
コード例 #3
0
# -*- coding: utf-8 -*-

from circuit import Circuit
from atpg_v0 import ATPG
import pdb

ckt = "c17"
circuit = Circuit(ckt)
circuit.read_circuit()
circuit.lev()

#observability() need to follow controllability()
circuit.controllability()
circuit.observability()

# circuit.STAFAN_CS(7000)
# circuit.STAFAN_B()
circuit.STAFAN(10000, num_proc=2)
circuit.co_ob_info()
graph = circuit.gen_graph()


コード例 #4
0
ファイル: main.py プロジェクト: ruochen627/DFT
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("-ckt",
                        type=str,
                        required=True,
                        help="name of the circuit, e.g. c17, no extension")
    parser.add_argument("-tp",
                        type=int,
                        required=False,
                        help="name of the ircuit, e.g. c17, no extension")
    parser.add_argument("-cpu",
                        type=int,
                        required=False,
                        help="name of the ircuit, e.g. c17, no extension")
    args = parser.parse_args()

    print("\n======================================================")
    print("Run | circuit: {} | Test Count: {} | CPUs: {}".format(
        args.ckt, args.tp, args.cpu))
    print("======================================================\n")
    # start_time = time.time()

    circuit = Circuit(args.ckt)
    circuit.read_ckt()
    circuit.lev()
    """ Testing PFS """
    circuit.get_full_fault_list()
    circuit.pfs_multiple(fname="c17_full_tp_b.txt", mode="b")
    """ Testing DFS for single pattern """
    # test1 = circuit.gen_tp()
    # print(test1)
    # temp = circuit.dfs_single(test1)
    # print("------------------------")
    # print(temp)
    circuit.dfs_multiple_separate(fname="c17_full_tp_b.txt", mode='b')

    exit()

    # sim = Modelsim()
    # sim.project(circuit)
    # tp_fname = sim.gen_rand_tp(tp_count=200, tp_fname="sample-200.txt")
    # sim.gen_tb(tp_fname)
    # sim.simulation()
    # circuit.logic_sim_file(in_fname=tp_fname, out_fname="temp-output.log")
    # Test Circuit LogicSim
    # circuit.golden_test("../data/golden_IO/c499_golden_IO.txt")
    # check_gate_netlist(circuit, 3000) # c432
    """ observation point insertion 
    # circuit.SCOAP_CC()
    # circuit.SCOAP_CO()
    # circuit.STAFAN_CS(args.tp)
    # circuit.STAFAN_B()
    # circuit.TPI_stat(HTO_th=config.HTO_TH, HTC_th=config.HTC_TH)
    
    nodes_HTO = []
    for node in circuit.nodes_lev:
        if (node.stat["SS@1"]=="HTO") or (node.stat["SS@1"]=="HTO"):
            nodes_HTO.append(node)

    for target in nodes_HTO: 

        print("Target: {}\tB1={:.2f} B2={:.2f} \tdelta={}".format(
            target.num, target.B1, target.B0, 
            circuit.NVIDIA_count(target, 0.05, 0.05))
            )
      
    """
    """
    for num, node in circuit.nodes.items():
        print("========================")
        print("Node {} became OP".format(node))
        circuit.NVIDIA_count(node, HTO_th=0.05, HTC_th=0.05)
    """

    # print(circuit)
    exit()

    circuit.STAFAN(args.tp, num_proc=args.cpu)

    graph = circuit.gen_graph()
    suffix = round(math.log10(args.tp))
    fname = ("10e" + str(suffix)) if (suffix % 1 == 0) else str(args.tp)
    fname = "./../data/graph/" + args.ckt + "_" + fname + ".graphml"
    print("Saving graph in ", fname)
    nx.write_graphml(graph, fname)
    print("Saved!")
    print("Total simulation ime: {:.2f} seconds".format(time.time() -
                                                        start_time))
    print()