add Highlight->Select overlapped instances command

This commit is contained in:
Stefan Frederik 2022-09-27 18:35:42 +02:00
parent 4e3f396da5
commit 6d17797d0b
10 changed files with 144 additions and 164 deletions

View File

@ -1053,7 +1053,7 @@ void prepare_netlist_structs(int for_netlist)
/* propagate_hilights(1, 0, XINSERT_NOREPLACE);*/
}
int warning_overlapped_symbols()
int warning_overlapped_symbols(int sel)
{
int i;
Int_hashentry *table[HASHSIZE];
@ -1071,8 +1071,13 @@ int warning_overlapped_symbols()
dbg(1, " s=%s\n", s);
found = int_hash_lookup(table, s, i, XINSERT_NOREPLACE);
if(found) {
xctx->inst[i].color = -PINLAYER;
xctx->hilight_nets=1;
if(sel == 0) {
xctx->inst[i].color = -PINLAYER;
xctx->hilight_nets=1;
} else {
xctx->inst[i].sel = SELECTED;
xctx->need_reb_sel_arr = 1;
}
my_snprintf(str, S(str), "Warning: overlapped instance found: %s(%s) -> %s\n",
xctx->inst[i].instname, xctx->inst[i].name, xctx->inst[found->value].instname);
statusmsg(str,2);
@ -1080,6 +1085,7 @@ int warning_overlapped_symbols()
}
}
int_hash_free(table);
if(sel && xctx->need_reb_sel_arr) rebuild_selected_array();
return 0;
}

View File

@ -2080,7 +2080,7 @@ void load_schematic(int load_symbols, const char *filename, int reset_undo) /* 2
propagate_hilights(1, 1, XINSERT_NOREPLACE);
}
/* warning if two symbols perfectly overlapped */
warning_overlapped_symbols();
warning_overlapped_symbols(0);
}
void clear_undo(void)

View File

@ -2981,7 +2981,16 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
}
else if(argv[1][0] == 'w') {
if(!strcmp(argv[1],"windowid")) /* used by xschem.tcl for configure events */
if(!strcmp(argv[1],"warning_overlapped_symbols"))
{
cmd_found = 1;
if(argc >= 3) {
warning_overlapped_symbols(atoi(argv[2]));
} else {
warning_overlapped_symbols(0);
}
}
else if(!strcmp(argv[1],"windowid")) /* used by xschem.tcl for configure events */
{
cmd_found = 1;
if(argc >= 3) {

View File

@ -340,7 +340,7 @@ void global_spice_netlist(int global) /* netlister driver */
}
/* warning if two symbols perfectly overlapped */
warning_overlapped_symbols();
warning_overlapped_symbols(0);
/* preserve current level instance flags before descending hierarchy for netlisting, restore later */
stored_flags = my_calloc(146, xctx->instances, sizeof(unsigned int));
for(i=0;i<xctx->instances;i++) stored_flags[i] = xctx->inst[i].color;

View File

@ -173,7 +173,7 @@ void global_tedax_netlist(int global) /* netlister driver */
fprintf(fd, "end netlist\n");
/* warning if two symbols perfectly overlapped */
warning_overlapped_symbols();
warning_overlapped_symbols(0);
/* preserve current level instance flags before descending hierarchy for netlisting, restore later */
stored_flags = my_calloc(149, xctx->instances, sizeof(unsigned int));
for(i=0;i<xctx->instances;i++) stored_flags[i] = xctx->inst[i].color;

View File

@ -327,7 +327,7 @@ void global_verilog_netlist(int global) /* netlister driver */
}
/* warning if two symbols perfectly overlapped */
warning_overlapped_symbols();
warning_overlapped_symbols(0);
/* preserve current level instance flags before descending hierarchy for netlisting, restore later */
stored_flags = my_calloc(150, xctx->instances, sizeof(unsigned int));
for(i=0;i<xctx->instances;i++) stored_flags[i] = xctx->inst[i].color;

View File

@ -420,7 +420,7 @@ void global_vhdl_netlist(int global) /* netlister driver */
xctx->netlist_count++;
/* warning if two symbols perfectly overlapped */
warning_overlapped_symbols();
warning_overlapped_symbols(0);
/* preserve current level instance flags before descending hierarchy for netlisting, restore later */
stored_flags = my_calloc(151, xctx->instances, sizeof(unsigned int));
for(i=0;i<xctx->instances;i++) stored_flags[i] = xctx->inst[i].color;

View File

@ -1380,7 +1380,7 @@ extern void redraw_hilights(int clear);
extern void set_tcl_netlist_type(void);
extern void prepare_netlist_structs(int for_netlist);
extern int compare_schematics(const char *filename);
extern int warning_overlapped_symbols();
extern int warning_overlapped_symbols(int sel);
extern void free_simdata(void);
extern void delete_netlist_structs(void);
extern void delete_inst_node(int i);

View File

@ -5524,6 +5524,8 @@ proc build_widgets { {topwin {} } } {
-command "xschem check_unique_names 0" -accelerator {#}
$topwin.menubar.hilight.menu add command -label {Rename duplicate instance names} \
-command "xschem check_unique_names 1" -accelerator {Ctrl+#}
$topwin.menubar.hilight.menu add command -label {Select overlapped instances} \
-command "xschem warning_overlapped_symbols 1; xschem redraw" -accelerator {}
$topwin.menubar.hilight.menu add command -label {Propagate Highlight selected net/pins} \
-command "xschem hilight drill" -accelerator {Ctrl+Shift+K}
$topwin.menubar.hilight.menu add checkbutton -label "Increment Hilight Color" -variable incr_hilight

View File

@ -5,160 +5,33 @@ K {}
V {}
S {}
E {}
B 2 760 -620 1166 -170 {flags=image,unscaled
alpha=0.8
image=/home/schippes/x/1.png
image_data="
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"
}
B 2 860 -550 1360 -160 {flags=graph
y1 = 0
y2 = 7.29638
divy = 4
subdivy=1
x1=0
x2=22
divx=8
unitx=1
color=15
node=i(vload)
dataset=4}
B 2 860 -790 1360 -550 {flags=graph
y1 = 0
y2 = 120
divy = 4
subdivy=1
x1=0
x2=22
divx=8
unitx=1
color=8
node="\\"Power;
plus
i(vload)
*\\""
dataset=4}
T {Voc = 22
Wp = 100W
Vmp = 17.5} 610 -370 0 0 0.4 0.4 {}
@ -187,3 +60,93 @@ C {ipin.sym} 280 -360 2 1 {name=p2 lab=fade}
C {ammeter.sym} 330 -360 3 0 {name=Vf}
C {lab_pin.sym} 360 -360 2 0 {name=l3 sig_type=std_logic lab=f}
C {ammeter.sym} 510 -590 2 1 {name=Vp}
C {code_shown.sym} 30 -280 0 0 {name=CONTROL
only_toplevel=true
value="
vload plus minus 0
vsun fade 0 0
vref minus 0 0
.control
save plus i(vload)
dc vload 0 22 0.5 vsun 0.2 1.0 0.2
write pv_ngspice.raw
quit
.endc
"}
C {launcher.sym} 930 -140 0 0 {name=h3
descr="Netlist, Simulate, Reload waves"
tclcommand="
if \{![info exists sim]\} \{set_sim_defaults\}
set sim(spice,0,fg) 1
if \{[xschem raw_query loaded]\} \{ ;# Unload
xschem raw_clear
\}
xschem netlist
xschem simulate
xschem raw_read $netlist_dir/[file tail [file rootname [xschem get current_name]]].raw
"
}
C {launcher.sym} 930 -100 0 0 {name=h1
descr="Load embedded waves"
tclcommand="xschem raw_read_from_attr"
spice_data="
VGl0bGU6ICoqIHNjaF9wYXRoOiAvaG9tZS9zY2hpcHBlcy94c2NoZW0tcmVwby90cnVuay94c2NoZW1fbGlicmFyeS9uZ3NwaWNlL3B2X25nc3BpY2Uuc2NoCkRhdGU6
IFR1ZSBTZXAgMjcgMTc6MDQ6MjEgIDIwMjIKUGxvdG5hbWU6IERDIHRyYW5zZmVyIGNoYXJhY3RlcmlzdGljCkZsYWdzOiByZWFsCk5vLiBWYXJpYWJsZXM6IDMKTm8u
IFBvaW50czogMjI1ClZhcmlhYmxlczoKCTAJdih2LXN3ZWVwKQl2b2x0YWdlCgkxCXYocGx1cykJdm9sdGFnZQoJMglpKHZsb2FkKQljdXJyZW50CkJpbmFyeToKAAAA
AAAAAAAAAAAAAAAAABkliAuYCPU/AAAAAAAA4D8AAAAAAADgP2PJI6FN/PQ/AAAAAAAA8D8AAAAAAADwPzn3PsoC8PQ/AAAAAAAA+D8AAAAAAAD4P4fYHXy34/Q/AAAA
AAAAAEAAAAAAAAAAQA2vyIRr1/Q/AAAAAAAABEAAAAAAAAAEQM4hV50ey/Q/AAAAAAAACEAAAAAAAAAIQITIKWHQvvQ/AAAAAAAADEAAAAAAAAAMQFxMdkGAsvQ/AAAA
AAAAEEAAAAAAAAAQQMyZm3MtpvQ/AAAAAAAAEkAAAAAAAAASQJpKDtjWmfQ/AAAAAAAAFEAAAAAAAAAUQH7SwtZ6jfQ/AAAAAAAAFkAAAAAAAAAWQN8JriwXgfQ/AAAA
AAAAGEAAAAAAAAAYQCs+HKSodPQ/AAAAAAAAGkAAAAAAAAAaQLF9AK8qaPQ/AAAAAAAAHEAAAAAAAAAcQHRtptaWW/Q/AAAAAAAAHkAAAAAAAAAeQLLb6u7jTvQ/AAAA
AAAAIEAAAAAAAAAgQH5do/MEQvQ/AAAAAAAAIUAAAAAAAAAhQA99PmznNPQ/AAAAAAAAIkAAAAAAAAAiQBvckyJxJ/Q/AAAAAAAAI0AAAAAAAAAjQK+4eOR8GfQ/AAAA
AAAAJEAAAAAAAAAkQEruU+nVCvQ/AAAAAAAAJUAAAAAAAAAlQEtY20kx+/M/AAAAAAAAJkAAAAAAAAAmQJH3Brsk6vM/AAAAAAAAJ0AAAAAAAAAnQHMzjGYZ1/M/AAAA
AAAAKEAAAAAAAAAoQPlcIUA5wfM/AAAAAAAAKUAAAAAAAAApQPgwJIhUp/M/AAAAAAAAKkAAAAAAAAAqQMFnaDS8h/M/AAAAAAAAK0AAAAAAAAArQFOsQZgMYPM/AAAA
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
AAAANkAAAAAAAAA2QACfbNc4PATA"}