added flip-flop simulation capabilities. added examples: merry xmas greeter and 7 segment display driver and counter.

This commit is contained in:
Stefan Frederik 2020-12-27 19:20:24 +01:00
parent 625b378bdd
commit 5917cd9717
19 changed files with 851 additions and 139 deletions

View File

@ -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;
}

View File

@ -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);

View File

@ -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;

View File

@ -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 */

View File

@ -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}

View File

@ -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 {}

View File

@ -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 {}

View File

@ -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 {}

View File

@ -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 {}

View File

@ -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 {}

View File

@ -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 {}

View File

@ -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 {}

View File

@ -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 {}

View File

@ -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}

View File

@ -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 {}

View File

@ -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 {}

View File

@ -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 {}

View File

@ -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}

View File

@ -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}