mirror of
https://github.com/StefanSchippers/xschem.git
synced 2026-08-22 06:07:29 +02:00
add option `keep_symbols in xschemrc to avoid purging symbols when netlisting /descending hierarchy. Add functions atan, asin,acos, cosh, sinh, atanh,acosh,asinh in wave processor
This commit is contained in:
+2
-2
@@ -2246,7 +2246,7 @@ int descend_schematic(int instnumber, int fallback, int alert)
|
|||||||
unselect_all(1);
|
unselect_all(1);
|
||||||
dbg(1, "descend_schematic(): filename=%s\n", filename);
|
dbg(1, "descend_schematic(): filename=%s\n", filename);
|
||||||
/* we are descending from a parent schematic downloaded from the web */
|
/* we are descending from a parent schematic downloaded from the web */
|
||||||
remove_symbols();
|
if(!tclgetboolvar("keep_symbols")) remove_symbols();
|
||||||
load_schematic(1, filename, 1, alert);
|
load_schematic(1, filename, 1, alert);
|
||||||
if(xctx->hilight_nets) {
|
if(xctx->hilight_nets) {
|
||||||
prepare_netlist_structs(0);
|
prepare_netlist_structs(0);
|
||||||
@@ -2293,7 +2293,7 @@ void go_back(int confirm) /* 20171006 add confirm */
|
|||||||
}
|
}
|
||||||
if(save_ok==0) return;
|
if(save_ok==0) return;
|
||||||
unselect_all(1);
|
unselect_all(1);
|
||||||
remove_symbols();
|
if(!tclgetboolvar("keep_symbols")) remove_symbols();
|
||||||
from_embedded_sym=0;
|
from_embedded_sym=0;
|
||||||
if(strstr(xctx->sch[xctx->currsch], ".xschem_embedded_")) {
|
if(strstr(xctx->sch[xctx->currsch], ".xschem_embedded_")) {
|
||||||
/* when returning after editing an embedded symbol
|
/* when returning after editing an embedded symbol
|
||||||
|
|||||||
+51
-4
@@ -1451,6 +1451,15 @@ static double ravg_store(int what , int i, int p, int last, double value)
|
|||||||
#define DEL 27 /* delay by an anount of sweep axis distance */
|
#define DEL 27 /* delay by an anount of sweep axis distance */
|
||||||
#define MAX 28 /* clip data above given argument */
|
#define MAX 28 /* clip data above given argument */
|
||||||
#define MIN 29 /* clip data below given argument */
|
#define MIN 29 /* clip data below given argument */
|
||||||
|
#define ATAN 30
|
||||||
|
#define ASIN 31
|
||||||
|
#define ACOS 32
|
||||||
|
#define COSH 33
|
||||||
|
#define SINH 34
|
||||||
|
#define ATANH 35
|
||||||
|
#define ACOSH 36
|
||||||
|
#define ASINH 37
|
||||||
|
|
||||||
|
|
||||||
#define ORDER_DERIV 1 /* 1 or 2: 1st order or 2nd order differentiation. 1st order is faster */
|
#define ORDER_DERIV 1 /* 1 or 2: 1st order or 2nd order differentiation. 1st order is faster */
|
||||||
|
|
||||||
@@ -1499,13 +1508,21 @@ int plot_raw_custom_data(int sweep_idx, int first, int last, const char *expr, c
|
|||||||
else if(!strcmp(n, "*")) stack1[stackptr1++].i = MULT;
|
else if(!strcmp(n, "*")) stack1[stackptr1++].i = MULT;
|
||||||
else if(!strcmp(n, "/")) stack1[stackptr1++].i = DIVIS;
|
else if(!strcmp(n, "/")) stack1[stackptr1++].i = DIVIS;
|
||||||
else if(!strcmp(n, "**")) stack1[stackptr1++].i = POW;
|
else if(!strcmp(n, "**")) stack1[stackptr1++].i = POW;
|
||||||
|
else if(!strcmp(n, "atan()")) stack1[stackptr1++].i = ATAN;
|
||||||
|
else if(!strcmp(n, "asin()")) stack1[stackptr1++].i = ASIN;
|
||||||
|
else if(!strcmp(n, "acos()")) stack1[stackptr1++].i = ACOS;
|
||||||
|
else if(!strcmp(n, "tan()")) stack1[stackptr1++].i = TAN;
|
||||||
else if(!strcmp(n, "sin()")) stack1[stackptr1++].i = SIN;
|
else if(!strcmp(n, "sin()")) stack1[stackptr1++].i = SIN;
|
||||||
else if(!strcmp(n, "cos()")) stack1[stackptr1++].i = COS;
|
else if(!strcmp(n, "cos()")) stack1[stackptr1++].i = COS;
|
||||||
else if(!strcmp(n, "abs()")) stack1[stackptr1++].i = ABS;
|
else if(!strcmp(n, "abs()")) stack1[stackptr1++].i = ABS;
|
||||||
else if(!strcmp(n, "sgn()")) stack1[stackptr1++].i = SGN;
|
else if(!strcmp(n, "sgn()")) stack1[stackptr1++].i = SGN;
|
||||||
else if(!strcmp(n, "sqrt()")) stack1[stackptr1++].i = SQRT;
|
else if(!strcmp(n, "sqrt()")) stack1[stackptr1++].i = SQRT;
|
||||||
else if(!strcmp(n, "tan()")) stack1[stackptr1++].i = TAN;
|
|
||||||
else if(!strcmp(n, "tanh()")) stack1[stackptr1++].i = TANH;
|
else if(!strcmp(n, "tanh()")) stack1[stackptr1++].i = TANH;
|
||||||
|
else if(!strcmp(n, "cosh()")) stack1[stackptr1++].i = COSH;
|
||||||
|
else if(!strcmp(n, "sinh()")) stack1[stackptr1++].i = SINH;
|
||||||
|
else if(!strcmp(n, "atanh()")) stack1[stackptr1++].i = ATANH;
|
||||||
|
else if(!strcmp(n, "acosh()")) stack1[stackptr1++].i = ACOSH;
|
||||||
|
else if(!strcmp(n, "asinh()")) stack1[stackptr1++].i = ASINH;
|
||||||
else if(!strcmp(n, "exp()")) stack1[stackptr1++].i = EXP;
|
else if(!strcmp(n, "exp()")) stack1[stackptr1++].i = EXP;
|
||||||
else if(!strcmp(n, "ln()")) stack1[stackptr1++].i = LN;
|
else if(!strcmp(n, "ln()")) stack1[stackptr1++].i = LN;
|
||||||
else if(!strcmp(n, "log10()")) stack1[stackptr1++].i = LOG10;
|
else if(!strcmp(n, "log10()")) stack1[stackptr1++].i = LOG10;
|
||||||
@@ -1809,18 +1826,48 @@ int plot_raw_custom_data(int sweep_idx, int first, int last, const char *expr, c
|
|||||||
case SQRT:
|
case SQRT:
|
||||||
stack2[stackptr2 - 1] = sqrt(stack2[stackptr2 - 1]);
|
stack2[stackptr2 - 1] = sqrt(stack2[stackptr2 - 1]);
|
||||||
break;
|
break;
|
||||||
case TAN:
|
|
||||||
stack2[stackptr2 - 1] = tan(stack2[stackptr2 - 1]);
|
|
||||||
break;
|
|
||||||
case TANH:
|
case TANH:
|
||||||
stack2[stackptr2 - 1] = tanh(stack2[stackptr2 - 1]);
|
stack2[stackptr2 - 1] = tanh(stack2[stackptr2 - 1]);
|
||||||
break;
|
break;
|
||||||
|
case COSH:
|
||||||
|
stack2[stackptr2 - 1] = cosh(stack2[stackptr2 - 1]);
|
||||||
|
break;
|
||||||
|
case SINH:
|
||||||
|
stack2[stackptr2 - 1] = sinh(stack2[stackptr2 - 1]);
|
||||||
|
break;
|
||||||
|
case ATANH:
|
||||||
|
tmp = stack2[stackptr2 - 1];
|
||||||
|
tmp = 0.5 * log( (1 + tmp) / (1 - tmp) );
|
||||||
|
stack2[stackptr2 - 1] = tmp;
|
||||||
|
break;
|
||||||
|
case ACOSH:
|
||||||
|
tmp = stack2[stackptr2 - 1];
|
||||||
|
tmp = log(tmp + sqrt(tmp * tmp - 1));
|
||||||
|
stack2[stackptr2 - 1] = tmp;
|
||||||
|
break;
|
||||||
|
case ASINH:
|
||||||
|
tmp = stack2[stackptr2 - 1];
|
||||||
|
tmp = log(tmp + sqrt(tmp * tmp + 1));
|
||||||
|
stack2[stackptr2 - 1] = tmp;
|
||||||
|
break;
|
||||||
|
case TAN:
|
||||||
|
stack2[stackptr2 - 1] = tan(stack2[stackptr2 - 1]);
|
||||||
|
break;
|
||||||
case SIN:
|
case SIN:
|
||||||
stack2[stackptr2 - 1] = sin(stack2[stackptr2 - 1]);
|
stack2[stackptr2 - 1] = sin(stack2[stackptr2 - 1]);
|
||||||
break;
|
break;
|
||||||
case COS:
|
case COS:
|
||||||
stack2[stackptr2 - 1] = cos(stack2[stackptr2 - 1]);
|
stack2[stackptr2 - 1] = cos(stack2[stackptr2 - 1]);
|
||||||
break;
|
break;
|
||||||
|
case ATAN:
|
||||||
|
stack2[stackptr2 - 1] = atan(stack2[stackptr2 - 1]);
|
||||||
|
break;
|
||||||
|
case ASIN:
|
||||||
|
stack2[stackptr2 - 1] = asin(stack2[stackptr2 - 1]);
|
||||||
|
break;
|
||||||
|
case ACOS:
|
||||||
|
stack2[stackptr2 - 1] = acos(stack2[stackptr2 - 1]);
|
||||||
|
break;
|
||||||
case ABS:
|
case ABS:
|
||||||
stack2[stackptr2 - 1] = fabs(stack2[stackptr2 - 1]);
|
stack2[stackptr2 - 1] = fabs(stack2[stackptr2 - 1]);
|
||||||
break;
|
break;
|
||||||
|
|||||||
+3
-2
@@ -422,7 +422,8 @@ int global_spice_netlist(int global) /* netlister driver */
|
|||||||
|
|
||||||
my_strdup2(_ALLOC_ID_, ¤t_dirname_save, xctx->current_dirname);
|
my_strdup2(_ALLOC_ID_, ¤t_dirname_save, xctx->current_dirname);
|
||||||
unselect_all(1);
|
unselect_all(1);
|
||||||
remove_symbols(); /* 20161205 ensure all unused symbols purged before descending hierarchy */
|
/* ensure all unused symbols purged before descending hierarchy */
|
||||||
|
if(!tclgetboolvar("keep_symbols")) remove_symbols();
|
||||||
/* reload data without popping undo stack, this populates embedded symbols if any */
|
/* reload data without popping undo stack, this populates embedded symbols if any */
|
||||||
dbg(1, "global_spice_netlist(): invoking pop_undo(2, 0)\n");
|
dbg(1, "global_spice_netlist(): invoking pop_undo(2, 0)\n");
|
||||||
xctx->pop_undo(2, 0);
|
xctx->pop_undo(2, 0);
|
||||||
@@ -485,7 +486,7 @@ int global_spice_netlist(int global) /* netlister driver */
|
|||||||
xctx->currsch--;
|
xctx->currsch--;
|
||||||
unselect_all(1);
|
unselect_all(1);
|
||||||
dbg(1, "global_spice_netlist(): invoking pop_undo(0, 0)\n");
|
dbg(1, "global_spice_netlist(): invoking pop_undo(0, 0)\n");
|
||||||
remove_symbols();
|
if(!tclgetboolvar("keep_symbols")) remove_symbols();
|
||||||
xctx->pop_undo(4, 0);
|
xctx->pop_undo(4, 0);
|
||||||
xctx->prev_set_modify = save_prev_mod;
|
xctx->prev_set_modify = save_prev_mod;
|
||||||
if(web_url) {
|
if(web_url) {
|
||||||
|
|||||||
+3
-2
@@ -199,7 +199,8 @@ int global_tedax_netlist(int global) /* netlister driver */
|
|||||||
char *current_dirname_save = NULL;
|
char *current_dirname_save = NULL;
|
||||||
|
|
||||||
unselect_all(1);
|
unselect_all(1);
|
||||||
remove_symbols(); /* 20161205 ensure all unused symbols purged before descending hierarchy */
|
/* ensure all unused symbols purged before descending hierarchy */
|
||||||
|
if(!tclgetboolvar("keep_symbols")) remove_symbols();
|
||||||
/* reload data without popping undo stack, this populates embedded symbols if any */
|
/* reload data without popping undo stack, this populates embedded symbols if any */
|
||||||
xctx->pop_undo(2, 0);
|
xctx->pop_undo(2, 0);
|
||||||
/* link_symbols_to_instances(-1); */ /* done in xctx->pop_undo() */
|
/* link_symbols_to_instances(-1); */ /* done in xctx->pop_undo() */
|
||||||
@@ -243,7 +244,7 @@ int global_tedax_netlist(int global) /* netlister driver */
|
|||||||
my_free(_ALLOC_ID_, &xctx->sch[xctx->currsch]);
|
my_free(_ALLOC_ID_, &xctx->sch[xctx->currsch]);
|
||||||
xctx->currsch--;
|
xctx->currsch--;
|
||||||
unselect_all(1);
|
unselect_all(1);
|
||||||
remove_symbols();
|
if(!tclgetboolvar("keep_symbols")) remove_symbols();
|
||||||
xctx->pop_undo(4, 0);
|
xctx->pop_undo(4, 0);
|
||||||
xctx->prev_set_modify = save_prev_mod;
|
xctx->prev_set_modify = save_prev_mod;
|
||||||
if(web_url) {
|
if(web_url) {
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ int global_verilog_netlist(int global) /* netlister driver */
|
|||||||
fprintf(fd,"module %s (\n", get_cell( xctx->sch[xctx->currsch], 0) );
|
fprintf(fd,"module %s (\n", get_cell( xctx->sch[xctx->currsch], 0) );
|
||||||
/* flush data structures (remove unused symbols) */
|
/* flush data structures (remove unused symbols) */
|
||||||
unselect_all(1);
|
unselect_all(1);
|
||||||
remove_symbols(); /* removed 25122002, readded 04112003 */
|
if(!tclgetboolvar("keep_symbols")) remove_symbols();
|
||||||
/* reload data without popping undo stack, this populates embedded symbols if any */
|
/* reload data without popping undo stack, this populates embedded symbols if any */
|
||||||
xctx->pop_undo(2, 0);
|
xctx->pop_undo(2, 0);
|
||||||
/* link_symbols_to_instances(-1); */ /* done in xctx->pop_undo() */
|
/* link_symbols_to_instances(-1); */ /* done in xctx->pop_undo() */
|
||||||
@@ -316,7 +316,8 @@ int global_verilog_netlist(int global) /* netlister driver */
|
|||||||
char *current_dirname_save = NULL;
|
char *current_dirname_save = NULL;
|
||||||
|
|
||||||
unselect_all(1);
|
unselect_all(1);
|
||||||
remove_symbols(); /* 20161205 ensure all unused symbols purged before descending hierarchy */
|
/* ensure all unused symbols purged before descending hierarchy */
|
||||||
|
if(!tclgetboolvar("keep_symbols")) remove_symbols();
|
||||||
/* reload data without popping undo stack, this populates embedded symbols if any */
|
/* reload data without popping undo stack, this populates embedded symbols if any */
|
||||||
xctx->pop_undo(2, 0);
|
xctx->pop_undo(2, 0);
|
||||||
/* link_symbols_to_instances(-1); */ /* done in xctx->pop_undo() */
|
/* link_symbols_to_instances(-1); */ /* done in xctx->pop_undo() */
|
||||||
@@ -364,7 +365,7 @@ int global_verilog_netlist(int global) /* netlister driver */
|
|||||||
my_free(_ALLOC_ID_, &xctx->sch[xctx->currsch]);
|
my_free(_ALLOC_ID_, &xctx->sch[xctx->currsch]);
|
||||||
xctx->currsch--;
|
xctx->currsch--;
|
||||||
unselect_all(1);
|
unselect_all(1);
|
||||||
remove_symbols();
|
if(!tclgetboolvar("keep_symbols")) remove_symbols();
|
||||||
xctx->pop_undo(4, 0);
|
xctx->pop_undo(4, 0);
|
||||||
xctx->prev_set_modify = save_prev_mod;
|
xctx->prev_set_modify = save_prev_mod;
|
||||||
if(web_url) {
|
if(web_url) {
|
||||||
|
|||||||
+4
-3
@@ -184,7 +184,7 @@ int global_vhdl_netlist(int global) /* netlister driver */
|
|||||||
|
|
||||||
/* flush data structures (remove unused symbols) */
|
/* flush data structures (remove unused symbols) */
|
||||||
unselect_all(1);
|
unselect_all(1);
|
||||||
remove_symbols(); /* removed 25122002, readded 04112003.. this removes unused symbols */
|
if(!tclgetboolvar("keep_symbols")) remove_symbols();
|
||||||
/* reload data without popping undo stack, this populates embedded symbols if any */
|
/* reload data without popping undo stack, this populates embedded symbols if any */
|
||||||
xctx->pop_undo(2, 0);
|
xctx->pop_undo(2, 0);
|
||||||
/* link_symbols_to_instances(-1); */ /* done in xctx->pop_undo() */
|
/* link_symbols_to_instances(-1); */ /* done in xctx->pop_undo() */
|
||||||
@@ -404,7 +404,8 @@ int global_vhdl_netlist(int global) /* netlister driver */
|
|||||||
|
|
||||||
str_hash_init(&subckt_table, HASHSIZE);
|
str_hash_init(&subckt_table, HASHSIZE);
|
||||||
unselect_all(1);
|
unselect_all(1);
|
||||||
remove_symbols(); /* 20161205 ensure all unused symbols purged before descending hierarchy */
|
/* ensure all unused symbols purged before descending hierarchy */
|
||||||
|
if(!tclgetboolvar("keep_symbols")) remove_symbols();
|
||||||
/* reload data without popping undo stack, this populates embedded symbols if any */
|
/* reload data without popping undo stack, this populates embedded symbols if any */
|
||||||
xctx->pop_undo(2, 0);
|
xctx->pop_undo(2, 0);
|
||||||
/* link_symbols_to_instances(-1); */ /* done in xctx->pop_undo() */
|
/* link_symbols_to_instances(-1); */ /* done in xctx->pop_undo() */
|
||||||
@@ -453,7 +454,7 @@ int global_vhdl_netlist(int global) /* netlister driver */
|
|||||||
my_free(_ALLOC_ID_, &xctx->sch[xctx->currsch]);
|
my_free(_ALLOC_ID_, &xctx->sch[xctx->currsch]);
|
||||||
xctx->currsch--;
|
xctx->currsch--;
|
||||||
unselect_all(1);
|
unselect_all(1);
|
||||||
remove_symbols();
|
if(!tclgetboolvar("keep_symbols")) remove_symbols();
|
||||||
xctx->pop_undo(4, 0);
|
xctx->pop_undo(4, 0);
|
||||||
xctx->prev_set_modify = save_prev_mod;
|
xctx->prev_set_modify = save_prev_mod;
|
||||||
if(web_url) {
|
if(web_url) {
|
||||||
|
|||||||
+3
-1
@@ -6705,7 +6705,7 @@ set tctx::global_list {
|
|||||||
graph_change_done graph_digital graph_linewidth_mult graph_logx
|
graph_change_done graph_digital graph_linewidth_mult graph_logx
|
||||||
graph_logy graph_rainbow graph_schname graph_sel_color graph_sel_wave
|
graph_logy graph_rainbow graph_schname graph_sel_color graph_sel_wave
|
||||||
graph_selected graph_sort graph_unlocked hide_empty_graphs hide_symbols tctx::hsize
|
graph_selected graph_sort graph_unlocked hide_empty_graphs hide_symbols tctx::hsize
|
||||||
incr_hilight incremental_select infowindow_text launcher_default_program
|
incr_hilight incremental_select infowindow_text keep_symbols launcher_default_program
|
||||||
light_colors line_width live_cursor2_backannotate local_netlist_dir lvs_ignore
|
light_colors line_width live_cursor2_backannotate local_netlist_dir lvs_ignore
|
||||||
lvs_netlist measure_text netlist_dir netlist_show netlist_type no_ask_save
|
lvs_netlist measure_text netlist_dir netlist_show netlist_type no_ask_save
|
||||||
no_change_attrs nolist_libs noprint_libs old_selected_tok only_probes path pathlist
|
no_change_attrs nolist_libs noprint_libs old_selected_tok only_probes path pathlist
|
||||||
@@ -8165,6 +8165,8 @@ set_ne xschem_listen_port {}
|
|||||||
# set a port number in xschemrc if you want xschem to be able to cross-probe to bespice
|
# set a port number in xschemrc if you want xschem to be able to cross-probe to bespice
|
||||||
set_ne bespice_listen_port {}
|
set_ne bespice_listen_port {}
|
||||||
|
|
||||||
|
set_ne keep_symbols 0 ;# if set loaded symbols will not be purged when descending/netlisting.
|
||||||
|
|
||||||
# hide instance details (show only bbox)
|
# hide instance details (show only bbox)
|
||||||
set_ne hide_symbols 0
|
set_ne hide_symbols 0
|
||||||
# show net names if symbol has attributes like @#n:net_name (where n = pin number or pin name)
|
# show net names if symbol has attributes like @#n:net_name (where n = pin number or pin name)
|
||||||
|
|||||||
@@ -247,6 +247,10 @@
|
|||||||
#### instead of looking only in symbol directory. Default: disabled (0).
|
#### instead of looking only in symbol directory. Default: disabled (0).
|
||||||
# set search_schematic 0
|
# set search_schematic 0
|
||||||
|
|
||||||
|
#### keep symbols encountered while netlisting / descending the hierarchy.
|
||||||
|
#### Default: not enabled (0)
|
||||||
|
# set keep_symbols 0
|
||||||
|
|
||||||
#### focus the schematic window if mouse goes over it, even if a dialog box
|
#### focus the schematic window if mouse goes over it, even if a dialog box
|
||||||
#### is displayed, without needing to click.
|
#### is displayed, without needing to click.
|
||||||
#### This allows to move/zoom/pan the schematic while editing attributes.
|
#### This allows to move/zoom/pan the schematic while editing attributes.
|
||||||
|
|||||||
Reference in New Issue
Block a user