tedax, verilog, spice netlists: do not expand unused subcircuits (due to *_ignore attrs on instances/symbols)
This commit is contained in:
parent
0a4f942fb7
commit
f2214150ae
|
|
@ -23,6 +23,7 @@
|
||||||
#include "xschem.h"
|
#include "xschem.h"
|
||||||
|
|
||||||
static Str_hashtable model_table = {NULL, 0}; /* safe even with multiple schematics */
|
static Str_hashtable model_table = {NULL, 0}; /* safe even with multiple schematics */
|
||||||
|
static Int_hashtable used_symbols = {NULL, 0};
|
||||||
|
|
||||||
static const char *hier_psprint_mtime(const char *file_name)
|
static const char *hier_psprint_mtime(const char *file_name)
|
||||||
{
|
{
|
||||||
|
|
@ -206,7 +207,10 @@ static int spice_netlist(FILE *fd, int spice_stop )
|
||||||
fprintf(fd,"**** end user architecture code\n");
|
fprintf(fd,"**** end user architecture code\n");
|
||||||
} else {
|
} else {
|
||||||
const char *m;
|
const char *m;
|
||||||
if(print_spice_element(fd, i)) fprintf(fd, "**** end_element\n");
|
if(print_spice_element(fd, i)) {
|
||||||
|
int_hash_lookup(&used_symbols, xctx->inst[i].name, 1, XINSERT); /* symbol is used */
|
||||||
|
fprintf(fd, "**** end_element\n");
|
||||||
|
}
|
||||||
/* hash device_model attribute if any */
|
/* hash device_model attribute if any */
|
||||||
m = get_tok_value(xctx->inst[i].prop_ptr, "device_model", 0);
|
m = get_tok_value(xctx->inst[i].prop_ptr, "device_model", 0);
|
||||||
if(m[0]) str_hash_lookup(&model_table, model_name(m), m, XINSERT);
|
if(m[0]) str_hash_lookup(&model_table, model_name(m), m, XINSERT);
|
||||||
|
|
@ -252,6 +256,7 @@ int global_spice_netlist(int global) /* netlister driver */
|
||||||
statusmsg("",2); /* clear infowindow */
|
statusmsg("",2); /* clear infowindow */
|
||||||
str_hash_init(&subckt_table, HASHSIZE);
|
str_hash_init(&subckt_table, HASHSIZE);
|
||||||
str_hash_init(&model_table, HASHSIZE);
|
str_hash_init(&model_table, HASHSIZE);
|
||||||
|
int_hash_init(&used_symbols, HASHSIZE);
|
||||||
record_global_node(2, NULL, NULL); /* delete list of global nodes */
|
record_global_node(2, NULL, NULL); /* delete list of global nodes */
|
||||||
bus_char[0] = bus_char[1] = '\0';
|
bus_char[0] = bus_char[1] = '\0';
|
||||||
xctx->hiersep[0]='.'; xctx->hiersep[1]='\0';
|
xctx->hiersep[0]='.'; xctx->hiersep[1]='\0';
|
||||||
|
|
@ -410,6 +415,7 @@ int global_spice_netlist(int global) /* netlister driver */
|
||||||
get_additional_symbols(1);
|
get_additional_symbols(1);
|
||||||
for(i=0;i<xctx->symbols; ++i)
|
for(i=0;i<xctx->symbols; ++i)
|
||||||
{
|
{
|
||||||
|
if(int_hash_lookup(&used_symbols, xctx->sym[i].name, 0, XLOOKUP) == NULL) continue;
|
||||||
if( strcmp(get_tok_value(xctx->sym[i].prop_ptr,"spice_ignore",0),"true")==0 ) continue;
|
if( strcmp(get_tok_value(xctx->sym[i].prop_ptr,"spice_ignore",0),"true")==0 ) continue;
|
||||||
if(!xctx->sym[i].type) continue;
|
if(!xctx->sym[i].type) continue;
|
||||||
my_strdup(_ALLOC_ID_, &abs_path, abs_sym_path(xctx->sym[i].name, ""));
|
my_strdup(_ALLOC_ID_, &abs_path, abs_sym_path(xctx->sym[i].name, ""));
|
||||||
|
|
@ -499,6 +505,7 @@ int global_spice_netlist(int global) /* netlister driver */
|
||||||
}
|
}
|
||||||
str_hash_free(&model_table);
|
str_hash_free(&model_table);
|
||||||
str_hash_free(&subckt_table);
|
str_hash_free(&subckt_table);
|
||||||
|
int_hash_free(&used_symbols);
|
||||||
if(first) fprintf(fd,"**** end user architecture code\n");
|
if(first) fprintf(fd,"**** end user architecture code\n");
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "xschem.h"
|
#include "xschem.h"
|
||||||
|
static Int_hashtable used_symbols = {NULL, 0};
|
||||||
static int tedax_netlist(FILE *fd, int tedax_stop )
|
static int tedax_netlist(FILE *fd, int tedax_stop )
|
||||||
{
|
{
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
@ -66,6 +66,8 @@ static int tedax_netlist(FILE *fd, int tedax_stop )
|
||||||
fprintf(fd,"#**** end user architecture code\n");
|
fprintf(fd,"#**** end user architecture code\n");
|
||||||
} else {
|
} else {
|
||||||
print_tedax_element(fd, i) ; /* this is the element line */
|
print_tedax_element(fd, i) ; /* this is the element line */
|
||||||
|
int_hash_lookup(&used_symbols, xctx->inst[i].name, 1, XINSERT); /* symbol is used */
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -138,6 +140,7 @@ int global_tedax_netlist(int global) /* netlister driver */
|
||||||
xctx->push_undo();
|
xctx->push_undo();
|
||||||
statusmsg("",2); /* clear infowindow */
|
statusmsg("",2); /* clear infowindow */
|
||||||
str_hash_init(&subckt_table, HASHSIZE);
|
str_hash_init(&subckt_table, HASHSIZE);
|
||||||
|
int_hash_init(&used_symbols, HASHSIZE);
|
||||||
record_global_node(2, NULL, NULL); /* delete list of global nodes */
|
record_global_node(2, NULL, NULL); /* delete list of global nodes */
|
||||||
bus_char[0] = bus_char[1] = '\0';
|
bus_char[0] = bus_char[1] = '\0';
|
||||||
xctx->hiersep[0]='.'; xctx->hiersep[1]='\0';
|
xctx->hiersep[0]='.'; xctx->hiersep[1]='\0';
|
||||||
|
|
@ -206,6 +209,7 @@ int global_tedax_netlist(int global) /* netlister driver */
|
||||||
get_additional_symbols(1);
|
get_additional_symbols(1);
|
||||||
for(i=0;i<xctx->symbols; ++i)
|
for(i=0;i<xctx->symbols; ++i)
|
||||||
{
|
{
|
||||||
|
if(int_hash_lookup(&used_symbols, xctx->sym[i].name, 0, XLOOKUP) == NULL) continue;
|
||||||
if( strcmp(get_tok_value(xctx->sym[i].prop_ptr,"tedax_ignore",0),"true")==0 ) continue;
|
if( strcmp(get_tok_value(xctx->sym[i].prop_ptr,"tedax_ignore",0),"true")==0 ) continue;
|
||||||
if(!xctx->sym[i].type) continue;
|
if(!xctx->sym[i].type) continue;
|
||||||
my_strdup2(_ALLOC_ID_, &abs_path, abs_sym_path(tcl_hook2(xctx->sym[i].name), ""));
|
my_strdup2(_ALLOC_ID_, &abs_path, abs_sym_path(tcl_hook2(xctx->sym[i].name), ""));
|
||||||
|
|
@ -245,6 +249,7 @@ int global_tedax_netlist(int global) /* netlister driver */
|
||||||
propagate_hilights(1, 0, XINSERT_NOREPLACE);
|
propagate_hilights(1, 0, XINSERT_NOREPLACE);
|
||||||
draw_hilight_net(1);
|
draw_hilight_net(1);
|
||||||
my_free(_ALLOC_ID_, &stored_flags);
|
my_free(_ALLOC_ID_, &stored_flags);
|
||||||
|
int_hash_free(&used_symbols);
|
||||||
|
|
||||||
/* print globals nodes found in netlist 28032003 */
|
/* print globals nodes found in netlist 28032003 */
|
||||||
record_global_node(0,fd,NULL);
|
record_global_node(0,fd,NULL);
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "xschem.h"
|
#include "xschem.h"
|
||||||
|
static Int_hashtable used_symbols = {NULL, 0};
|
||||||
|
|
||||||
static int verilog_netlist(FILE *fd , int verilog_stop)
|
static int verilog_netlist(FILE *fd , int verilog_stop)
|
||||||
{
|
{
|
||||||
|
|
@ -60,9 +61,15 @@ static int verilog_netlist(FILE *fd , int verilog_stop)
|
||||||
{
|
{
|
||||||
if(xctx->lastsel)
|
if(xctx->lastsel)
|
||||||
{
|
{
|
||||||
if(xctx->inst[i].sel==SELECTED) print_verilog_element(fd, i) ;
|
if(xctx->inst[i].sel==SELECTED) {
|
||||||
|
print_verilog_element(fd, i) ;
|
||||||
|
int_hash_lookup(&used_symbols, xctx->inst[i].name, 1, XINSERT); /* symbol is used */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
print_verilog_element(fd, i) ; /* this is the element line */
|
||||||
|
int_hash_lookup(&used_symbols, xctx->inst[i].name, 1, XINSERT); /* symbol is used */
|
||||||
}
|
}
|
||||||
else print_verilog_element(fd, i) ; /* this is the element line */
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
my_free(_ALLOC_ID_, &type);
|
my_free(_ALLOC_ID_, &type);
|
||||||
|
|
@ -98,6 +105,7 @@ int global_verilog_netlist(int global) /* netlister driver */
|
||||||
xctx->netlist_unconn_cnt=0; /* unique count of unconnected pins while netlisting */
|
xctx->netlist_unconn_cnt=0; /* unique count of unconnected pins while netlisting */
|
||||||
statusmsg("",2); /* clear infowindow */
|
statusmsg("",2); /* clear infowindow */
|
||||||
str_hash_init(&subckt_table, HASHSIZE);
|
str_hash_init(&subckt_table, HASHSIZE);
|
||||||
|
int_hash_init(&used_symbols, HASHSIZE);
|
||||||
xctx->netlist_count=0;
|
xctx->netlist_count=0;
|
||||||
/* top sch properties used for library use declarations and type definitions */
|
/* top sch properties used for library use declarations and type definitions */
|
||||||
/* to be printed before any entity declarations */
|
/* to be printed before any entity declarations */
|
||||||
|
|
@ -354,6 +362,7 @@ int global_verilog_netlist(int global) /* netlister driver */
|
||||||
get_additional_symbols(1);
|
get_additional_symbols(1);
|
||||||
for(i=0;i<xctx->symbols; ++i)
|
for(i=0;i<xctx->symbols; ++i)
|
||||||
{
|
{
|
||||||
|
if(int_hash_lookup(&used_symbols, xctx->sym[i].name, 0, XLOOKUP) == NULL) continue;
|
||||||
if( strcmp(get_tok_value(xctx->sym[i].prop_ptr,"verilog_ignore",0),"true")==0 ) continue;
|
if( strcmp(get_tok_value(xctx->sym[i].prop_ptr,"verilog_ignore",0),"true")==0 ) continue;
|
||||||
if(!xctx->sym[i].type) continue;
|
if(!xctx->sym[i].type) continue;
|
||||||
my_strdup2(_ALLOC_ID_, &abs_path, abs_sym_path(tcl_hook2(xctx->sym[i].name), ""));
|
my_strdup2(_ALLOC_ID_, &abs_path, abs_sym_path(tcl_hook2(xctx->sym[i].name), ""));
|
||||||
|
|
@ -395,6 +404,7 @@ int global_verilog_netlist(int global) /* netlister driver */
|
||||||
propagate_hilights(1, 0, XINSERT_NOREPLACE);
|
propagate_hilights(1, 0, XINSERT_NOREPLACE);
|
||||||
draw_hilight_net(1);
|
draw_hilight_net(1);
|
||||||
my_free(_ALLOC_ID_, &stored_flags);
|
my_free(_ALLOC_ID_, &stored_flags);
|
||||||
|
int_hash_free(&used_symbols);
|
||||||
|
|
||||||
dbg(1, "global_verilog_netlist(): starting awk on netlist!\n");
|
dbg(1, "global_verilog_netlist(): starting awk on netlist!\n");
|
||||||
if(!split_f) {
|
if(!split_f) {
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@
|
||||||
|
|
||||||
#include "xschem.h"
|
#include "xschem.h"
|
||||||
|
|
||||||
|
|
||||||
static int vhdl_netlist(FILE *fd , int vhdl_stop)
|
static int vhdl_netlist(FILE *fd , int vhdl_stop)
|
||||||
{
|
{
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
@ -99,10 +98,10 @@ static int vhdl_netlist(FILE *fd , int vhdl_stop)
|
||||||
if(xctx->lastsel)
|
if(xctx->lastsel)
|
||||||
{
|
{
|
||||||
if(xctx->inst[i].sel==SELECTED) {
|
if(xctx->inst[i].sel==SELECTED) {
|
||||||
print_vhdl_element(fd, i) ;
|
print_vhdl_element(fd, i);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
print_vhdl_element(fd, i) ;
|
print_vhdl_element(fd, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue