Example #1
0
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()
Example #2
0
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()
Example #4
0
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"])
Example #5
0
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)
Example #11
0
	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()