diff --git a/src/verilog_netlist.c.xxx b/src/verilog_netlist.c.xxx deleted file mode 100644 index a04a2dd4..00000000 --- a/src/verilog_netlist.c.xxx +++ /dev/null @@ -1,547 +0,0 @@ -/* File: verilog_netlist.c - * - * This file is part of XSCHEM, - * a schematic capture and Spice/Vhdl/Verilog netlisting tool for circuit - * simulation. - * Copyright (C) 1998-2020 Stefan Frederik Schippers - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "xschem.h" -static struct hashentry *subckt_table[HASHSIZE]; - -void global_verilog_netlist(int global) /* netlister driver */ -{ - FILE *fd; - const char *str_tmp; - static char *sig_type = NULL; - static char *port_value = NULL; - static char *tmp_string=NULL; - unsigned int *stored_flags; - int i, tmp, save_ok; - char netl_filename[PATH_MAX]; /* overflow safe 20161122 */ - char tcl_cmd_netlist[PATH_MAX + 100]; /* 20081203 overflow safe 20161122 */ - char cellname[PATH_MAX]; /* 20081203 overflow safe 20161122 */ - static char *type=NULL; - struct stat buf; - char *subckt_name; - - if(current_type==SYMBOL) { - tcleval("alert_ {This is a symbol, no netlisting can be done.\n" - "If this is a schematic delete any 'type=...'\n" - "from global properties, save and restart xschem}"); - return; - } - if(modified) { - save_ok = save_schematic(schematic[currentsch]); - if(save_ok == -1) return; - } - free_hash(subckt_table); - statusmsg("",2); /* clear infowindow */ - netlist_count=0; - /* top sch properties used for library use declarations and type definitions */ - /* to be printed before any entity declarations */ - - my_snprintf(netl_filename, S(netl_filename), "%s/.%s_%d", netlist_dir, skip_dir(schematic[currentsch]),getpid()); - fd=fopen(netl_filename, "w"); - - if(user_top_netl_name[0]) { - my_snprintf(cellname, S(cellname), "%s", get_cell(user_top_netl_name, 0)); - } else { - my_snprintf(cellname, S(cellname), "%s.v", skip_dir(schematic[currentsch])); - } - - if(fd==NULL){ - dbg(0, "global_verilog_netlist(): problems opening netlist file\n"); - return; - } - dbg(1, "global_verilog_netlist(): opening %s for writing\n",netl_filename); - - - -/* print verilog timescale 10102004 */ - for(i=0;iprop_ptr, "verilog_ignore",0 ), "true") ) { - continue; - } - my_strdup(105, &type,(inst_ptr[i].ptr+instdef)->type); - if( type && (strcmp(type,"timescale"))==0) - { - str_tmp = get_tok_value( (inst_ptr[i].ptr+instdef)->prop_ptr ,"format",0); - my_strdup(106, &tmp_string, str_tmp); - fprintf(fd, "%s\n", str_tmp ? translate(i, tmp_string) : "(NULL)"); - } - } - - - - dbg(1, "global_verilog_netlist(): printing top level entity\n"); - fprintf(fd,"module %s (\n", skip_dir( schematic[currentsch]) ); - /* flush data structures (remove unused symbols) */ - unselect_all(); - remove_symbols(); /* removed 25122002, readded 04112003 */ - - dbg(1, "global_verilog_netlist(): schematic[currentsch]=%s\n", schematic[currentsch]); - - load_schematic(1,schematic[currentsch] ,0); /* 20180927 */ - - - /* print top subckt port directions */ - dbg(1, "global_verilog_netlist(): printing top level out pins\n"); - tmp=0; - for(i=0;iprop_ptr, "verilog_ignore",0 ), "true") ) { - continue; - } - my_strdup(546, &type,(inst_ptr[i].ptr+instdef)->type); - if( type && (strcmp(type,"opin"))==0) - { - if(tmp) fprintf(fd, " ,\n"); - tmp++; - str_tmp = get_tok_value(inst_ptr[i].prop_ptr,"lab",0); - fprintf(fd, " %s", str_tmp ? str_tmp : "(NULL)"); - } - } - - dbg(1, "global_verilog_netlist(): printing top level inout pins\n"); - for(i=0;iprop_ptr, "verilog_ignore",0 ), "true") ) { - continue; - } - my_strdup(547, &type,(inst_ptr[i].ptr+instdef)->type); - if( type && (strcmp(type,"iopin"))==0) - { - if(tmp) fprintf(fd, " ,\n"); - tmp++; - str_tmp = get_tok_value(inst_ptr[i].prop_ptr,"lab",0); - fprintf(fd, " %s", str_tmp ? str_tmp : "(NULL)"); - } - } - - dbg(1, "global_verilog_netlist(): printing top level input pins\n"); - for(i=0;iprop_ptr, "verilog_ignore",0 ), "true") ) { - continue; - } - my_strdup(548, &type,(inst_ptr[i].ptr+instdef)->type); - if( type && (strcmp(type,"ipin"))==0) - { - if(tmp) fprintf(fd, " ,\n"); - tmp++; - str_tmp = get_tok_value(inst_ptr[i].prop_ptr,"lab",0); - fprintf(fd, " %s", str_tmp ? str_tmp : ""); - } - } - - fprintf(fd,"\n);\n"); - - /* 20071006 print top level params if defined in symbol */ - str_tmp = add_ext(schematic[currentsch], ".sym"); - if(!stat(str_tmp, &buf)) { - load_sym_def(str_tmp, NULL ); - print_verilog_param(fd,lastinstdef-1); /* added print top level params */ - remove_symbol(); - } - /* 20071006 end */ - - - - /* print top subckt port types */ - dbg(1, "global_verilog_netlist(): printing top level out pins\n"); - for(i=0;iprop_ptr, "verilog_ignore",0 ), "true") ) { - continue; - } - my_strdup(549, &type,(inst_ptr[i].ptr+instdef)->type); - if( type && (strcmp(type,"opin"))==0) - { - my_strdup(550, &port_value,get_tok_value(inst_ptr[i].prop_ptr,"value",0)); - my_strdup(551, &sig_type,get_tok_value(inst_ptr[i].prop_ptr,"verilog_type",0)); - if(!sig_type || sig_type[0]=='\0') my_strdup(552, &sig_type,"wire"); /* 20070720 changed reg to wire */ - str_tmp = get_tok_value(inst_ptr[i].prop_ptr,"lab",0); - fprintf(fd, " output %s ;\n", str_tmp ? str_tmp : "(NULL)"); - fprintf(fd, " %s %s ", sig_type, str_tmp ? str_tmp : "(NULL)"); - /* 20140410 */ - if(port_value && port_value[0]) fprintf(fd," = %s", port_value); - fprintf(fd, ";\n"); - } - } - - dbg(1, "global_verilog_netlist(): printing top level inout pins\n"); - for(i=0;iprop_ptr, "verilog_ignore",0 ), "true") ) { - continue; - } - my_strdup(553, &type,(inst_ptr[i].ptr+instdef)->type); - if( type && (strcmp(type,"iopin"))==0) - { - my_strdup(554, &port_value,get_tok_value(inst_ptr[i].prop_ptr,"value",0)); - my_strdup(555, &sig_type,get_tok_value(inst_ptr[i].prop_ptr,"verilog_type",0)); - if(!sig_type || sig_type[0]=='\0') my_strdup(556, &sig_type,"wire"); - str_tmp = get_tok_value(inst_ptr[i].prop_ptr,"lab",0); - fprintf(fd, " inout %s ;\n", str_tmp ? str_tmp : "(NULL)"); - fprintf(fd, " %s %s ", sig_type, str_tmp ? str_tmp : "(NULL)"); - /* 20140410 */ - if(port_value && port_value[0]) fprintf(fd," = %s", port_value); - fprintf(fd, ";\n"); - } - } - - dbg(1, "global_verilog_netlist(): printing top level input pins\n"); - for(i=0;iprop_ptr, "verilog_ignore",0 ), "true") ) { - continue; - } - my_strdup(557, &type,(inst_ptr[i].ptr+instdef)->type); - if( type && (strcmp(type,"ipin"))==0) - { - my_strdup(558, &port_value,get_tok_value(inst_ptr[i].prop_ptr,"value",0)); - my_strdup(559, &sig_type,get_tok_value(inst_ptr[i].prop_ptr,"verilog_type",0)); - if(!sig_type || sig_type[0]=='\0') my_strdup(560, &sig_type,"wire"); - str_tmp = get_tok_value(inst_ptr[i].prop_ptr,"lab",0); - fprintf(fd, " input %s ;\n", str_tmp ? str_tmp : ""); - fprintf(fd, " %s %s ", sig_type, str_tmp ? str_tmp : ""); - /* 20140410 */ - if(port_value && port_value[0]) fprintf(fd," = %s", port_value); - fprintf(fd, ";\n"); - } - } - - dbg(1, "global_verilog_netlist(): netlisting top level\n"); - verilog_netlist(fd, 0); - netlist_count++; - fprintf(fd,"---- begin user architecture code\n"); - /* 20180124 */ - for(i=0;iprop_ptr, "verilog_ignore",0 ), "true") ) { - continue; - } - my_strdup(561, &type,(inst_ptr[i].ptr+instdef)->type); - if(type && !strcmp(type,"netlist_commands")) { - fprintf(fd, "%s\n", get_tok_value(inst_ptr[i].prop_ptr,"value",2)); /* 20180124 */ - } - } - - - if(schverilogprop && schverilogprop[0]) { - fprintf(fd, "%s\n", schverilogprop); - } - fprintf(fd,"---- end user architecture code\n"); - fprintf(fd, "endmodule\n"); - - if(split_files) { /* 20081205 */ - fclose(fd); - my_snprintf(tcl_cmd_netlist, S(tcl_cmd_netlist), "netlist {%s} noshow {%s}", netl_filename, cellname); - tcleval(tcl_cmd_netlist); - if(debug_var==0) xunlink(netl_filename); - } - - /* preserve current level instance flags before descending hierarchy for netlisting, restore later */ - stored_flags = my_calloc(150, lastinst, sizeof(unsigned int)); - for(i=0;iprop_ptr, "verilog_ignore",0 ), "true") ) { - continue; - } - my_strdup(544, &type,(inst_ptr[j].ptr+instdef)->type); - if( type && (strcmp(type,"timescale"))==0) - { - str_tmp = get_tok_value( (inst_ptr[j].ptr+instdef)->prop_ptr ,"format",0); - my_strdup(545, &tmp_string, str_tmp); - fprintf(fd, "%s\n", str_tmp ? translate(j, tmp_string) : "(NULL)"); - } - } - - fprintf(fd, "module %s (\n", skip_dir(instdef[i].name)); - /*print_generic(fd, "entity", i); */ /* 02112003 */ - - dbg(1, "verilog_block_netlist(): entity ports\n"); - - /* print ports directions */ - tmp=0; - for(j=0;j"); - } - fprintf(fd, "\n);\n"); - - /*16112003 */ - dbg(1, "verilog_block_netlist(): entity generics\n"); - /* print module default parameters */ - print_verilog_param(fd,i); - - - - - /* print port types */ - tmp=0; - for(j=0;j"); - fprintf(fd," %s %s", - sig_type, - str_tmp ? str_tmp : ""); - if(port_value &&port_value[0]) - fprintf(fd," = %s", port_value); - fprintf(fd," ;\n"); - } - - dbg(1, "verilog_block_netlist(): netlisting %s\n", skip_dir( schematic[currentsch])); - verilog_netlist(fd, verilog_stop); - netlist_count++; - fprintf(fd,"---- begin user architecture code\n"); - for(l=0;lprop_ptr, "verilog_ignore",0 ), "true") ) { - continue; - } - if(netlist_count && - !strcmp(get_tok_value(inst_ptr[l].prop_ptr, "only_toplevel", 0), "true")) continue; /* 20160418 */ - - my_strdup(569, &type,(inst_ptr[l].ptr+instdef)->type); - if(type && !strcmp(type,"netlist_commands")) { - fprintf(fd, "%s\n", get_tok_value(inst_ptr[l].prop_ptr,"value",2)); /* 20180124 */ - } - } - - if(schverilogprop && schverilogprop[0]) { - fprintf(fd, "%s\n", schverilogprop); - } - fprintf(fd,"---- end user architecture code\n"); - fprintf(fd, "endmodule\n"); - if(split_files) { /* 20081204 */ - fclose(fd); - my_snprintf(tcl_cmd_netlist, S(tcl_cmd_netlist), "netlist {%s} noshow {%s}", netl_filename, cellname); - tcleval(tcl_cmd_netlist); - if(debug_var==0) xunlink(netl_filename); - } - - -} - -void verilog_netlist(FILE *fd , int verilog_stop) -{ - int i; - static char *type=NULL; - - prepared_netlist_structs = 0; - prepare_netlist_structs(1); - /* set_modify(1); */ /* 20160302 prepare_netlist_structs could change schematic (wire node naming for example) */ - dbg(2, "verilog_netlist(): end prepare_netlist_structs\n"); - traverse_node_hash(); /* print all warnings about unconnected floatings etc */ - - dbg(2, "verilog_netlist(): end traverse_node_hash\n"); - - fprintf(fd,"---- begin signal list\n"); - if(!verilog_stop) print_verilog_signals(fd); - fprintf(fd,"---- end signal list\n"); - - - if(!verilog_stop) - { - for(i=0;iprop_ptr, "verilog_ignore",0 ), "true") ) { /*20070726 */ - continue; /*20070726 */ - } /*20070726 */ - - dbg(2, "verilog_netlist(): into the netlisting loop\n"); - my_strdup(570, &type,(inst_ptr[i].ptr+instdef)->type); - if( type && - ( strcmp(type,"label")&& - strcmp(type,"ipin")&& - strcmp(type,"opin")&& - strcmp(type,"iopin")&& - strcmp(type,"use")&& - strcmp(type,"netlist_commands")&& /* 20180124 */ - strcmp(type,"timescale")&& - strcmp(type,"verilog_preprocessor")&& - strcmp(type,"package") && - strcmp(type,"attributes") && - strcmp(type,"port_attributes") && - strcmp(type,"architecture") && - strcmp(type,"arch_declarations") - )) - { - if(lastselected) - { - if(inst_ptr[i].sel==SELECTED) print_verilog_element(fd, i) ; - } - else print_verilog_element(fd, i) ; /* this is the element line */ - } - } - } - dbg(1, "verilog_netlist(): end\n"); - if(!netlist_count) redraw_hilights(); /*draw_hilight_net(1); */ - -}