diff options
Diffstat (limited to 'src/model_generation.py')
-rw-r--r-- | src/model_generation.py | 904 |
1 files changed, 530 insertions, 374 deletions
diff --git a/src/model_generation.py b/src/model_generation.py index e507b55..c295ba4 100644 --- a/src/model_generation.py +++ b/src/model_generation.py @@ -1,173 +1,176 @@ -#!/usr/bin/env python +#!/usr/bin/python3 -"""#!/usr/bin/python """ import re import sys import os -#######Script start from here -print "Arguement is :", sys.argv[1] +# Script start from here +print("Arguement is :", sys.argv[1]) fname = os.path.basename(sys.argv[1]) -print "VHDL filename is :",fname +print("VHDL filename is :", fname) home = os.path.expanduser("~") -###########Creating connection_info.txt file from vhdl file##################### -read_vhdl = open(sys.argv[1],'r') + +# #### Creating connection_info.txt file from vhdl file #### # +read_vhdl = open(sys.argv[1], 'r') vhdl_data = read_vhdl.readlines() read_vhdl.close() -start_flag = -1 #Used for scaning part of data -scan_data=[] -#p=re.search('port(.*?)end',read_vhdl,re.M|re.I|re.DOTALL).group() +start_flag = -1 # Used for scaning part of data +scan_data = [] +# p=re.search('port(.*?)end',read_vhdl,re.M|re.I|re.DOTALL).group() for item in vhdl_data: - if re.search('port',item,re.I): + if re.search('port', item, re.I): start_flag = 1 - - elif re.search("end",item,re.I): + + elif re.search("end", item, re.I): start_flag = 0 - else: - pass if start_flag == 1: - item=re.sub("port", " ", item, flags=re.I) - item=re.sub("\(", " ", item, flags=re.I) - item=re.sub("\)", " ", item, flags=re.I) - item=re.sub(";"," ",item,flags=re.I) - + item = re.sub("port", " ", item, flags=re.I) + item = re.sub("\(", " ", item, flags=re.I) # noqa + item = re.sub("\)", " ", item, flags=re.I) # noqa + item = re.sub(";", " ", item, flags=re.I) + scan_data.append(item.rstrip()) - scan_data=filter(None, scan_data) + scan_data = [_f for _f in scan_data if _f] elif start_flag == 0: break - -#print "Scan Data",scan_data -port_info=[] + +port_info = [] port_vector_info = [] for item in scan_data: - print "Scan Data :",item - if re.search("in",item,flags=re.I): - if re.search("std_logic_vector",item,flags=re.I): - temp=re.compile(r"\s*std_logic_vector\s*",flags=re.I) - elif re.search("std_logic",item,flags=re.I): - temp=re.compile(r"\s*std_logic\s*",flags=re.I) + print("Scan Data :", item) + if re.search("in", item, flags=re.I): + if re.search("std_logic_vector", item, flags=re.I): + temp = re.compile(r"\s*std_logic_vector\s*", flags=re.I) + elif re.search("std_logic", item, flags=re.I): + temp = re.compile(r"\s*std_logic\s*", flags=re.I) else: - print "Please check your vhdl code for datatype of input port" + print("Please check your vhdl code for datatype of input port") sys.exit() - elif re.search("out",item,flags=re.I): - if re.search("std_logic_vector",item,flags=re.I): - temp=re.compile(r"\s*std_logic_vector\s*",flags=re.I) - elif re.search("std_logic",item,flags=re.I): - temp=re.compile(r"\s*std_logic\s*",flags=re.I) - else: - print "Please check your vhdl code for datatype of output port" + elif re.search("out", item, flags=re.I): + if re.search("std_logic_vector", item, flags=re.I): + temp = re.compile(r"\s*std_logic_vector\s*", flags=re.I) + elif re.search("std_logic", item, flags=re.I): + temp = re.compile(r"\s*std_logic\s*", flags=re.I) + else: + print("Please check your vhdl code for datatype of output port") sys.exit() else: - print "Please check the in/out direction of your port" + print("Please check the in/out direction of your port") sys.exit() - - lhs=temp.split(item)[0] - rhs=temp.split(item)[1] - bit_info=re.compile(r"\s*downto\s*",flags=re.I).split(rhs)[0] + + lhs = temp.split(item)[0] + rhs = temp.split(item)[1] + bit_info = re.compile(r"\s*downto\s*", flags=re.I).split(rhs)[0] if bit_info: - port_info.append(lhs+":"+str(int(bit_info)+int(1))) + port_info.append(lhs + ":" + str(int(bit_info) + int(1))) port_vector_info.append(1) else: - port_info.append(lhs+":"+str(int(1))) + port_info.append(lhs + ":" + str(int(1))) port_vector_info.append(0) -print "Port Info :",port_info - -#Open connection_info.txt file +print("Port Info :", port_info) -con_ifo=open('connection_info.txt','w') +# Open connection_info.txt file +con_ifo = open('connection_info.txt', 'w') for item in port_info: - word=item.split(':') - con_ifo.write(word[0].strip()+' '+word[1].strip()+' '+word[2].strip()) + word = item.split(':') + con_ifo.write( + word[0].strip() + ' ' + word[1].strip() + ' ' + word[2].strip() + ) con_ifo.write("\n") con_ifo.close() -############### Reading connection/port information############################# -#Declaring input and output list -input_list=[] -output_list=[] -#Reading connection_info.txt file for port infomation -read_file=open('connection_info.txt','r') -data=read_file.readlines() +# ################## Reading connection/port information ################## # + +# Declaring input and output list +input_list = [] +output_list = [] + +# Reading connection_info.txt file for port infomation +read_file = open('connection_info.txt', 'r') +data = read_file.readlines() read_file.close() -#Extracting input and output port list from data -print "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +# Extracting input and output port list from data +print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") for line in data: - print line + print(line) if re.match(r'^\s*$', line): pass - #print "Blank Line" else: - in_items=re.findall("IN",line,re.MULTILINE|re.IGNORECASE) - out_items=re.findall("OUT",line,re.MULTILINE|re.IGNORECASE) - #print "Line",line + in_items = re.findall("IN", line, + re.MULTILINE | re.IGNORECASE) + out_items = re.findall("OUT", line, + re.MULTILINE | re.IGNORECASE) if in_items: input_list.append(line.split()) - #print "Found IN" else: pass - #print "Not Found" - + # print("Not Found") + if out_items: output_list.append(line.split()) - #print "Found Out" + # print("Found Out") else: pass -print "Inout List :",input_list -print "Output list",output_list -input_port=[] -output_port=[] -#creating list of input and output port with its weight +print("Inout List :", input_list) +print("Output list", output_list) +input_port = [] +output_port = [] + +# creating list of input and output port with its weight for input in input_list: input_port.append(input[0]+":"+input[2]) - #print "Input List: ",input for output in output_list: output_port.append(output[0]+":"+output[2]) - #print "Output List: ",output -print "Output Port List : ",output_port -print "Input Port List : ",input_port +print("Output Port List : ", output_port) +print("Input Port List : ", input_port) -######################Creating content for cfunc.mod file####################### -print "Starting With cfunc.mod file" -cfunc=open('cfunc.mod','w') -print "Building content for cfunc.mod file" +# ################## Creating content for cfunc.mod file ################## # -comment='''/* This is cfunc.mod file auto generated by gen_con_info.py -Developed by Fahim, Rahul at IIT Bombay */ \n +print("Starting With cfunc.mod file") +cfunc = open('cfunc.mod', 'w') +print("Building content for cfunc.mod file") + +comment = '''/* This is cfunc.mod file auto generated by gen_con_info.py +Developed by Fahim, Rahul at IIT Bombay */\n ''' -header=''' -#include <stdio.h> -#include <math.h> -#include <string.h> -#include <time.h> -#include <sys/socket.h> -#include <sys/types.h> -#include <netinet/in.h> -#include <netdb.h> -#include <stdlib.h> -#include <unistd.h> -#include <errno.h> +header = ''' +#include <stdio.h> +#include <math.h> +#include <string.h> +#include <time.h> +#include <sys/socket.h> +#include <sys/types.h> +#include <netinet/in.h> +#include <netdb.h> +#include <stdlib.h> +#include <unistd.h> +#include <errno.h> ''' -function_open='''void cm_'''+fname.split('.')[0]+'''(ARGS) \n{''' +function_open = ( + '''void cm_''' + fname.split('.')[0] + '''(ARGS) \n{''') -digital_state_output=[] +digital_state_output = [] for item in output_port: - digital_state_output.append("Digital_State_t *_op_"+item.split(':')[0]+", *_op_"+item.split(':')[0]+"_old;") + digital_state_output.append( + "Digital_State_t *_op_" + item.split(':')[0] + + ", *_op_" + item.split(':')[0] + "_old;" + ) -var_section=''' +var_section = ''' // Declaring components of Client FILE *log_client = NULL; log_client=fopen("client.log","a"); @@ -180,72 +183,93 @@ var_section=''' int sock_port = 5000+PARAM(instance_id); ''' -temp_input_var=[] +temp_input_var = [] for item in input_port: - temp_input_var.append("char temp_"+item.split(':')[0]+"[1024];") + temp_input_var.append( + "char temp_" + item.split(':')[0] + "[1024];" + ) -#Start of INIT function -init_start_function=''' +# Start of INIT function +init_start_function = ''' if(INIT) { - /* Allocate storage for output ports.And set the load for input ports */ + /* Allocate storage for output ports ''' \ + '''and set the load for input ports */ ''' - -cm_event_alloc=[] -cm_count_output=0 -for item in output_port: - cm_event_alloc.append("cm_event_alloc("+str(cm_count_output)+","+item.split(':')[1]+"*sizeof(Digital_State_t));") - cm_count_output=cm_count_output+1 -load_in_port=[] +cm_event_alloc = [] +cm_count_output = 0 +for item in output_port: + cm_event_alloc.append( + "cm_event_alloc(" + + str(cm_count_output) + "," + item.split(':')[1] + + "*sizeof(Digital_State_t));" + ) + cm_count_output = cm_count_output + 1 + +load_in_port = [] for item in input_port: - load_in_port.append("for(Ii=0;Ii<PORT_SIZE("+item.split(':')[0]+");Ii++)\n\t\t{\n\t\t\tLOAD("+item.split(':')[0]+"[Ii])=PARAM(input_load); \n\t\t}") - -cm_count_ptr=0 -cm_event_get_ptr=[] + load_in_port.append( + "for(Ii=0;Ii<PORT_SIZE(" + item.split(':')[0] + + ");Ii++)\n\t\t{\n\t\t\tLOAD(" + item.split(':')[0] + + "[Ii])=PARAM(input_load); \n\t\t}" + ) + +cm_count_ptr = 0 +cm_event_get_ptr = [] for item in output_port: - cm_event_get_ptr.append("_op_"+item.split(':')[0]+" = _op_"+item.split(':')[0]+"_old = (Digital_State_t *) cm_event_get_ptr("+str(cm_count_ptr)+",0);") - cm_count_ptr=cm_count_ptr+1 - -systime_info=''' - /*Taking system time info for log */ - time_t systime; - systime = time(NULL); - printf(ctime(&systime)); - printf("Client-Initialising GHDL...\\n\\n"); - fprintf(log_client,"Setup Client Server Connection at %s \\n",ctime(&systime)); + cm_event_get_ptr.append( + "_op_" + item.split(':')[0] + " = _op_" + + item.split(':')[0] + + "_old = (Digital_State_t *) cm_event_get_ptr(" + + str(cm_count_ptr) + ",0);" + ) + + cm_count_ptr = cm_count_ptr + 1 + +systime_info = ''' + /*Taking system time info for log */ + time_t systime; + systime = time(NULL); + printf(ctime(&systime)); + printf("Client-Initialising GHDL...\\n\\n"); + fprintf(log_client,"Setup Client Server Connection at %s \\n"''' \ + ''',ctime(&systime)); ''' - - -init_else=''' - printf("Client-Inside else of INIT \\n"); - fprintf(log_client,"Inside else of INIT \\n"); +init_else = ''' + printf("Client-Inside else of INIT \\n"); + fprintf(log_client,"Inside else of INIT \\n"); /* retrieve storage for output ports. */ ''' -els_evt_ptr=[] -els_evt_count1=0 -els_evt_count2=0 +els_evt_ptr = [] +els_evt_count1 = 0 +els_evt_count2 = 0 for item in output_port: - els_evt_ptr.append("_op_"+item.split(":")[0]+" = (Digital_State_t *) cm_event_get_ptr("+str(els_evt_count1)+","+str(els_evt_count2)+");") - els_evt_count2=els_evt_count2+1 - els_evt_ptr.append("_op_"+item.split(":")[0]+"_old"+" = (Digital_State_t *) cm_event_get_ptr("+str(els_evt_count1)+","+str(els_evt_count2)+");") - els_evt_count1=els_evt_count1+1 - - -client_setup_ip=''' + els_evt_ptr.append("_op_" + item.split(":")[0] + + " = (Digital_State_t *) cm_event_get_ptr(" + + str(els_evt_count1) + "," + str(els_evt_count2) + + ");") + els_evt_count2 = els_evt_count2 + 1 + els_evt_ptr.append("_op_" + item.split(":")[0] + + "_old" + " = (Digital_State_t *) cm_event_get_ptr(" + + str(els_evt_count1)+","+str(els_evt_count2)+");") + els_evt_count1 = els_evt_count1 + 1 + + +client_setup_ip = ''' /* Client Setup IP Addr */ - FILE *fptr; + FILE *fptr; int ip_count = 0; char* my_ip = malloc(16); char ip_filename[40]; sprintf(ip_filename, "/tmp/NGHDL_COMMON_IP_%d.txt", getpid()); - fptr = fopen(ip_filename, "r"); - if (fptr) - { + fptr = fopen(ip_filename, "r"); + if (fptr) + { char line[20]; while(fscanf(fptr, "%s", line) == 1) { ip_count++; @@ -253,7 +277,7 @@ client_setup_ip=''' fclose(fptr); } - + if (ip_count < 255) { sprintf(my_ip, "127.0.0.%d", ip_count+1); } else { @@ -263,30 +287,30 @@ client_setup_ip=''' fptr = fopen(ip_filename, "a"); if (fptr) { - fprintf(fptr, "%s\\n", my_ip); + fprintf(fptr, "%s\\n", my_ip); fclose(fptr); } else { perror("Client - cannot open Common_IP file "); exit(1); } - STATIC_VAR(my_ip) = my_ip; + STATIC_VAR(my_ip) = my_ip; ''' -client_fetch_ip=''' - /* Client Fetch IP Addr */ - +client_fetch_ip = ''' + /* Client Fetch IP Addr */ + char* my_ip = STATIC_VAR(my_ip); - + host = gethostbyname(my_ip); fprintf(log_client,"Creating client socket \\n"); ''' -create_socket=''' - //Creating socket for client +create_socket = ''' + //Creating socket for client if ((socket_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { - perror("Client-Error while creating client Socket "); + perror("Client - Error while creating client Socket "); fprintf(log_client,"Error while creating client socket \\n"); exit(1); } @@ -303,60 +327,62 @@ create_socket=''' ''' -connect_server=''' - fprintf(log_client,"Client-Connecting to server \\n"); - - //Connecting to server - int try_limit=10; - while(try_limit>0) - { - if (connect(socket_fd, (struct sockaddr*)&server_addr,sizeof(struct sockaddr)) == -1) - { - sleep(1); - try_limit--; - if(try_limit==0) - { - fprintf(stderr,"Connect- Error:Tried to connect server on port , failed..giving up \\n"); - fprintf(log_client,"Connect- Error:Tried to connect server on port , failed..giving up \\n"); - exit(1); - } - } - else - { - printf("Client-Connected to server \\n"); - fprintf(log_client,"Client-Connected to server \\n"); - break; - } - } +connect_server = ''' + fprintf(log_client,"Client-Connecting to server \\n"); + //Connecting to server + int try_limit=10; + while(try_limit>0) + { + if (connect(socket_fd, (struct sockaddr*)&server_addr,''' \ + '''sizeof(struct sockaddr)) == -1) + { + sleep(1); + try_limit--; + if(try_limit==0) + { + fprintf(stderr,"Connect- Error:Tried to connect server on port,''' \ + '''failed...giving up \\n"); + fprintf(log_client,"Connect- Error:Tried to connect server on ''' \ + '''port, failed...giving up \\n"); + exit(1); + } + } + else + { + printf("Client-Connected to server \\n"); + fprintf(log_client,"Client-Connected to server \\n"); + break; + } + } ''' -#Assign bit value to every input -assign_data_to_input=[] +# Assign bit value to every input +assign_data_to_input = [] for item in input_port: - assign_data_to_input.append("\tfor(Ii=0;Ii<PORT_SIZE("+item.split(':')[0]+");Ii++)\n\ -\t{\n\t\tif( INPUT_STATE("+item.split(':')[0]+"[Ii])==ZERO )\n\ -\t\t{\n\t\t\ttemp_"+item.split(':')[0]+"[Ii]='0';\n\t\t}\n\ -\t\telse\n\t\t{\n\t\t\ttemp_"+item.split(':')[0]+"[Ii]='1';\n\ -\t\t}\n\t}\n\ttemp_"+item.split(':')[0]+"[Ii]='\\0';\n\n") - - -snprintf_stmt=[] -snprintf_count=0 + assign_data_to_input.append("\tfor(Ii=0;Ii<PORT_SIZE(" + + item.split(':')[0] + ");Ii++)\n\ +\t{\n\t\tif( INPUT_STATE(" + item.split(':')[0] + "[Ii])==ZERO )\n\ +\t\t{\n\t\t\ttemp_" + item.split(':')[0] + "[Ii]='0';\n\t\t}\n\ +\t\telse\n\t\t{\n\t\t\ttemp_" + item.split(':')[0] + "[Ii]='1';\n\ +\t\t}\n\t}\n\ttemp_" + item.split(':')[0] + "[Ii]='\\0';\n\n") + +snprintf_stmt = [] +snprintf_count = 0 snprintf_stmt.append("\t//Sending and receiving data to-from server \n") snprintf_stmt.append('\tsnprintf(send_data,sizeof(send_data),"') for item in input_port: - snprintf_count=snprintf_count+1 - snprintf_stmt.append(item.split(':')[0]+":%s") + snprintf_count = snprintf_count + 1 + snprintf_stmt.append(item.split(':')[0] + ":%s") if snprintf_count == len(input_port): - snprintf_stmt.append('",') - internal_count=0 + snprintf_stmt.append('", ') + internal_count = 0 for item1 in input_port: if internal_count == len(input_port): pass - else: - snprintf_stmt.append("temp_"+item1.split(':')[0]) - internal_count=internal_count+1 + else: + snprintf_stmt.append("temp_" + item1.split(':')[0]) + internal_count = internal_count + 1 if internal_count == len(input_port): pass else: @@ -365,118 +391,124 @@ for item in input_port: else: snprintf_stmt.append(",") +send_data = ''' -send_data=''' - - if ( send(socket_fd,send_data,sizeof(send_data),0)==-1) - { - fprintf(stderr, "Client-Failure Sending Message \\n"); - close(socket_fd); - exit(1); - } - else - { - printf("Client-Message sent: %s \\n",send_data); - fprintf(log_client,"Socket Id : %d & Message sent : %s \\n",socket_fd,send_data); + if ( send(socket_fd,send_data,sizeof(send_data),0)==-1) + { + fprintf(stderr, "Client-Failure Sending Message \\n"); + close(socket_fd); + exit(1); + } + else + { + printf("Client-Message sent: %s \\n",send_data); + fprintf(log_client,"Socket Id : %d & Message sent : %s \\n"''' \ + ''',socket_fd,send_data); } ''' -recv_data=''' +recv_data = ''' - bytes_recieved=recv(socket_fd,recv_data,sizeof(recv_data),0); - if ( bytes_recieved <= 0 ) - { + bytes_recieved=recv(socket_fd,recv_data,sizeof(recv_data),0); + if ( bytes_recieved <= 0 ) + { perror("Client-Either Connection Closed or Error "); - exit(1); - } - recv_data[bytes_recieved] = '\\0'; - - printf("Client-Message Received - %s\\n\\n",recv_data); - fprintf(log_client,"Message Received From Server- %s\\n",recv_data); + exit(1); + } + recv_data[bytes_recieved] = '\\0'; + + printf("Client-Message Received - %s\\n\\n",recv_data); + fprintf(log_client,"Message Received From Server- %s\\n",recv_data); ''' -#Scheduling output event +# Scheduling output event -sch_output_event=[] +sch_output_event = [] for item in output_port: - sch_output_event.append("\t/* Scheduling event and processing them */\n\ -\tif((key_iter=strstr(recv_data, "+'"'+item.split(':')[0]+':"'")) != NULL)\n\ + sch_output_event.append( + "\t/* Scheduling event and processing them */\n\ +\tif((key_iter=strstr(recv_data, " + '"' + item.split(':')[0] + ':"'")) != NULL)\n\ \t{\n\ \t\twhile(*key_iter++ != ':');\n\ \t\tfor(Ii=0;*key_iter != ';';Ii++,key_iter++)\n\ \t\t{\n\ \t\t\tfprintf(log_client,\"Client-Bit val is %c \\n\",*key_iter);\n\ \t\t\tif(*key_iter=='0')\n\t\t\t{\n\ -\t\t\t\t_op_"+item.split(':')[0]+"[Ii]=ZERO;\n\t\t\t}\n\ +\t\t\t\t_op_" + item.split(':')[0] + "[Ii]=ZERO;\n\t\t\t}\n\ \t\t\telse if(*key_iter=='1')\n\t\t\t{\n\ -\t\t\t\t_op_"+item.split(':')[0]+"[Ii]=ONE;\n\ +\t\t\t\t_op_" + item.split(':')[0] + "[Ii]=ONE;\n\ \t\t\t}\n\t\t\telse\n\t\t\t{\n\ \t\t\t\tfprintf(log_client,\"Unknow value return from server \\n\");\n\ \t\t\t\tprintf(\"Client-Unknown value return \\n\");\n\t\t\t}\n\n\ \t\t\tif(ANALYSIS == DC)\n\t\t\t{\n\ -\t\t\t\tOUTPUT_STATE("+item.split(':')[0]+"[Ii]) = _op_"+item.split(':')[0]+"[Ii];\n\ -\t\t\t}\n\t\t\telse if(_op_"+item.split(':')[0]+"[Ii] != _op_"+item.split(':')[0]+"_old[Ii])\n\ -\t\t\t{\n\t\t\t\tOUTPUT_STATE("+item.split(':')[0]+"[Ii]) = _op_"+item.split(':')[0]+"[Ii];\n\ -\t\t\t\tOUTPUT_DELAY("+item.split(':')[0]+"[Ii]) = ((_op_"+item.split(':')[0]+"[Ii] == ZERO) ? PARAM(fall_delay) : PARAM(rise_delay));\n\ +\t\t\t\tOUTPUT_STATE(" + item.split(':')[0] + "[Ii]) = _op_" + item.split(':')[0] + "[Ii];\n\ +\t\t\t}\n\t\t\telse if(_op_" + item.split(':')[0] + "[Ii] != _op_" + item.split(':')[0] + "_old[Ii])\n\ +\t\t\t{\n\t\t\t\tOUTPUT_STATE(" + item.split(':')[0] + "[Ii]) = _op_" + item.split(':')[0] + "[Ii];\n\ +\t\t\t\tOUTPUT_DELAY(" + item.split(':')[0] + "[Ii]) = ((_op_" + item.split(':')[0] + "[Ii] == ZERO) ? PARAM(fall_delay) : PARAM(rise_delay));\n\ \t\t\t}\n\t\t\telse\n\t\t\t{\n\ -\t\t\t\tOUTPUT_CHANGED("+item.split(':')[0]+"[Ii]) = FALSE;\n\t\t\t}\n\ -\t\t\tOUTPUT_STRENGTH("+item.split(':')[0]+"[Ii]) = STRONG;\n\ +\t\t\t\tOUTPUT_CHANGED(" + item.split(':')[0] + "[Ii]) = FALSE;\n\t\t\t}\n\ +\t\t\tOUTPUT_STRENGTH(" + item.split(':')[0] + "[Ii]) = STRONG;\n\ \t\t}\n\ \t}\n") -#Writing content in cfunc.mod file +# Writing content in cfunc.mod file cfunc.write(comment) cfunc.write(header) cfunc.write("\n") cfunc.write(function_open) cfunc.write("\n") -#Adding digital state Variable +# Adding digital state Variable for item in digital_state_output: - cfunc.write("\t"+item+"\n") - -#Adding variable declaration section + cfunc.write("\t" + item + "\n") + +# Adding variable declaration section cfunc.write(var_section) for item in temp_input_var: - cfunc.write("\t"+item+"\n") -cfunc.write("\n"); + cfunc.write("\t" + item + "\n") +cfunc.write("\n") -#Adding INIT portion +# Adding INIT portion cfunc.write(init_start_function) for item in cm_event_alloc: - cfunc.write(2*"\t"+item) + cfunc.write(2 * "\t" + item) cfunc.write("\n") -cfunc.write(2*"\t"+"/* set the load for input ports. */") +cfunc.write(2 * "\t" + "/* set the load for input ports. */") +cfunc.write("\n") +cfunc.write(2 * "\t" + "int Ii;") cfunc.write("\n") -cfunc.write(2*"\t"+"int Ii;") -cfunc.write("\n"); for item in load_in_port: - cfunc.write(2*"\t"+item) + cfunc.write(2 * "\t" + item) cfunc.write("\n") cfunc.write("\n") -cfunc.write(2*"\t"+"/*Retrieve Storage for output*/") +cfunc.write(2 * "\t" + "/*Retrieve Storage for output*/") cfunc.write("\n") for item in cm_event_get_ptr: - cfunc.write(2*"\t"+item) + cfunc.write(2 * "\t" + item) cfunc.write("\n") cfunc.write(systime_info) cfunc.write("\n") cfunc.write(client_setup_ip) cfunc.write("\n") cfunc.write("\t\tchar command[1024];\n") -cfunc.write('\t\tsnprintf(command,1024,"'+home+'/ngspice-nghdl/src/xspice/icm/ghdl/'+fname.split('.')[0]+'/DUTghdl/start_server.sh %d %s &",sock_port, my_ip);') +cfunc.write( + '\t\tsnprintf(command,1024,"' + home + + '/ngspice-nghdl/src/xspice/icm/ghdl/' + + fname.split('.')[0] + + '/DUTghdl/start_server.sh %d %s &",sock_port,my_ip);' +) cfunc.write('\n\t\tsystem(command);') cfunc.write("\n\t}") cfunc.write("\n") cfunc.write("\telse\n\t{\n") for item in els_evt_ptr: - cfunc.write(2*"\t"+item) + cfunc.write(2 * "\t" + item) cfunc.write("\n") cfunc.write("\t}") cfunc.write("\n\n") @@ -500,77 +532,93 @@ cfunc.write(recv_data) for item in sch_output_event: cfunc.write(item) -#Close socket fd +# Close socket fd cfunc.write("\tclose(socket_fd);\n\n") -#close log_client file +# close log_client file cfunc.write("\tfclose(log_client);") -#Close cm_ function +# Close cm_ function cfunc.write("\n}") cfunc.close() -################Creating ifspec.ifs file######################################## -print "Starting with ifspec.ifs file" -ifspec=open('ifspec.ifs','w') -print "Gathering Al the content for ifspec file" +# ####################### Creating ifspec.ifs file ######################## # + +print("Starting with ifspec.ifs file") +ifspec = open('ifspec.ifs', 'w') + +print("Gathering Al the content for ifspec file") -ifspec_comment=''' +ifspec_comment = ''' /* -SUMMARY: This file is auto generated and it contains the interface specification for the -code model. */\n +SUMMARY: This file is auto generated and it contains the interface + specification for the code model. */\n ''' -name_table='NAME_TABLE:\n\ -C_Function_Name: cm_'+fname.split('.')[0]+'\n\ -Spice_Model_Name: '+fname.split('.')[0]+'\n\ -Description: "Model generated from ghdl code '+fname+'" \n' +name_table = 'NAME_TABLE:\n\ +C_Function_Name: cm_' + fname.split('.')[0] + '\n\ +Spice_Model_Name: ' + fname.split('.')[0] + '\n\ +Description: "Model generated from ghdl code ' + fname + '" \n' -#Input and Output Port Table -in_port_table=[] -out_port_table=[] +# Input and Output Port Table +in_port_table = [] +out_port_table = [] for item in input_port: port_table = 'PORT_TABLE:\n' - port_name = 'Port_Name:\t'+item.split(':')[0]+'\n' - description = 'Description:\t"input port '+item.split(':')[0]+'"\n' + port_name = 'Port_Name:\t' + item.split(':')[0] + '\n' + description = 'Description:\t"input port ' + item.split(':')[0] + '"\n' direction = 'Direction:\tin\n' default_type = 'Default_Type:\td\n' allowed_type = 'Allowed_Types:\t[d]\n' vector = 'Vector:\tyes\n' - vector_bounds = 'Vector_Bounds:\t['+item.split(':')[1]+' '+item.split(":")[1]+']\n' + vector_bounds = ( + 'Vector_Bounds:\t[' + item.split(':')[1] + + ' ' + item.split(":")[1] + ']\n' + ) null_allowed = 'Null_Allowed:\tno\n' - #Insert detail in the list - in_port_table.append(port_table+port_name+description+direction+default_type+allowed_type+vector+vector_bounds+null_allowed) + + # Insert detail in the list + in_port_table.append( + port_table + port_name + description + direction + default_type + + allowed_type + vector + vector_bounds + null_allowed + ) for item in output_port: port_table = 'PORT_TABLE:\n' - port_name = 'Port_Name:\t'+item.split(':')[0]+'\n' - description = 'Description:\t"output port '+item.split(':')[0]+'"\n' + port_name = 'Port_Name:\t' + item.split(':')[0] + '\n' + description = 'Description:\t"output port ' + item.split(':')[0] + '"\n' direction = 'Direction:\tout\n' default_type = 'Default_Type:\td\n' allowed_type = 'Allowed_Types:\t[d]\n' vector = 'Vector:\tyes\n' - vector_bounds = 'Vector_Bounds:\t['+item.split(':')[1]+' '+item.split(":")[1]+']\n' + vector_bounds = ( + 'Vector_Bounds:\t[' + item.split(':')[1] + + ' ' + item.split(":")[1] + ']\n' + ) null_allowed = 'Null_Allowed:\tno\n' - #Insert detail in the list - in_port_table.append(port_table+port_name+description+direction+default_type+allowed_type+vector+vector_bounds+null_allowed) -parameter_table=''' + # Insert detail in the list + in_port_table.append( + port_table + port_name + description + direction + default_type + + allowed_type + vector + vector_bounds + null_allowed + ) + +parameter_table = ''' PARAMETER_TABLE: Parameter_Name: instance_id input_load Description: "instance_id" "input load value (F)" Data_Type: real real -Default_Value: 0 1.0e-12 -Limits: - - +Default_Value: 0 1.0e-12 +Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes -PARAMETER_TABLE: +PARAMETER_TABLE: Parameter_Name: rise_delay fall_delay Description: "rise delay" "fall delay" Data_Type: real real @@ -582,7 +630,7 @@ Null_Allowed: yes yes ''' -static_table=''' +static_table = ''' STATIC_VAR_TABLE: @@ -592,18 +640,17 @@ Description: "connect to ghdlserver through this ip" ''' - -#Writing all the content in ifspec file +# Writing all the content in ifspec file ifspec.write(ifspec_comment) -ifspec.write(name_table+"\n\n") +ifspec.write(name_table + "\n\n") for item in in_port_table: - ifspec.write(item+"\n") + ifspec.write(item + "\n") ifspec.write("\n") for item in out_port_table: - ifspec.write(item+"\n") + ifspec.write(item + "\n") ifspec.write("\n") ifspec.write(parameter_table) @@ -612,133 +659,198 @@ ifspec.write(static_table) ifspec.close() -########Creating testbench file ################################################ -print "Starting with testbench file" - -testbench=open(fname.split('.')[0]+'_tb.vhdl','w') -print fname.split('.')[0] + '_tb.vhdl' -#comment -comment_vhdl="--------------------------------------------------------------------------------\n" -comment_vhdl+="--This testbench has been created by Ambikeshwar Srivastava, Rahul Paknikar \n" -comment_vhdl+="--------------------------- FOSSEE, IIT Bombay ---------------------------------\n" -comment_vhdl+="--------------------------------------------------------------------------------\n" - -#Adding header, entity and architecture statement -tb_header=''' -library ieee; -use ieee.std_logic_1164.all; -use ieee.numeric_std.all; -library work; -use work.Vhpi_Foreign.all; +# ######################### Creating testbench file ######################### # + +print("Starting with testbench file") + +testbench = open(fname.split('.')[0] + '_tb.vhdl', 'w') +print(fname.split('.')[0] + '_tb.vhdl') + +# comment +comment_vhdl = "-------------------------------------------------------------" +comment_vhdl += "-------------------\n" +comment_vhdl += "--This testbench has been created by Ambikeshwar Srivastava, " +comment_vhdl += "Rahul Paknikar \n" +comment_vhdl += "--------------------------- FOSSEE, IIT Bombay --------------" +comment_vhdl += "-------------------\n" +comment_vhdl += "-------------------------------------------------------------" +comment_vhdl += "-------------------\n" + +# Adding header, entity and architecture statement +tb_header = ''' +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +library work; +use work.Vhpi_Foreign.all; use work.Utility_Package.all; use work.sock_pkg.all; - ''' -tb_entity="entity "+fname.split('.')[0]+"_tb is\nend entity;\n\n" +tb_entity = "entity " + fname.split('.')[0] + "_tb is\nend entity;\n\n" -arch="architecture "+fname.split('.')[0]+"_tb_beh of "+fname.split('.')[0]+"_tb is\n" +arch = ("architecture " + fname.split('.')[0] + "_tb_beh of " + + fname.split('.')[0] + "_tb is\n") -#Adding components - -components=[] -components.append("\tcomponent "+fname.split('.')[0]+" is\n\t\tport(\n\t\t\t\t") +# Adding components +components = [] +components.append( + "\tcomponent " + fname.split('.')[0] + " is\n\t\tport(\n\t\t\t\t" +) port_vector_count = 0 for item in input_port: if port_vector_info[port_vector_count]: - components.append(item.split(':')[0]+": in std_logic_vector("+str(int(item.split(':')[1])-int(1))+" downto 0);\n\t\t\t\t") + components.append( + item.split(':')[0] + ": in std_logic_vector(" + + str(int(item.split(':')[1]) - int(1)) + + " downto 0);\n\t\t\t\t" + ) else: - components.append(item.split(':')[0]+": in std_logic;\n\t\t\t\t") + components.append( + item.split(':')[0] + ": in std_logic;\n\t\t\t\t" + ) port_vector_count += 1 - #if item.split(":")[1] != '1': - # components.append(item.split(':')[0]+": in std_logic_vector("+str(int(item.split(':')[1])-int(1))+" downto 0);\n\t\t\t\t") - #else: - # components.append(item.split(':')[0]+": in std_logic_vector("+str(int(item.split(':')[1])-int(1))+" downto 0);\n\t\t\t\t") - + # if item.split(":")[1] != '1': + # components.append(item.split(':')[0]+": in std_logic_vector(" + # +str(int(item.split(':')[1])-int(1))+" downto 0);\n\t\t\t\t + # ") + # else: + # components.append(item.split(':')[0]+": in std_logic_vector(" + # +str(int(item.split(':')[1])-int(1))+" downto 0);\n\t\t\t\t + # ") for item in output_port[:-1]: if port_vector_info[port_vector_count]: - components.append(item.split(':')[0]+": out std_logic_vector("+str(int(item.split(':')[1])-int(1))+" downto 0);\n\t\t\t\t") + components.append( + item.split(':')[0] + ": out std_logic_vector(" + + str(int(item.split(':')[1]) - int(1)) + + " downto 0);\n\t\t\t\t" + ) else: - components.append(item.split(':')[0]+": out std_logic;\n\t\t\t\t") + components.append( + item.split(':')[0] + ": out std_logic;\n\t\t\t\t" + ) port_vector_count += 1 if port_vector_info[port_vector_count]: - components.append(output_port[-1].split(':')[0]+": out std_logic_vector("+str(int(output_port[-1].split(':')[1])-int(1))+" downto 0)\n\t\t\t\t") + components.append( + output_port[-1].split(':')[0] + ": out std_logic_vector(" + + str(int(output_port[-1].split(':')[1]) - int(1)) + + " downto 0)\n\t\t\t\t" + ) else: - components.append(output_port[-1].split(':')[0]+": out std_logic\n\t\t\t\t") - #if item.split(":")[1] != '1': - # components.append(item.split(':')[0]+": out std_logic_vector("+str(int(item.split(':')[1])-int(1))+" downto 0)\n\t\t\t\t") - #else: - # components.append(item.split(':')[0]+": out std_logic_vector("+str(int(item.split(':')[1])-int(1))+" downto 0)\n\t\t\t\t") + components.append( + output_port[-1].split(':')[0] + ": out std_logic\n\t\t\t\t" + ) + # if item.split(":")[1] != '1': + # components.append(item.split(':')[0]+": + # out std_logic_vector(" + # +str(int(item.split(':')[1])-int(1))+" downto 0)\n\t\t\t\t") + # else: + # components.append(item.split(':')[0]+": + # out std_logic_vector(" + # +str(int(item.split(':')[1])-int(1))+" downto 0)\n\t\t\t\t") components.append(");\n") components.append("\tend component;\n\n") -#Adding signals -signals=[] +# Adding signals +signals = [] signals.append("\tsignal clk_s : std_logic := '0';\n") port_vector_count = 0 for item in input_port: if port_vector_info[port_vector_count]: - signals.append("\tsignal "+item.split(':')[0]+": std_logic_vector("+str(int(item.split(':')[1])-int(1))+" downto 0);\n") + signals.append( + "\tsignal " + item.split(':')[0] + ": std_logic_vector(" + + str(int(item.split(':')[1]) - int(1)) + " downto 0);\n" + ) else: - signals.append("\tsignal "+item.split(':')[0]+": std_logic;\n") + signals.append("\tsignal " + item.split(':')[0] + ": std_logic;\n") port_vector_count += 1 - #if item.split(":")[1] != '1': - # signals.append("\tsignal "+item.split(':')[0]+": std_logic_vector("+str(int(item.split(':')[1])-int(1))+" downto 0);\n") - #else: - # signals.append("\tsignal "+item.split(':')[0]+": std_logic_vector("+str(int(item.split(':')[1])-int(1))+" downto 0);\n") + # if item.split(":")[1] != '1': + # signals.append("\tsignal "+item.split(':')[0]+": + # std_logic_vector("+str(int(item.split(':')[1]) - + # int(1))+" downto 0);\n") + # else: + # signals.append("\tsignal "+item.split(':')[0]+": + # std_logic_vector("+str(int(item.split(':')[1]) - + # int(1))+" downto 0);\n") for item in output_port: if port_vector_info[port_vector_count]: - signals.append("\tsignal "+item.split(':')[0]+": std_logic_vector("+str(int(item.split(':')[1])-int(1))+" downto 0);\n") + signals.append( + "\tsignal " + item.split(':')[0] + ": std_logic_vector(" + + str(int(item.split(':')[1]) - int(1)) + " downto 0);\n" + ) else: - signals.append("\tsignal "+item.split(':')[0]+": std_logic;\n") + signals.append("\tsignal " + item.split(':')[0] + ": std_logic;\n") port_vector_count += 1 - #if item.split(":")[1] != '1': - # signals.append("\tsignal "+item.split(':')[0]+": std_logic_vector("+str(int(item.split(':')[1])-int(1))+" downto 0);\n") - #else: - # signals.append("\tsignal "+item.split(':')[0]+": std_logic_vector("+str(int(item.split(':')[1])-int(1))+" downto 0);\n") + # if item.split(":")[1] != '1': + # signals.append("\tsignal "+item.split(':')[0]+": + # std_logic_vector("+str(int(item.split(':')[1])-int(1))+" downto 0);\n") + # else: + # signals.append("\tsignal "+item.split(':')[0]+": + # std_logic_vector("+str(int(item.split(':')[1])-int(1))+" downto 0);\n") -#Adding mapping part -map=[] -map.append("\tu1 : "+fname.split('.')[0]+" port map(\n") +# Adding mapping part +map = [] +map.append("\tu1 : " + fname.split('.')[0] + " port map(\n") for item in input_port: - map.append("\t\t\t\t"+item.split(':')[0]+" => "+item.split(':')[0]+",\n") + map.append( + "\t\t\t\t" + item.split(':')[0] + " => " + item.split(':')[0] + ",\n" + ) for item in output_port: if output_port.index(item) == len(output_port) - 1: - map.append("\t\t\t\t"+item.split(':')[0]+" => "+item.split(':')[0]+"\n") + map.append( + "\t\t\t\t" + item.split(':')[0] + " => " + item.split(':')[0] + "\n" + ) else: - map.append("\t\t\t\t"+item.split(':')[0]+" => "+item.split(':')[0]+",\n") + map.append( + "\t\t\t\t" + item.split(':')[0] + " => " + item.split(':')[0] + ",\n" + ) map.append("\t\t\t);") -#testbench Clock -tb_clk= "clk_s <= not clk_s after 5 us;\n\n" -#Adding Process block for Vhpi -process_Vhpi=[] -process_Vhpi.append("\tprocess\n\t\tvariable sock_port : integer;\n\t\ttype string_ptr is access string;\n\t\tvariable sock_ip : string_ptr;\n\t\tbegin\n\t\tsock_port := sock_port_fun;\n\t\tsock_ip := new string'(sock_ip_fun);\n\t\tVhpi_Initialize(sock_port, Pack_String_To_Vhpi_String(sock_ip.all));\n\t\twait until clk_s = '1';\n\t\twhile true loop\n\t\t\twait until clk_s = '0';\n\t\t\tVhpi_Listen;\n\t\t\twait for 1 us;\n\t\t\tVhpi_Send;\n\t\tend loop;\n\t\twait;\n\tend process;\n\n") -#Adding process block -process=[] +# Testbench Clock +tb_clk = "clk_s <= not clk_s after 5 us;\n\n" + +# Adding Process block for Vhpi +process_Vhpi = [] +process_Vhpi.append( + "process\n\t\tvariable sock_port : integer;" + + "\n\t\ttype string_ptr is access string;" + + "\n\t\tvariable sock_ip : string_ptr;" + + "\n\t\tbegin\n\t\tsock_port := sock_port_fun;" + + "\n\t\tsock_ip := new string'(sock_ip_fun);" + + "\n\t\tVhpi_Initialize(sock_port," + + "Pack_String_To_Vhpi_String(sock_ip.all));" + + "\n\t\twait until clk_s = '1';" + + "\n\t\twhile true loop\n\t\t\twait until clk_s = '0';" + + "\n\t\t\tVhpi_Listen;\n\t\t\twait for 1 us;\n\t\t\t" + + "Vhpi_Send;" + + "\n\t\tend loop;\n\t\twait;\n\tend process;\n\n" +) + +# Adding process block +process = [] process.append("\tprocess\n") process.append("\t\tvariable count : integer:=0;\n") for item in input_port: - process.append("\t\tvariable "+item.split(':')[0]+"_v : VhpiString;\n") + process.append("\t\tvariable " + item.split(':')[0] + "_v : VhpiString;\n") for item in output_port: - process.append("\t\tvariable "+item.split(':')[0]+"_v : VhpiString;\n") + process.append("\t\tvariable " + item.split(':')[0] + "_v : VhpiString;\n") process.append("\t\tvariable obj_ref : VhpiString;\n") process.append("\tbegin\n") @@ -748,12 +860,27 @@ process.append("\t\t\twait until clk_s = '0';\n\n") port_vector_count = 0 for item in input_port: - process.append('\t\t\tobj_ref := Pack_String_To_Vhpi_String("'+item.split(':')[0]+'");\n') - process.append('\t\t\tVhpi_Get_Port_Value(obj_ref,'+item.split(':')[0]+'_v,'+item.split(':')[1]+');\n') + process.append( + '\t\t\tobj_ref := Pack_String_To_Vhpi_String("' + + item.split(':')[0] + '");\n' + ) + process.append( + '\t\t\tVhpi_Get_Port_Value(obj_ref,' + + item.split(':')[0] + '_v,' + item.split(':')[1] + ');\n' + ) + if port_vector_info[port_vector_count]: - process.append('\t\t\t'+item.split(':')[0]+' <= Unpack_String('+item.split(':')[0]+'_v,'+item.split(':')[1]+');\n') + process.append( + '\t\t\t' + item.split(':')[0] + + ' <= Unpack_String(' + item.split(':')[0] + '_v,' + + item.split(':')[1] + ');\n' + ) else: - process.append('\t\t\t'+item.split(':')[0]+' <= To_Std_Logic('+item.split(':')[0]+'_v'+');\n') + process.append( + '\t\t\t' + item.split(':')[0] + + ' <= To_Std_Logic('+item.split(':')[0]+'_v'+');\n' + ) + port_vector_count += 1 process.append("\n") @@ -761,23 +888,41 @@ process.append('\t\t\twait for 1 us;\n') for item in output_port: if port_vector_info[port_vector_count]: - process.append('\t\t\t'+item.split(':')[0]+'_v := Pack_String_To_Vhpi_String(Convert_SLV_To_String('+item.split(':')[0]+'));\n') + process.append( + '\t\t\t' + item.split(':')[0] + + '_v := Pack_String_To_Vhpi_String' + + '(Convert_SLV_To_String(' + + item.split(':')[0]+'));\n' + ) else: - process.append('\t\t\t'+item.split(':')[0]+'_v := Pack_String_To_Vhpi_String(To_String('+item.split(':')[0]+'));\n') + process.append( + '\t\t\t' + item.split(':')[0] + + '_v := Pack_String_To_Vhpi_String(To_String(' + + item.split(':')[0]+'));\n' + ) + port_vector_count += 1 - process.append('\t\t\tobj_ref := Pack_String_To_Vhpi_String("'+item.split(':')[0]+'");\n') - process.append('\t\t\tVhpi_Set_Port_Value(obj_ref,'+item.split(':')[0]+'_v,'+item.split(':')[1]+');\n') + process.append( + '\t\t\tobj_ref := Pack_String_To_Vhpi_String("' + + item.split(':')[0]+'");\n' + ) + process.append( + '\t\t\tVhpi_Set_Port_Value(obj_ref,' + + item.split(':')[0] + '_v,' + item.split(':')[1] + ');\n' + ) process.append("\n") -process.append('\t\t\treport "Iteration - "' + "& integer'image(count) severity note;\n") +process.append( + '\t\t\treport "Iteration - "' + + "& integer'image(count) severity note;\n" +) process.append('\t\t\tcount := count + 1;\n') process.append("\t\tend loop;\n") process.append("\tend process;\n\n") process.append("end architecture;") - -#Writing all the components to testbench file +# Writing all the components to testbench file testbench.write(comment_vhdl) testbench.write(tb_header) testbench.write(tb_entity) @@ -807,13 +952,20 @@ for item in process: testbench.close() -##################################### Creating and writing components in start_server.sh ################################ -start_server = open('start_server.sh','w') +# ########### Creating and writing components in start_server.sh ########### # + +start_server = open('start_server.sh', 'w') start_server.write("#!/bin/bash\n\n") -start_server.write("###This server run ghdl testebench for infinite time till ngspice send END signal to stop it\n\n") -start_server.write("cd "+home+"/ngspice-nghdl/src/xspice/icm/ghdl/"+fname.split('.')[0]+"/DUTghdl/\n") +start_server.write( + "###This server run ghdl testebench for infinite time till " + + "ngspice send END signal to stop it\n\n" +) +start_server.write( + "cd "+home+"/ngspice-nghdl/src/xspice/icm/ghdl/" + + fname.split('.')[0]+"/DUTghdl/\n" +) start_server.write("chmod 775 sock_pkg_create.sh &&\n") start_server.write("./sock_pkg_create.sh $1 $2 &&\n") start_server.write("ghdl -a sock_pkg.vhdl &&\n") @@ -824,12 +976,16 @@ start_server.write("./"+fname.split('.')[0]+"_tb") start_server.close() -##################################### Creating and writing in sock_pkg_create.sh ######################################## -sock_pkg_create = open('sock_pkg_create.sh','w') +# ############### Creating and writing in sock_pkg_create.sh ############### # + +sock_pkg_create = open('sock_pkg_create.sh', 'w') sock_pkg_create.write("#!/bin/bash\n\n") -sock_pkg_create.write("##This file creates sock_pkg.vhdl file and sets the port and ip from parameters passed to it\n\n") +sock_pkg_create.write( + "##This file creates sock_pkg.vhdl file and sets the port " + + "and ip from parameters passed to it\n\n" +) sock_pkg_create.write("echo \"library ieee;\n") sock_pkg_create.write("package sock_pkg is\n") sock_pkg_create.write("\tfunction sock_port_fun return integer;\n") @@ -849,4 +1005,4 @@ sock_pkg_create.write("\t\t\tbegin\n") sock_pkg_create.write('\t\t\t\tsock_ip := new string\'(\\"$2\\");\n') sock_pkg_create.write("\t\t\t\treturn sock_ip.all;\n") sock_pkg_create.write("\t\t\tend function;\n\n") -sock_pkg_create.write("\t\tend package body;\" > sock_pkg.vhdl")
\ No newline at end of file +sock_pkg_create.write("\t\tend package body;\" > sock_pkg.vhdl") |