has_included_subcircuit() and proc has_included_subcircuit: compare and reorder only ports with associated symbol pin. do not consider `extra` ports assigned via attributes
This commit is contained in:
parent
294a10bd5a
commit
e77cc334f4
|
|
@ -1848,6 +1848,7 @@ static int has_included_subcircuit(int inst, int symbol, char **result)
|
||||||
char *symname = NULL;
|
char *symname = NULL;
|
||||||
char *templ = NULL;
|
char *templ = NULL;
|
||||||
char *symname_attr = NULL;
|
char *symname_attr = NULL;
|
||||||
|
int no_of_pins = (xctx->inst[inst].ptr + xctx->sym)->rects[PINLAYER];
|
||||||
|
|
||||||
my_strdup2(_ALLOC_ID_, &templ, get_tok_value(xctx->sym[symbol].prop_ptr, "template", 0));
|
my_strdup2(_ALLOC_ID_, &templ, get_tok_value(xctx->sym[symbol].prop_ptr, "template", 0));
|
||||||
my_strdup2(_ALLOC_ID_, &symname, get_tok_value(xctx->inst[inst].prop_ptr, "schematic", 0));
|
my_strdup2(_ALLOC_ID_, &symname, get_tok_value(xctx->inst[inst].prop_ptr, "schematic", 0));
|
||||||
|
|
@ -1866,7 +1867,7 @@ static int has_included_subcircuit(int inst, int symbol, char **result)
|
||||||
dbg(1, "has_included_subcircuit(): symname=%s\n", symname);
|
dbg(1, "has_included_subcircuit(): symname=%s\n", symname);
|
||||||
strtolower(symname);
|
strtolower(symname);
|
||||||
tclvareval("has_included_subcircuit {", get_cell(symname, 0), "} {",
|
tclvareval("has_included_subcircuit {", get_cell(symname, 0), "} {",
|
||||||
translated_sym_def, "}", NULL);
|
translated_sym_def, "} ", my_itoa(no_of_pins), NULL);
|
||||||
my_free(_ALLOC_ID_, &templ);
|
my_free(_ALLOC_ID_, &templ);
|
||||||
my_free(_ALLOC_ID_, &symname_attr);
|
my_free(_ALLOC_ID_, &symname_attr);
|
||||||
if(tclresult()[0]) {
|
if(tclresult()[0]) {
|
||||||
|
|
@ -1875,7 +1876,7 @@ static int has_included_subcircuit(int inst, int symbol, char **result)
|
||||||
char *subckt_pinlist_ptr;
|
char *subckt_pinlist_ptr;
|
||||||
char *subckt_pinlist = NULL;
|
char *subckt_pinlist = NULL;
|
||||||
char *tmp_result = NULL;
|
char *tmp_result = NULL;
|
||||||
int i, no_of_pins = (xctx->inst[inst].ptr + xctx->sym)->rects[PINLAYER];
|
int i;
|
||||||
int symbol_pins = 0;
|
int symbol_pins = 0;
|
||||||
int instance_pins = 0;
|
int instance_pins = 0;
|
||||||
Str_hashentry *entry;
|
Str_hashentry *entry;
|
||||||
|
|
|
||||||
|
|
@ -813,7 +813,7 @@ proc tabulate {text {sep ",\t "}} {
|
||||||
|
|
||||||
# get pin ordering from included subcircuit
|
# get pin ordering from included subcircuit
|
||||||
# return empty string if not found.
|
# return empty string if not found.
|
||||||
proc has_included_subcircuit {symname spice_sym_def} {
|
proc has_included_subcircuit {symname spice_sym_def no_of_pins} {
|
||||||
global has_x
|
global has_x
|
||||||
set include_found 0
|
set include_found 0
|
||||||
regsub -all {\n\+} $spice_sym_def { } spice_sym_def
|
regsub -all {\n\+} $spice_sym_def { } spice_sym_def
|
||||||
|
|
@ -853,6 +853,13 @@ proc has_included_subcircuit {symname spice_sym_def} {
|
||||||
} else {
|
} else {
|
||||||
set last [expr {$last -1}]
|
set last [expr {$last -1}]
|
||||||
}
|
}
|
||||||
|
# if spice_sym_def has more ports than symbol (no_of_pins) assume these are extra ports
|
||||||
|
# assigned via attributes ('extra' symbol attribute, usually power rails), these extra
|
||||||
|
# ports are not returned as @pinlist and correspondence with symbol format string
|
||||||
|
# is not checked. user must ensure these additional ports are in the right order.
|
||||||
|
if { $last >= $no_of_pins + 1 } {
|
||||||
|
set last [expr {$no_of_pins + 1}]
|
||||||
|
}
|
||||||
set pinlist [lrange $line 2 $last]
|
set pinlist [lrange $line 2 $last]
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
@ -1766,7 +1773,7 @@ proc simconf_add {tool} {
|
||||||
proc cellview_setlabels {w sch} {
|
proc cellview_setlabels {w sch} {
|
||||||
if {[$w get] ne $sch} {
|
if {[$w get] ne $sch} {
|
||||||
if { [file exists [abs_sym_path [$w get]]] } {
|
if { [file exists [abs_sym_path [$w get]]] } {
|
||||||
$w configure -bg PaleGreen
|
$w configure -bg green
|
||||||
} else {
|
} else {
|
||||||
# puts "$sch --- [$sf.f$i.s get]"
|
# puts "$sch --- [$sf.f$i.s get]"
|
||||||
$w configure -bg red
|
$w configure -bg red
|
||||||
|
|
@ -1823,7 +1830,7 @@ proc cellview {} {
|
||||||
if {![file exists $abs_sch]} {
|
if {![file exists $abs_sch]} {
|
||||||
$sf.f$i.s configure -bg red
|
$sf.f$i.s configure -bg red
|
||||||
} elseif {$default_sch ne $sch} {
|
} elseif {$default_sch ne $sch} {
|
||||||
$sf.f$i.s configure -bg PaleGreen
|
$sf.f$i.s configure -bg green
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$sf.f$i.s configure -fg red
|
$sf.f$i.s configure -fg red
|
||||||
|
|
@ -1900,14 +1907,14 @@ proc traversal_setlabels {w parent_sch sch instname default_sch inst_spice_sym_d
|
||||||
|
|
||||||
if {[$w get] ne $default_sch} {
|
if {[$w get] ne $default_sch} {
|
||||||
if { $sym_spice_sym_def ne {}} {
|
if { $sym_spice_sym_def ne {}} {
|
||||||
$w configure -fg PaleGreen
|
$w configure -fg green
|
||||||
$w configure -bg [option get . background {}]
|
$w configure -bg [option get . background {}]
|
||||||
} elseif {$inst_spice_sym_def ne {}} {
|
} elseif {$inst_spice_sym_def ne {}} {
|
||||||
$w configure -fg red
|
$w configure -fg red
|
||||||
$w configure -bg [option get . background {}]
|
$w configure -bg [option get . background {}]
|
||||||
} elseif { [file exists [abs_sym_path [$w get]]] } {
|
} elseif { [file exists [abs_sym_path [$w get]]] } {
|
||||||
$w configure -fg [option get . foreground {}]
|
$w configure -fg [option get . foreground {}]
|
||||||
$w configure -bg PaleGreen
|
$w configure -bg green
|
||||||
} else {
|
} else {
|
||||||
$w configure -fg [option get . foreground {}]
|
$w configure -fg [option get . foreground {}]
|
||||||
$w configure -bg red
|
$w configure -bg red
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue