if a custom format netlist is given (for example lvs_netlist) and lvs_netlist attribute in instance or symbol is existing but empty device will not be netlisted

This commit is contained in:
stefan schippers 2023-03-10 18:36:55 +01:00
parent d2d9eaa4e8
commit a8e95e220b
2 changed files with 28 additions and 18 deletions

View File

@ -703,11 +703,14 @@ static void print_vhdl_primitive(FILE *fd, int inst) /* netlist primitives, 200
if(!name) my_strdup(_ALLOC_ID_, &name, get_tok_value(template, "name", 0));
/* allow format string override in instance */
my_strdup(_ALLOC_ID_, &format, get_tok_value(xctx->inst[inst].prop_ptr, fmt_attr, 2));
if(!format && strcmp(fmt_attr, "vhdl_format"))
my_strdup(_ALLOC_ID_, &format, get_tok_value(xctx->inst[inst].prop_ptr, "vhdl_format", 2));
if(!format)
/* get netlist format rule from symbol */
if(!xctx->tok_size)
my_strdup(_ALLOC_ID_, &format, get_tok_value((xctx->inst[inst].ptr + xctx->sym)->prop_ptr, fmt_attr, 2));
if(!format && strcmp(fmt_attr, "vhdl_format"))
/* allow format string override in instance */
if(xctx->tok_size && strcmp(fmt_attr, "vhdl_format"))
my_strdup(_ALLOC_ID_, &format, get_tok_value(xctx->inst[inst].prop_ptr, "vhdl_format", 2));
/* get netlist format rule from symbol */
if(!xctx->tok_size && strcmp(fmt_attr, "vhdl_format"))
my_strdup(_ALLOC_ID_, &format, get_tok_value((xctx->inst[inst].ptr + xctx->sym)->prop_ptr, "vhdl_format", 2));
if((name==NULL) || (format==NULL) ) {
my_free(_ALLOC_ID_, &template);
@ -1137,7 +1140,7 @@ void print_vhdl_element(FILE *fd, int inst)
fmt_attr = xctx->format ? xctx->format : "vhdl_format";
fmt = get_tok_value((xctx->inst[inst].ptr + xctx->sym)->prop_ptr, fmt_attr, 2);
if(!fmt[0] && strcmp(fmt_attr, "vhdl_format") )
if(!xctx->tok_size && strcmp(fmt_attr, "vhdl_format") )
fmt = get_tok_value((xctx->inst[inst].ptr + xctx->sym)->prop_ptr, "vhdl_format", 2);
if(fmt[0]) {
print_vhdl_primitive(fd, inst);
@ -1519,7 +1522,7 @@ void print_spice_subckt_nodes(FILE *fd, int symbol)
fmt_attr = xctx->format ? xctx->format : "format";
my_strdup(_ALLOC_ID_, &format1, get_tok_value(xctx->sym[symbol].prop_ptr, fmt_attr, 2));
if(!format1 && strcmp(fmt_attr, "format") )
if(!xctx->tok_size && strcmp(fmt_attr, "format") )
my_strdup(_ALLOC_ID_, &format1, get_tok_value(xctx->sym[symbol].prop_ptr, "format", 2));
dbg(1, "print_spice_subckt(): format1=%s\n", format1);
if(format1 && strstr(format1, "tcleval(") == format1) {
@ -1665,15 +1668,19 @@ int print_spice_element(FILE *fd, int inst)
my_strdup(_ALLOC_ID_, &name,xctx->inst[inst].instname);
if (!name) my_strdup(_ALLOC_ID_, &name, get_tok_value(template, "name", 0));
/* allow format string override in instance */
fmt_attr = xctx->format ? xctx->format : "format";
/* allow format string override in instance */
my_strdup(_ALLOC_ID_, &format, get_tok_value(xctx->inst[inst].prop_ptr, fmt_attr, 2));
if(!format && strcmp(fmt_attr, "format") )
/* get netlist format rule from symbol */
if(!xctx->tok_size)
my_strdup(_ALLOC_ID_, &format, get_tok_value((xctx->inst[inst].ptr + xctx->sym)->prop_ptr, fmt_attr, 2));
/* allow format string override in instance */
if(!xctx->tok_size && strcmp(fmt_attr, "format") )
my_strdup(_ALLOC_ID_, &format, get_tok_value(xctx->inst[inst].prop_ptr, "format", 2));
if(!format)
my_strdup(_ALLOC_ID_, &format, get_tok_value((xctx->inst[inst].ptr + xctx->sym)->prop_ptr, fmt_attr, 2));
if(!format && strcmp(fmt_attr, "format"))
/* get netlist format rule from symbol */
if(!xctx->tok_size && strcmp(fmt_attr, "format"))
my_strdup(_ALLOC_ID_, &format, get_tok_value((xctx->inst[inst].ptr + xctx->sym)->prop_ptr, "format", 2));
if ((name==NULL) || (format==NULL)) {
my_free(_ALLOC_ID_, &template);
my_free(_ALLOC_ID_, &format);
@ -2310,11 +2317,14 @@ static void print_verilog_primitive(FILE *fd, int inst) /* netlist switch level
fmt_attr = xctx->format ? xctx->format : "verilog_format";
/* allow format string override in instance */
my_strdup(_ALLOC_ID_, &format, get_tok_value(xctx->inst[inst].prop_ptr, fmt_attr, 2));
if(!format && strcmp(fmt_attr, "verilog_format") )
my_strdup(_ALLOC_ID_, &format, get_tok_value(xctx->inst[inst].prop_ptr, "verilog_format", 2));
if(!format || !format[0])
/* get netlist format rule from symbol */
if(!xctx->tok_size)
my_strdup(_ALLOC_ID_, &format, get_tok_value((xctx->inst[inst].ptr + xctx->sym)->prop_ptr, fmt_attr, 2));
if(!format && strcmp(fmt_attr, "verilog_format"))
/* allow format string override in instance */
if(!xctx->tok_size && strcmp(fmt_attr, "verilog_format") )
my_strdup(_ALLOC_ID_, &format, get_tok_value(xctx->inst[inst].prop_ptr, "verilog_format", 2));
/* get netlist format rule from symbol */
if(!xctx->tok_size && strcmp(fmt_attr, "verilog_format"))
my_strdup(_ALLOC_ID_, &format, get_tok_value((xctx->inst[inst].ptr + xctx->sym)->prop_ptr, "verilog_format", 2));
if((name==NULL) || (format==NULL) ) {
my_free(_ALLOC_ID_, &template);
@ -2516,7 +2526,7 @@ void print_verilog_element(FILE *fd, int inst)
fmt_attr = xctx->format ? xctx->format : "verilog_format";
fmt = get_tok_value((xctx->inst[inst].ptr + xctx->sym)->prop_ptr, fmt_attr, 2);
if(!fmt[0] && strcmp(fmt_attr, "verilog_format"))
if(!xctx->tok_size && strcmp(fmt_attr, "verilog_format"))
fmt = get_tok_value((xctx->inst[inst].ptr + xctx->sym)->prop_ptr, "verilog_format", 2);
if(fmt[0]) {
print_verilog_primitive(fd, inst);

View File

@ -133,7 +133,7 @@ void global_verilog_netlist(int global) /* netlister driver */
if( type && (strcmp(type,"timescale")==0 || strcmp(type,"verilog_preprocessor")==0) )
{
str_tmp = get_tok_value( (xctx->inst[i].ptr+ xctx->sym)->prop_ptr , fmt_attr, 2);
if(!str_tmp[0] && strcmp(fmt_attr, "verilog_format"))
if(!xctx->tok_size && strcmp(fmt_attr, "verilog_format"))
str_tmp = get_tok_value( (xctx->inst[i].ptr+ xctx->sym)->prop_ptr, "verilog_format", 2);
my_strdup(_ALLOC_ID_, &tmp_string, str_tmp);
@ -471,7 +471,7 @@ void verilog_block_netlist(FILE *fd, int i)
if( type && ( strcmp(type,"timescale")==0 || strcmp(type,"verilog_preprocessor")==0) )
{
str_tmp = get_tok_value( (xctx->inst[j].ptr+ xctx->sym)->prop_ptr, fmt_attr, 2);
if(!str_tmp[0] && strcmp(fmt_attr, "verilog_format"))
if(!xctx->tok_size && strcmp(fmt_attr, "verilog_format"))
str_tmp = get_tok_value( (xctx->inst[j].ptr+ xctx->sym)->prop_ptr, "verilog_format", 2);
my_strdup(_ALLOC_ID_, &tmp_string, str_tmp);
fprintf(fd, "%s\n", str_tmp ? translate(j, tmp_string) : "(NULL)");