diff --git a/src/callback.c b/src/callback.c index 549e8abb..0f6dab6b 100644 --- a/src/callback.c +++ b/src/callback.c @@ -1078,6 +1078,7 @@ int callback(int event, int mx, int my, KeySym key, break; } if(key >= '0' && key <= '2' && state == 0) { /* Toggle pin logic level */ + if(xctx->semaphore >= 2) break; logic_set(key - '0'); break; } diff --git a/src/hilight.c b/src/hilight.c index 3ffcc1f0..1b1e6206 100644 --- a/src/hilight.c +++ b/src/hilight.c @@ -93,11 +93,19 @@ void free_hilight_hash(void) /* remove the whole hash table */ } } - +/* by default: + * active_layer[0] = 7 + * active_layer[1] = 8 + * active_layer[2] = 10 if 9 is disabled it is skipped + * ... + * if a layer is disabled (not viewable) it is skipped + * active layers is the total number of layers for hilights. + */ int get_color(int value) { int x; + if(value < 0) return -value; if(n_active_layers) { x = value%(n_active_layers); return active_layer[x]; @@ -217,8 +225,8 @@ struct hilight_hashentry *hilight_lookup(const char *token, int value, int what) my_strdup(138, &(entry->token),token); entry->path = NULL; my_strdup(139, &(entry->path),xctx->sch_path[xctx->currsch]); - entry->oldvalue=value; /* just created. There is no oldvalue */ entry->value=value; + entry->time=xctx->hilight_time; entry->hash=hashcode; *preventry=entry; xctx->hilight_nets=1; /* some nets should be hilighted .... 07122002 */ @@ -234,8 +242,8 @@ struct hilight_hashentry *hilight_lookup(const char *token, int value, int what) my_free(764, &entry); *preventry=saveptr; } else if(what == XINSERT ) { - entry->oldvalue=entry->value; entry->value = value; + entry->time=xctx->hilight_time; } return entry; /* found matching entry, return the address */ } @@ -845,10 +853,10 @@ void propagate_hilights(int set, int clear, int mode) if(xctx->hilight_nets && enable_drill && set) drill_hilight(mode); } - -#define LOGIC_X 7 -#define LOGIC_0 5 -#define LOGIC_1 0 +/* use negative values to bypass the normal hilight color enumeration */ +#define LOGIC_X -1 +#define LOGIC_0 -12 +#define LOGIC_1 -5 #define STACKMAX 100 int get_logic_value(int inst, int n) @@ -959,6 +967,7 @@ void propagate_logic() int val, oldval; static int map[] = {LOGIC_0, LOGIC_1, LOGIC_X}; + tclsetvar("tclstop", "0"); prepare_netlist_structs(0); while(1) { found=0; @@ -971,6 +980,26 @@ void propagate_logic() if(propagate_str) { int n = 1; const char *propag; + int clock_pin, clock_val; + const char *clock = get_tok_value(rct[j].prop_ptr, "clock", 0); + clock_pin = clock[0] - '0'; + if(clock_pin != -1) { + entry = bus_hilight_lookup(xctx->inst[i].node[j], 0, XLOOKUP); /* clock pin */ + clock_val = (!entry) ? LOGIC_X : entry->value; + if(entry) { + if(clock_pin == 0) { /* clock falling edge */ + if( clock_val != LOGIC_0) continue; + if(entry && entry->time != xctx->hilight_time) continue; + } else if(clock_pin == 1) { /* clock rising edge */ + if( clock_val != LOGIC_1) continue; + if(entry && entry->time != xctx->hilight_time) continue; + } else if(clock_pin == 2) { /* set/clear active low */ + if( clock_val != LOGIC_0) continue; + } else if(clock_pin == 3) { /* set/clear active high */ + if( clock_val != LOGIC_1) continue; + } + } + } dbg(1, "propagate_logic(): inst=%d propagate_str=%s\n", i, propagate_str); while(1) { propag = find_nth(propagate_str, ',', n); @@ -982,6 +1011,10 @@ void propagate_logic() xctx->inst[i].instname, j, propagate_str, propagate); continue; } + if(!xctx->inst[i].node[propagate]) { + dbg(0, "Error: inst %s, output in %d unconnected\n", xctx->inst[i].instname, propagate); + break; + } /* get net to propagate hilight to...*/ /* fast option: dont use net_name() (no expandlabel though) */ /* THIS MUST BE DONE TO HANDLE VECTOR INSTANCES/BUSES */ @@ -1004,6 +1037,7 @@ void propagate_logic() /* get out from infinite loops (circuit is oscillating) */ Tcl_VarEval(interp, "update; if {$::tclstop == 1} {return 1} else {return 0}", NULL); if( tclresult()[0] == '1') break; + xctx->hilight_time++; } /* while(1) */ my_free(1224, &propagate_str); my_free(1222, &propagated_net); diff --git a/src/xinit.c b/src/xinit.c index b3051815..6692295f 100644 --- a/src/xinit.c +++ b/src/xinit.c @@ -456,6 +456,7 @@ void alloc_xschem_data() xctx->nl_xr = xctx->nl_yr = xctx->nl_xr2 = xctx->nl_yr2 = 0.0; xctx->nl_sel = xctx->nl_sem = 0; + xctx->hilight_time = 0; /* timestamp for sims */ xctx->hilight_nets = 0; xctx->hilight_color = 0; xctx->rectcolor = 0; diff --git a/src/xschem.h b/src/xschem.h index 497c04e4..85e3fc72 100644 --- a/src/xschem.h +++ b/src/xschem.h @@ -557,6 +557,7 @@ typedef struct { struct hilight_hashentry *hilight_table[HASHSIZE]; int hilight_nets; int hilight_color; + int hilight_time; /* timestamp for sims */ unsigned int rectcolor; /* current layer */ /* get_unnamed_node() */ int new_node; @@ -642,7 +643,7 @@ struct hilight_hashentry { char *token; char *path; /* hierarchy path */ int value; /* hilight color */ - int oldvalue; /* previous hilight color */ + int time; /*delta-time for sims */ }; /* for netlist.c */ diff --git a/xschem_library/examples/0_examples_top.sch b/xschem_library/examples/0_examples_top.sch index b70eb2e4..02da9645 100644 --- a/xschem_library/examples/0_examples_top.sch +++ b/xschem_library/examples/0_examples_top.sch @@ -48,19 +48,19 @@ N 870 -300 990 -300 {lab=#net1} N 910 -340 910 -250 {lab=#net2} N 910 -270 970 -270 {lab=#net2} N 930 -310 960 -300 {lab=#net1} -N 380 -530 700 -530 {lab=xxx} +N 380 -530 700 -530 {lab=BUS[4:0]} N 510 -640 510 -540 {lab=BUS[1]} N 410 -600 410 -540 {lab=BUS[2]} -C {poweramp.sym} 160 -440 0 0 {name=x1 +C {poweramp.sym} 160 -460 0 0 {name=x1 tclcommand="xschem descend"} -C {tesla.sym} 160 -360 0 0 {name=x2} -C {test_ne555.sym} 160 -320 0 0 {name=x3} -C {test_lm324.sym} 160 -280 0 0 {name=x4} -C {osc.sym} 160 -400 0 0 {name=x5} +C {tesla.sym} 160 -380 0 0 {name=x2} +C {test_ne555.sym} 160 -340 0 0 {name=x3} +C {test_lm324.sym} 160 -300 0 0 {name=x4} +C {osc.sym} 160 -420 0 0 {name=x5} C {title.sym} 160 -30 0 0 {name=l1 author="Stefan Schippers"} -C {cmos_example.sym} 160 -480 0 0 {name=x6} -C {greycnt.sym} 160 -520 0 0 {name=x8} -C {loading.sym} 160 -560 0 0 {name=x9} +C {cmos_example.sym} 160 -500 0 0 {name=x6} +C {greycnt.sym} 160 -540 0 0 {name=x8} +C {loading.sym} 160 -580 0 0 {name=x9} C {inv_bsource.sym} 930 -200 0 0 {name=B1 TABLE="1.4 3.0 1.6 0.0"} C {launcher.sym} 460 -210 0 0 {name=h1 descr="XSCHEM ON REPO.HU" @@ -77,11 +77,13 @@ url="$\{XSCHEM_SHAREDIR\}/../doc/xschem/index.html" program=x-www-browser } -C {rlc.sym} 160 -600 0 0 {name=x0} +C {rlc.sym} 160 -620 0 0 {name=x0} C {lab_pin.sym} 700 -530 0 1 {name=l2 sig_type=std_logic lab=BUS[4:0]} C {bus_connect.sym} 500 -530 0 0 {name=l3 lab=BUS[1]} C {bus_connect_nolab.sym} 400 -530 0 0 {name=r1} C {lab_pin.sym} 410 -600 3 1 {name=l4 sig_type=std_logic lab=BUS[2]} -C {LCC_instances.sym} 160 -240 0 0 {name=x7} -C {test_backannotated_subckt.sym} 160 -200 0 0 {name=x10} -C {plot_manipulation.sym} 160 -160 0 0 {name=x11} +C {LCC_instances.sym} 160 -260 0 0 {name=x7} +C {test_backannotated_subckt.sym} 160 -220 0 0 {name=x10} +C {plot_manipulation.sym} 160 -180 0 0 {name=x11} +C {logic_test.sym} 160 -140 0 0 {name=x12} +C {simulate_ff.sym} 160 -100 0 0 {name=x13} diff --git a/xschem_library/xschem_simulator/and2_1.sym b/xschem_library/xschem_simulator/and2_1.sym new file mode 100644 index 00000000..aef42995 --- /dev/null +++ b/xschem_library/xschem_simulator/and2_1.sym @@ -0,0 +1,27 @@ +v {xschem version=2.9.9 file_version=1.2 } +G {} +K {type=primitive +format="@name @@A @@B @VGND @VNB @VPB @VPWR @@X @prefix\\\\and2_1" +template="name=x1 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ " +extra="VGND VNB VPB VPWR prefix" +highlight=true + +function2="0 1 &"} +V {} +S {} +E {} +L 4 -60 -20 -30 -20 {} +L 4 -60 20 -30 20 {} +L 4 -30 -30 -30 30 {} +L 4 -30 30 5 30 {} +L 4 -30 -30 5 -30 {} +L 4 35 0 60 0 {} +B 5 -62.5 -22.5 -57.5 -17.5 {name=A dir=in propagate_to=2 } +B 5 -62.5 17.5 -57.5 22.5 {name=B dir=in propagate_to=2 } +B 5 57.5 -2.5 62.5 2.5 {name=X dir=out } +A 4 5 0 30 270 180 {} +T {@name} -28.75 -5 0 0 0.2 0.2 {} +T {@symname} -25 -45 0 0 0.2 0.2 {} +T {A} -55 -34 0 0 0.2 0.2 {} +T {B} -55 6 0 0 0.2 0.2 {} +T {X} 55 -14 0 1 0.2 0.2 {} diff --git a/xschem_library/xschem_simulator/and3_1.sym b/xschem_library/xschem_simulator/and3_1.sym new file mode 100644 index 00000000..32cc9909 --- /dev/null +++ b/xschem_library/xschem_simulator/and3_1.sym @@ -0,0 +1,33 @@ +v {xschem version=2.9.9 file_version=1.2 } +G {} +K {type=primitive +format="@name @@A @@B @@C @VGND @VNB @VPB @VPWR @@X @prefix\\\\and3_1" +template="name=x1 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ " +extra="VGND VNB VPB VPWR prefix" +highlight=true +function3="0 1 2 & &"} +V {} +S {} +E {} +L 4 -60 -40 -40 -40 {} +L 4 -60 0 -30 0 {} +L 4 -30 -30 -30 30 {} +L 4 -30 30 5 30 {} +L 4 -30 -30 5 -30 {} +L 4 35 0 60 0 {} +L 4 -60 40 -40 40 {} +L 4 -40 20 -40 40 {} +L 4 -40 20 -30 20 {} +L 4 -40 -40 -40 -20 {} +L 4 -40 -20 -30 -20 {} +B 5 -62.5 -42.5 -57.5 -37.5 {name=A dir=in propagate_to=3 } +B 5 -62.5 -2.5 -57.5 2.5 {name=B dir=in propagate_to=3 } +B 5 -62.5 37.5 -57.5 42.5 {name=C dir=in propagate_to=3 } +B 5 57.5 -2.5 62.5 2.5 {name=X dir=out } +A 4 5 0 30 270 180 {} +T {@name} -28.75 -5 0 0 0.2 0.2 {} +T {@symname} -25 -45 0 0 0.2 0.2 {} +T {A} -55 -54 0 0 0.2 0.2 {} +T {B} -55 -14 0 0 0.2 0.2 {} +T {X} 55 -14 0 1 0.2 0.2 {} +T {C} -55 26 0 0 0.2 0.2 {} diff --git a/xschem_library/xschem_simulator/and4_1.sym b/xschem_library/xschem_simulator/and4_1.sym new file mode 100644 index 00000000..061d72e7 --- /dev/null +++ b/xschem_library/xschem_simulator/and4_1.sym @@ -0,0 +1,41 @@ +v {xschem version=2.9.9 file_version=1.2 } +G {} +K {type=primitive +format="@name @@A @@B @@C @@D @VGND @VNB @VPB @VPWR @@X @prefix\\\\and4_1" +template="name=x1 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ " +extra="VGND VNB VPB VPWR prefix" +highlight=true +function4="0 1 2 3 & & &" +} +V {} +S {} +E {} +L 4 -60 -60 -40 -60 {} +L 4 -60 -20 -45 -20 {} +L 4 -30 -30 -30 30 {} +L 4 -30 30 5 30 {} +L 4 -30 -30 5 -30 {} +L 4 35 0 60 0 {} +L 4 -60 60 -40 60 {} +L 4 -40 25 -40 60 {} +L 4 -40 25 -30 25 {} +L 4 -40 -60 -40 -25 {} +L 4 -40 -25 -30 -25 {} +L 4 -60 20 -45 20 {} +L 4 -45 10 -45 20 {} +L 4 -45 10 -30 10 {} +L 4 -45 -20 -45 -10 {} +L 4 -45 -10 -30 -10 {} +B 5 -62.5 -62.5 -57.5 -57.5 {name=A dir=in propagate_to=4 } +B 5 -62.5 -22.5 -57.5 -17.5 {name=B dir=in propagate_to=4 } +B 5 -62.5 17.5 -57.5 22.5 {name=C dir=in propagate_to=4 } +B 5 -62.5 57.5 -57.5 62.5 {name=D dir=in propagate_to=4 } +B 5 57.5 -2.5 62.5 2.5 {name=X dir=out } +A 4 5 0 30 270 180 {} +T {D} -55 46 0 0 0.2 0.2 {} +T {@name} -28.75 -5 0 0 0.2 0.2 {} +T {@symname} -25 -45 0 0 0.2 0.2 {} +T {A} -55 -74 0 0 0.2 0.2 {} +T {B} -55 -34 0 0 0.2 0.2 {} +T {X} 55 -14 0 1 0.2 0.2 {} +T {C} -55 6 0 0 0.2 0.2 {} diff --git a/xschem_library/xschem_simulator/dfrbp_1.sym b/xschem_library/xschem_simulator/dfrbp_1.sym new file mode 100644 index 00000000..ae6e68ed --- /dev/null +++ b/xschem_library/xschem_simulator/dfrbp_1.sym @@ -0,0 +1,31 @@ +v {xschem version=2.9.9 file_version=1.2 } +G {} +K {type=primitive +format="@name @@CLK @@D @@RESET_B @VGND @VNB @VPB @VPWR @@Q @@Q_N @prefix\\\\dfrbp_1" +template="name=x1 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ " +extra="VGND VNB VPB VPWR prefix" +highlight=true} +V {} +S {} +E {} +L 4 -70 -30 70 -30 {} +L 4 -70 30 70 30 {} +L 4 -70 -30 -70 30 {} +L 4 70 -30 70 30 {} +L 4 -90 -20 -70 -20 {} +L 4 -90 0 -70 0 {} +L 4 -90 20 -70 20 {} +L 4 70 -20 90 -20 {} +L 4 70 0 90 0 {} +B 5 -92.5 -22.5 -87.5 -17.5 {name=CLK dir=in } +B 5 -92.5 -2.5 -87.5 2.5 {name=D dir=in } +B 5 -92.5 17.5 -87.5 22.5 {name=RESET_B dir=in } +B 5 87.5 -22.5 92.5 -17.5 {name=Q dir=out } +B 5 87.5 -2.5 92.5 2.5 {name=Q_N dir=out } +T {@symname} 0 -6 0 0 0.3 0.3 {hcenter=true} +T {@name} 75 -42 0 0 0.2 0.2 {} +T {CLK} -65 -24 0 0 0.2 0.2 {} +T {D} -65 -4 0 0 0.2 0.2 {} +T {RESET_B} -65 16 0 0 0.2 0.2 {} +T {Q} 65 -24 0 1 0.2 0.2 {} +T {Q_N} 65 -4 0 1 0.2 0.2 {} diff --git a/xschem_library/xschem_simulator/dfrtp_1.sym b/xschem_library/xschem_simulator/dfrtp_1.sym new file mode 100644 index 00000000..36558c12 --- /dev/null +++ b/xschem_library/xschem_simulator/dfrtp_1.sym @@ -0,0 +1,32 @@ +v {xschem version=2.9.9 file_version=1.2 } +G {} +K {type=stdcell +format="@name @@CLK @@D @@RESET_B @VGND @VNB @VPB @VPWR @@Q @prefix\\\\dfrtp_1" +template="name=x1 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ " +extra="VGND VNB VPB VPWR prefix" +highlight=true +function3="1 0 2 & & 0 ~ 2 3 & & |"} +V {} +S {} +E {} +L 4 -70 -30 70 -30 {} +L 4 -70 30 70 30 {} +L 4 -70 -30 -70 30 {} +L 4 70 -30 70 30 {} +L 4 -90 -20 -70 -20 {} +L 4 -90 0 -70 0 {} +L 4 -90 20 -70 20 {} +L 4 70 -20 90 -20 {} +B 5 -92.5 -22.5 -87.5 -17.5 {name=CLK dir=in +propagate_to=3 clock=1} +B 5 -92.5 -2.5 -87.5 2.5 {name=D dir=in } +B 5 -92.5 17.5 -87.5 22.5 {name=RESET_B dir=in +propagate_to=3 +clock=2} +B 5 87.5 -22.5 92.5 -17.5 {name=Q dir=out } +T {@symname} 0 -6 0 0 0.3 0.3 {hcenter=true} +T {@name} 75 -42 0 0 0.2 0.2 {} +T {CLK} -65 -24 0 0 0.2 0.2 {} +T {D} -65 -4 0 0 0.2 0.2 {} +T {RESET_B} -65 16 0 0 0.2 0.2 {} +T {Q} 65 -24 0 1 0.2 0.2 {} diff --git a/xschem_library/xschem_simulator/dlrtn_1.sym b/xschem_library/xschem_simulator/dlrtn_1.sym new file mode 100644 index 00000000..70cc5062 --- /dev/null +++ b/xschem_library/xschem_simulator/dlrtn_1.sym @@ -0,0 +1,31 @@ +v {xschem version=2.9.9 file_version=1.2 } +G {} +K {type=primitive +format="@name @@D @@GATE_N @@RESET_B @VGND @VNB @VPB @VPWR @@Q @prefix\\\\dlrtn_1" +template="name=x1 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ " +extra="VGND VNB VPB VPWR prefix" +highlight=true +function3="0 1 ~ 2 & & 1 2 3 & & |"} +V {} +S {} +E {} +L 4 -70 -30 70 -30 {} +L 4 -70 30 70 30 {} +L 4 -70 -30 -70 30 {} +L 4 70 -30 70 30 {} +L 4 -90 -20 -70 -20 {} +L 4 -90 0 -70 0 {} +L 4 -90 20 -70 20 {} +L 4 70 -20 90 -20 {} +B 5 -92.5 -22.5 -87.5 -17.5 {name=D dir=in +propagate_to=3} +B 5 -92.5 -2.5 -87.5 2.5 {name=GATE_N dir=in +propagate_to=3} +B 5 -92.5 17.5 -87.5 22.5 {name=RESET_B dir=in } +B 5 87.5 -22.5 92.5 -17.5 {name=Q dir=out } +T {@symname} 20 -6 0 0 0.3 0.3 {hcenter=true} +T {@name} 75 -42 0 0 0.2 0.2 {} +T {D} -65 -24 0 0 0.2 0.2 {} +T {GATE_N} -65 -4 0 0 0.2 0.2 {} +T {RESET_B} -65 16 0 0 0.2 0.2 {} +T {Q} 65 -24 0 1 0.2 0.2 {} diff --git a/xschem_library/xschem_simulator/dlrtp_1.sym b/xschem_library/xschem_simulator/dlrtp_1.sym new file mode 100644 index 00000000..8c556b29 --- /dev/null +++ b/xschem_library/xschem_simulator/dlrtp_1.sym @@ -0,0 +1,31 @@ +v {xschem version=2.9.9 file_version=1.2 } +G {} +K {type=primitive +format="@name @@D @@GATE @@RESET_B @VGND @VNB @VPB @VPWR @@Q @prefix\\\\dlrtp_1" +template="name=x1 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ " +extra="VGND VNB VPB VPWR prefix" +highlight=true +function3="0 1 2 & & 1 ~ 2 3 & & |"} +V {} +S {} +E {} +L 4 -70 -30 70 -30 {} +L 4 -70 30 70 30 {} +L 4 -70 -30 -70 30 {} +L 4 70 -30 70 30 {} +L 4 -90 -20 -70 -20 {} +L 4 -90 0 -70 0 {} +L 4 -90 20 -70 20 {} +L 4 70 -20 90 -20 {} +B 5 -92.5 -22.5 -87.5 -17.5 {name=D dir=in +propagate_to=3} +B 5 -92.5 -2.5 -87.5 2.5 {name=GATE dir=in +propagate_to=3} +B 5 -92.5 17.5 -87.5 22.5 {name=RESET_B dir=in } +B 5 87.5 -22.5 92.5 -17.5 {name=Q dir=out } +T {@symname} 0 -6 0 0 0.3 0.3 {hcenter=true} +T {@name} 75 -42 0 0 0.2 0.2 {} +T {D} -65 -24 0 0 0.2 0.2 {} +T {GATE} -65 -4 0 0 0.2 0.2 {} +T {RESET_B} -65 16 0 0 0.2 0.2 {} +T {Q} 65 -24 0 1 0.2 0.2 {} diff --git a/xschem_library/xschem_simulator/giant_label.sym b/xschem_library/xschem_simulator/giant_label.sym new file mode 100644 index 00000000..d69f65a7 --- /dev/null +++ b/xschem_library/xschem_simulator/giant_label.sym @@ -0,0 +1,10 @@ +v {xschem version=2.9.9 file_version=1.2 } +G {} +K {type=label +format="*.alias @lab" +template="name=l1 sig_type=std_logic lab=xxx text=yyy"} +V {} +S {} +E {} +B 5 -1.25 -1.25 1.25 1.25 {name=p dir=in} +T {@text} -7.5 -8.125 0 1 2 2 {} diff --git a/xschem_library/xschem_simulator/logic_test.sch b/xschem_library/xschem_simulator/logic_test.sch index 71aa8073..059a0ddc 100644 --- a/xschem_library/xschem_simulator/logic_test.sch +++ b/xschem_library/xschem_simulator/logic_test.sch @@ -4,16 +4,20 @@ K {} V {} S {} E {} +B 1 160 -3040 6800 -2320 {} P 4 7 920 -960 110 -960 110 -1040 100 -1040 110 -1080 120 -1040 110 -1040 {} P 4 9 1320 -640 920 -640 920 -460 900 -460 920 -420 940 -460 920 -460 920 -640 1320 -640 {} -T {Ctrl-Click here to start a simulation. Xschem will be only partially responsive -during simulation. +T {This example shows Xschem (very simple) simulation abilities +Ctrl-Click here to start a simulation. +Xschem will be only partially responsive during simulation. Simulation will terminate automatically after 30 iterations -Otherwise go to Simulation ->Force stop tcl scripts} 1390 -700 0 0 2 2 {} +Otherwise go to Simulation ->Forced stop tcl scripts} 1340 -740 0 0 2 2 {} T {Clicking an input net and pressing '0', '1' or '2' will set the net to logic state 0,1, X respectively} 960 -1030 0 0 2 2 {} -T {9 Flip Flop Linear Feedback Shift Register} 1660 -3840 0 0 3 3 {layer=11} -T {Example of multi-output gates -Full Adder} 6170 -910 0 0 1 1 {} +T {9 Flip Flop Linear Feedback Shift Register} 1980 -3440 0 0 3 3 {} +T {Cyan: Uninitialized or unknown (X)} 4930 -540 0 0 1.5 1.5 {layer=1} +T {Signal colors:} 4850 -640 0 0 1.5 1.5 {} +T {Blue: Logic level low (0)} 4930 -440 0 0 1.5 1.5 {layer=12} +T {Red: Logic level high (1)} 4930 -340 0 0 1.5 1.5 {layer=5} N 480 -1900 480 -1870 { lab=#net1} N 360 -1970 480 -1900 { lab=#net1} N 360 -2000 360 -1970 { lab=#net1} @@ -439,95 +443,15 @@ N 4380 -1400 4380 -1390 { lab=#net30} N 5050 -1400 5050 -1390 { lab=#net35} N 5720 -1400 5720 -1390 { lab=#net40} N 6400 -1400 6400 -1390 { lab=#net45} -N 180 -3380 180 -2420 { lab=q1} -N 180 -3380 420 -2980 { lab=q1} -N 420 -2980 660 -3380 { lab=q1} -N 660 -3380 660 -2420 { lab=q1} -N 840 -2900 840 -2420 { lab=q2} -N 1500 -2900 1500 -2420 { lab=q3} -N 4860 -3380 4860 -2420 { lab=q7} -N 4860 -3380 5100 -2980 { lab=q7} -N 5100 -2980 5340 -3380 { lab=q7} -N 5340 -3380 5340 -2420 { lab=q7} -N 5520 -2700 5520 -2420 { lab=q8} -N 6000 -2700 6000 -2420 { lab=q8} -N 2820 -3380 3060 -2880 { lab=q5} -N 3060 -2880 3300 -3380 { lab=q5} -N 840 -3380 1320 -3380 { lab=q2} -N 840 -2900 1200 -2900 { lab=q2} -N 840 -2420 1320 -2420 { lab=q2} -N 1500 -3380 1820 -3380 { lab=q3} -N 1820 -3380 1920 -3300 { lab=q3} -N 1920 -3300 1980 -3220 { lab=q3} -N 1980 -3220 1980 -3060 { lab=q3} -N 1820 -2900 1920 -2980 { lab=q3} -N 1920 -2980 1980 -3060 { lab=q3} -N 1700 -2900 1820 -2900 { lab=q3} -N 1700 -2900 1980 -2420 { lab=q3} -N 2160 -2900 2160 -2420 { lab=q4} -N 2160 -3380 2480 -3380 { lab=q4} -N 2480 -3380 2580 -3300 { lab=q4} -N 2580 -3300 2640 -3220 { lab=q4} -N 2640 -3220 2640 -3060 { lab=q4} -N 2480 -2900 2580 -2980 { lab=q4} -N 2580 -2980 2640 -3060 { lab=q4} -N 2360 -2900 2480 -2900 { lab=q4} -N 2360 -2900 2640 -2420 { lab=q4} -N 3060 -2880 3060 -2420 { lab=q5} -N 4440 -2900 4680 -2420 { lab=q6} -N 5520 -3080 5680 -3380 { lab=q8} -N 5680 -3380 5840 -3380 { lab=q8} -N 5840 -3380 6000 -3080 { lab=q8} -N 5520 -2700 6000 -2700 { lab=q8} -N 6560 -3380 6660 -3280 { lab=q9} -N 6280 -3380 6560 -3380 { lab=q9} -N 6180 -3280 6280 -3380 { lab=q9} -N 6280 -2900 6560 -2900 { lab=q9} -N 6180 -3000 6280 -2900 { lab=q9} -N 6180 -3280 6180 -3000 { lab=q9} -N 6560 -2900 6660 -2800 { lab=q9} -N 6660 -2800 6660 -2520 { lab=q9} -N 6560 -2420 6660 -2520 { lab=q9} -N 6280 -2420 6560 -2420 { lab=q9} -N 6180 -2520 6280 -2420 { lab=q9} -N 4440 -2900 4680 -3380 { lab=q6} -N 4200 -2420 4440 -2900 { lab=q6} N 5990 -2250 6760 -2250 { lab=q9} N 6760 -2250 6760 -1760 { lab=q9} N 6130 -2210 6130 -1760 { lab=q8} N 5990 -2210 6130 -2210 { lab=q8} N 120 -2230 5220 -2230 { lab=#net6} N 120 -2230 120 -1350 { lab=#net6} -N 840 -3380 840 -2900 { lab=q2} -N 1500 -3380 1500 -2900 { lab=q3} -N 1500 -2900 1700 -2900 { lab=q3} -N 2160 -3380 2160 -2900 { lab=q4} -N 2160 -2900 2360 -2900 { lab=q4} -N 5520 -3080 5520 -2700 { lab=q8} -N 6000 -3080 6000 -2700 { lab=q8} -N 4200 -3380 4440 -2900 { lab=q6} N 6750 -1760 6760 -1760 { lab=q9} N 6070 -1760 6130 -1760 { lab=q8} N 5300 -2230 5870 -2230 { lab=#net47} -N 6410 -240 6410 -190 { lab=#net48} -N 6330 -240 6410 -240 { lab=#net48} -N 6290 -240 6330 -240 { lab=#net48} -N 6290 -280 6290 -240 { lab=#net48} -N 6410 -410 6410 -360 { lab=#net49} -N 6330 -410 6410 -410 { lab=#net49} -N 6290 -410 6330 -410 { lab=#net49} -N 6290 -450 6290 -410 { lab=#net49} -N 6410 -580 6410 -530 { lab=#net50} -N 6330 -580 6410 -580 { lab=#net50} -N 6290 -580 6330 -580 { lab=#net50} -N 6290 -620 6290 -580 { lab=#net50} -N 6410 -110 6490 -110 { lab=S0} -N 6410 -280 6490 -280 { lab=S1} -N 6410 -620 6490 -620 { lab=S3} -N 6410 -700 6430 -700 { lab=#net51} -N 6410 -450 6490 -450 { lab=S2} -N 6250 -110 6290 -110 { lab=VSS} -N 5740 -300 5820 -300 { lab=Q_FF} C {nand2_1.sym} 420 -2020 0 0 {name=x45 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } C {nand2_1.sym} 650 -1760 0 0 {name=x49 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } C {nand3_1.sym} 420 -1870 0 0 {name=x51 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } @@ -584,15 +508,6 @@ C {nand3_1.sym} 6460 -1870 0 0 {name=x95 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR pre C {nand3_1.sym} 6460 -1500 0 0 {name=x96 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } C {nand3_1.sym} 6690 -1610 0 0 {name=x97 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } C {nand3_1.sym} 6460 -1350 0 0 {name=x98 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } -C {lab_pin.sym} 180 -2420 0 0 {name=l2 sig_type=std_logic lab=q1} -C {lab_pin.sym} 840 -2420 0 0 {name=l3 sig_type=std_logic lab=q2} -C {lab_pin.sym} 1500 -2420 0 0 {name=l4 sig_type=std_logic lab=q3} -C {lab_pin.sym} 2160 -2420 0 0 {name=l5 sig_type=std_logic lab=q4} -C {lab_pin.sym} 3060 -2420 0 0 {name=l6 sig_type=std_logic lab=q5} -C {lab_pin.sym} 4200 -2420 0 0 {name=l7 sig_type=std_logic lab=q6} -C {lab_pin.sym} 4860 -2420 0 0 {name=l8 sig_type=std_logic lab=q7} -C {lab_pin.sym} 5520 -2420 0 0 {name=l9 sig_type=std_logic lab=q8} -C {lab_pin.sym} 6280 -2420 0 0 {name=l28 sig_type=std_logic lab=q9} C {lab_pin.sym} 770 -1760 0 1 {name=l29 sig_type=std_logic lab=q1} C {lab_pin.sym} 1430 -1760 0 1 {name=l30 sig_type=std_logic lab=q2} C {lab_pin.sym} 2090 -1760 0 1 {name=l31 sig_type=std_logic lab=q3} @@ -635,26 +550,12 @@ tclcommand=" set count 0 \} " } -C {fa_1.sym} 6350 -660 0 0 {name=x7 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } -C {fa_1.sym} 6350 -490 0 0 {name=x8 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } -C {fa_1.sym} 6350 -320 0 0 {name=x9 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } -C {fa_1.sym} 6350 -150 0 0 {name=x10 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } -C {lab_pin.sym} 6290 -700 0 0 {name=l10 sig_type=std_logic lab=q1} -C {lab_pin.sym} 6290 -660 0 0 {name=l11 sig_type=std_logic lab=q2} -C {lab_pin.sym} 6290 -490 0 0 {name=l12 sig_type=std_logic lab=q4} -C {lab_pin.sym} 6290 -530 0 0 {name=l13 sig_type=std_logic lab=q3} -C {lab_pin.sym} 6290 -320 0 0 {name=l14 sig_type=std_logic lab=q6} -C {lab_pin.sym} 6290 -360 0 0 {name=l15 sig_type=std_logic lab=q5} -C {lab_pin.sym} 6290 -150 0 0 {name=l16 sig_type=std_logic lab=q8} -C {lab_pin.sym} 6290 -190 0 0 {name=l17 sig_type=std_logic lab=q7} -C {noconn.sym} 6430 -700 2 0 {name=l18} -C {lab_pin.sym} 6490 -620 0 1 {name=l19 sig_type=std_logic lab=S3} -C {lab_pin.sym} 6490 -450 0 1 {name=l20 sig_type=std_logic lab=S2} -C {lab_pin.sym} 6490 -280 0 1 {name=l21 sig_type=std_logic lab=S1} -C {lab_pin.sym} 6490 -110 0 1 {name=l22 sig_type=std_logic lab=S0} -C {lab_pin.sym} 6250 -110 0 0 {name=l23 sig_type=std_logic lab=VSS} -C {lab_pin.sym} 5560 -260 0 0 {name=l1 sig_type=std_logic lab=CLEAR_} -C {lab_pin.sym} 5560 -300 0 0 {name=l24 sig_type=std_logic lab=CLK} -C {lab_pin.sym} 5820 -300 0 1 {name=l27 sig_type=std_logic lab=Q_FF} -C {dfrtp_1.sym} 5650 -280 0 0 {name=x2 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } -C {lab_pin.sym} 5560 -280 0 0 {name=l26 sig_type=std_logic lab=DATA} +C {giant_label2.sym} 240 -3040 0 0 {name=l1 sig_type=std_logic lab=q1 text=M} +C {giant_label2.sym} 880 -3040 0 0 {name=l2 sig_type=std_logic lab=q2 text=E} +C {giant_label2.sym} 1520 -3040 0 0 {name=l3 sig_type=std_logic lab=q3 text=R} +C {giant_label2.sym} 2160 -3040 0 0 {name=l4 sig_type=std_logic lab=q4 text=R} +C {giant_label2.sym} 2800 -3040 0 0 {name=l5 sig_type=std_logic lab=q5 text=Y} +C {giant_label2.sym} 4240 -3040 0 0 {name=l6 sig_type=std_logic lab=q6 text=X} +C {giant_label2.sym} 4880 -3040 0 0 {name=l7 sig_type=std_logic lab=q7 text=M} +C {giant_label2.sym} 5520 -3040 0 0 {name=l8 sig_type=std_logic lab=q8 text=A} +C {giant_label2.sym} 6160 -3040 0 0 {name=l9 sig_type=std_logic lab=q9 text=S} diff --git a/xschem_library/xschem_simulator/nand4_1.sym b/xschem_library/xschem_simulator/nand4_1.sym new file mode 100644 index 00000000..c17e89de --- /dev/null +++ b/xschem_library/xschem_simulator/nand4_1.sym @@ -0,0 +1,41 @@ +v {xschem version=2.9.9 file_version=1.2 } +G {} +K {type=primitive +format="@name @@A @@B @@C @@D @VGND @VNB @VPB @VPWR @@Y @prefix\\\\nand4_1" +template="name=x1 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ " +extra="VGND VNB VPB VPWR prefix" +highlight=true +function4="0 1 2 3 & & & ~"} +V {} +S {} +E {} +L 4 -60 -60 -40 -60 {} +L 4 -30 -30 -30 30 {} +L 4 -30 30 5 30 {} +L 4 -30 -30 5 -30 {} +L 4 45 0 60 0 {} +L 4 -60 20 -45 20 {} +L 4 -45 10 -45 20 {} +L 4 -45 10 -30 10 {} +L 4 -40 -60 -40 -25 {} +L 4 -40 -25 -30 -25 {} +L 4 -60 -20 -45 -20 {} +L 4 -45 -20 -45 -10 {} +L 4 -45 -10 -30 -10 {} +L 4 -60 60 -40 60 {} +L 4 -40 25 -40 60 {} +L 4 -40 25 -30 25 {} +B 5 -62.5 -62.5 -57.5 -57.5 {name=A dir=in propagate_to=4 } +B 5 -62.5 -22.5 -57.5 -17.5 {name=B dir=in propagate_to=4 } +B 5 -62.5 17.5 -57.5 22.5 {name=C dir=in propagate_to=4 } +B 5 -62.5 57.5 -57.5 62.5 {name=D dir=in propagate_to=4 } +B 5 57.5 -2.5 62.5 2.5 {name=Y dir=out } +A 4 5 0 30 270 180 {} +A 4 40 0 5 0 360 {} +T {@name} -28.75 -5 0 0 0.2 0.2 {} +T {@symname} -25 -45 0 0 0.2 0.2 {} +T {A} -55 -74 0 0 0.2 0.2 {} +T {B} -55 -34 0 0 0.2 0.2 {} +T {Y} 55 -14 0 1 0.2 0.2 {} +T {C} -55 6 0 0 0.2 0.2 {} +T {D} -55 46 0 0 0.2 0.2 {} diff --git a/xschem_library/xschem_simulator/nor4_1.sym b/xschem_library/xschem_simulator/nor4_1.sym new file mode 100644 index 00000000..edba9e25 --- /dev/null +++ b/xschem_library/xschem_simulator/nor4_1.sym @@ -0,0 +1,43 @@ +v {xschem version=2.9.9 file_version=1.2 } +G {} +K {type=primitive +format="@name @@A @@B @@C @@D @VGND @VNB @VPB @VPWR @@Y @prefix\\\\nor4_1" +template="name=x1 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ " +extra="VGND VNB VPB VPWR prefix" +highlight=true +function4="0 1 2 3 | | | ~" +} +V {} +S {} +E {} +L 4 45 0 60 0 {} +L 4 -30 -30 -15 -30 {} +L 4 -30 30 -15 30 {} +L 4 -60 -60 -40 -60 {} +L 4 -60 20 -45 20 {} +L 4 -45 10 -45 20 {} +L 4 -45 10 -22.1875 10 {} +L 4 -40 -60 -40 -25 {} +L 4 -40 -25 -27.5 -25 {} +L 4 -60 -20 -45 -20 {} +L 4 -45 -20 -45 -10 {} +L 4 -45 -10 -22.1875 -10 {} +L 4 -60 60 -40 60 {} +L 4 -40 25 -40 60 {} +L 4 -40 25 -27.5 25 {} +B 5 -62.5 -62.5 -57.5 -57.5 {name=A dir=in propagate_to=4 } +B 5 -62.5 -22.5 -57.5 -17.5 {name=B dir=in propagate_to=4 } +B 5 -62.5 17.5 -57.5 22.5 {name=C dir=in propagate_to=4 } +B 5 -62.5 57.5 -57.5 62.5 {name=D dir=in propagate_to=4 } +B 5 57.5 -2.5 62.5 2.5 {name=Y dir=out } +A 4 40 0 5 0 360 {} +A 4 -77.5 0 56.18051263561058 327.7243556854224 64.55128862915524 {} +A 4 -21.07142857142857 36.78571428571431 67.06112046149408 33.26691584358777 51.53865524867743 {} +A 4 -21.07142857142857 -36.78571428571431 67.06112046149408 275.1944289077348 51.53865524867743 {} +T {Y} 55 -14 0 1 0.2 0.2 {} +T {@name} -16.25 -5 0 0 0.2 0.2 {} +T {@symname} -25 -45 0 0 0.2 0.2 {} +T {A} -55 -74 0 0 0.2 0.2 {} +T {B} -55 -34 0 0 0.2 0.2 {} +T {C} -55 6 0 0 0.2 0.2 {} +T {D} -55 46 0 0 0.2 0.2 {} diff --git a/xschem_library/xschem_simulator/or4_1.sym b/xschem_library/xschem_simulator/or4_1.sym new file mode 100644 index 00000000..9b8e1c30 --- /dev/null +++ b/xschem_library/xschem_simulator/or4_1.sym @@ -0,0 +1,42 @@ +v {xschem version=2.9.9 file_version=1.2 } +G {} +K {type=primitive +format="@name @@A @@B @@C @@D @VGND @VNB @VPB @VPWR @@X @prefix\\\\or4_1" +template="name=x1 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ " +extra="VGND VNB VPB VPWR prefix" +highlight=true +function4="0 1 2 3 | | |" +} +V {} +S {} +E {} +L 4 35 0 60 0 {} +L 4 -30 -30 -15 -30 {} +L 4 -30 30 -15 30 {} +L 4 -60 -60 -40 -60 {} +L 4 -60 20 -45 20 {} +L 4 -45 10 -45 20 {} +L 4 -45 10 -22.1875 10 {} +L 4 -40 -60 -40 -25 {} +L 4 -40 -25 -27.5 -25 {} +L 4 -60 -20 -45 -20 {} +L 4 -45 -20 -45 -10 {} +L 4 -45 -10 -22.1875 -10 {} +L 4 -60 60 -40 60 {} +L 4 -40 25 -40 60 {} +L 4 -40 25 -27.5 25 {} +B 5 -62.5 -62.5 -57.5 -57.5 {name=A dir=in propagate_to=4 } +B 5 -62.5 -22.5 -57.5 -17.5 {name=B dir=in propagate_to=4 } +B 5 -62.5 17.5 -57.5 22.5 {name=C dir=in propagate_to=4 } +B 5 -62.5 57.5 -57.5 62.5 {name=D dir=in propagate_to=4 } +B 5 57.5 -2.5 62.5 2.5 {name=X dir=out } +A 4 -77.5 0 56.18051263561058 327.7243556854224 64.55128862915524 {} +A 4 -21.07142857142857 36.78571428571431 67.06112046149408 33.26691584358777 51.53865524867743 {} +A 4 -21.07142857142857 -36.78571428571431 67.06112046149408 275.1944289077348 51.53865524867743 {} +T {X} 55 -14 0 1 0.2 0.2 {} +T {@name} -16.25 -5 0 0 0.2 0.2 {} +T {@symname} -25 -45 0 0 0.2 0.2 {} +T {A} -55 -74 0 0 0.2 0.2 {} +T {B} -55 -34 0 0 0.2 0.2 {} +T {C} -55 6 0 0 0.2 0.2 {} +T {D} -55 46 0 0 0.2 0.2 {} diff --git a/xschem_library/xschem_simulator/segment.sym b/xschem_library/xschem_simulator/segment.sym new file mode 100644 index 00000000..9d1a7b10 --- /dev/null +++ b/xschem_library/xschem_simulator/segment.sym @@ -0,0 +1,10 @@ +v {xschem version=2.9.9 file_version=1.2 } +G {} +K {type=label +format="*.alias @lab" +template="name=l1 sig_type=std_logic lab=xxx"} +V {} +S {} +E {} +B 5 -0.3125 29.6875 0.3125 30.3125 {name=p dir=in} +P 19 9 0 30 -30 0 -530 0 -560 30 -560 50 -530 80 -30 80 0 50 0 30 {fill=true} diff --git a/xschem_library/xschem_simulator/simulate_ff.sch b/xschem_library/xschem_simulator/simulate_ff.sch new file mode 100644 index 00000000..d5178ba5 --- /dev/null +++ b/xschem_library/xschem_simulator/simulate_ff.sch @@ -0,0 +1,400 @@ +v {xschem version=2.9.9 file_version=1.2 } +G {} +K {} +V {} +S {} +E {} +L 4 110 -1580 190 -1580 {} +L 4 110 -1480 190 -1480 {} +L 4 110 -1380 190 -1380 {} +L 4 100 -1470 100 -1390 {} +L 4 200 -1470 200 -1390 {} +L 4 100 -1570 100 -1490 {} +L 4 200 -1570 200 -1490 {} +B 12 3210 -2700 3930 -1400 {} +T { + 0 1 2 3 4 5 6 +====================== +0000 X X X X X X +0001 X X +0010 X X X X X +0011 X X X X X +0100 X X X X +0101 X X X X X +0110 X X X X X X +0111 X X X +1000 X X X X X X X +1001 X X X X X X +-HEX (not implemented)- +1010 X X X X X X +1011 X X X X X +1100 X X X X +1101 X X X X X +1110 X X X X X +1111 X X X X +} 40 -1340 0 0 0.4 0.4 {font=Monospace} +T {0} 140 -1630 0 0 0.8 0.8 {} +T {1} 90 -1550 0 1 0.8 0.8 {} +T {2} 210 -1550 0 0 0.8 0.8 {} +T {3} 140 -1530 0 0 0.8 0.8 {} +T {6} 140 -1430 0 0 0.8 0.8 {} +T {4} 90 -1450 0 1 0.8 0.8 {} +T {5} 210 -1450 0 0 0.8 0.8 {} +T {7 Segment Display driver +and base-10 counter} 1540 -3130 0 0 2.5 2.5 {} +T {Segment 0} 1190 -2880 0 0 1 1 { layer=4} +T {Segment 1} 1190 -2400 0 0 1 1 { layer=4} +T {Segment 2} 1190 -1920 0 0 1 1 { layer=4} +T {Segment 3} 1190 -1520 0 0 1 1 { layer=4} +T {Segment 4} 1190 -960 0 0 1 1 { layer=4} +T {Segment 5} 1190 -560 0 0 1 1 { layer=4} +T {Segment 6} 1190 -240 0 0 1 1 { layer=4} +T {This example shows Xschem (very simple) simulation abilities +Ctrl-Click to start simulation. +Xschem will be only partially responsive during simulation. +Will run for 40 iterations. +If you need to stop: +Simulation -> Forced stop tcl scripts} 1730 -750 0 0 1.5 1.5 {} +T {Truth Table} 10 -1730 0 0 1.5 1.5 {layer=4} +T {Cyan: Uninitialized or unknown (X)} 3210 -1190 0 0 1.5 1.5 {layer=1} +T {Signal colors:} 3130 -1290 0 0 1.5 1.5 {} +T {Blue: Logic level low (0)} 3210 -1090 0 0 1.5 1.5 {layer=12} +T {Red: Logic level high (1)} 3210 -990 0 0 1.5 1.5 {layer=5} +N 1920 -2060 1920 -1980 { lab=#net1} +N 1800 -2060 1920 -2060 { lab=#net1} +N 1800 -2080 1800 -2060 { lab=#net1} +N 1920 -2240 1920 -2160 { lab=#net2} +N 1800 -2240 1920 -2240 { lab=#net2} +N 1800 -2260 1800 -2240 { lab=#net2} +N 1920 -2420 1920 -2340 { lab=#net3} +N 1800 -2420 1920 -2420 { lab=#net3} +N 1800 -2440 1800 -2420 { lab=#net3} +N 2640 -2460 2700 -2460 { lab=B[3]} +N 2640 -2560 2640 -2460 { lab=B[3]} +N 1730 -2560 2640 -2560 { lab=B[3]} +N 1730 -2560 1730 -2520 { lab=B[3]} +N 2640 -2280 2700 -2280 { lab=B[2]} +N 2640 -2380 2640 -2280 { lab=B[2]} +N 1730 -2380 2640 -2380 { lab=B[2]} +N 1730 -2380 1730 -2340 { lab=B[2]} +N 2640 -2100 2700 -2100 { lab=B[1]} +N 2640 -2200 2640 -2100 { lab=B[1]} +N 1730 -2200 2640 -2200 { lab=B[1]} +N 1730 -2200 1730 -2160 { lab=B[1]} +N 2640 -1920 2700 -1920 { lab=B[0]} +N 2640 -2020 2640 -1920 { lab=B[0]} +N 1730 -2020 2640 -2020 { lab=B[0]} +N 1730 -2020 1730 -1980 { lab=B[0]} +N 1590 -1990 1590 -1940 { lab=CLEAR_} +N 1590 -1940 1800 -1940 { lab=CLEAR_} +N 1670 -2120 1670 -1900 { lab=#net4} +N 1670 -2120 1800 -2120 { lab=#net4} +N 1670 -2300 1670 -2120 { lab=#net4} +N 1670 -2300 1800 -2300 { lab=#net4} +N 1670 -2480 1670 -2300 { lab=#net4} +N 1670 -2480 1800 -2480 { lab=#net4} +N 1670 -1900 1800 -1900 { lab=#net4} +N 1920 -2520 1940 -2520 { lab=#net5} +N 1730 -1980 1800 -1980 { lab=B[0]} +N 1730 -2160 1800 -2160 { lab=B[1]} +N 1730 -2340 1800 -2340 { lab=B[2]} +N 1730 -2520 1800 -2520 { lab=B[3]} +N 1730 -1830 1900 -1830 { lab=BNEXT[3]} +N 1830 -1790 1900 -1790 { lab=#net6} +N 1730 -1790 1750 -1790 { lab=BNEXT[2]} +N 1730 -1750 1900 -1750 { lab=BNEXT[1]} +N 1730 -1710 1750 -1710 { lab=BNEXT[0]} +N 1830 -1710 1900 -1710 { lab=#net7} +N 2620 -2460 2640 -2460 { lab=B[3]} +N 2620 -2280 2640 -2280 { lab=B[2]} +N 2620 -2100 2640 -2100 { lab=B[1]} +N 2620 -1920 2640 -1920 { lab=B[0]} +N 520 -3140 520 -10 { lab=B[3]} +N 520 -3140 550 -3140 { lab=B[3]} +N 600 -3140 630 -3140 { lab=B[2]} +N 680 -3140 710 -3140 { lab=B[1]} +N 760 -3140 790 -3140 { lab=B[0]} +N 550 -640 880 -640 { lab=#net8} +N 630 -600 880 -600 { lab=#net9} +N 680 -560 880 -560 { lab=B[1]} +N 790 -520 880 -520 { lab=#net10} +N 1000 -580 1230 -580 { lab=S[5]} +N 520 -3160 520 -3140 { lab=B[3]} +N 600 -3160 600 -3140 { lab=B[2]} +N 680 -3160 680 -3140 { lab=B[1]} +N 760 -3160 760 -3140 { lab=B[0]} +N 550 -3040 880 -3040 { lab=#net8} +N 630 -3000 880 -3000 { lab=#net9} +N 710 -2960 880 -2960 { lab=#net11} +N 760 -2920 880 -2920 { lab=B[0]} +N 550 -2880 880 -2880 { lab=#net8} +N 600 -2840 880 -2840 { lab=B[2]} +N 710 -2800 880 -2800 { lab=#net11} +N 790 -2760 880 -2760 { lab=#net10} +N 1020 -2920 1050 -2920 { lab=#net12} +N 1020 -2980 1020 -2920 { lab=#net12} +N 1000 -2980 1020 -2980 { lab=#net12} +N 1020 -2880 1050 -2880 { lab=#net13} +N 1020 -2880 1020 -2820 { lab=#net13} +N 1000 -2820 1020 -2820 { lab=#net13} +N 1170 -2900 1230 -2900 { lab=S[0]} +N 550 -2560 880 -2560 { lab=#net8} +N 630 -2520 880 -2520 { lab=#net9} +N 680 -2480 880 -2480 { lab=B[1]} +N 790 -2440 880 -2440 { lab=#net10} +N 550 -2400 880 -2400 { lab=#net8} +N 630 -2360 880 -2360 { lab=#net9} +N 680 -2320 880 -2320 { lab=B[1]} +N 760 -2280 880 -2280 { lab=B[0]} +N 550 -2240 880 -2240 { lab=#net8} +N 600 -2200 880 -2200 { lab=B[2]} +N 680 -2160 880 -2160 { lab=B[1]} +N 760 -2120 880 -2120 { lab=B[0]} +N 550 -2720 880 -2720 { lab=#net8} +N 630 -2680 880 -2680 { lab=#net9} +N 710 -2640 880 -2640 { lab=#net11} +N 760 -2600 880 -2600 { lab=B[0]} +N 1000 -2660 1050 -2660 { lab=#net14} +N 1000 -2500 1020 -2500 { lab=#net15} +N 1000 -2340 1020 -2340 { lab=#net16} +N 1000 -2180 1050 -2180 { lab=#net17} +N 1050 -2660 1050 -2480 { lab=#net14} +N 1020 -2500 1020 -2440 { lab=#net15} +N 1020 -2440 1050 -2440 { lab=#net15} +N 1020 -2400 1050 -2400 { lab=#net16} +N 1020 -2400 1020 -2340 { lab=#net16} +N 1050 -2360 1050 -2180 { lab=#net17} +N 1170 -2420 1230 -2420 { lab=S[1]} +N 550 -2080 880 -2080 { lab=#net8} +N 600 -2040 880 -2040 { lab=B[2]} +N 710 -2000 880 -2000 { lab=#net11} +N 760 -1960 880 -1960 { lab=B[0]} +N 550 -1920 880 -1920 { lab=#net8} +N 600 -1880 880 -1880 { lab=B[2]} +N 680 -1840 880 -1840 { lab=B[1]} +N 790 -1800 880 -1800 { lab=#net10} +N 1020 -1960 1050 -1960 { lab=#net18} +N 1020 -2020 1020 -1960 { lab=#net18} +N 1000 -2020 1020 -2020 { lab=#net18} +N 1020 -1920 1050 -1920 { lab=#net19} +N 1020 -1920 1020 -1860 { lab=#net19} +N 1000 -1860 1020 -1860 { lab=#net19} +N 1170 -1940 1230 -1940 { lab=S[2]} +N 550 -1760 880 -1760 { lab=#net8} +N 630 -1720 880 -1720 { lab=#net9} +N 710 -1680 880 -1680 { lab=#net11} +N 790 -1640 880 -1640 { lab=#net10} +N 1000 -1700 1050 -1700 { lab=#net20} +N 550 -1600 880 -1600 { lab=#net8} +N 630 -1560 880 -1560 { lab=#net9} +N 710 -1520 880 -1520 { lab=#net11} +N 1000 -1540 1050 -1540 { lab=#net21} +N 550 -1440 880 -1440 { lab=#net8} +N 600 -1400 880 -1400 { lab=B[2]} +N 680 -1360 880 -1360 { lab=B[1]} +N 760 -1320 880 -1320 { lab=B[0]} +N 1000 -1380 1050 -1380 { lab=#net22} +N 1050 -1700 1050 -1580 { lab=#net20} +N 1050 -1500 1050 -1380 { lab=#net22} +N 550 -3060 550 -10 { lab=#net8} +N 630 -3060 630 -10 { lab=#net9} +N 710 -3060 710 -10 { lab=#net11} +N 760 -3140 760 -10 { lab=B[0]} +N 600 -3140 600 -10 { lab=B[2]} +N 790 -3060 790 -10 { lab=#net10} +N 680 -3140 680 -10 { lab=B[1]} +N 760 -1480 880 -1480 { lab=B[0]} +N 1170 -1540 1230 -1540 { lab=S[3]} +N 550 -1280 880 -1280 { lab=#net8} +N 630 -1240 880 -1240 { lab=#net9} +N 710 -1200 880 -1200 { lab=#net11} +N 790 -1160 880 -1160 { lab=#net10} +N 1000 -1220 1050 -1220 { lab=#net23} +N 550 -1120 880 -1120 { lab=#net8} +N 630 -1080 880 -1080 { lab=#net9} +N 680 -1040 880 -1040 { lab=B[1]} +N 790 -1000 880 -1000 { lab=#net10} +N 1000 -1060 1020 -1060 { lab=#net24} +N 550 -960 880 -960 { lab=#net8} +N 600 -920 880 -920 { lab=B[2]} +N 680 -880 880 -880 { lab=B[1]} +N 790 -840 880 -840 { lab=#net10} +N 1000 -900 1020 -900 { lab=#net25} +N 520 -800 880 -800 { lab=B[3]} +N 630 -760 880 -760 { lab=#net9} +N 710 -720 880 -720 { lab=#net11} +N 790 -680 880 -680 { lab=#net10} +N 1000 -740 1050 -740 { lab=#net26} +N 1050 -920 1050 -740 { lab=#net26} +N 1050 -1220 1050 -1040 { lab=#net23} +N 1020 -1000 1050 -1000 { lab=#net24} +N 1020 -1060 1020 -1000 { lab=#net24} +N 1020 -960 1050 -960 { lab=#net25} +N 1020 -960 1020 -900 { lab=#net25} +N 1170 -980 1230 -980 { lab=S[4]} +N 550 -480 880 -480 { lab=#net8} +N 630 -440 880 -440 { lab=#net9} +N 710 -400 880 -400 { lab=#net11} +N 760 -360 880 -360 { lab=B[0]} +N 1000 -420 1050 -420 { lab=#net27} +N 550 -320 880 -320 { lab=#net8} +N 600 -280 880 -280 { lab=B[2]} +N 710 -240 880 -240 { lab=#net11} +N 1000 -260 1050 -260 { lab=#net28} +N 550 -160 880 -160 { lab=#net8} +N 600 -120 880 -120 { lab=B[2]} +N 680 -80 880 -80 { lab=B[1]} +N 760 -40 880 -40 { lab=B[0]} +N 1000 -100 1050 -100 { lab=#net29} +N 1050 -420 1050 -300 { lab=#net27} +N 1050 -220 1050 -100 { lab=#net29} +N 790 -200 880 -200 { lab=#net10} +N 1170 -260 1230 -260 { lab=S[6]} +N 2020 -1770 2060 -1770 { lab=#net30} +N 2340 -2440 2440 -2440 { lab=#net31} +N 2070 -2460 2220 -2460 { lab=BNEXT[3]} +N 2070 -2460 2070 -2440 { lab=BNEXT[3]} +N 1920 -2440 2070 -2440 { lab=BNEXT[3]} +N 2340 -2260 2440 -2260 { lab=#net32} +N 2070 -2280 2220 -2280 { lab=BNEXT[2]} +N 2070 -2280 2070 -2260 { lab=BNEXT[2]} +N 1920 -2260 2070 -2260 { lab=BNEXT[2]} +N 2340 -2080 2440 -2080 { lab=#net33} +N 2070 -2100 2220 -2100 { lab=BNEXT[1]} +N 2070 -2100 2070 -2080 { lab=BNEXT[1]} +N 1920 -2080 2070 -2080 { lab=BNEXT[1]} +N 2340 -1900 2440 -1900 { lab=#net34} +N 2070 -1920 2220 -1920 { lab=BNEXT[0]} +N 2070 -1920 2070 -1900 { lab=BNEXT[0]} +N 1920 -1900 2070 -1900 { lab=BNEXT[0]} +N 2060 -1770 2160 -1770 { lab=#net30} +N 2160 -2420 2160 -1770 { lab=#net30} +N 2160 -2420 2220 -2420 { lab=#net30} +N 2160 -2240 2220 -2240 { lab=#net30} +N 2160 -2060 2220 -2060 { lab=#net30} +N 2160 -1880 2220 -1880 { lab=#net30} +N 1760 -1010 1890 -1010 { lab=CLK} +N 1760 -1180 1890 -1180 { lab=CLEAR_} +C {title.sym} 1350 -50 0 0 {name=l38 author="Stefan Schippers"} +C {fa_1.sym} 1860 -2480 0 0 {name=x28 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {fa_1.sym} 1860 -2300 0 0 {name=x33 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {fa_1.sym} 1860 -2120 0 0 {name=x34 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {fa_1.sym} 1860 -1940 0 0 {name=x35 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {dfrtp_1.sym} 2530 -2440 0 0 {name=x36 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {lab_pin.sym} 2440 -2460 0 0 {name=l32 sig_type=std_logic lab=CLK} +C {lab_pin.sym} 2440 -2420 0 0 {name=l33 sig_type=std_logic lab=CLEAR_} +C {lab_pin.sym} 2700 -2460 0 1 {name=l34 sig_type=std_logic lab=B[3]} +C {dfrtp_1.sym} 2530 -2260 0 0 {name=x37 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {lab_pin.sym} 2440 -2280 0 0 {name=l35 sig_type=std_logic lab=CLK} +C {lab_pin.sym} 2440 -2240 0 0 {name=l36 sig_type=std_logic lab=CLEAR_} +C {lab_pin.sym} 2700 -2280 0 1 {name=l37 sig_type=std_logic lab=B[2]} +C {dfrtp_1.sym} 2530 -2080 0 0 {name=x53 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {lab_pin.sym} 2440 -2100 0 0 {name=l39 sig_type=std_logic lab=CLK} +C {lab_pin.sym} 2440 -2060 0 0 {name=l40 sig_type=std_logic lab=CLEAR_} +C {lab_pin.sym} 2700 -2100 0 1 {name=l41 sig_type=std_logic lab=B[1]} +C {dfrtp_1.sym} 2530 -1900 0 0 {name=x54 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {lab_pin.sym} 2440 -1920 0 0 {name=l42 sig_type=std_logic lab=CLK} +C {lab_pin.sym} 2440 -1880 0 0 {name=l43 sig_type=std_logic lab=CLEAR_} +C {lab_pin.sym} 2700 -1920 0 1 {name=l44 sig_type=std_logic lab=B[0]} +C {inv_2.sym} 1630 -1990 0 0 {name=x55 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {lab_pin.sym} 1590 -1990 0 0 {name=l45 sig_type=std_logic lab=CLEAR_} +C {noconn.sym} 1940 -2520 0 1 {name=l46} +C {nand4_1.sym} 1960 -1770 0 0 {name=x56 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {inv_2.sym} 1790 -1790 0 0 {name=x57 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {inv_2.sym} 1790 -1710 0 0 {name=x58 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {inv_2.sym} 550 -3100 3 1 {name=x22 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {lab_pin.sym} 520 -3160 0 0 {name=l19 sig_type=std_logic lab=B[3]} +C {inv_2.sym} 630 -3100 3 1 {name=x23 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {lab_pin.sym} 600 -3160 0 0 {name=l21 sig_type=std_logic lab=B[2]} +C {inv_2.sym} 710 -3100 3 1 {name=x24 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {lab_pin.sym} 680 -3160 0 0 {name=l22 sig_type=std_logic lab=B[1]} +C {inv_2.sym} 790 -3100 3 1 {name=x25 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {lab_pin.sym} 760 -3160 0 0 {name=l23 sig_type=std_logic lab=B[0]} +C {nand4_1.sym} 940 -580 0 0 {name=x21 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {and4_1.sym} 1110 -2420 0 0 {name=x38 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {nand4_1.sym} 940 -2980 0 0 {name=x39 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {nand4_1.sym} 940 -2820 0 0 {name=x40 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {and2_1.sym} 1110 -2900 0 0 {name=x41 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {lab_pin.sym} 1230 -2900 0 1 {name=p4 lab=S[0]} +C {nand4_1.sym} 940 -2500 0 0 {name=x42 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {nand4_1.sym} 940 -2340 0 0 {name=x43 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {nand4_1.sym} 940 -2180 0 0 {name=x44 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {nand4_1.sym} 940 -2660 0 0 {name=x45 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {lab_pin.sym} 1230 -2420 0 1 {name=p5 lab=S[1]} +C {nand4_1.sym} 940 -2020 0 0 {name=x46 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {nand4_1.sym} 940 -1860 0 0 {name=x47 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {and2_1.sym} 1110 -1940 0 0 {name=x48 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {lab_pin.sym} 1230 -1940 0 1 {name=p6 lab=S[2]} +C {nand4_1.sym} 940 -1700 0 0 {name=x49 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {nand4_1.sym} 940 -1540 0 0 {name=x50 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {nand4_1.sym} 940 -1380 0 0 {name=x51 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {and3_1.sym} 1110 -1540 0 0 {name=x52 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {lab_pin.sym} 1230 -1540 0 1 {name=p1 lab=S[3]} +C {and4_1.sym} 940 -1220 0 0 {name=x18 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {and4_1.sym} 940 -1060 0 0 {name=x19 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {and4_1.sym} 940 -900 0 0 {name=x20 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {and4_1.sym} 940 -740 0 0 {name=x26 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {or4_1.sym} 1110 -980 0 0 {name=x27 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {lab_pin.sym} 1230 -980 0 1 {name=p2 lab=S[4]} +C {lab_pin.sym} 1230 -580 0 1 {name=p3 lab=S[5]} +C {nand4_1.sym} 940 -420 0 0 {name=x29 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {nand4_1.sym} 940 -260 0 0 {name=x30 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {nand4_1.sym} 940 -100 0 0 {name=x31 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {and3_1.sym} 1110 -260 0 0 {name=x32 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {lab_pin.sym} 1230 -260 0 1 {name=p7 lab=S[6]} +C {and2_1.sym} 2280 -2440 0 0 {name=x59 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {and2_1.sym} 2280 -2260 0 0 {name=x60 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {and2_1.sym} 2280 -2080 0 0 {name=x61 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {and2_1.sym} 2280 -1900 0 0 {name=x62 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {lab_pin.sym} 2070 -2460 0 0 {name=l51 sig_type=std_logic lab=BNEXT[3]} +C {lab_pin.sym} 2070 -2280 0 0 {name=l52 sig_type=std_logic lab=BNEXT[2]} +C {lab_pin.sym} 2070 -2100 0 0 {name=l53 sig_type=std_logic lab=BNEXT[1]} +C {lab_pin.sym} 2070 -1920 0 0 {name=l54 sig_type=std_logic lab=BNEXT[0]} +C {lab_pin.sym} 1730 -1830 0 0 {name=l55 sig_type=std_logic lab=BNEXT[3]} +C {lab_pin.sym} 1730 -1790 0 0 {name=l56 sig_type=std_logic lab=BNEXT[2]} +C {lab_pin.sym} 1730 -1750 0 0 {name=l57 sig_type=std_logic lab=BNEXT[1]} +C {lab_pin.sym} 1730 -1710 0 0 {name=l58 sig_type=std_logic lab=BNEXT[0]} +C {launcher.sym} 1840 -130 0 0 {name=h3 +descr="START SIMULATION" +comment=" + This launcher Starts a simple interactive simulation of the LFSR +" +tclcommand=" set count 0 + set duration 1000 + xschem select instance p8 ;# CLEAR_ + xschem select instance p9 ;# CLK + xschem logic_set 0 ;# reset pulse (active low) + update ;# allow event loop to come in (update screen, user input etc) + after $duration + xschem select instance p9 clear ;# release CLK + xschem logic_set 1 + xschem select instance p8 clear ;# release CLEAR_ + xschem select instance p9 ;# CLK + update ;# allow event loop to come in (update screen, user input etc) + set logic_value 0 + while \{1\} \{ + update ;# allow event loop to come in (update screen, user input etc) + incr count + if \{$count>100 || $tclstop == 1\} break + puts \\"simulating: loop $count\\" + xschem logic_set $logic_value + after $duration + set logic_value [expr !$logic_value] + set duration [expr int($duration/1.05)] + \} +" +} +C {inv_2.sym} 2200 -1770 0 0 {name=x1 VGND=VGND VNB=VNB VPB=VPB VPWR=VPWR prefix=sky130_fd_sc_hd__ } +C {giant_label.sym} 1890 -1010 0 1 {name=l1 sig_type=std_logic lab=CLK text=CLK} +C {giant_label.sym} 2240 -1770 0 1 {name=l3 sig_type=std_logic lab=R text="RESET +COUNTER"} +C {giant_label.sym} 1890 -1180 0 1 {name=l4 sig_type=std_logic lab=CLEAR_ text="CLEAR (active low)"} +C {segment.sym} 3850 -2090 0 0 {name=l6 sig_type=std_logic lab=S[3]} +C {segment.sym} 3320 -2060 1 0 {name=l2 sig_type=std_logic lab=S[1]} +C {segment.sym} 3820 -2060 3 1 {name=l5 sig_type=std_logic lab=S[2]} +C {segment.sym} 3850 -2670 0 0 {name=l7 sig_type=std_logic lab=S[0]} +C {segment.sym} 3820 -2040 3 0 {name=l8 sig_type=std_logic lab=S[5]} +C {segment.sym} 3320 -2040 1 1 {name=l9 sig_type=std_logic lab=S[4]} +C {segment.sym} 3290 -1430 2 0 {name=l10 sig_type=std_logic lab=S[6]} +C {ipin.sym} 1760 -1180 0 0 {name=p8 sig_type=std_logic lab=CLEAR_} +C {ipin.sym} 1760 -1010 0 0 {name=p9 sig_type=std_logic lab=CLK}