def generate(node, bw): #%IN% in_list = "" for i in range(0, len(node["arguments"])): in_list = in_list + "IN%d, "%i in_list = in_list[:-2] #Generate %IN_DEF% in_def = "" for i in range(0, len(node["arguments"])): in_def = in_def + " input wire [%d:0] IN%d;\n"%(bw - 1, i) nd_def = in_def[:-1] #Modules #Predicate pred_name = "root_%s%s"%(node["static"][2]["name"], node["static"][2]["id"]) pred_node = generateRoot.generateRoot(node["static"][2], bw) treewalk.generateNodes(pred_node, bw) #Yes-block yes_name = "root_%s%s"%(node["static"][0]["name"], node["static"][0]["id"]) yes_node = generateRoot.generateRoot(node["static"][0], bw) treewalk.generateNodes(yes_node, bw) #No-block no_name = "root_%s%s"%(node["static"][1]["name"], node["static"][1]["id"]) no_node = generateRoot.generateRoot(node["static"][1], bw) treewalk.generateNodes(no_node, bw) #YIN yin = make_rinlist(node["static"][0]) #NIN nin = make_rinlist(node["static"][1]) #PIN pin = make_rinlist(node["static"][2]) #Fill template template = open(BASIS_FUNCTIONS_DIR + "/composition_if.tmp","r").read() template = template.replace("%IN%", in_list) template = template.replace("%YIN%", yin) template = template.replace("%NIN%", nin) template = template.replace("%PIN%", pin) template = template.replace("%IN_DEF%", in_def) template = template.replace("%MODULENAME%", str(node["name"]) + str(node["id"])) template = template.replace("%BW%", str(bw)) template = template.replace("%PRED_MOD%", pred_name) template = template.replace("%YES_MOD%", yes_name) template = template.replace("%NO_MOD%", no_name) if not os.path.exists(PROJECT_DIR): os.makedirs(PROJECT_DIR) f = open(PROJECT_DIR + "/node_%s%s"%(node["name"], node["id"] + ".v"),"w") f.write(template) f.close()
def generate(node, bw): #Generate %IN_LIST% in_list = "" for i in range(0, len(node["arguments"])): in_list = in_list + "IN%d, " % i in_list = in_list[:-2] #Generate %IN_DEF% in_def = "" for i in range(0, len(node["arguments"])): in_def = in_def + "input wire [%d:0] IN%d;\n" % (bw - 1, i) ind_def = in_def[:-1] #Generate %ADDITIONAL_IN% additional_in = "IN%d" % (len(node["arguments"])) #Generate H and G classes names g_class = "root_%s%s" % (node["static"][0]["name"], node["static"][0]["id"]) h_class = "root_%s%s" % (node["static"][1]["name"], node["static"][1]["id"]) #Generate %MAX_IN% max_in = "IN%d" % (len(node["arguments"]) - 1) #Generate H and G classes nodes_g = generateRoot.generateRoot(node["static"][0], bw) nodes_h = generateRoot.generateRoot(node["static"][1], bw) treewalk.generateNodes(nodes_g, bw) treewalk.generateNodes(nodes_h, bw) #Fill template template = open(BASIS_FUNCTIONS_DIR + "/composition_r.tmp", "r").read() template = template.replace("%IN_LIST%", in_list) template = template.replace("%IN_DEF%", in_def) template = template.replace("%ADDITIONAL_IN%", additional_in) template = template.replace("%G_CLASS%", g_class) template = template.replace("%H_CLASS%", h_class) template = template.replace("%MAX_IN%", max_in) template = template.replace("%NAME%", str(node["name"]) + str(node["id"])) template = template.replace("%BUS_WIDTH%", str(bw - 1)) if not os.path.exists(PROJECT_DIR): os.makedirs(PROJECT_DIR) f = open(PROJECT_DIR + "/node_%s%s" % (node["name"], node["id"] + ".v"), "w") f.write(template) f.close()
def generate(node, bw): #%IN% in_list = "" for i in range(0, len(node["arguments"])): in_list = in_list + "IN%d, "%i in_list = in_list[:-2] #Generate %IN_DEF% in_def = "" for i in range(0, len(node["arguments"])): in_def = in_def + " input wire [%d:0] IN%d;\n"%(bw - 1, i) nd_def = in_def[:-1] #Modules #Predicate pred_name = "root_%s%s"%(node["static"][2]["name"], node["static"][2]["id"]) pred_node = generateRoot.generateRoot(node["static"][2], bw) treewalk.generateNodes(pred_node, bw) #Yes-block yes_name = "root_%s%s"%(node["static"][0]["name"], node["static"][0]["id"]) yes_node = generateRoot.generateRoot(node["static"][0], bw) treewalk.generateNodes(yes_node, bw) #No-block no_name = "root_%s%s"%(node["static"][1]["name"], node["static"][1]["id"]) no_node = generateRoot.generateRoot(node["static"][1], bw) treewalk.generateNodes(no_node, bw) #Fill template template = open(BASIS_FUNCTIONS_DIR + "/composition_for.tmp","r").read() template = template.replace("%IN%", in_list) template = template.replace("%IN_DEF%", in_def) template = template.replace("%MODULENAME%", str(node["name"]) + str(node["id"])) template = template.replace("%BW%", str(bw)) template = template.replace("%PRED_MOD%", pred_name) template = template.replace("%YES_MOD%", yes_name) template = template.replace("%NO_MOD%", no_name) if not os.path.exists(PROJECT_DIR): os.makedirs(PROJECT_DIR) f = open(PROJECT_DIR + "/node_%s%s"%(node["name"], node["id"] + ".v"),"w") f.write(template) f.close()
def generateNode(node, bw): if node["name"] == "o": operation_o_gen.generate_o(bw, len(node["arguments"]), node["id"]) elif node["name"] == "i": operation_i_gen.generate_i(bw, len(node["arguments"]), node["static"][0], node["id"]) elif node["name"] == "s": operation_s_gen.generate_s(bw, node["id"]) elif node["name"] == "R": g = node["static"][0] h = node["static"][1] tree_g = pparser.parseParentheses(g) tree_h = pparser.parseParentheses(h) accumulatorg = {} accumulatorg["start"] = [] accumulatorg["module"] = [] accumulatorg["wire"] = ["wire [%d-1:0] node%s_res;"%(16, tree_g["id"])] graph = [] gacc,graph = treeWalk(tree_g, None, accumulatorg, graph, 16) (flg, tbg) = generateRoot.generateRoot(tree_g, gacc, 16) drawGraph(graph,"root%s"%tree_g["id"]) f = open("root%s.v"%(tree_g["id"]), "w") f.write(flg) f.close() f = open("root%s_tb.v"%(tree_g["id"]), "w") f.write(tbg) f.close() accumulatorh = {} accumulatorh["start"] = [] accumulatorh["module"] = [] accumulatorh["wire"] = ["wire [%d-1:0] node%s_res;"%(16, tree_h["id"])] graph = [] hacc, graph = treeWalk(tree_h, None, accumulatorh, graph, 16) (flh, tbh) = generateRoot.generateRoot(tree_h, hacc, 16) drawGraph(graph,"root%s"%tree_h["id"]) f = open("root%s.v"%(tree_h["id"]), "w") f.write(flh) f.close() f = open("root%s_tb.v"%(tree_h["id"]), "w") f.write(tbh) f.close() total_inputs = collect_inputs(tree_h) arrange_inputs(total_inputs, node["arguments"]) composition_r_gen.generate_r(bw, total_inputs, tree_g["id"], tree_h["id"], node["id"]) else: operation_o_gen.generate_o(bw, len(node["arguments"]), node["id"])
def generate(node, bw): #Generate %PUSH_ARGUMENTS% g_push_arguments = "" for i in range(0, len(node["arguments"])): g_push_arguments = g_push_arguments + "\t\tmov rax, [rsp + %i]\n" % ( 8 + (len(node["arguments"])) * 8) g_push_arguments = g_push_arguments + "\t\tpush rax\n" h_push_arguments = "" for i in range(0, len(node["arguments"])): h_push_arguments = h_push_arguments + "\t\tmov rax, [rsp + %i]\n" % ( 16 + (len(node["arguments"])) * 8) h_push_arguments = h_push_arguments + "\t\tpush rax\n" #Genetate G and H STACK_OFFSET gstack_offset = len(node["arguments"]) * 8 hstack_offset = (len(node["arguments"]) + 1) * 8 #Generate H and G functions names g_function = "root_%s%s" % (node["static"][0]["name"], node["static"][0]["id"]) h_function = "root_%s%s" % (node["static"][1]["name"], node["static"][1]["id"]) #Generate H and G functions nodes_g = generateRoot.generateRoot(node["static"][0], bw) nodes_h = generateRoot.generateRoot(node["static"][1], bw) treewalk.generateNodes(nodes_g, bw) treewalk.generateNodes(nodes_h, bw) #Fill template template = open(BASIS_FUNCTIONS_DIR + "/composition_r.tmp", "r").read() template = template.replace("%G_PUSH_ARGUMENTS%", g_push_arguments) template = template.replace("%H_PUSH_ARGUMENTS%", h_push_arguments) template = template.replace("%GSTACK_OFFSET%", str(gstack_offset)) template = template.replace("%HSTACK_OFFSET%", str(hstack_offset)) template = template.replace("%G_FUNCTION%", g_function) template = template.replace("%H_FUNCTION%", h_function) template = template.replace("%NAME%", str(node["name"]) + str(node["id"])) if not os.path.exists(PROJECT_DIR): os.makedirs(PROJECT_DIR) f = open(PROJECT_DIR + "/node_%s%s" % (node["name"], node["id"] + ".s"), "w") f.write(template) f.close()
def generate(node, bw): #Generate %IN_LIST% in_list = "" for i in range(0, len(node["arguments"])): in_list = in_list + "IN%d, "%i in_list = in_list[:-2] #Generate %IN_DEF% in_def = "" for i in range(0, len(node["arguments"])): in_def = in_def + "input wire [%d:0] IN%d;\n"%(bw - 1, i) ind_def = in_def[:-1] #Generate %ADDITIONAL_IN% additional_in = "IN%d"%(len(node["arguments"])) #Generate H and G classes names g_class = "root_%s%s"%(node["static"][0]["name"], node["static"][0]["id"]) h_class = "root_%s%s"%(node["static"][1]["name"], node["static"][1]["id"]) #Generate %MAX_IN% max_in = "IN%d"%(len(node["arguments"])-1) #Generate H and G classes nodes_g = generateRoot.generateRoot(node["static"][0], bw) nodes_h = generateRoot.generateRoot(node["static"][1], bw) treewalk.generateNodes(nodes_g, bw) treewalk.generateNodes(nodes_h, bw) #Fill template template = open(BASIS_FUNCTIONS_DIR + "/composition_r.tmp","r").read() template = template.replace("%IN_LIST%", in_list) template = template.replace("%IN_DEF%", in_def) template = template.replace("%ADDITIONAL_IN%", additional_in) template = template.replace("%G_CLASS%", g_class) template = template.replace("%H_CLASS%", h_class) template = template.replace("%MAX_IN%", max_in) template = template.replace("%NAME%", str(node["name"]) + str(node["id"])) template = template.replace("%BUS_WIDTH%", str(bw-1)) if not os.path.exists(PROJECT_DIR): os.makedirs(PROJECT_DIR) f = open(PROJECT_DIR + "/node_%s%s"%(node["name"], node["id"] + ".v"),"w") f.write(template) f.close()
def generate(node, bw): #Generate %PUSH_ARGUMENTS% g_push_arguments = "" for i in range(0, len(node["arguments"])): g_push_arguments = g_push_arguments + "\t\tmov rax, [rsp + %i]\n"%(8 + (len(node["arguments"])) * 8) g_push_arguments = g_push_arguments + "\t\tpush rax\n" h_push_arguments = "" for i in range(0, len(node["arguments"])): h_push_arguments = h_push_arguments + "\t\tmov rax, [rsp + %i]\n"%(16 + (len(node["arguments"])) * 8) h_push_arguments = h_push_arguments + "\t\tpush rax\n" #Genetate G and H STACK_OFFSET gstack_offset = len(node["arguments"]) * 8 hstack_offset = (len(node["arguments"]) + 1) * 8 #Generate H and G functions names g_function = "root_%s%s"%(node["static"][0]["name"], node["static"][0]["id"]) h_function = "root_%s%s"%(node["static"][1]["name"], node["static"][1]["id"]) #Generate H and G functions nodes_g = generateRoot.generateRoot(node["static"][0], bw) nodes_h = generateRoot.generateRoot(node["static"][1], bw) treewalk.generateNodes(nodes_g, bw) treewalk.generateNodes(nodes_h, bw) #Fill template template = open(BASIS_FUNCTIONS_DIR + "/composition_r.tmp","r").read() template = template.replace("%G_PUSH_ARGUMENTS%", g_push_arguments) template = template.replace("%H_PUSH_ARGUMENTS%", h_push_arguments) template = template.replace("%GSTACK_OFFSET%", str(gstack_offset)) template = template.replace("%HSTACK_OFFSET%", str(hstack_offset)) template = template.replace("%G_FUNCTION%", g_function) template = template.replace("%H_FUNCTION%", h_function) template = template.replace("%NAME%", str(node["name"]) + str(node["id"])) if not os.path.exists(PROJECT_DIR): os.makedirs(PROJECT_DIR) f = open(PROJECT_DIR + "/node_%s%s"%(node["name"], node["id"] + ".s"),"w") f.write(template) f.close()
def generate(node, bw): #%IN% in_list = "" for i in range(0, len(node["arguments"])): in_list = in_list + "IN%d, " % i in_list = in_list[:-2] #Generate %IN_DEF% in_def = "" for i in range(0, len(node["arguments"])): in_def = in_def + " input wire [%d:0] IN%d;\n" % (bw - 1, i) nd_def = in_def[:-1] #Generate %rIN_DEF% rin_def = "" for i in range(0, len(node["arguments"])): rin_def = rin_def + " reg [%d:0] rIN%d;\n" % (bw - 1, i) rin_def = rin_def[:-1] #Generate %SOUT_DEF% sout_def = "" for i in range(0, len(node["arguments"])): sout_def = sout_def + " wire [%d:0] SOUT%d;\n" % (bw - 1, i) sout_def = sout_def[:-1] #Generate %rSOUT_DEF% rsout_def = "" for i in range(0, len(node["arguments"])): rsout_def = rsout_def + " reg [%d:0] rSOUT%d;\n" % (bw - 1, i) rsout_def = rsout_def[:-1] #Generate %RD_DEF% rd_def = "" for i in range(0, len(node["arguments"])): rd_def = rd_def + " wire RD%d;\n" % (i) rd_def = rd_def[:-1] #Generate %ST_DEF% st_def = "" for i in range(0, len(node["arguments"])): st_def = st_def + " reg ST%d;\n" % (i) st_def = st_def[:-1] #Generate %RD_AND% rd_and = "" for i in range(0, len(node["arguments"])): rd_and = rd_and + "RD%d & " % i rd_and = rd_and[:-3] #Generate %rSOUT_ZERO% rsout_zero = "" for i in range(0, len(node["arguments"])): rsout_zero = rsout_zero + " rSOUT%d = 0;\n" % i rsout_zero = rsout_zero[:-1] #Generate %ST_ZERO% st_zero = "" for i in range(0, len(node["arguments"])): st_zero = st_zero + " ST%d = 0;\n" % i st_zero = st_zero[:-1] #Generate %ST_ONE% st_one = "" for i in range(0, len(node["arguments"])): st_one = st_one + " ST%d = 1;\n" % i st_one = st_one[:-1] #Generate %rIN_ZERO% rin_zero = "" for i in range(0, len(node["arguments"])): rin_zero = rin_zero + " rIN%d = 0;\n" % i rin_zero = rin_zero[:-1] #Generate %rIN_rSOUT% rin_rsout = "" for i in range(0, len(node["arguments"])): rin_rsout = rin_rsout + " rIN%d = rSOUT%d;\n" % (i, i) rin_rsout = rin_rsout[:-1] #Generate %rIN_SOUT% rin_sout = "" for i in range(0, len(node["arguments"])): rin_sout = rin_sout + " rIN%d = SOUT%d;\n" % (i, i) rin_sout = rin_sout[:-1] #Generate %rSOUT_SOUT% rsout_sout = "" for i in range(0, len(node["arguments"])): rsout_sout = rsout_sout + " rSOUT%d = SOUT%d;\n" % (i, i) rsout_sout = rsout_sout[:-1] #Generate %rIN_IN% rin_in = "" for i in range(0, len(node["arguments"])): rin_in = rin_in + " rIN%d = IN%d;\n" % (i, i) rin_in = rin_in[:-1] #Module example # modulename1 mod1(RST, ST1, CLK, RD1, SOUT1, rIN0, rIN1, rIN2...); #Generate %IN_MODULES% in_modules = "" for i in range(0, len(node["arguments"])): class_name = "root_%s%s" % (node["static"][i]["name"], node["static"][i]["id"]) rin_list = make_rinlist(node["static"][i]) if rin_list == "": in_modules = in_modules + " %s mod%d(RST, ST%d, CLK, RD%d, SOUT%d);\n" % ( class_name, i, i, i, i) else: in_modules = in_modules + " %s mod%d(RST, ST%d, CLK, RD%d, SOUT%d, %s);\n" % ( class_name, i, i, i, i, rin_list) mode_node = generateRoot.generateRoot(node["static"][i], bw) treewalk.generateNodes(mode_node, bw) in_modules = in_modules[:-1] #Generate %PRED_MODULE% class_name = "root_%s%s" % (node["static"][-1]["name"], node["static"][-1]["id"]) mode_node = generateRoot.generateRoot(node["static"][-1], bw) treewalk.generateNodes(mode_node, bw) rin_list = make_rinlist(node["static"][-1]) if rin_list == "": pred_module = " %s pred(RST, pST, CLK, pRD, pRES);\n" % (class_name) else: pred_module = " %s pred(RST, pST, CLK, pRD, pRES, %s);\n" % ( class_name, rin_list) #Fill template template = open(BASIS_FUNCTIONS_DIR + "/composition_for.tmp", "r").read() template = template.replace("%IN%", in_list) template = template.replace("%IN_DEF%", in_def) template = template.replace("%MODULENAME%", str(node["name"]) + str(node["id"])) template = template.replace("%rIN_DEF%", rin_def) template = template.replace("%SOUT_DEF%", sout_def) template = template.replace("%rSOUT_DEF%", rsout_def) template = template.replace("%RD_DEF%", rd_def) template = template.replace("%ST_DEF%", st_def) template = template.replace("%RD_AND%", rd_and) template = template.replace("%rSOUT_ZERO%", rsout_zero) template = template.replace("%ST_ZERO%", st_zero) template = template.replace("%rIN_ZERO%", rin_zero) template = template.replace("%ST_ONE%", st_one) template = template.replace("%rSOUT_SOUT%", rsout_sout) template = template.replace("%rIN_IN%", rin_in) template = template.replace("%rIN_rSOUT%", rin_rsout) template = template.replace("%rIN_SOUT%", rin_sout) template = template.replace("%BW%", str(bw)) template = template.replace("%IN_MODULES%", in_modules) template = template.replace("%PRED_MODULE%", pred_module) if not os.path.exists(PROJECT_DIR): os.makedirs(PROJECT_DIR) f = open(PROJECT_DIR + "/node_%s%s" % (node["name"], node["id"] + ".v"), "w") f.write(template) f.close()
def generate(node, bw): #%IN% in_list = "" for i in range(0, len(node["arguments"])): in_list = in_list + "IN%d, "%i in_list = in_list[:-2] #Generate %IN_DEF% in_def = "" for i in range(0, len(node["arguments"])): in_def = in_def + " input wire [%d:0] IN%d;\n"%(bw - 1, i) nd_def = in_def[:-1] #Generate %rIN_DEF% rin_def = "" for i in range(0, len(node["arguments"])): rin_def = rin_def + " reg [%d:0] rIN%d;\n"%(bw - 1, i) rin_def = rin_def[:-1] #Generate %SOUT_DEF% sout_def = "" for i in range(0, len(node["arguments"])): sout_def = sout_def + " wire [%d:0] SOUT%d;\n"%(bw - 1, i) sout_def = sout_def[:-1] #Generate %rSOUT_DEF% rsout_def = "" for i in range(0, len(node["arguments"])): rsout_def = rsout_def + " reg [%d:0] rSOUT%d;\n"%(bw - 1, i) rsout_def = rsout_def[:-1] #Generate %RD_DEF% rd_def = "" for i in range(0, len(node["arguments"])): rd_def = rd_def + " wire RD%d;\n"%(i) rd_def = rd_def[:-1] #Generate %ST_DEF% st_def = "" for i in range(0, len(node["arguments"])): st_def = st_def + " reg ST%d;\n"%(i) st_def = st_def[:-1] #Generate %RD_AND% rd_and = "" for i in range(0, len(node["arguments"])): rd_and = rd_and + "RD%d & "%i rd_and = rd_and[:-3] #Generate %rSOUT_ZERO% rsout_zero = "" for i in range(0, len(node["arguments"])): rsout_zero = rsout_zero + " rSOUT%d = 0;\n"%i rsout_zero = rsout_zero[:-1] #Generate %ST_ZERO% st_zero = "" for i in range(0, len(node["arguments"])): st_zero = st_zero + " ST%d = 0;\n"%i st_zero = st_zero[:-1] #Generate %ST_ONE% st_one = "" for i in range(0, len(node["arguments"])): st_one = st_one + " ST%d = 1;\n"%i st_one = st_one[:-1] #Generate %rIN_ZERO% rin_zero = "" for i in range(0, len(node["arguments"])): rin_zero = rin_zero + " rIN%d = 0;\n"%i rin_zero = rin_zero[:-1] #Generate %rIN_rSOUT% rin_rsout = "" for i in range(0, len(node["arguments"])): rin_rsout = rin_rsout + " rIN%d = rSOUT%d;\n"%(i,i) rin_rsout = rin_rsout[:-1] #Generate %rIN_SOUT% rin_sout = "" for i in range(0, len(node["arguments"])): rin_sout = rin_sout + " rIN%d = SOUT%d;\n"%(i,i) rin_sout = rin_sout[:-1] #Generate %rSOUT_SOUT% rsout_sout = "" for i in range(0, len(node["arguments"])): rsout_sout = rsout_sout + " rSOUT%d = SOUT%d;\n"%(i,i) rsout_sout = rsout_sout[:-1] #Generate %rIN_IN% rin_in = "" for i in range(0, len(node["arguments"])): rin_in = rin_in + " rIN%d = IN%d;\n"%(i,i) rin_in = rin_in[:-1] #Module example # modulename1 mod1(RST, ST1, CLK, RD1, SOUT1, rIN0, rIN1, rIN2...); #Generate %IN_MODULES% in_modules = "" for i in range(0, len(node["arguments"])): class_name = "root_%s%s"%(node["static"][i]["name"], node["static"][i]["id"]) rin_list = make_rinlist(node["static"][i]) if rin_list == "": in_modules = in_modules + " %s mod%d(RST, ST%d, CLK, RD%d, SOUT%d);\n"%(class_name, i, i, i, i) else: in_modules = in_modules + " %s mod%d(RST, ST%d, CLK, RD%d, SOUT%d, %s);\n"%(class_name, i, i, i, i, rin_list) mode_node = generateRoot.generateRoot(node["static"][i], bw) treewalk.generateNodes(mode_node, bw) in_modules = in_modules[:-1] #Generate %PRED_MODULE% class_name = "root_%s%s"%(node["static"][-1]["name"], node["static"][-1]["id"]) mode_node = generateRoot.generateRoot(node["static"][-1], bw) treewalk.generateNodes(mode_node, bw) rin_list = make_rinlist(node["static"][-1]) if rin_list == "": pred_module = " %s pred(RST, pST, CLK, pRD, pRES);\n"%(class_name) else: pred_module = " %s pred(RST, pST, CLK, pRD, pRES, %s);\n"%(class_name, rin_list) #Fill template template = open(BASIS_FUNCTIONS_DIR + "/composition_for.tmp","r").read() template = template.replace("%IN%", in_list) template = template.replace("%IN_DEF%", in_def) template = template.replace("%MODULENAME%", str(node["name"]) + str(node["id"])) template = template.replace("%rIN_DEF%", rin_def) template = template.replace("%SOUT_DEF%", sout_def) template = template.replace("%rSOUT_DEF%", rsout_def) template = template.replace("%RD_DEF%", rd_def) template = template.replace("%ST_DEF%", st_def) template = template.replace("%RD_AND%", rd_and) template = template.replace("%rSOUT_ZERO%", rsout_zero) template = template.replace("%ST_ZERO%", st_zero) template = template.replace("%rIN_ZERO%", rin_zero) template = template.replace("%ST_ONE%", st_one) template = template.replace("%rSOUT_SOUT%", rsout_sout) template = template.replace("%rIN_IN%", rin_in) template = template.replace("%rIN_rSOUT%", rin_rsout) template = template.replace("%rIN_SOUT%", rin_sout) template = template.replace("%BW%", str(bw)) template = template.replace("%IN_MODULES%", in_modules) template = template.replace("%PRED_MODULE%", pred_module) if not os.path.exists(PROJECT_DIR): os.makedirs(PROJECT_DIR) f = open(PROJECT_DIR + "/node_%s%s"%(node["name"], node["id"] + ".v"),"w") f.write(template) f.close()
#Generate %rIN_IN% rin_in = "" for i in range(0, len(node["arguments"])): rin_in = rin_in + " rIN%d = IN%d;"%(i,i) rin_in = rin_in[:-1] #Module example # modulename1 mod1(RST, ST1, CLK, RD1, SOUT1, rIN0, rIN1, rIN2...); #Generate %IN_MODULES% in_modules = "" for i in range(0, len(node["static"])): class_name = "root_%s%s"%(node["static"][i]["name"], node["static"][i]["id"]) in_modules = in_modules + " %s mod%d(RST, ST%d, CLK, RD%d, SOUT%d, %s);\n"%(class_name, i, i, i, i, rin_list) mod_node = generateRoot.generateRoot(node["static"][i], bw) treewalk.generateNodes(mode_node, bw) in_modules = in_modules[:-1] #Generate %PRED_MODULE% class_name = "root_%s%s"%(node["static"][-1]["name"], node["static"][-1]["id"]) mod_node = generateRoot.generateRoot(node["static"][-1], bw) treewalk.generateNodes(mode_node, bw) pred_module = " %s pred(RST, pST, CLK, pRD, pRES, %s);\n"%(class_name, rin_list) #Fill template template = open(BASIS_FUNCTIONS_DIR + "/composition_for.tmp","r").read() template = template.replace("%IN%", in_list) template = template.replace("%IN_DEF%", in_def) template = template.replace("%MODULENAME%", str(node["name"]) + str(node["id"])) template = template.replace("%rIN_DEF%", rin_def) template = template.replace("%SOUT_DEF%", sout_def)
ready_wire = "node%s_rd"%(str(node["id"])) res_wire = "node%s_res"%(str(node["id"])) module_line = "node%s n%s(RST, %s, CLK, %s, %s, %s);"%(str(node["id"]), str(node["id"]), start_wire, ready_wire, res_wire, module_inline) accumulator["start"].extend([start_signal]) accumulator["module"].extend([module_line]) accumulator["wire"].extend(["wire %s;"%(start_wire)]) return accumulator if __name__ == "__main__": line1 = "I(2,3;X,i(1;s(x),m(g(n),5)),Z)" line2 = "R(i(0;x,y),i(0;s(x),y);x,y)" line3 = "mul(x,y)" line4 = "R(i(0;x,y),i(0;s(x),y,z);x,y)" line5 = "add(x,y)" line6 = "add(x,mul(y,z))" tree = pparser.parseParentheses(line6) accumulator = {} accumulator["start"] = [] accumulator["module"] = [] accumulator["wire"] = ["wire [%d-1:0] node%s_res;"%(16, tree["id"])] graph = [] acc,graph = treeWalk(tree, None, accumulator, graph, 16) drawGraph(graph, "root") (fl, tb) = generateRoot.generateRoot(tree, acc, 16) f = open("main_root.v",'w') f.write(fl) f.close() f = open("main_root_testbench.v",'w') f.write(tb) f.close()