summaryrefslogtreecommitdiff
path: root/src/model_generation.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/model_generation.py')
-rw-r--r--src/model_generation.py904
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")