Add preview of 1984-2019
The 2020 winners are hinted it, but the source code is not there,
nor are the hints. Someone could look into the HTML and
see what was commented out, but that is not a problem because
WHO won is known and the name of their AWARD is known already.
Moreover a number of the winners have talked about what their
entirs do, so the commented out spoiler text is not a bit problem.
One will find HTML commented out with:
<!-- XXX remove when 2020 is ready
2020 links here
XXX remove when 2020 is ready -->
The "XXX remove when 2020 is ready" string is found at the
start and end comment blocks. Again, soneone could read
what was commented out, but that is OK since most of that
information is known or can be known. The following files
have such HTML comment blocks in them.
./winners.html
./years-spoiler.html
./years.html
In addition, ./all/summary.txt was modified to not
include the 2020 entries for the momemt.
The 2020 winner code AND write-ups are NOT part of this set.
p.s. The all/all.tar.bz2 does not contain the 2020 source code (yet?).
This commit is contained in:
1 parent
28efc67f5d
commit
c0663537cb
1683 files changed
+220064
No files matched your search
@@ -0,0 +1,31 @@
|
||||
# 2006 makefile
|
||||
#
|
||||
# Copyright (C) 2006-2009, Landon Curt Noll, Simon Cooper, Peter Seebach
|
||||
# and Leonid A. Broukhis. All Rights Reserved. Permission for personal,
|
||||
# educational or non-profit use is granted provided this copyright and
|
||||
# notice are included in its entirety and remains unaltered. All other
|
||||
# uses must receive prior permission from the contest judges.
|
||||
|
||||
# data files for this entry
|
||||
#
|
||||
DATA= adder.tofu buffer.tofu computer.tofu counter.tofu divider.tofu \
|
||||
lfsr.tofu memory.tofu multiplier.tofu multiplier2.tofu oneline.tofu \
|
||||
shift.tofu zuse.tofu zuse2.tofu
|
||||
|
||||
build: ${ENTRY}
|
||||
|
||||
|
||||
clean:
|
||||
-${RM} ${ENTRY}
|
||||
|
||||
clobber: clean
|
||||
|
||||
|
||||
alt:
|
||||
|
||||
|
||||
data:
|
||||
|
||||
|
||||
${ENTRY}: ${ENTRY}.c ${DATA}
|
||||
${CC} ${CFLAGS} ${ENTRY}.c -o ${ENTRY}
|
||||
@@ -0,0 +1,72 @@
|
||||
# Buffer
|
||||
def buf input output :
|
||||
r input output 1 0
|
||||
|
||||
# Inverter
|
||||
def inv input output :
|
||||
r input output 0 1
|
||||
|
||||
# AND Gate
|
||||
def and i1 i0 o :
|
||||
r i0 z 1 0
|
||||
r i1 o z 0
|
||||
|
||||
# NAND Gate
|
||||
def nand i0 i1 o :
|
||||
r i0 1 0 o
|
||||
r i1 1 0 o
|
||||
|
||||
# OR Gate
|
||||
def or i0 i1 o :
|
||||
r i0 1 o 0
|
||||
r i1 1 o 0
|
||||
|
||||
# NOR Gate
|
||||
def nor i0 i1 o :
|
||||
r i0 1 0 z
|
||||
r i1 z 0 o
|
||||
|
||||
# XOR Gate
|
||||
def xor i0 i1 o :
|
||||
r i0 1 b a
|
||||
r i1 o a b
|
||||
|
||||
# XNOR Gate
|
||||
def xnor i0 i1 o :
|
||||
r i0 1 a b
|
||||
r i1 o a b
|
||||
|
||||
# Half Adder
|
||||
def halfAdder a b s1 s0 :
|
||||
and a b s1
|
||||
xor a b s0
|
||||
|
||||
# Full Adder
|
||||
def fullAdder carryIn a b carryOut sum :
|
||||
halfAdder a b s1 s0
|
||||
halfAdder s0 carryIn carry sum
|
||||
or s1 carry carryOut
|
||||
|
||||
# 2-bit Adder
|
||||
def adder2 carryIn a1 a0 b1 b0 carryOut s1 s0 :
|
||||
fullAdder carryIn a0 b0 carry s0
|
||||
fullAdder carry a1 b1 carryOut s1
|
||||
|
||||
# 4-bit Adder
|
||||
def adder4 carryIn a3 a2 a1 a0 b3 b2 b1 b0 carryOut s3 s2 s1 s0 :
|
||||
adder2 carryIn a1 a0 b1 b0 carry s1 s0
|
||||
adder2 carry a3 a2 b3 b2 carryOut s3 s2
|
||||
|
||||
# 8-bit Adder
|
||||
def adder8 carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
adder4 carryIn a3 a2 a1 a0 b3 b2 b1 b0 carry s3 s2 s1 s0
|
||||
adder4 carry a7 a6 a5 a4 b7 b6 b5 b4 carryOut s7 s6 s5 s4
|
||||
|
||||
# 57 + 142 = ?
|
||||
run 100 1 adder8 0
|
||||
0 0 1 1 1 0 0 1
|
||||
1 0 0 0 1 1 1 0
|
||||
? ? ? ? ? ? ? ? ?
|
||||
@@ -0,0 +1,133 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#define PI 314
|
||||
#define Z if
|
||||
#define P a->b
|
||||
#define Q else
|
||||
#define W =f();
|
||||
#define X char
|
||||
#define J while
|
||||
#define N return
|
||||
#define V struct e
|
||||
|
||||
#define g(_,a)((_&&a)?!strcmp(_,a):0)
|
||||
typedef V*d; V{ d o,_; X*b; int c; };
|
||||
d f() { d _=(d)malloc(sizeof(V)); _
|
||||
->b=0; _->o=_->_=0; _->c=1>>1>1;
|
||||
N _; } d k,l,m,n,o,p,q,r; d j
|
||||
() { d _=l; d a W a->o W
|
||||
l->o=a; l W l-> _=_;
|
||||
N a; } d u(d _,
|
||||
X*a){ J(_){
|
||||
Z(g(a,_
|
||||
->b)
|
||||
){
|
||||
N
|
||||
_;
|
||||
} _=
|
||||
_->_; }
|
||||
N 0; } d s
|
||||
(X*q){ d _=n; Z
|
||||
(g("q", q)){ N o; }
|
||||
J(PI){ _=u(_,"cde"); _=_
|
||||
-> _ ; Z ( g (q, _->b) ){ N _
|
||||
->_ ; } } } void t(d a, d _) { d
|
||||
S,I,M,U,L,A,T,O,R ; Z(a==o){ S W
|
||||
S->o W m->o=S; I=m; m W m->_=I; _=_->
|
||||
_; J(_) { S->o->o=_->o; I=S->o; S->o W
|
||||
S->o->_=I; _->o->o->o=S; I=_->o->o; _
|
||||
->o->o W _->o->o->_=I; _=_->_; } }
|
||||
Q { M W _=_->_; J(57-*P){ U=M; U
|
||||
->b=P; U->o=_->o; M W M->_=U;
|
||||
_=_->_; a=a->_; } a=a->_
|
||||
; J(a&&!g("qtm",P)&&
|
||||
!g("cde",P)){ L
|
||||
=s (P); a=a
|
||||
->_; A=
|
||||
L; T
|
||||
W
|
||||
O=
|
||||
T;
|
||||
J(*L
|
||||
->b-57){ R
|
||||
=g("/",P)?j():g
|
||||
(P,"0")?p:g("b",P)?
|
||||
q:g(P,"j")?r:0; Z(!!!R){
|
||||
R=u(M,P); Z(!R) { R=j(); U=M;
|
||||
U->b=P; U->o=R; M W M->_=U; } Q{
|
||||
R=R->o; } } O=O->_ W O->o=R; O->b=L
|
||||
->b; L=L->_; a=a->_; } t(A, T); } } }
|
||||
void h(d e){ d _,a,c, z=e->o->_; J(z){
|
||||
_=z->o; c=_->o->_; a= c->_->_->o; c=_
|
||||
->c?c->_->o :c->o; Z(c->c<a->c) { c
|
||||
->c++; h(c); } Q Z(a->c<c->c){ a
|
||||
->c++; h(a); } z=z->_; } } X*
|
||||
v(X*_,int O){ X*s=(X*)m\
|
||||
alloc(strlen(_)*siz\
|
||||
eof(X)); X*l=s;
|
||||
J((*l++=*_?
|
||||
*_-O:0)
|
||||
)_++
|
||||
;N
|
||||
s;
|
||||
}
|
||||
/**/
|
||||
int ma\
|
||||
in(){d a,_
|
||||
,b;d T,O,F,U
|
||||
, R, E, L, A, Y
|
||||
; X c[PI],x[PI],w[PI],*y
|
||||
,*B,*d,*K=v("Cvjme!dpnqmfuf;\
|
||||
!&e!dpnqpofout-!&e!opeft/\x0b",1
|
||||
),*e=v("&e;!&t\x0b\0nbjo)*|jou!j>1\
|
||||
<gps)<j=51<j,,*qsjoug)#&e!#-j+j,j,52\
|
||||
*<~",1); int i,z,C,G,H,D,I ; k W l W m
|
||||
W n W o W p W q W r W b=o; for(*x=D=I
|
||||
=i=0; 5-i; i++){ b->b=i&4?v(";",2):
|
||||
v("s",2); b=b->_ W } H=p->c=1; p
|
||||
->o W r->o W q->o W a=n; J(g\
|
||||
ets(c)){ d=c; J(*d){ *d=
|
||||
*d<65||*d>90 ?*d:*d+
|
||||
32; d++; } y=s\
|
||||
trchr(c,35)
|
||||
; Z(y){
|
||||
*y=0
|
||||
;
|
||||
}
|
||||
B
|
||||
=st\
|
||||
rtok(c,
|
||||
" "); J(B)
|
||||
{ a=a->_ W P=v(
|
||||
B,1); Z(g("qtm",P))
|
||||
{ _=a; } B=strtok(0," ")
|
||||
; } } _=_->_; z=atoi(v(_->b,-
|
||||
1)); _=_->_; C=atoi(v(_->b,-1));
|
||||
G=C; _=_->_; T=s(_->b); _=_->_; O W
|
||||
F=O; U=k; J(_&&!g( "cde",_->b)){ i=*_
|
||||
->b; R=i-47?48-i?i-98?106-i?0:r:q:p:j(
|
||||
); Z(!R){ R=j(); U=U->_ W U->o=R; } F
|
||||
= F->_ W F->o=R; _=_->_; } t(T, O);
|
||||
E=m->_; J(E){ D++; E=E->_; } L=l
|
||||
->_; J(L){ I++; L =L->_; } p\
|
||||
rintf(K,D,I); for(i='\''
|
||||
/'\''; z>i; i++){ J(
|
||||
!--G){ G=C; H=1
|
||||
-H ; break;
|
||||
} r->c=
|
||||
! (q
|
||||
->
|
||||
c=
|
||||
H)
|
||||
; L=
|
||||
l->_; J
|
||||
(L) { L->o
|
||||
->c=!1; L=L->_;
|
||||
} h(p); Z(q->c){ h(
|
||||
q); } Q{ h(r); } E=m->_;
|
||||
J(E){ A=E->o; A->c=A->o->_->_
|
||||
->_->_->o->c; E= E->_; } Y=k->_;
|
||||
d=w; J(Y){ *d++=48+Y->o->c; Y=Y->_;
|
||||
} *d=0; Z(!g(w,x)){ strcpy(x,w); pri\
|
||||
ntf (e, i, w ) ; } } N 0 ; }
|
||||
@@ -0,0 +1,5 @@
|
||||
# Buffer
|
||||
def buf input output :
|
||||
r input output 1 0
|
||||
|
||||
run 100 10 buf c ?
|
||||
@@ -0,0 +1,799 @@
|
||||
# Harry Porter's Relay Computer
|
||||
|
||||
# Buffer
|
||||
def buf i o :
|
||||
r i o 1 0
|
||||
|
||||
# Inverter
|
||||
def inv i o :
|
||||
r i o 0 1
|
||||
|
||||
# AND Gate
|
||||
def and i0 i1 o :
|
||||
r i0 1 z 0
|
||||
r i1 z o 0
|
||||
|
||||
# NAND Gate
|
||||
def nand i0 i1 o :
|
||||
r i0 1 0 o
|
||||
r i1 1 0 o
|
||||
|
||||
# OR Gate
|
||||
def or i0 i1 o :
|
||||
r i0 1 o 0
|
||||
r i1 1 o 0
|
||||
|
||||
# NOR Gate
|
||||
def nor i0 i1 o :
|
||||
r i0 1 0 z
|
||||
r i1 z 0 o
|
||||
|
||||
# XOR Gate
|
||||
def xor i0 i1 o :
|
||||
r i0 1 b a
|
||||
r i1 o a b
|
||||
|
||||
# XNOR Gate
|
||||
def xnor i0 i1 o :
|
||||
r i0 1 a b
|
||||
r i1 o a b
|
||||
|
||||
# Dual-rail-carry Full Adder (Konrad Zuse design)
|
||||
def fullAdder carryIn carryInNeg a b carryOutNeg carryOut sum :
|
||||
r a carryIn 2 3
|
||||
r a 1 3 4
|
||||
r a sum 5 7
|
||||
r a carryInNeg 4 6
|
||||
r b carryOut 3 2
|
||||
r b carryIn 5 7
|
||||
r b carryInNeg 7 5
|
||||
r b carryOutNeg 6 4
|
||||
|
||||
# 2-bit Full Adder
|
||||
def fullAdder2 carryIn carryInNeg a1 a0 b1 b0 carryOutNeg carryOut s1 s0 :
|
||||
fullAdder carryIn carryInNeg a0 b0 carryOutNeg0 carryOut0 s0
|
||||
fullAdder carryOut0 carryOutNeg0 a1 b1 carryOutNeg carryOut s1
|
||||
|
||||
# 4-bit Full Adder
|
||||
def fullAdder4 carryIn carryInNeg a3 a2 a1 a0 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s3 s2 s1 s0 :
|
||||
fullAdder2 carryIn carryInNeg a1 a0 b1 b0 carryOutNeg0 carryOut0 s1 s0
|
||||
fullAdder2 carryOut0 carryOutNeg0 a3 a2 b3 b2 carryOutNeg carryOut s3 s2
|
||||
|
||||
# 8-bit Full Adder
|
||||
def fullAdder8
|
||||
carryIn carryInNeg a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
fullAdder4 carryIn carryInNeg a3 a2 a1 a0 b3 b2 b1 b0
|
||||
carryOutNeg0 carryOut0 s3 s2 s1 s0
|
||||
fullAdder4 carryOut0 carryOutNeg0 a7 a6 a5 a4 b7 b6 b5 b4
|
||||
carryOutNeg carryOut s7 s6 s5 s4
|
||||
|
||||
# Zero-Detect Circuit
|
||||
def zeroDetector b7 b6 b5 b4 b3 b2 b1 b0 zero :
|
||||
r b7 1 0 i6
|
||||
r b6 i6 0 i5
|
||||
r b5 i5 0 i4
|
||||
r b4 i4 0 i3
|
||||
r b3 i3 0 i2
|
||||
r b2 i2 0 i1
|
||||
r b1 i1 0 i0
|
||||
r b0 i0 0 zero
|
||||
|
||||
# Enable Circuit
|
||||
def enable enabled a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0 :
|
||||
r enabled a7 b7 0
|
||||
r enabled a6 b6 0
|
||||
r enabled a5 b5 0
|
||||
r enabled a4 b4 0
|
||||
r enabled a3 b3 0
|
||||
r enabled a2 b2 0
|
||||
r enabled a1 b1 0
|
||||
r enabled a0 b0 0
|
||||
|
||||
# Byte MUX
|
||||
def muxByte
|
||||
address
|
||||
h7 h6 h5 h4 h3 h2 h1 h0
|
||||
l7 l6 l5 l4 l3 l2 l1 l0
|
||||
o7 o6 o5 o4 o3 o2 o1 o0 :
|
||||
r address o7 h7 l7
|
||||
r address o6 h6 l6
|
||||
r address o5 h5 l5
|
||||
r address o4 h4 l4
|
||||
r address o3 h3 l3
|
||||
r address o2 h2 l2
|
||||
r address o1 h1 l1
|
||||
r address o0 h0 l0
|
||||
|
||||
# Byte AND
|
||||
def andByte
|
||||
enabled
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
c7 c6 c5 c4 c3 c2 c1 c0
|
||||
o7 o6 o5 o4 o3 o2 o1 o0 :
|
||||
and b7 c7 z7
|
||||
and b6 c6 z6
|
||||
and b5 c5 z5
|
||||
and b4 c4 z4
|
||||
and b3 c3 z3
|
||||
and b2 c2 z2
|
||||
and b1 c1 z1
|
||||
and b0 c0 z0
|
||||
enable enabled z7 z6 z5 z4 z3 z2 z1 z0 o7 o6 o5 o4 o3 o2 o1 o0
|
||||
|
||||
# Byte OR
|
||||
def orByte
|
||||
enabled
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
c7 c6 c5 c4 c3 c2 c1 c0
|
||||
o7 o6 o5 o4 o3 o2 o1 o0 :
|
||||
or b7 c7 z7
|
||||
or b6 c6 z6
|
||||
or b5 c5 z5
|
||||
or b4 c4 z4
|
||||
or b3 c3 z3
|
||||
or b2 c2 z2
|
||||
or b1 c1 z1
|
||||
or b0 c0 z0
|
||||
enable enabled z7 z6 z5 z4 z3 z2 z1 z0 o7 o6 o5 o4 o3 o2 o1 o0
|
||||
|
||||
# Byte XOR
|
||||
def xorByte
|
||||
enabled
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
c7 c6 c5 c4 c3 c2 c1 c0
|
||||
o7 o6 o5 o4 o3 o2 o1 o0 :
|
||||
xor b7 c7 z7
|
||||
xor b6 c6 z6
|
||||
xor b5 c5 z5
|
||||
xor b4 c4 z4
|
||||
xor b3 c3 z3
|
||||
xor b2 c2 z2
|
||||
xor b1 c1 z1
|
||||
xor b0 c0 z0
|
||||
enable enabled z7 z6 z5 z4 z3 z2 z1 z0 o7 o6 o5 o4 o3 o2 o1 o0
|
||||
|
||||
# Byte NOT
|
||||
def notByte enabled b7 b6 b5 b4 b3 b2 b1 b0 o7 o6 o5 o4 o3 o2 o1 o0 :
|
||||
inv b7 z7
|
||||
inv b6 z6
|
||||
inv b5 z5
|
||||
inv b4 z4
|
||||
inv b3 z3
|
||||
inv b2 z2
|
||||
inv b1 z1
|
||||
inv b0 z0
|
||||
enable enabled z7 z6 z5 z4 z3 z2 z1 z0 o7 o6 o5 o4 o3 o2 o1 o0
|
||||
|
||||
# Shift Left Circular Circuit
|
||||
def shlByte enabled b7 b6 b5 b4 b3 b2 b1 b0 o7 o6 o5 o4 o3 o2 o1 o0 :
|
||||
enable enabled b7 b6 b5 b4 b3 b2 b1 b0 o0 o7 o6 o5 o4 o3 o2 o1
|
||||
|
||||
# 2-to-4 Decoder
|
||||
def decoder2to4 f1 f0 o3 o2 o1 o0 :
|
||||
r f1 1 t1 n1
|
||||
r f0 t1 o3 o2
|
||||
r f0 n1 o1 o0
|
||||
|
||||
# 2-to-4 Decoder With Output Enable
|
||||
def eDecoder2to4 enabled f1 f0 o3 o2 o1 o0 :
|
||||
decoder2to4 f1 f0 z3 z2 z1 z0
|
||||
r enabled o3 z3 0
|
||||
r enabled o2 z2 0
|
||||
r enabled o1 z1 0
|
||||
r enabled o0 z0 0
|
||||
|
||||
# 3-to-8 Decoder
|
||||
def decoder3to8 f2 f1 f0 o7 o6 o5 o4 o3 o2 o1 o0 :
|
||||
r f2 1 t2 n2
|
||||
r f1 t2 t11 n11
|
||||
r f1 n2 t10 n10
|
||||
r f0 t11 o7 o6
|
||||
r f0 n11 o5 o4
|
||||
r f0 t10 o3 o2
|
||||
r f0 n10 o1 o0
|
||||
|
||||
# 3-to-8 Decoder With Output Enable
|
||||
def eDecoder3to8 enabled f2 f1 f0 o7 o6 o5 o4 o3 o2 o1 o0 :
|
||||
decoder3to8 f2 f1 f0 z7 z6 z5 z4 z3 z2 z1 z0
|
||||
enable enabled z7 z6 z5 z4 z3 z2 z1 z0 o7 o6 o5 o4 o3 o2 o1 o0
|
||||
|
||||
# 3-bit Flag Register
|
||||
# B is bus, A for bulbs
|
||||
def flagRegister
|
||||
load select Bzero Bcarry Bsign
|
||||
Azero Acarry Asign :
|
||||
inv load loadNeg0
|
||||
inv load loadNeg1
|
||||
inv load loadNeg2
|
||||
buf load load2
|
||||
buf load2 select
|
||||
r select Azero Bzero 0
|
||||
r select Acarry Bcarry 0
|
||||
r select Asign Bsign 0
|
||||
r Azero Azero loadNeg0 0
|
||||
r Acarry Acarry loadNeg1 0
|
||||
r Asign Asign loadNeg2 0
|
||||
|
||||
# 8-bit Register
|
||||
# B is bus, A can feeds ALU and for bulbs
|
||||
def register8
|
||||
load select b7 b6 b5 b4 b3 b2 b1 b0
|
||||
a7 a6 a5 a4 a3 a2 a1 a0 :
|
||||
inv load loadNeg
|
||||
buf load load2
|
||||
buf load2 select
|
||||
enable select a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
r a7 a7 loadNeg 0
|
||||
r a6 a6 loadNeg 0
|
||||
r a5 a5 loadNeg 0
|
||||
r a4 a4 loadNeg 0
|
||||
r a3 a3 loadNeg 0
|
||||
r a2 a2 loadNeg 0
|
||||
r a1 a1 loadNeg 0
|
||||
r a0 a0 loadNeg 0
|
||||
|
||||
# 16-bit Register
|
||||
# B is bus, A for bulbs
|
||||
def register16
|
||||
load select b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0 :
|
||||
inv load loadNeg
|
||||
buf load load2
|
||||
buf load2 select
|
||||
enable select a15 a14 a13 a12 a11 a10 a9 a8 b15 b14 b13 b12 b11 b10 b9 b8
|
||||
enable select a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
r a15 a15 loadNeg 0
|
||||
r a14 a14 loadNeg 0
|
||||
r a13 a13 loadNeg 0
|
||||
r a12 a12 loadNeg 0
|
||||
r a11 a11 loadNeg 0
|
||||
r a10 a10 loadNeg 0
|
||||
r a9 a9 loadNeg 0
|
||||
r a8 a8 loadNeg 0
|
||||
r a7 a7 loadNeg 0
|
||||
r a6 a6 loadNeg 0
|
||||
r a5 a5 loadNeg 0
|
||||
r a4 a4 loadNeg 0
|
||||
r a3 a3 loadNeg 0
|
||||
r a2 a2 loadNeg 0
|
||||
r a1 a1 loadNeg 0
|
||||
r a0 a0 loadNeg 0
|
||||
|
||||
# High-low Register
|
||||
# H/L/B buses, A for bulbs
|
||||
def registerHighLow
|
||||
loadHigh selectHigh
|
||||
loadLow selectLow
|
||||
load16 select16
|
||||
h7 h6 h5 h4 h3 h2 h1 h0 l7 l6 l5 l4 l3 l2 l1 l0
|
||||
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0 :
|
||||
nor load16 loadHigh loadHighNeg
|
||||
nor load16 loadLow loadLowNeg
|
||||
buf loadHigh loadHigh2
|
||||
buf loadHigh2 selectHigh
|
||||
buf loadLow loadLow2
|
||||
buf loadLow2 selectLow
|
||||
buf load16 load162
|
||||
buf load162 select16
|
||||
enable selectLow a7 a6 a5 a4 a3 a2 a1 a0 l7 l6 l5 l4 l3 l2 l1 l0
|
||||
enable selectHigh a15 a14 a13 a12 a11 a10 a9 a8 h7 h6 h5 h4 h3 h2 h1 h0
|
||||
enable select16 a15 a14 a13 a12 a11 a10 a9 a8 b15 b14 b13 b12 b11 b10 b9 b8
|
||||
enable select16 a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
r a15 a15 loadHighNeg 0
|
||||
r a14 a14 loadHighNeg 0
|
||||
r a13 a13 loadHighNeg 0
|
||||
r a12 a12 loadHighNeg 0
|
||||
r a11 a11 loadHighNeg 0
|
||||
r a10 a10 loadHighNeg 0
|
||||
r a9 a9 loadHighNeg 0
|
||||
r a8 a8 loadHighNeg 0
|
||||
r a7 a7 loadLowNeg 0
|
||||
r a6 a6 loadLowNeg 0
|
||||
r a5 a5 loadLowNeg 0
|
||||
r a4 a4 loadLowNeg 0
|
||||
r a3 a3 loadLowNeg 0
|
||||
r a2 a2 loadLowNeg 0
|
||||
r a1 a1 loadLowNeg 0
|
||||
r a0 a0 loadLowNeg 0
|
||||
|
||||
# Arithmetic Logic Unit
|
||||
def ALU selectB loadB selectC loadC selectFlag loadFlag f2 f1 f0
|
||||
d7 d6 d5 d4 d3 d2 d1 d0 zero carry sign
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
c7 c6 c5 c4 c3 c2 c1 c0 :
|
||||
flagRegister loadFlag selectFlag zero carry sign Azero Acarry Asign
|
||||
register8 loadB selectB d7 d6 d5 d4 d3 d2 d1 d0 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
register8 loadC selectC d7 d6 d5 d4 d3 d2 d1 d0 c7 c6 c5 c4 c3 c2 c1 c0
|
||||
muxByte incSig 0 0 0 0 0 0 0 1 c7 c6 c5 c4 c3 c2 c1 c0 i7 i6 i5 i4 i3 i2 i1 i0
|
||||
decoder3to8 f2 f1 f0 0 shlSig notSig xorSig orSig andSig incSig addSig
|
||||
fullAdder8 0 1 b7 b6 b5 b4 b3 b2 b1 b0 i7 i6 i5 i4 i3 i2 i1 i0
|
||||
0 carryOut s7 s6 s5 s4 s3 s2 s1 s0
|
||||
or incSig addSig adderSig
|
||||
enable adderSig s7 s6 s5 s4 s3 s2 s1 s0 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
andByte andSig
|
||||
b7 b6 b5 b4 b3 b2 b1 b0 c7 c6 c5 c4 c3 c2 c1 c0 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
orByte orSig
|
||||
b7 b6 b5 b4 b3 b2 b1 b0 c7 c6 c5 c4 c3 c2 c1 c0 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
xorByte xorSig
|
||||
b7 b6 b5 b4 b3 b2 b1 b0 c7 c6 c5 c4 c3 c2 c1 c0 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
notByte notSig b7 b6 b5 b4 b3 b2 b1 b0 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
shlByte shlSig b7 b6 b5 b4 b3 b2 b1 b0 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
zeroDetector d7 d6 d5 d4 d3 d2 d1 d0 zeroOut
|
||||
r loadFlag zero zeroOut 0
|
||||
r loadFlag carry carryOut 0
|
||||
r loadFlag sign d7 0
|
||||
|
||||
# 16-bit Incrementer
|
||||
def incrementer
|
||||
i15 i14 i13 i12 i11 i10 i9 i8 i7 i6 i5 i4 i3 i2 i1 i0
|
||||
o15 o14 o13 o12 o11 o10 o9 o8 o7 o6 o5 o4 o3 o2 o1 o0 :
|
||||
fullAdder8 1 0 i7 i6 i5 i4 i3 i2 i1 i0 0 0 0 0 0 0 0 0
|
||||
carryOutNeg carryOut o7 o6 o5 o4 o3 o2 o1 o0
|
||||
fullAdder8 carryOut carryOutNeg i15 i14 i13 i12 i11 i10 i9 i8 0 0 0 0 0 0 0 0
|
||||
0 0 o15 o14 o13 o12 o11 o10 o9 o8
|
||||
|
||||
# Latch, stores when w = 1
|
||||
def latch w d q :
|
||||
r w c2 d q
|
||||
r c2 q 1 0
|
||||
|
||||
# Latch, stores when w = 0
|
||||
def latchNeg w d q :
|
||||
r w c2 q d
|
||||
r c2 q 1 0
|
||||
|
||||
# Flip flop, stores when w rises to 1, expresses new value when w drops to 0
|
||||
def flipFlop w d q :
|
||||
latch w d q2
|
||||
latchNeg w q2 q
|
||||
|
||||
def trans enabled a b :
|
||||
r enabled a b 0
|
||||
|
||||
# 2-bit transmission gate
|
||||
def trans2 enabled a1 a0 b1 b0 :
|
||||
trans enabled a1 b1
|
||||
trans enabled a0 b0
|
||||
|
||||
# 4-bit transmission gate
|
||||
def trans4 enabled a3 a2 a1 a0 b3 b2 b1 b0 :
|
||||
trans2 enabled a3 a2 b3 b2
|
||||
trans2 enabled a1 a0 b1 b0
|
||||
|
||||
# 8-bit transmission gate
|
||||
def trans8 enabled a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0 :
|
||||
trans4 enabled a7 a6 a5 a4 b7 b6 b5 b4
|
||||
trans4 enabled a3 a2 a1 a0 b3 b2 b1 b0
|
||||
|
||||
# 2-to-1 Mux
|
||||
def mux a i1 i0 o :
|
||||
r a o i1 i0
|
||||
|
||||
# Multiplication program in ROM
|
||||
def rom select d7 d6 d5 d4 d3 d2 d1 d0 a6 a5 a4 a3 a2 a1 a0 :
|
||||
mux a0 ad0000001 ad0000000 ad000000
|
||||
mux a0 ad0000011 ad0000010 ad000001
|
||||
mux a0 ad0000101 ad0000100 ad000010
|
||||
mux a0 ad0000111 ad0000110 ad000011
|
||||
mux a0 ad0001001 ad0001000 ad000100
|
||||
mux a0 ad0001011 ad0001010 ad000101
|
||||
mux a0 ad0001101 ad0001100 ad000110
|
||||
mux a0 ad0001111 ad0001110 ad000111
|
||||
mux a0 ad0010001 ad0010000 ad001000
|
||||
mux a0 ad0010011 ad0010010 ad001001
|
||||
mux a0 ad0010101 ad0010100 ad001010
|
||||
mux a0 ad0010111 ad0010110 ad001011
|
||||
mux a0 ad0011001 ad0011000 ad001100
|
||||
mux a0 ad0011011 ad0011010 ad001101
|
||||
mux a0 ad0011101 ad0011100 ad001110
|
||||
mux a0 ad0011111 ad0011110 ad001111
|
||||
mux a0 ad0100001 ad0100000 ad010000
|
||||
mux a0 ad0100011 ad0100010 ad010001
|
||||
mux a0 ad0100101 ad0100100 ad010010
|
||||
mux a0 ad0100111 ad0100110 ad010011
|
||||
mux a0 ad0101001 ad0101000 ad010100
|
||||
mux a0 ad0101011 ad0101010 ad010101
|
||||
mux a0 ad0101101 ad0101100 ad010110
|
||||
mux a0 ad0101111 ad0101110 ad010111
|
||||
mux a0 ad0110001 ad0110000 ad011000
|
||||
mux a0 ad0110011 ad0110010 ad011001
|
||||
mux a0 ad0110101 ad0110100 ad011010
|
||||
mux a0 ad0110111 ad0110110 ad011011
|
||||
mux a0 ad0111001 ad0111000 ad011100
|
||||
mux a0 ad0111011 ad0111010 ad011101
|
||||
mux a0 ad0111101 ad0111100 ad011110
|
||||
mux a0 ad0111111 ad0111110 ad011111
|
||||
mux a0 ad1000001 ad1000000 ad100000
|
||||
mux a0 ad1000011 ad1000010 ad100001
|
||||
mux a1 ad000001 ad000000 ad00000
|
||||
mux a1 ad000011 ad000010 ad00001
|
||||
mux a1 ad000101 ad000100 ad00010
|
||||
mux a1 ad000111 ad000110 ad00011
|
||||
mux a1 ad001001 ad001000 ad00100
|
||||
mux a1 ad001011 ad001010 ad00101
|
||||
mux a1 ad001101 ad001100 ad00110
|
||||
mux a1 ad001111 ad001110 ad00111
|
||||
mux a1 ad010001 ad010000 ad01000
|
||||
mux a1 ad010011 ad010010 ad01001
|
||||
mux a1 ad010101 ad010100 ad01010
|
||||
mux a1 ad010111 ad010110 ad01011
|
||||
mux a1 ad011001 ad011000 ad01100
|
||||
mux a1 ad011011 ad011010 ad01101
|
||||
mux a1 ad011101 ad011100 ad01110
|
||||
mux a1 ad011111 ad011110 ad01111
|
||||
mux a1 ad100001 ad100000 ad10000
|
||||
mux a2 ad00001 ad00000 ad0000
|
||||
mux a2 ad00011 ad00010 ad0001
|
||||
mux a2 ad00101 ad00100 ad0010
|
||||
mux a2 ad00111 ad00110 ad0011
|
||||
mux a2 ad01001 ad01000 ad0100
|
||||
mux a2 ad01011 ad01010 ad0101
|
||||
mux a2 ad01101 ad01100 ad0110
|
||||
mux a2 ad01111 ad01110 ad0111
|
||||
mux a2 ad10001 ad10000 ad1000
|
||||
mux a3 ad0001 ad0000 ad000
|
||||
mux a3 ad0011 ad0010 ad001
|
||||
mux a3 ad0101 ad0100 ad010
|
||||
mux a3 ad0111 ad0110 ad011
|
||||
mux a3 ad1001 ad1000 ad100
|
||||
mux a4 ad001 ad000 ad00
|
||||
mux a4 ad011 ad010 ad01
|
||||
mux a4 ad101 ad100 ad10
|
||||
mux a5 ad01 ad00 ad0
|
||||
mux a5 ad11 ad10 ad1
|
||||
mux a6 ad1 ad0 select
|
||||
trans8 ad0000000 d7 d6 d5 d4 d3 d2 d1 d0 1 1 0 0 0 0 0 0
|
||||
trans8 ad0000001 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 0 0 0 0 0
|
||||
trans8 ad0000010 d7 d6 d5 d4 d3 d2 d1 d0 0 1 0 0 0 0 0 1
|
||||
trans8 ad0000011 d7 d6 d5 d4 d3 d2 d1 d0 1 0 0 1 0 0 0 0
|
||||
trans8 ad0000100 d7 d6 d5 d4 d3 d2 d1 d0 0 0 1 1 0 0 0 0
|
||||
trans8 ad0000101 d7 d6 d5 d4 d3 d2 d1 d0 1 1 0 0 0 0 0 0
|
||||
trans8 ad0000110 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 0 0 0 0 0
|
||||
trans8 ad0000111 d7 d6 d5 d4 d3 d2 d1 d0 0 1 0 0 0 0 1 0
|
||||
trans8 ad0001000 d7 d6 d5 d4 d3 d2 d1 d0 1 0 0 1 0 0 0 0
|
||||
trans8 ad0001001 d7 d6 d5 d4 d3 d2 d1 d0 0 0 1 1 1 0 0 0
|
||||
trans8 ad0001010 d7 d6 d5 d4 d3 d2 d1 d0 0 0 1 0 0 1 0 0
|
||||
trans8 ad0001011 d7 d6 d5 d4 d3 d2 d1 d0 0 0 1 0 1 1 1 0
|
||||
trans8 ad0001100 d7 d6 d5 d4 d3 d2 d1 d0 0 1 0 1 1 0 0 1
|
||||
trans8 ad0001101 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 1 1 0 0 0
|
||||
trans8 ad0001110 d7 d6 d5 d4 d3 d2 d1 d0 0 1 1 0 0 0 0 0
|
||||
trans8 ad0001111 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 1 0 1 1 1
|
||||
trans8 ad0010000 d7 d6 d5 d4 d3 d2 d1 d0 1 0 0 0 0 0 1 1
|
||||
trans8 ad0010001 d7 d6 d5 d4 d3 d2 d1 d0 1 1 1 1 0 0 0 0
|
||||
trans8 ad0010010 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 0 0 0 0 0
|
||||
trans8 ad0010011 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 1 0 1 0 1
|
||||
trans8 ad0010100 d7 d6 d5 d4 d3 d2 d1 d0 0 0 1 0 1 0 0 1
|
||||
trans8 ad0010101 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 0 1 1 0 0
|
||||
trans8 ad0010110 d7 d6 d5 d4 d3 d2 d1 d0 1 0 0 0 0 1 1 0
|
||||
trans8 ad0010111 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 1 0 0 0 0
|
||||
trans8 ad0011000 d7 d6 d5 d4 d3 d2 d1 d0 0 1 1 1 1 1 1 0
|
||||
trans8 ad0011001 d7 d6 d5 d4 d3 d2 d1 d0 1 0 0 0 0 0 1 0
|
||||
trans8 ad0011010 d7 d6 d5 d4 d3 d2 d1 d0 0 0 1 0 0 0 0 0
|
||||
trans8 ad0011011 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 0 1 1 0 1
|
||||
trans8 ad0011100 d7 d6 d5 d4 d3 d2 d1 d0 1 0 0 0 0 1 0 1
|
||||
trans8 ad0011101 d7 d6 d5 d4 d3 d2 d1 d0 1 1 1 1 0 0 0 0
|
||||
trans8 ad0011110 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 0 0 0 0 0
|
||||
trans8 ad0011111 d7 d6 d5 d4 d3 d2 d1 d0 0 0 1 0 0 0 1 1
|
||||
trans8 ad0100000 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 0 1 1 0 0
|
||||
trans8 ad0100001 d7 d6 d5 d4 d3 d2 d1 d0 1 0 0 0 0 0 0 1
|
||||
trans8 ad0100010 d7 d6 d5 d4 d3 d2 d1 d0 0 0 1 0 0 0 0 0
|
||||
trans8 ad0100011 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 0 1 1 0 1
|
||||
trans8 ad0100100 d7 d6 d5 d4 d3 d2 d1 d0 1 0 0 0 0 1 1 0
|
||||
trans8 ad0100101 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 1 0 0 0 0
|
||||
trans8 ad0100110 d7 d6 d5 d4 d3 d2 d1 d0 0 1 1 1 1 1 1 0
|
||||
trans8 ad0100111 d7 d6 d5 d4 d3 d2 d1 d0 1 0 0 0 0 0 1 0
|
||||
trans8 ad0101000 d7 d6 d5 d4 d3 d2 d1 d0 0 0 1 0 1 0 0 0
|
||||
trans8 ad0101001 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 0 1 1 1 1
|
||||
trans8 ad0101010 d7 d6 d5 d4 d3 d2 d1 d0 1 0 0 0 0 1 1 0
|
||||
trans8 ad0101011 d7 d6 d5 d4 d3 d2 d1 d0 0 0 1 1 1 0 0 0
|
||||
trans8 ad0101100 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 0 1 1 1 1
|
||||
trans8 ad0101101 d7 d6 d5 d4 d3 d2 d1 d0 1 0 0 0 0 1 0 1
|
||||
trans8 ad0101110 d7 d6 d5 d4 d3 d2 d1 d0 1 1 1 1 0 0 0 0
|
||||
trans8 ad0101111 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 0 0 0 0 0
|
||||
trans8 ad0110000 d7 d6 d5 d4 d3 d2 d1 d0 0 0 1 1 1 0 1 1
|
||||
trans8 ad0110001 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 0 1 1 0 1
|
||||
trans8 ad0110010 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 1 0 1 1 0
|
||||
trans8 ad0110011 d7 d6 d5 d4 d3 d2 d1 d0 1 0 0 0 0 0 0 0
|
||||
trans8 ad0110100 d7 d6 d5 d4 d3 d2 d1 d0 0 0 1 0 1 0 0 0
|
||||
trans8 ad0110101 d7 d6 d5 d4 d3 d2 d1 d0 1 1 1 0 1 0 0 0
|
||||
trans8 ad0110110 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 0 0 0 0 0
|
||||
trans8 ad0110111 d7 d6 d5 d4 d3 d2 d1 d0 0 0 1 1 1 0 1 1
|
||||
trans8 ad0111000 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 0 1 1 0 0
|
||||
trans8 ad0111001 d7 d6 d5 d4 d3 d2 d1 d0 1 0 0 0 0 0 0 1
|
||||
trans8 ad0111010 d7 d6 d5 d4 d3 d2 d1 d0 0 0 1 0 0 0 0 0
|
||||
trans8 ad0111011 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 0 1 0 1 1
|
||||
trans8 ad0111100 d7 d6 d5 d4 d3 d2 d1 d0 1 0 0 0 1 0 0 1
|
||||
trans8 ad0111101 d7 d6 d5 d4 d3 d2 d1 d0 1 1 1 0 0 0 1 0
|
||||
trans8 ad0111110 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 0 0 0 0 0
|
||||
trans8 ad0111111 d7 d6 d5 d4 d3 d2 d1 d0 0 0 0 1 0 1 0 1
|
||||
trans8 ad1000000 d7 d6 d5 d4 d3 d2 d1 d0 1 0 1 0 1 1 1 0
|
||||
trans8 ad1000001 d7 d6 d5 d4 d3 d2 d1 d0 1 1 0 1 1 1 0 1
|
||||
trans8 ad1000010 d7 d6 d5 d4 d3 d2 d1 d0 1 0 1 1 0 0 1 1
|
||||
|
||||
# Putting it all together
|
||||
def computer
|
||||
ra7 ra6 ra5 ra4 ra3 ra2 ra1 ra0
|
||||
rb7 rb6 rb5 rb4 rb3 rb2 rb1 rb0
|
||||
rc7 rc6 rc5 rc4 rc3 rc2 rc1 rc0
|
||||
rd7 rd6 rd5 rd4 rd3 rd2 rd1 rd0
|
||||
m15 m14 m13 m12 m11 m10 m9 m8 m7 m6 m5 m4 m3 m2 m1 m0
|
||||
xy15 xy14 xy13 xy12 xy11 xy10 xy9 xy8 xy7 xy6 xy5 xy4 xy3 xy2 xy1 xy0 :
|
||||
rom selectMemory d7 d6 d5 d4 d3 d2 d1 d0 a6 a5 a4 a3 a2 a1 a0
|
||||
register16 loadPC selectPC
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
pc15 pc14 pc13 pc12 pc11 pc10 pc9 pc8 pc7 pc6 pc5 pc4 pc3 pc2 pc1 pc0
|
||||
registerHighLow loadIN 0 loadIN 0 0 selectIN
|
||||
ic15 ic14 ic13 ic12 ic11 ic10 ic9 ic8 ic7 ic6 ic5 ic4 ic3 ic2 ic1 ic0
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
in15 in14 in13 in12 in11 in10 in9 in8 in7 in6 in5 in4 in3 in2 in1 in0
|
||||
incrementer
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
ic15 ic14 ic13 ic12 ic11 ic10 ic9 ic8 ic7 ic6 ic5 ic4 ic3 ic2 ic1 ic0
|
||||
ALU selectB loadB selectC loadC selectFlag loadFlag
|
||||
alu2 alu1 alu0
|
||||
d7 d6 d5 d4 d3 d2 d1 d0 zero carry sign
|
||||
rb7 rb6 rb5 rb4 rb3 rb2 rb1 rb0
|
||||
rc7 rc6 rc5 rc4 rc3 rc2 rc1 rc0
|
||||
register8 loadA selectA
|
||||
d7 d6 d5 d4 d3 d2 d1 d0 ra7 ra6 ra5 ra4 ra3 ra2 ra1 ra0
|
||||
register8 loadD selectD
|
||||
d7 d6 d5 d4 d3 d2 d1 d0 rd7 rd6 rd5 rd4 rd3 rd2 rd1 rd0
|
||||
register8 loadInst selectInst
|
||||
d7 d6 d5 d4 d3 d2 d1 d0 ns7 ns6 ns5 ns4 ns3 ns2 ns1 ns0
|
||||
registerHighLow loadM1 selectM1 loadM2 selectM2 loadM selectM
|
||||
d7 d6 d5 d4 d3 d2 d1 d0 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
m15 m14 m13 m12 m11 m10 m9 m8 m7 m6 m5 m4 m3 m2 m1 m0
|
||||
registerHighLow loadJ1 selectJ1 loadJ2 selectJ2 loadJ selectJ
|
||||
d7 d6 d5 d4 d3 d2 d1 d0 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
j15 j14 j13 j12 j11 j10 j9 j8 j7 j6 j5 j4 j3 j2 j1 j0
|
||||
registerHighLow loadX selectX loadY selectY loadXY selectXY
|
||||
d7 d6 d5 d4 d3 d2 d1 d0 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
xy15 xy14 xy13 xy12 xy11 xy10 xy9 xy8 xy7 xy6 xy5 xy4 xy3 xy2 xy1 xy0
|
||||
|
||||
# BOOT (starts as 0, locks into 1 forever)
|
||||
flipFlop C 1 boot
|
||||
inv boot bootNeg
|
||||
|
||||
# PC = 0
|
||||
flipFlop C bootNeg state4
|
||||
buf state4 loadPC
|
||||
buf state4 mainLoop
|
||||
|
||||
# -- COPY INSTRUCTION IN MEMORY TO INSTRUCTION REGISTER BEGIN ----------------
|
||||
flipFlop C mainLoop stateMainLoop
|
||||
|
||||
flipFlop C stateMainLoop state5
|
||||
buf state5 selectPC
|
||||
|
||||
flipFlop C state5 state6
|
||||
buf state6 selectPC
|
||||
buf state6 selectMemory
|
||||
buf state6 loadInst
|
||||
buf state6 loadIN # IN = PC + 1
|
||||
|
||||
flipFlop C state6 state7
|
||||
buf state7 selectPC
|
||||
buf state7 selectMemory
|
||||
|
||||
flipFlop C state7 state8
|
||||
buf state8 loadPC # PC = IN
|
||||
buf state8 selectIN
|
||||
|
||||
flipFlop C state8 state9
|
||||
buf state9 selectIN
|
||||
buf state9 processInst
|
||||
# -- COPY INSTRUCTION IN MEMORY TO INSTRUCTION REGISTER END ------------------
|
||||
|
||||
# -- RETURN (1010 dss0) BEGIN ------------------------------------------------
|
||||
r ns7 rt7 processInst 0
|
||||
r ns6 rt6 0 rt7
|
||||
r ns5 rt5 rt6 0
|
||||
r ns4 rt4 0 rt5
|
||||
flipFlop C rt4 state38
|
||||
buf state38 state38b
|
||||
buf state38 state38c
|
||||
r ns3 state38c loadPC loadXY
|
||||
eDecoder2to4 state38b ns2 ns1 halt selectJ selectXY selectM
|
||||
|
||||
flipFlop C state38 state39
|
||||
buf state39 state38b
|
||||
inv halt haltNeg
|
||||
and haltNeg state39 mainLoop
|
||||
# -- RETURN (1010 dss0) END --------------------------------------------------
|
||||
|
||||
# -- 16-BIT INSTRUCTION (11rs cznx) BEGIN ------------------------------------
|
||||
r ns7 nx7 processInst 0
|
||||
r ns6 nx6 nx7 0
|
||||
flipFlop C nx6 state24b
|
||||
buf state24b selectPC
|
||||
|
||||
flipFlop C state24b state25
|
||||
buf state25 selectPC
|
||||
buf state25 selectMemory
|
||||
buf state25 state25b
|
||||
r ns5 state25b loadJ1 loadM1 # M1/J1 <- MEM
|
||||
buf state25 loadIN # IN = PC + 1
|
||||
|
||||
flipFlop C state25 state26
|
||||
buf state26 selectPC
|
||||
buf state26 selectMemory
|
||||
|
||||
flipFlop C state26 state27
|
||||
buf state27 loadPC # PC = IN
|
||||
buf state27 selectIN
|
||||
|
||||
flipFlop C state27 state28
|
||||
buf state28 selectIN
|
||||
|
||||
flipFlop C state28 state29
|
||||
buf state29 selectPC
|
||||
buf state29 selectMemory
|
||||
buf state29 state29b
|
||||
r ns5 state29b loadJ2 loadM2 # M2/J2 <- MEM
|
||||
buf state29 loadIN # IN = PC + 1
|
||||
|
||||
flipFlop C state29 state30
|
||||
buf state30 selectPC
|
||||
buf state30 selectMemory
|
||||
|
||||
flipFlop C state30 state31
|
||||
buf state31 loadPC # PC = IN
|
||||
buf state31 selectIN
|
||||
|
||||
flipFlop C state31 state35
|
||||
buf state35 selectFlag
|
||||
inv carry carryNeg
|
||||
inv zero zeroNeg
|
||||
and ns4 sign jmp0
|
||||
and ns3 carryNeg jmp1
|
||||
and ns2 zero jmp2
|
||||
and ns1 zeroNeg jmp3
|
||||
buf jmp0 jmp
|
||||
buf jmp1 jmp
|
||||
buf jmp2 jmp
|
||||
buf jmp3 jmp
|
||||
inv jmp jmpNeg
|
||||
and state35 jmp doJump
|
||||
and state35 jmpNeg mainLoop
|
||||
|
||||
flipFlop C doJump state32
|
||||
inv ns0 ns0neg
|
||||
and state32 ns0 savePC
|
||||
and state32 ns0neg dontSavePC
|
||||
|
||||
flipFlop C savePC state33
|
||||
buf state33 selectPC
|
||||
buf state33 loadXY # XY = PC
|
||||
|
||||
flipFlop C state33 state34
|
||||
buf state34 selectPC
|
||||
buf state34 dontSavePC
|
||||
|
||||
flipFlop C dontSavePC state36
|
||||
buf state36 state36b
|
||||
r ns5 state36b selectJ selectM
|
||||
buf state36 loadPC # PC = M/J
|
||||
|
||||
flipFlop C state36 state37
|
||||
buf state37 state36b
|
||||
buf state37 mainLoop
|
||||
# -- 16-BIT INSTRUCTION (11rs cznx) END --------------------------------------
|
||||
|
||||
# -- INC XY (1011 0000) BEGIN ------------------------------------------------
|
||||
r ns7 ix7 processInst 0
|
||||
r ns6 ix6 0 ix7
|
||||
r ns5 ix5 ix6 0
|
||||
r ns4 ix4 ix5 0
|
||||
r ns3 ix3 0 ix4
|
||||
r ns2 ix2 0 ix3
|
||||
r ns1 ix1 0 ix2
|
||||
r ns0 ix0 0 ix1
|
||||
flipFlop C ix0 state21
|
||||
buf state21 selectXY
|
||||
buf state21 loadIN
|
||||
|
||||
flipFlop C state21 state22
|
||||
buf state22 selectXY
|
||||
|
||||
flipFlop C state22 state23
|
||||
buf state23 loadXY
|
||||
buf state23 selectIN
|
||||
|
||||
flipFlop C state23 state24
|
||||
buf state24 selectIN
|
||||
buf state24 mainLoop
|
||||
# -- INC XY (1011 0000) END --------------------------------------------------
|
||||
|
||||
# -- ALU (1000 rfff) BEGIN ---------------------------------------------------
|
||||
r ns7 al7 processInst 0
|
||||
r ns6 al6 0 al7
|
||||
r ns5 al5 0 al6
|
||||
r ns4 al4 0 al5
|
||||
flipFlop C al4 state19
|
||||
buf state19 aluing
|
||||
r aluing alu2 ns2 1
|
||||
r aluing alu1 ns1 1
|
||||
r aluing alu0 ns0 1
|
||||
buf state19 loadFlag
|
||||
buf state19 state19b
|
||||
r ns3 state19b loadD loadA
|
||||
|
||||
flipFlop C state19 state20
|
||||
buf state20 aluing
|
||||
buf state20 mainLoop
|
||||
# -- ALU (1000 rfff) END -----------------------------------------------------
|
||||
|
||||
# -- LD (1001 0xrr) BEGIN ----------------------------------------------------
|
||||
r ns3 ld3 0 sto4
|
||||
flipFlop C ld3 state17
|
||||
buf state17 selectM
|
||||
buf state17 selectMemory
|
||||
eDecoder2to4 state17 ns1 ns0 loadD loadC loadB loadA
|
||||
|
||||
flipFlop C state17 state18
|
||||
buf state18 selectM
|
||||
buf state18 selectMemory
|
||||
buf state18 mainLoop
|
||||
# -- LD (1001 0xrr) END ------------------------------------------------------
|
||||
|
||||
# -- STO (1001 1xrr) BEGIN ---------------------------------------------------
|
||||
r ns7 sto7 processInst 0
|
||||
r ns6 sto6 0 sto7
|
||||
r ns5 sto5 0 sto6
|
||||
r ns4 sto4 sto5 0
|
||||
r ns3 sto3 sto4 0
|
||||
flipFlop C sto3 state14
|
||||
buf state14 storing
|
||||
buf storing selectM
|
||||
eDecoder2to4 storing ns1 ns0 selectD selectC selectB selectA
|
||||
|
||||
flipFlop C state14 state15
|
||||
buf state15 storing
|
||||
buf state15 loadMemory
|
||||
|
||||
flipFlop C state15 state16
|
||||
buf state16 storing
|
||||
buf state16 mainLoop
|
||||
# -- STO (1001 1xrr) END -----------------------------------------------------
|
||||
|
||||
# -- MOV (00dd dsss) BEGIN ---------------------------------------------------
|
||||
r ns7 mo7 0 processInst
|
||||
r ns6 mo6 0 mo7
|
||||
flipFlop C mo6 state12
|
||||
or state12 state13 movSrc
|
||||
eDecoder3to8 state12 ns5 ns4 ns3
|
||||
loadY loadX loadM2 loadM1 loadD loadC loadB loadA
|
||||
eDecoder3to8 movSrc ns2 ns1 ns0
|
||||
selectY selectX selectM2 selectM1 selectD selectC selectB selectA
|
||||
|
||||
flipFlop C state12 state13
|
||||
buf state13 mainLoop
|
||||
# -- MOV (00dd dsss) END -----------------------------------------------------
|
||||
|
||||
# -- SET-8 (01rv vvvv) BEGIN -------------------------------------------------
|
||||
r ns7 se7 0 processInst
|
||||
r ns6 se6 se7 0
|
||||
flipFlop C se6 state10
|
||||
buf state10 state10load
|
||||
r ns5 state10load loadB loadA
|
||||
or state10 state11 enable1011
|
||||
enable enable1011 ns4 ns4 ns4 ns4 ns3 ns2 ns1 ns0 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
flipFlop C state10 state11
|
||||
buf state11 mainLoop
|
||||
# -- SET-8 (01rv vvvv) END ---------------------------------------------------
|
||||
|
||||
run 41000 10 computer
|
||||
? ? ? ? ? ? ? ?
|
||||
? ? ? ? ? ? ? ?
|
||||
? ? ? ? ? ? ? ?
|
||||
? ? ? ? ? ? ? ?
|
||||
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
|
||||
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
|
||||
@@ -0,0 +1,311 @@
|
||||
# Four double-pole relay
|
||||
def r4 coil l3 nd3 nc3 l2 nd2 nc2 l1 nd1 nc1 l0 nd0 nc0 :
|
||||
r coil l3 nd3 nc3
|
||||
r coil l2 nd2 nc2
|
||||
r coil l1 nd1 nc1
|
||||
r coil l0 nd0 nc0
|
||||
|
||||
# Buffer
|
||||
def buf input output :
|
||||
r input output 1 0
|
||||
|
||||
# Inverter
|
||||
def inv input output :
|
||||
r input output 0 1
|
||||
|
||||
# AND Gate
|
||||
def and i1 i0 o :
|
||||
r i0 z 1 0
|
||||
r i1 o z 0
|
||||
|
||||
# NAND Gate
|
||||
def nand i0 i1 o :
|
||||
r i0 1 0 o
|
||||
r i1 1 0 o
|
||||
|
||||
# OR Gate
|
||||
def or i0 i1 o :
|
||||
r i0 1 o 0
|
||||
r i1 1 o 0
|
||||
|
||||
# NOR Gate
|
||||
def nor i0 i1 o :
|
||||
r i0 1 0 z
|
||||
r i1 z 0 o
|
||||
|
||||
# XOR Gate
|
||||
def xor i0 i1 o :
|
||||
r i0 1 b a
|
||||
r i1 o a b
|
||||
|
||||
# XNOR Gate
|
||||
def xnor i0 i1 o :
|
||||
r i0 1 a b
|
||||
r i1 o a b
|
||||
|
||||
# Half Adder
|
||||
def halfAdder a b s1 s0 :
|
||||
and a b s1
|
||||
xor a b s0
|
||||
|
||||
# Full Adder
|
||||
def fullAdder carryIn a b carryOut sum :
|
||||
halfAdder a b s1 s0
|
||||
halfAdder s0 carryIn carry sum
|
||||
or s1 carry carryOut
|
||||
|
||||
# 2-bit Adder
|
||||
def adder2 carryIn a1 a0 b1 b0 carryOut s1 s0 :
|
||||
fullAdder carryIn a0 b0 carry s0
|
||||
fullAdder carry a1 b1 carryOut s1
|
||||
|
||||
# 4-bit Adder
|
||||
def adder4 carryIn a3 a2 a1 a0 b3 b2 b1 b0 carryOut s3 s2 s1 s0 :
|
||||
adder2 carryIn a1 a0 b1 b0 carry s1 s0
|
||||
adder2 carry a3 a2 b3 b2 carryOut s3 s2
|
||||
|
||||
# 8-bit Adder
|
||||
def adder8 carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
adder4 carryIn a3 a2 a1 a0 b3 b2 b1 b0 carry s3 s2 s1 s0
|
||||
adder4 carry a7 a6 a5 a4 b7 b6 b5 b4 carryOut s7 s6 s5 s4
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry Full Adder
|
||||
def zuseFullAdder carryInNeg carryIn a b carryOutNeg carryOut sum :
|
||||
r4 a carryInNeg y z sum w x 1 v y carryIn u v
|
||||
r4 b carryOutNeg z y carryInNeg x w carryIn w x carryOut v u
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 2-bit Adder
|
||||
def zuseAdder2 carryInNeg carryIn a1 a0 b1 b0 carryOutNeg carryOut s1 s0 :
|
||||
zuseFullAdder carryInNeg carryIn a0 b0 cOutNeg cOut s0
|
||||
zuseFullAdder cOutNeg cOut a1 b1 carryOutNeg carryOut s1
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 4-bit Adder
|
||||
def zuseAdder4 carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s3 s2 s1 s0 :
|
||||
zuseAdder2 carryInNeg carryIn a1 a0 b1 b0 cOutNeg cOut s1 s0
|
||||
zuseAdder2 cOutNeg cOut a3 a2 b3 b2 carryOutNeg carryOut s3 s2
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 8-bit Adder
|
||||
def zuseAdder8 carryInNeg carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
zuseAdder4 carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0 cOutNeg cOut s3 s2 s1 s0
|
||||
zuseAdder4 cOutNeg cOut a7 a6 a5 a4 b7 b6 b5 b4
|
||||
carryOutNeg carryOut s7 s6 s5 s4
|
||||
|
||||
# 1-bit Partial Adder/Subtractor
|
||||
def xFullAdder subtract carryInNeg carryIn a b carryOutNeg carryOut sum :
|
||||
xor subtract b bNeg
|
||||
zuseFullAdder carryInNeg carryIn a bNeg carryOutNeg carryOut sum
|
||||
|
||||
# 2-bit Partial Adder/Subtractor
|
||||
def xFullAdder2 subtract carryInNeg carryIn
|
||||
a1 a0 b1 b0 carryOutNeg carryOut s1 s0 :
|
||||
xFullAdder subtract carryInNeg carryIn a0 b0 cOutNeg cOut s0
|
||||
xFullAdder subtract cOutNeg cOut a1 b1 carryOutNeg carryOut s1
|
||||
|
||||
# 4-bit Partial Adder/Subtractor
|
||||
def xFullAdder4 subtract carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s3 s2 s1 s0 :
|
||||
xFullAdder2 subtract carryInNeg carryIn a1 a0 b1 b0 cOutNeg cOut s1 s0
|
||||
xFullAdder2 subtract cOutNeg cOut a3 a2 b3 b2 carryOutNeg carryOut s3 s2
|
||||
|
||||
# 8-bit Partial Adder/Subtractor
|
||||
def xFullAdder8 subtract carryInNeg carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
xFullAdder4 subtract carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
cOutNeg cOut s3 s2 s1 s0
|
||||
xFullAdder4 subtract cOutNeg cOut a7 a6 a5 a4 b7 b6 b5 b4
|
||||
carryOutNeg carryOut s7 s6 s5 s4
|
||||
|
||||
# 8-bit Adder/Subtractor
|
||||
def adderSubtractor subtract
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
inv subtract carryInNeg
|
||||
xFullAdder8 subtract carryInNeg subtract
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg cOut s7 s6 s5 s4 s3 s2 s1 s0
|
||||
xor cOut subtract carryOut
|
||||
|
||||
# 2-to-1 Mux
|
||||
def mux a i1 i0 o :
|
||||
r a o i1 i0
|
||||
|
||||
# 4-to-1 Mux
|
||||
def mux4to1 a1 a0 i3 i2 i1 i0 o :
|
||||
mux a0 i1 i0 x
|
||||
mux a0 i3 i2 y
|
||||
mux a1 y x o
|
||||
|
||||
# 8-to-1 Mux
|
||||
def mux8to1 a2 a1 a0 i7 i6 i5 i4 i3 i2 i1 i0 o :
|
||||
mux4to1 a1 a0 i3 i2 i1 i0 x
|
||||
mux4to1 a1 a0 i7 i6 i5 i4 y
|
||||
mux a2 y x o
|
||||
|
||||
# 3-to-8 Decoder
|
||||
def decoder3to8 a2 a1 a0 o7 o6 o5 o4 o3 o2 o1 o0 :
|
||||
mux8to1 a2 a1 a0 o7 o6 o5 o4 o3 o2 o1 o0 1
|
||||
|
||||
def trans enabled a b :
|
||||
r enabled a b 0
|
||||
|
||||
# 2-bit transmission gate
|
||||
def trans2 enabled a1 a0 b1 b0 :
|
||||
trans enabled a1 b1
|
||||
trans enabled a0 b0
|
||||
|
||||
# 4-bit transmission gate
|
||||
def trans4 enabled a3 a2 a1 a0 b3 b2 b1 b0 :
|
||||
trans2 enabled a3 a2 b3 b2
|
||||
trans2 enabled a1 a0 b1 b0
|
||||
|
||||
# 8-bit transmission gate
|
||||
def trans8 enabled a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0 :
|
||||
trans4 enabled a7 a6 a5 a4 b7 b6 b5 b4
|
||||
trans4 enabled a3 a2 a1 a0 b3 b2 b1 b0
|
||||
|
||||
# 16-bit transmission gate
|
||||
def trans16 enabled
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 :
|
||||
trans8 enabled a15 a14 a13 a12 a11 a10 a9 a8 b15 b14 b13 b12 b11 b10 b9 b8
|
||||
trans8 enabled a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
|
||||
# Latch, stores when w = 1
|
||||
def latch w d q :
|
||||
mux w d q z
|
||||
buf z q
|
||||
|
||||
# Latch, stores when w = 0
|
||||
def latchNeg w d q :
|
||||
mux w q d z
|
||||
buf z q
|
||||
|
||||
# Flip flop, stores when w rises to 1, expresses new value when w drops to 0
|
||||
def flipFlop w d q :
|
||||
latch w d q2
|
||||
latchNeg w q2 q
|
||||
|
||||
def flipFlopRegister w d7 d6 d5 d4 d3 d2 d1 d0 q7 q6 q5 q4 q3 q2 q1 q0:
|
||||
flipFlop w d7 q7
|
||||
flipFlop w d6 q6
|
||||
flipFlop w d5 q5
|
||||
flipFlop w d4 q4
|
||||
flipFlop w d3 q3
|
||||
flipFlop w d2 q2
|
||||
flipFlop w d1 q1
|
||||
flipFlop w d0 q0
|
||||
|
||||
def latchRegister w d7 d6 d5 d4 d3 d2 d1 d0 q7 q6 q5 q4 q3 q2 q1 q0:
|
||||
latch w d7 q7
|
||||
latch w d6 q6
|
||||
latch w d5 q5
|
||||
latch w d4 q4
|
||||
latch w d3 q3
|
||||
latch w d2 q2
|
||||
latch w d1 q1
|
||||
latch w d0 q0
|
||||
|
||||
def tinyLatchRegister writeNeg d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
r d7 d7 writeNeg 0
|
||||
r d6 d6 writeNeg 0
|
||||
r d5 d5 writeNeg 0
|
||||
r d4 d4 writeNeg 0
|
||||
r d3 d3 writeNeg 0
|
||||
r d2 d2 writeNeg 0
|
||||
r d1 d1 writeNeg 0
|
||||
r d0 d0 writeNeg 0
|
||||
|
||||
def memoryRegister select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
inv load writeNeg
|
||||
inv writeNeg select
|
||||
trans8 select d7 d6 d5 d4 d3 d2 d1 d0 z7 z6 z5 z4 z3 z2 z1 z0
|
||||
tinyLatchRegister writeNeg z7 z6 z5 z4 z3 z2 z1 z0
|
||||
|
||||
# 2 Bytes of memory
|
||||
def memory2 address select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux address select1 select0 select
|
||||
mux address load1 load0 load
|
||||
memoryRegister select0 load0 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memoryRegister select1 load1 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 4 Bytes of memory
|
||||
def memory4 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a1 select1 select0 select
|
||||
mux a1 load1 load0 load
|
||||
memory2 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory2 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 8 Bytes of memory
|
||||
def memory8 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a2 select1 select0 select
|
||||
mux a2 load1 load0 load
|
||||
memory4 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory4 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 16 Bytes of memory
|
||||
def memory16 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a3 select1 select0 select
|
||||
mux a3 load1 load0 load
|
||||
memory8 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory8 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 32 Bytes of memory
|
||||
def memory32 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a4 select1 select0 select
|
||||
mux a4 load1 load0 load
|
||||
memory16 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory16 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 64 Bytes of memory
|
||||
def memory64 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a5 select1 select0 select
|
||||
mux a5 load1 load0 load
|
||||
memory32 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory32 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 128 Bytes of memory
|
||||
def memory128 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a6 select1 select0 select
|
||||
mux a6 load1 load0 load
|
||||
memory64 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory64 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 256 Bytes of memory
|
||||
def memory256 a7 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a7 select1 select0 select
|
||||
mux a7 load1 load0 load
|
||||
memory128 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory128 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
def counterElement andIn andOut value :
|
||||
xor andIn value data
|
||||
flipFlop c data value
|
||||
and andIn value andOut
|
||||
|
||||
def counter2 andIn andOut v1 v0 :
|
||||
counterElement andIn x v0
|
||||
counterElement x andOut v1
|
||||
|
||||
def counter4 andIn andOut v3 v2 v1 v0 :
|
||||
counter2 andIn x v1 v0
|
||||
counter2 x andOut v3 v2
|
||||
|
||||
def counter8 andIn andOut v7 v6 v5 v4 v3 v2 v1 v0 :
|
||||
counter4 andIn x v3 v2 v1 v0
|
||||
counter4 x andOut v7 v6 v5 v4
|
||||
|
||||
run 160 5 counter8 1 0 ? ? ? ? ? ? ? ?
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,598 @@
|
||||
# Four double-pole relay
|
||||
def r4 coil l3 nd3 nc3 l2 nd2 nc2 l1 nd1 nc1 l0 nd0 nc0 :
|
||||
r coil l3 nd3 nc3
|
||||
r coil l2 nd2 nc2
|
||||
r coil l1 nd1 nc1
|
||||
r coil l0 nd0 nc0
|
||||
|
||||
# Buffer
|
||||
def buf input output :
|
||||
r input output 1 0
|
||||
|
||||
# Inverter
|
||||
def inv input output :
|
||||
r input output 0 1
|
||||
|
||||
# AND Gate
|
||||
def and i1 i0 o :
|
||||
r i0 z 1 0
|
||||
r i1 o z 0
|
||||
|
||||
# NAND Gate
|
||||
def nand i0 i1 o :
|
||||
r i0 1 0 o
|
||||
r i1 1 0 o
|
||||
|
||||
# OR Gate
|
||||
def or i0 i1 o :
|
||||
r i0 1 o 0
|
||||
r i1 1 o 0
|
||||
|
||||
# NOR Gate
|
||||
def nor i0 i1 o :
|
||||
r i0 1 0 z
|
||||
r i1 z 0 o
|
||||
|
||||
# XOR Gate
|
||||
def xor i0 i1 o :
|
||||
r i0 1 b a
|
||||
r i1 o a b
|
||||
|
||||
# XNOR Gate
|
||||
def xnor i0 i1 o :
|
||||
r i0 1 a b
|
||||
r i1 o a b
|
||||
|
||||
# Half Adder
|
||||
def halfAdder a b s1 s0 :
|
||||
and a b s1
|
||||
xor a b s0
|
||||
|
||||
# Full Adder
|
||||
def fullAdder carryIn a b carryOut sum :
|
||||
halfAdder a b s1 s0
|
||||
halfAdder s0 carryIn carry sum
|
||||
or s1 carry carryOut
|
||||
|
||||
# 2-bit Adder
|
||||
def adder2 carryIn a1 a0 b1 b0 carryOut s1 s0 :
|
||||
fullAdder carryIn a0 b0 carry s0
|
||||
fullAdder carry a1 b1 carryOut s1
|
||||
|
||||
# 4-bit Adder
|
||||
def adder4 carryIn a3 a2 a1 a0 b3 b2 b1 b0 carryOut s3 s2 s1 s0 :
|
||||
adder2 carryIn a1 a0 b1 b0 carry s1 s0
|
||||
adder2 carry a3 a2 b3 b2 carryOut s3 s2
|
||||
|
||||
# 8-bit Adder
|
||||
def adder8 carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
adder4 carryIn a3 a2 a1 a0 b3 b2 b1 b0 carry s3 s2 s1 s0
|
||||
adder4 carry a7 a6 a5 a4 b7 b6 b5 b4 carryOut s7 s6 s5 s4
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry Full Adder
|
||||
def zuseFullAdder carryInNeg carryIn a b carryOutNeg carryOut sum :
|
||||
r4 a carryInNeg y z sum w x 1 v y carryIn u v
|
||||
r4 b carryOutNeg z y carryInNeg x w carryIn w x carryOut v u
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 2-bit Adder
|
||||
def zuseAdder2 carryInNeg carryIn a1 a0 b1 b0 carryOutNeg carryOut s1 s0 :
|
||||
zuseFullAdder carryInNeg carryIn a0 b0 cOutNeg cOut s0
|
||||
zuseFullAdder cOutNeg cOut a1 b1 carryOutNeg carryOut s1
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 4-bit Adder
|
||||
def zuseAdder4 carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s3 s2 s1 s0 :
|
||||
zuseAdder2 carryInNeg carryIn a1 a0 b1 b0 cOutNeg cOut s1 s0
|
||||
zuseAdder2 cOutNeg cOut a3 a2 b3 b2 carryOutNeg carryOut s3 s2
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 8-bit Adder
|
||||
def zuseAdder8 carryInNeg carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
zuseAdder4 carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0 cOutNeg cOut s3 s2 s1 s0
|
||||
zuseAdder4 cOutNeg cOut a7 a6 a5 a4 b7 b6 b5 b4
|
||||
carryOutNeg carryOut s7 s6 s5 s4
|
||||
|
||||
# 1-bit Partial Adder/Subtractor
|
||||
def xFullAdder subtract carryInNeg carryIn a b carryOutNeg carryOut sum :
|
||||
xor subtract b bNeg
|
||||
zuseFullAdder carryInNeg carryIn a bNeg carryOutNeg carryOut sum
|
||||
|
||||
# 2-bit Partial Adder/Subtractor
|
||||
def xFullAdder2 subtract carryInNeg carryIn
|
||||
a1 a0 b1 b0 carryOutNeg carryOut s1 s0 :
|
||||
xFullAdder subtract carryInNeg carryIn a0 b0 cOutNeg cOut s0
|
||||
xFullAdder subtract cOutNeg cOut a1 b1 carryOutNeg carryOut s1
|
||||
|
||||
# 4-bit Partial Adder/Subtractor
|
||||
def xFullAdder4 subtract carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s3 s2 s1 s0 :
|
||||
xFullAdder2 subtract carryInNeg carryIn a1 a0 b1 b0 cOutNeg cOut s1 s0
|
||||
xFullAdder2 subtract cOutNeg cOut a3 a2 b3 b2 carryOutNeg carryOut s3 s2
|
||||
|
||||
# 8-bit Partial Adder/Subtractor
|
||||
def xFullAdder8 subtract carryInNeg carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
xFullAdder4 subtract carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
cOutNeg cOut s3 s2 s1 s0
|
||||
xFullAdder4 subtract cOutNeg cOut a7 a6 a5 a4 b7 b6 b5 b4
|
||||
carryOutNeg carryOut s7 s6 s5 s4
|
||||
|
||||
# 8-bit Adder/Subtractor
|
||||
def adderSubtractor subtract
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
inv subtract carryInNeg
|
||||
xFullAdder8 subtract carryInNeg subtract
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg cOut s7 s6 s5 s4 s3 s2 s1 s0
|
||||
xor cOut subtract carryOut
|
||||
|
||||
# 2-to-1 Mux
|
||||
def mux a i1 i0 o :
|
||||
r a o i1 i0
|
||||
|
||||
# 4-to-1 Mux
|
||||
def mux4to1 a1 a0 i3 i2 i1 i0 o :
|
||||
mux a0 i1 i0 x
|
||||
mux a0 i3 i2 y
|
||||
mux a1 y x o
|
||||
|
||||
# 8-to-1 Mux
|
||||
def mux8to1 a2 a1 a0 i7 i6 i5 i4 i3 i2 i1 i0 o :
|
||||
mux4to1 a1 a0 i3 i2 i1 i0 x
|
||||
mux4to1 a1 a0 i7 i6 i5 i4 y
|
||||
mux a2 y x o
|
||||
|
||||
# 3-to-8 Decoder
|
||||
def decoder3to8 a2 a1 a0 o7 o6 o5 o4 o3 o2 o1 o0 :
|
||||
mux8to1 a2 a1 a0 o7 o6 o5 o4 o3 o2 o1 o0 1
|
||||
|
||||
def trans enabled a b :
|
||||
r enabled a b 0
|
||||
|
||||
# 2-bit transmission gate
|
||||
def trans2 enabled a1 a0 b1 b0 :
|
||||
trans enabled a1 b1
|
||||
trans enabled a0 b0
|
||||
|
||||
# 4-bit transmission gate
|
||||
def trans4 enabled a3 a2 a1 a0 b3 b2 b1 b0 :
|
||||
trans2 enabled a3 a2 b3 b2
|
||||
trans2 enabled a1 a0 b1 b0
|
||||
|
||||
# 8-bit transmission gate
|
||||
def trans8 enabled a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0 :
|
||||
trans4 enabled a7 a6 a5 a4 b7 b6 b5 b4
|
||||
trans4 enabled a3 a2 a1 a0 b3 b2 b1 b0
|
||||
|
||||
# 16-bit transmission gate
|
||||
def trans16 enabled
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 :
|
||||
trans8 enabled a15 a14 a13 a12 a11 a10 a9 a8 b15 b14 b13 b12 b11 b10 b9 b8
|
||||
trans8 enabled a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
|
||||
# Latch, stores when w = 1
|
||||
def latch w d q :
|
||||
mux w d q z
|
||||
buf z q
|
||||
|
||||
# Latch, stores when w = 0
|
||||
def latchNeg w d q :
|
||||
mux w q d z
|
||||
buf z q
|
||||
|
||||
# Flip flop, stores when w rises to 1, expresses new value when w drops to 0
|
||||
def flipFlop w d q :
|
||||
latch w d q2
|
||||
latchNeg w q2 q
|
||||
|
||||
def flipFlopRegister w d7 d6 d5 d4 d3 d2 d1 d0 q7 q6 q5 q4 q3 q2 q1 q0:
|
||||
flipFlop w d7 q7
|
||||
flipFlop w d6 q6
|
||||
flipFlop w d5 q5
|
||||
flipFlop w d4 q4
|
||||
flipFlop w d3 q3
|
||||
flipFlop w d2 q2
|
||||
flipFlop w d1 q1
|
||||
flipFlop w d0 q0
|
||||
|
||||
def latchRegister w d7 d6 d5 d4 d3 d2 d1 d0 q7 q6 q5 q4 q3 q2 q1 q0:
|
||||
latch w d7 q7
|
||||
latch w d6 q6
|
||||
latch w d5 q5
|
||||
latch w d4 q4
|
||||
latch w d3 q3
|
||||
latch w d2 q2
|
||||
latch w d1 q1
|
||||
latch w d0 q0
|
||||
|
||||
def tinyLatchRegister writeNeg d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
r d7 d7 writeNeg 0
|
||||
r d6 d6 writeNeg 0
|
||||
r d5 d5 writeNeg 0
|
||||
r d4 d4 writeNeg 0
|
||||
r d3 d3 writeNeg 0
|
||||
r d2 d2 writeNeg 0
|
||||
r d1 d1 writeNeg 0
|
||||
r d0 d0 writeNeg 0
|
||||
|
||||
def memoryRegister select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
inv load writeNeg
|
||||
inv writeNeg select
|
||||
trans8 select d7 d6 d5 d4 d3 d2 d1 d0 z7 z6 z5 z4 z3 z2 z1 z0
|
||||
tinyLatchRegister writeNeg z7 z6 z5 z4 z3 z2 z1 z0
|
||||
|
||||
# 2 Bytes of memory
|
||||
def memory2 address select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux address select1 select0 select
|
||||
mux address load1 load0 load
|
||||
memoryRegister select0 load0 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memoryRegister select1 load1 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 4 Bytes of memory
|
||||
def memory4 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a1 select1 select0 select
|
||||
mux a1 load1 load0 load
|
||||
memory2 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory2 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 8 Bytes of memory
|
||||
def memory8 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a2 select1 select0 select
|
||||
mux a2 load1 load0 load
|
||||
memory4 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory4 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 16 Bytes of memory
|
||||
def memory16 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a3 select1 select0 select
|
||||
mux a3 load1 load0 load
|
||||
memory8 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory8 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 32 Bytes of memory
|
||||
def memory32 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a4 select1 select0 select
|
||||
mux a4 load1 load0 load
|
||||
memory16 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory16 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 64 Bytes of memory
|
||||
def memory64 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a5 select1 select0 select
|
||||
mux a5 load1 load0 load
|
||||
memory32 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory32 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 128 Bytes of memory
|
||||
def memory128 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a6 select1 select0 select
|
||||
mux a6 load1 load0 load
|
||||
memory64 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory64 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 256 Bytes of memory
|
||||
def memory256 a7 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a7 select1 select0 select
|
||||
mux a7 load1 load0 load
|
||||
memory128 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory128 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
def counterElement andIn andOut value :
|
||||
xor andIn value data
|
||||
flipFlop c data value
|
||||
and andIn value andOut
|
||||
|
||||
def counter2 andIn andOut v1 v0 :
|
||||
counterElement andIn x v0
|
||||
counterElement x andOut v1
|
||||
|
||||
def counter4 andIn andOut v3 v2 v1 v0 :
|
||||
counter2 andIn x v1 v0
|
||||
counter2 x andOut v3 v2
|
||||
|
||||
def counter8 andIn andOut v7 v6 v5 v4 v3 v2 v1 v0 :
|
||||
counter4 andIn x v3 v2 v1 v0
|
||||
counter4 x andOut v7 v6 v5 v4
|
||||
|
||||
def shift2 shiftIn q1 q0 :
|
||||
flipFlop c shiftIn q1
|
||||
flipFlop c q1 q0
|
||||
|
||||
def shift4 shiftIn q3 q2 q1 q0 :
|
||||
shift2 shiftIn q3 q2
|
||||
shift2 q2 q1 q0
|
||||
|
||||
def shift8 shiftIn q7 q6 q5 q4 q3 q2 q1 q0 :
|
||||
shift4 shiftIn q7 q6 q5 q4
|
||||
shift4 q4 q3 q2 q1 q0
|
||||
|
||||
def shiftOne q7 q6 q5 q4 q3 q2 q1 q0 :
|
||||
flipFlop c 1 q
|
||||
inv q shiftIn
|
||||
shift8 shiftIn q7 q6 q5 q4 q3 q2 q1 q0
|
||||
|
||||
def loop q7 q6 q5 q4 q3 q2 q1 q0 :
|
||||
flipFlop c 1 q
|
||||
inv q shiftIn
|
||||
shift8 shiftIn q7 q6 q5 q4 q3 q2 q1 q0
|
||||
buf q0 shiftIn
|
||||
|
||||
# 1-bit adder
|
||||
def mAdder add carryInNeg carryIn a b carryOutNeg carryOut sum :
|
||||
trans add b s
|
||||
zuseFullAdder carryInNeg carryIn a s carryOutNeg carryOut sum
|
||||
|
||||
# 2-bit adder
|
||||
def mAdder2 add carryInNeg carryIn a1 a0 b1 b0 carryOutNeg carryOut s1 s0 :
|
||||
mAdder add carryInNeg carryIn a0 b0 cOutNeg cOut s0
|
||||
mAdder add cOutNeg cOut a1 b1 carryOutNeg carryOut s1
|
||||
|
||||
# 4-bit adder
|
||||
def mAdder4 add carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s3 s2 s1 s0 :
|
||||
mAdder2 add carryInNeg carryIn a1 a0 b1 b0 cOutNeg cOut s1 s0
|
||||
mAdder2 add cOutNeg cOut a3 a2 b3 b2 carryOutNeg carryOut s3 s2
|
||||
|
||||
# 8-bit adder
|
||||
def mAdder8 add
|
||||
carryInNeg carryIn a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
mAdder4 add carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
cOutNeg cOut s3 s2 s1 s0
|
||||
mAdder4 add cOutNeg cOut a7 a6 a5 a4 b7 b6 b5 b4
|
||||
carryOutNeg carryOut s7 s6 s5 s4
|
||||
|
||||
# 16-bit adder
|
||||
def mAdder16 add
|
||||
carryInNeg carryIn a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s15 s14 s13 s12 s11 s10 s9 s8 s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
mAdder8 add carryInNeg carryIn a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
cOutNeg cOut s7 s6 s5 s4 s3 s2 s1 s0
|
||||
mAdder8 add cOutNeg cOut
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 b15 b14 b13 b12 b11 b10 b9 b8
|
||||
carryOutNeg carryOut s15 s14 s13 s12 s11 s10 s9 s8
|
||||
|
||||
def multiplier
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0 :
|
||||
mAdder16 b0 1 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
0 0 d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
mAdder16 b1 1 0
|
||||
d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
0 0 0 0 0 0 0 a7 a6 a5 a4 a3 a2 a1 a0 0
|
||||
0 0 e15 e14 e13 e12 e11 e10 e9 e8 e7 e6 e5 e4 e3 e2 e1 e0
|
||||
mAdder16 b2 1 0
|
||||
e15 e14 e13 e12 e11 e10 e9 e8 e7 e6 e5 e4 e3 e2 e1 e0
|
||||
0 0 0 0 0 0 a7 a6 a5 a4 a3 a2 a1 a0 0 0
|
||||
0 0 f15 f14 f13 f12 f11 f10 f9 f8 f7 f6 f5 f4 f3 f2 f1 f0
|
||||
mAdder16 b3 1 0
|
||||
f15 f14 f13 f12 f11 f10 f9 f8 f7 f6 f5 f4 f3 f2 f1 f0
|
||||
0 0 0 0 0 a7 a6 a5 a4 a3 a2 a1 a0 0 0 0
|
||||
0 0 g15 g14 g13 g12 g11 g10 g9 g8 g7 g6 g5 g4 g3 g2 g1 g0
|
||||
mAdder16 b4 1 0
|
||||
g15 g14 g13 g12 g11 g10 g9 g8 g7 g6 g5 g4 g3 g2 g1 g0
|
||||
0 0 0 0 a7 a6 a5 a4 a3 a2 a1 a0 0 0 0 0
|
||||
0 0 h15 h14 h13 h12 h11 h10 h9 h8 h7 h6 h5 h4 h3 h2 h1 h0
|
||||
mAdder16 b5 1 0
|
||||
h15 h14 h13 h12 h11 h10 h9 h8 h7 h6 h5 h4 h3 h2 h1 h0
|
||||
0 0 0 a7 a6 a5 a4 a3 a2 a1 a0 0 0 0 0 0
|
||||
0 0 i15 i14 i13 i12 i11 i10 i9 i8 i7 i6 i5 i4 i3 i2 i1 i0
|
||||
mAdder16 b6 1 0
|
||||
i15 i14 i13 i12 i11 i10 i9 i8 i7 i6 i5 i4 i3 i2 i1 i0
|
||||
0 0 a7 a6 a5 a4 a3 a2 a1 a0 0 0 0 0 0 0
|
||||
0 0 j15 j14 j13 j12 j11 j10 j9 j8 j7 j6 j5 j4 j3 j2 j1 j0
|
||||
mAdder16 b7 1 0
|
||||
j15 j14 j13 j12 j11 j10 j9 j8 j7 j6 j5 j4 j3 j2 j1 j0
|
||||
0 a7 a6 a5 a4 a3 a2 a1 a0 0 0 0 0 0 0 0
|
||||
0 0 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0
|
||||
|
||||
# 16-bit Partial Adder/Subtractor
|
||||
def xFullAdder16 subtract carryInNeg carryIn
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s15 s14 s13 s12 s11 s10 s9 s8 s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
xFullAdder8 subtract carryInNeg carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
cOutNeg cOut s7 s6 s5 s4 s3 s2 s1 s0
|
||||
xFullAdder8 subtract cOutNeg cOut
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 b15 b14 b13 b12 b11 b10 b9 b8
|
||||
carryOutNeg carryOut s15 s14 s13 s12 s11 s10 s9 s8
|
||||
|
||||
# 16-bit Adder/Subtractor
|
||||
def adderSubtractor16 subtract
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOut s15 s14 s13 s12 s11 s10 s9 s8 s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
inv subtract carryInNeg
|
||||
xFullAdder16 subtract carryInNeg subtract
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg cOut s15 s14 s13 s12 s11 s10 s9 s8 s7 s6 s5 s4 s3 s2 s1 s0
|
||||
xor cOut subtract carryOut
|
||||
|
||||
def signedMultiplier signed
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0 :
|
||||
and signed a7 negateA
|
||||
and signed b7 negateB
|
||||
adderSubtractor negateA 0 0 0 0 0 0 0 0
|
||||
a7 a6 a5 a4 a3 a2 a1 a0 0 c7 c6 c5 c4 c3 c2 c1 c0
|
||||
adderSubtractor negateB 0 0 0 0 0 0 0 0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0 0 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
multiplier
|
||||
c7 c6 c5 c4 c3 c2 c1 c0
|
||||
d7 d6 d5 d4 d3 d2 d1 d0
|
||||
q15 q14 q13 q12 q11 q10 q9 q8 q7 q6 q5 q4 q3 q2 q1 q0
|
||||
xor a7 b7 negateProduct
|
||||
and signed negateProduct negateQ
|
||||
adderSubtractor16 negateQ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
q15 q14 q13 q12 q11 q10 q9 q8 q7 q6 q5 q4 q3 q2 q1 q0
|
||||
0 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0
|
||||
|
||||
# 4-input OR gate
|
||||
def or4 i3 i2 i1 i0 o :
|
||||
or i3 i2 o
|
||||
or i1 i0 o
|
||||
|
||||
# 8-input OR gate
|
||||
def or8 i7 i6 i5 i4 i3 i2 i1 i0 o :
|
||||
or4 i7 i6 i5 i4 o
|
||||
or4 i3 i2 i1 i0 o
|
||||
|
||||
def multiplier2
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0 :
|
||||
|
||||
# 16-bit register made of flip flops
|
||||
flipFlop c d15 p15
|
||||
flipFlop c d14 p14
|
||||
flipFlop c d13 p13
|
||||
flipFlop c d12 p12
|
||||
flipFlop c d11 p11
|
||||
flipFlop c d10 p10
|
||||
flipFlop c d9 p9
|
||||
flipFlop c d8 p8
|
||||
flipFlop c d7 p7
|
||||
flipFlop c d6 p6
|
||||
flipFlop c d5 p5
|
||||
flipFlop c d4 p4
|
||||
flipFlop c d3 p3
|
||||
flipFlop c d2 p2
|
||||
flipFlop c d1 p1
|
||||
flipFlop c d0 p0
|
||||
|
||||
# Transmission gates and 8-bit adder
|
||||
trans8 loadB d7 d6 d5 d4 d3 d2 d1 d0 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
trans8 p0 a7 a6 a5 a4 a3 a2 a1 a0 z7 z6 z5 z4 z3 z2 z1 z0
|
||||
zuseAdder8 1 0 p15 p14 p13 p12 p11 p10 p9 p8 z7 z6 z5 z4 z3 z2 z1 z0
|
||||
0 s8 s7 s6 s5 s4 s3 s2 s1 s0
|
||||
trans16 tallyShift d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
s8 s7 s6 s5 s4 s3 s2 s1 s0 p7 p6 p5 p4 p3 p2 p1
|
||||
trans16 keepValue d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0
|
||||
|
||||
# State machine
|
||||
flipFlop c 1 boot
|
||||
inv boot loadB
|
||||
flipFlop c loadB state1
|
||||
flipFlop c state1 state2
|
||||
flipFlop c state2 state3
|
||||
flipFlop c state3 state4
|
||||
flipFlop c state4 state5
|
||||
flipFlop c state5 state6
|
||||
flipFlop c state6 state7
|
||||
flipFlop c state7 state8
|
||||
flipFlop c state8 keepValue
|
||||
or8 state1 state2 state3 state4 state5 state6 state7 state8 tallyShift
|
||||
buf keepValue keepValue
|
||||
|
||||
def signedMultiplier2 signed
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0 :
|
||||
and signed a7 negateA
|
||||
and signed b7 negateB
|
||||
adderSubtractor negateA 0 0 0 0 0 0 0 0
|
||||
a7 a6 a5 a4 a3 a2 a1 a0 0 c7 c6 c5 c4 c3 c2 c1 c0
|
||||
adderSubtractor negateB 0 0 0 0 0 0 0 0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0 0 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
multiplier2
|
||||
c7 c6 c5 c4 c3 c2 c1 c0
|
||||
d7 d6 d5 d4 d3 d2 d1 d0
|
||||
q15 q14 q13 q12 q11 q10 q9 q8 q7 q6 q5 q4 q3 q2 q1 q0
|
||||
xor a7 b7 negateProduct
|
||||
and signed negateProduct negateQ
|
||||
adderSubtractor16 negateQ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
q15 q14 q13 q12 q11 q10 q9 q8 q7 q6 q5 q4 q3 q2 q1 q0
|
||||
0 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0
|
||||
|
||||
# Divider (A = Dividend, B = Divisor, P = Quotient, Q = Remainder)
|
||||
def divider
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
divideByZeroError
|
||||
p7 p6 p5 p4 p3 p2 p1 p0
|
||||
q7 q6 q5 q4 q3 q2 q1 q0 :
|
||||
|
||||
# 16-bit register made of flip flops
|
||||
flipFlop c d15 q7
|
||||
flipFlop c d14 q6
|
||||
flipFlop c d13 q5
|
||||
flipFlop c d12 q4
|
||||
flipFlop c d11 q3
|
||||
flipFlop c d10 q2
|
||||
flipFlop c d9 q1
|
||||
flipFlop c d8 q0
|
||||
flipFlop c d7 p7
|
||||
flipFlop c d6 p6
|
||||
flipFlop c d5 p5
|
||||
flipFlop c d4 p4
|
||||
flipFlop c d3 p3
|
||||
flipFlop c d2 p2
|
||||
flipFlop c d1 p1
|
||||
flipFlop c d0 p0
|
||||
|
||||
# Transmission gates and 8-bit subtractor
|
||||
trans8 loadA d7 d6 d5 d4 d3 d2 d1 d0 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
trans16 positive d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
s7 s6 s5 s4 s3 s2 s1 s0 p6 p5 p4 p3 p2 p1 p0 1
|
||||
trans16 negative d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
q6 q5 q4 q3 q2 q1 q0 p7 p6 p5 p4 p3 p2 p1 p0 0
|
||||
trans16 keepValue d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
q7 q6 q5 q4 q3 q2 q1 q0 p7 p6 p5 p4 p3 p2 p1 p0
|
||||
adderSubtractor 1 q6 q5 q4 q3 q2 q1 q0 p7 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
0 s7 s6 s5 s4 s3 s2 s1 s0
|
||||
inv s7 s7Neg
|
||||
and shift s7 negative
|
||||
and shift s7Neg positive
|
||||
|
||||
# Divide-by-zero check
|
||||
or8 b7 b6 b5 b4 b3 b2 b1 b0 divideByZeroErrorNeg
|
||||
inv divideByZeroErrorNeg divideByZeroError
|
||||
|
||||
# State machine
|
||||
flipFlop c 1 boot
|
||||
inv boot bootNeg
|
||||
trans divideByZeroErrorNeg bootNeg loadA
|
||||
flipFlop c loadA state1
|
||||
flipFlop c state1 state2
|
||||
flipFlop c state2 state3
|
||||
flipFlop c state3 state4
|
||||
flipFlop c state4 state5
|
||||
flipFlop c state5 state6
|
||||
flipFlop c state6 state7
|
||||
flipFlop c state7 state8
|
||||
flipFlop c state8 keepValue
|
||||
or8 state1 state2 state3 state4 state5 state6 state7 state8 shift
|
||||
buf keepValue keepValue
|
||||
|
||||
run 1000 5 divider
|
||||
0 0 0 0 1 1 1 0
|
||||
0 0 0 0 0 0 1 1
|
||||
?
|
||||
? ? ? ? ? ? ? ?
|
||||
? ? ? ? ? ? ? ?
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
# EDAMAME Award
|
||||
# (Electronic Design Automation - Mechanical Abstract Machine Emulator)
|
||||
|
||||
Michael Birken
|
||||
US
|
||||
o__1 at hotmail dot com
|
||||
|
||||
## Judges' comments:
|
||||
|
||||
### To build
|
||||
|
||||
make birken
|
||||
|
||||
Try:
|
||||
|
||||
./birken < counter.tofu
|
||||
|
||||
What is TUFO? It's not a veggy friendly food, nor it is Verilog or
|
||||
VHDL. It is not even Pascal!
|
||||
|
||||
NOTE: On some systems, file(1) claims one of the .tofu files is Pascal
|
||||
source. :-)
|
||||
|
||||
It may not be the most readable hardware description language, but it is
|
||||
one of the easiest 55 page long manual to learn. :-)
|
||||
|
||||
For a small but non-trivial design, try implementing a
|
||||
[Linear Feedback Shift Register](http://en.wikipedia.org/wiki/LFSR)
|
||||
|
||||
And for those who are still confused:
|
||||
|
||||
> <http://en.wikipedia.org/wiki/Edamame>
|
||||
> <http://en.wikipedia.org/wiki/Tofu>
|
||||
|
||||
## Author's comments:
|
||||
|
||||
If man is capable of creating tofu hotdogs (simulated meat), then why
|
||||
not tofu circuitry (simulated circuits)? This program is my tribute to
|
||||
the early computer pioneers like Konrad Zuse. It's an educational tool
|
||||
designed to introduce students to digital circuit theory using
|
||||
technology that was considered state of the art in the 1940's! To
|
||||
enable you to fully understand the capabilities of this circuit
|
||||
simulator, I have included a 55 page manual (info.pdf) in the info
|
||||
portion of the entry submission.
|
||||
|
||||
The primary obfuscation is the data structure chosen for parsing the
|
||||
input file and for executing the simulation. Oh man... coding that
|
||||
data structure gave me such a bad headache. But, I figure, who needs
|
||||
more than a pair anyway? Subtle obfuscations abound. Bonus points go
|
||||
out the one who discovers the hidden program within the source.
|
||||
|
||||
Note that the shape of the source is a wave, not a waveform.
|
||||
Binary file not shown.
@@ -0,0 +1,72 @@
|
||||
# Buffer
|
||||
def buf input output :
|
||||
r input output 1 0
|
||||
|
||||
# Inverter
|
||||
def inv input output :
|
||||
r input output 0 1
|
||||
|
||||
# AND Gate
|
||||
def and i1 i0 o :
|
||||
r i0 z 1 0
|
||||
r i1 o z 0
|
||||
|
||||
# NAND Gate
|
||||
def nand i0 i1 o :
|
||||
r i0 1 0 o
|
||||
r i1 1 0 o
|
||||
|
||||
# OR Gate
|
||||
def or i0 i1 o :
|
||||
r i0 1 o 0
|
||||
r i1 1 o 0
|
||||
|
||||
# NOR Gate
|
||||
def nor i0 i1 o :
|
||||
r i0 1 0 z
|
||||
r i1 z 0 o
|
||||
|
||||
# XOR Gate
|
||||
def xor i0 i1 o :
|
||||
r i0 1 b a
|
||||
r i1 o a b
|
||||
|
||||
# XNOR Gate
|
||||
def xnor i0 i1 o :
|
||||
r i0 1 a b
|
||||
r i1 o a b
|
||||
|
||||
# Half Adder
|
||||
def halfAdder a b s1 s0 :
|
||||
and a b s1
|
||||
xor a b s0
|
||||
|
||||
# Full Adder
|
||||
def fullAdder carryIn a b carryOut sum :
|
||||
halfAdder a b s1 s0
|
||||
halfAdder s0 carryIn carry sum
|
||||
or s1 carry carryOut
|
||||
|
||||
# 2-bit Adder
|
||||
def adder2 carryIn a1 a0 b1 b0 carryOut s1 s0 :
|
||||
fullAdder carryIn a0 b0 carry s0
|
||||
fullAdder carry a1 b1 carryOut s1
|
||||
|
||||
# 4-bit Adder
|
||||
def adder4 carryIn a3 a2 a1 a0 b3 b2 b1 b0 carryOut s3 s2 s1 s0 :
|
||||
adder2 carryIn a1 a0 b1 b0 carry s1 s0
|
||||
adder2 carry a3 a2 b3 b2 carryOut s3 s2
|
||||
|
||||
# 8-bit Adder
|
||||
def adder8 carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
adder4 carryIn a3 a2 a1 a0 b3 b2 b1 b0 carry s3 s2 s1 s0
|
||||
adder4 carry a7 a6 a5 a4 b7 b6 b5 b4 carryOut s7 s6 s5 s4
|
||||
|
||||
# 57 + 142 = ?
|
||||
run 100 1 adder8 0
|
||||
0 0 1 1 1 0 0 1
|
||||
1 0 0 0 1 1 1 0
|
||||
? ? ? ? ? ? ? ? ?
|
||||
@@ -0,0 +1,293 @@
|
||||
# Four double-pole relay
|
||||
def r4 coil l3 nd3 nc3 l2 nd2 nc2 l1 nd1 nc1 l0 nd0 nc0 :
|
||||
r coil l3 nd3 nc3
|
||||
r coil l2 nd2 nc2
|
||||
r coil l1 nd1 nc1
|
||||
r coil l0 nd0 nc0
|
||||
|
||||
# Buffer
|
||||
def buf input output :
|
||||
r input output 1 0
|
||||
|
||||
# Inverter
|
||||
def inv input output :
|
||||
r input output 0 1
|
||||
|
||||
# AND Gate
|
||||
def and i1 i0 o :
|
||||
r i0 z 1 0
|
||||
r i1 o z 0
|
||||
|
||||
# NAND Gate
|
||||
def nand i0 i1 o :
|
||||
r i0 1 0 o
|
||||
r i1 1 0 o
|
||||
|
||||
# OR Gate
|
||||
def or i0 i1 o :
|
||||
r i0 1 o 0
|
||||
r i1 1 o 0
|
||||
|
||||
# NOR Gate
|
||||
def nor i0 i1 o :
|
||||
r i0 1 0 z
|
||||
r i1 z 0 o
|
||||
|
||||
# XOR Gate
|
||||
def xor i0 i1 o :
|
||||
r i0 1 b a
|
||||
r i1 o a b
|
||||
|
||||
# XNOR Gate
|
||||
def xnor i0 i1 o :
|
||||
r i0 1 a b
|
||||
r i1 o a b
|
||||
|
||||
# Half Adder
|
||||
def halfAdder a b s1 s0 :
|
||||
and a b s1
|
||||
xor a b s0
|
||||
|
||||
# Full Adder
|
||||
def fullAdder carryIn a b carryOut sum :
|
||||
halfAdder a b s1 s0
|
||||
halfAdder s0 carryIn carry sum
|
||||
or s1 carry carryOut
|
||||
|
||||
# 2-bit Adder
|
||||
def adder2 carryIn a1 a0 b1 b0 carryOut s1 s0 :
|
||||
fullAdder carryIn a0 b0 carry s0
|
||||
fullAdder carry a1 b1 carryOut s1
|
||||
|
||||
# 4-bit Adder
|
||||
def adder4 carryIn a3 a2 a1 a0 b3 b2 b1 b0 carryOut s3 s2 s1 s0 :
|
||||
adder2 carryIn a1 a0 b1 b0 carry s1 s0
|
||||
adder2 carry a3 a2 b3 b2 carryOut s3 s2
|
||||
|
||||
# 8-bit Adder
|
||||
def adder8 carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
adder4 carryIn a3 a2 a1 a0 b3 b2 b1 b0 carry s3 s2 s1 s0
|
||||
adder4 carry a7 a6 a5 a4 b7 b6 b5 b4 carryOut s7 s6 s5 s4
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry Full Adder
|
||||
def zuseFullAdder carryInNeg carryIn a b carryOutNeg carryOut sum :
|
||||
r4 a carryInNeg y z sum w x 1 v y carryIn u v
|
||||
r4 b carryOutNeg z y carryInNeg x w carryIn w x carryOut v u
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 2-bit Adder
|
||||
def zuseAdder2 carryInNeg carryIn a1 a0 b1 b0 carryOutNeg carryOut s1 s0 :
|
||||
zuseFullAdder carryInNeg carryIn a0 b0 cOutNeg cOut s0
|
||||
zuseFullAdder cOutNeg cOut a1 b1 carryOutNeg carryOut s1
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 4-bit Adder
|
||||
def zuseAdder4 carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s3 s2 s1 s0 :
|
||||
zuseAdder2 carryInNeg carryIn a1 a0 b1 b0 cOutNeg cOut s1 s0
|
||||
zuseAdder2 cOutNeg cOut a3 a2 b3 b2 carryOutNeg carryOut s3 s2
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 8-bit Adder
|
||||
def zuseAdder8 carryInNeg carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
zuseAdder4 carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0 cOutNeg cOut s3 s2 s1 s0
|
||||
zuseAdder4 cOutNeg cOut a7 a6 a5 a4 b7 b6 b5 b4
|
||||
carryOutNeg carryOut s7 s6 s5 s4
|
||||
|
||||
# 1-bit Partial Adder/Subtractor
|
||||
def xFullAdder subtract carryInNeg carryIn a b carryOutNeg carryOut sum :
|
||||
xor subtract b bNeg
|
||||
zuseFullAdder carryInNeg carryIn a bNeg carryOutNeg carryOut sum
|
||||
|
||||
# 2-bit Partial Adder/Subtractor
|
||||
def xFullAdder2 subtract carryInNeg carryIn
|
||||
a1 a0 b1 b0 carryOutNeg carryOut s1 s0 :
|
||||
xFullAdder subtract carryInNeg carryIn a0 b0 cOutNeg cOut s0
|
||||
xFullAdder subtract cOutNeg cOut a1 b1 carryOutNeg carryOut s1
|
||||
|
||||
# 4-bit Partial Adder/Subtractor
|
||||
def xFullAdder4 subtract carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s3 s2 s1 s0 :
|
||||
xFullAdder2 subtract carryInNeg carryIn a1 a0 b1 b0 cOutNeg cOut s1 s0
|
||||
xFullAdder2 subtract cOutNeg cOut a3 a2 b3 b2 carryOutNeg carryOut s3 s2
|
||||
|
||||
# 8-bit Partial Adder/Subtractor
|
||||
def xFullAdder8 subtract carryInNeg carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
xFullAdder4 subtract carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
cOutNeg cOut s3 s2 s1 s0
|
||||
xFullAdder4 subtract cOutNeg cOut a7 a6 a5 a4 b7 b6 b5 b4
|
||||
carryOutNeg carryOut s7 s6 s5 s4
|
||||
|
||||
# 8-bit Adder/Subtractor
|
||||
def adderSubtractor subtract
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
inv subtract carryInNeg
|
||||
xFullAdder8 subtract carryInNeg subtract
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg cOut s7 s6 s5 s4 s3 s2 s1 s0
|
||||
xor cOut subtract carryOut
|
||||
|
||||
# 2-to-1 Mux
|
||||
def mux a i1 i0 o :
|
||||
r a o i1 i0
|
||||
|
||||
# 4-to-1 Mux
|
||||
def mux4to1 a1 a0 i3 i2 i1 i0 o :
|
||||
mux a0 i1 i0 x
|
||||
mux a0 i3 i2 y
|
||||
mux a1 y x o
|
||||
|
||||
# 8-to-1 Mux
|
||||
def mux8to1 a2 a1 a0 i7 i6 i5 i4 i3 i2 i1 i0 o :
|
||||
mux4to1 a1 a0 i3 i2 i1 i0 x
|
||||
mux4to1 a1 a0 i7 i6 i5 i4 y
|
||||
mux a2 y x o
|
||||
|
||||
# 3-to-8 Decoder
|
||||
def decoder3to8 a2 a1 a0 o7 o6 o5 o4 o3 o2 o1 o0 :
|
||||
mux8to1 a2 a1 a0 o7 o6 o5 o4 o3 o2 o1 o0 1
|
||||
|
||||
def trans enabled a b :
|
||||
r enabled a b 0
|
||||
|
||||
# 2-bit transmission gate
|
||||
def trans2 enabled a1 a0 b1 b0 :
|
||||
trans enabled a1 b1
|
||||
trans enabled a0 b0
|
||||
|
||||
# 4-bit transmission gate
|
||||
def trans4 enabled a3 a2 a1 a0 b3 b2 b1 b0 :
|
||||
trans2 enabled a3 a2 b3 b2
|
||||
trans2 enabled a1 a0 b1 b0
|
||||
|
||||
# 8-bit transmission gate
|
||||
def trans8 enabled a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0 :
|
||||
trans4 enabled a7 a6 a5 a4 b7 b6 b5 b4
|
||||
trans4 enabled a3 a2 a1 a0 b3 b2 b1 b0
|
||||
|
||||
# 16-bit transmission gate
|
||||
def trans16 enabled
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 :
|
||||
trans8 enabled a15 a14 a13 a12 a11 a10 a9 a8 b15 b14 b13 b12 b11 b10 b9 b8
|
||||
trans8 enabled a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
|
||||
# Latch, stores when w = 1
|
||||
def latch w d q :
|
||||
mux w d q z
|
||||
buf z q
|
||||
|
||||
# Latch, stores when w = 0
|
||||
def latchNeg w d q :
|
||||
mux w q d z
|
||||
buf z q
|
||||
|
||||
# Flip flop, stores when w rises to 1, expresses new value when w drops to 0
|
||||
def flipFlop w d q :
|
||||
latch w d q2
|
||||
latchNeg w q2 q
|
||||
|
||||
def flipFlopRegister w d7 d6 d5 d4 d3 d2 d1 d0 q7 q6 q5 q4 q3 q2 q1 q0:
|
||||
flipFlop w d7 q7
|
||||
flipFlop w d6 q6
|
||||
flipFlop w d5 q5
|
||||
flipFlop w d4 q4
|
||||
flipFlop w d3 q3
|
||||
flipFlop w d2 q2
|
||||
flipFlop w d1 q1
|
||||
flipFlop w d0 q0
|
||||
|
||||
def latchRegister w d7 d6 d5 d4 d3 d2 d1 d0 q7 q6 q5 q4 q3 q2 q1 q0:
|
||||
latch w d7 q7
|
||||
latch w d6 q6
|
||||
latch w d5 q5
|
||||
latch w d4 q4
|
||||
latch w d3 q3
|
||||
latch w d2 q2
|
||||
latch w d1 q1
|
||||
latch w d0 q0
|
||||
|
||||
def tinyLatchRegister writeNeg d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
r d7 d7 writeNeg 0
|
||||
r d6 d6 writeNeg 0
|
||||
r d5 d5 writeNeg 0
|
||||
r d4 d4 writeNeg 0
|
||||
r d3 d3 writeNeg 0
|
||||
r d2 d2 writeNeg 0
|
||||
r d1 d1 writeNeg 0
|
||||
r d0 d0 writeNeg 0
|
||||
|
||||
def memoryRegister select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
inv load writeNeg
|
||||
inv writeNeg select
|
||||
trans8 select d7 d6 d5 d4 d3 d2 d1 d0 z7 z6 z5 z4 z3 z2 z1 z0
|
||||
tinyLatchRegister writeNeg z7 z6 z5 z4 z3 z2 z1 z0
|
||||
|
||||
# 2 Bytes of memory
|
||||
def memory2 address select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux address select1 select0 select
|
||||
mux address load1 load0 load
|
||||
memoryRegister select0 load0 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memoryRegister select1 load1 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 4 Bytes of memory
|
||||
def memory4 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a1 select1 select0 select
|
||||
mux a1 load1 load0 load
|
||||
memory2 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory2 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 8 Bytes of memory
|
||||
def memory8 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a2 select1 select0 select
|
||||
mux a2 load1 load0 load
|
||||
memory4 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory4 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 16 Bytes of memory
|
||||
def memory16 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a3 select1 select0 select
|
||||
mux a3 load1 load0 load
|
||||
memory8 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory8 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 32 Bytes of memory
|
||||
def memory32 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a4 select1 select0 select
|
||||
mux a4 load1 load0 load
|
||||
memory16 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory16 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 64 Bytes of memory
|
||||
def memory64 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a5 select1 select0 select
|
||||
mux a5 load1 load0 load
|
||||
memory32 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory32 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 128 Bytes of memory
|
||||
def memory128 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a6 select1 select0 select
|
||||
mux a6 load1 load0 load
|
||||
memory64 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory64 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 256 Bytes of memory
|
||||
def memory256 a7 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a7 select1 select0 select
|
||||
mux a7 load1 load0 load
|
||||
memory128 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory128 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
run 100 1 memory256 0 0 0 0 0 0 0 0 1 0 ? ? ? ? ? ? ? ?
|
||||
|
||||
|
||||
@@ -0,0 +1,414 @@
|
||||
# Four double-pole relay
|
||||
def r4 coil l3 nd3 nc3 l2 nd2 nc2 l1 nd1 nc1 l0 nd0 nc0 :
|
||||
r coil l3 nd3 nc3
|
||||
r coil l2 nd2 nc2
|
||||
r coil l1 nd1 nc1
|
||||
r coil l0 nd0 nc0
|
||||
|
||||
# Buffer
|
||||
def buf input output :
|
||||
r input output 1 0
|
||||
|
||||
# Inverter
|
||||
def inv input output :
|
||||
r input output 0 1
|
||||
|
||||
# AND Gate
|
||||
def and i1 i0 o :
|
||||
r i0 z 1 0
|
||||
r i1 o z 0
|
||||
|
||||
# NAND Gate
|
||||
def nand i0 i1 o :
|
||||
r i0 1 0 o
|
||||
r i1 1 0 o
|
||||
|
||||
# OR Gate
|
||||
def or i0 i1 o :
|
||||
r i0 1 o 0
|
||||
r i1 1 o 0
|
||||
|
||||
# NOR Gate
|
||||
def nor i0 i1 o :
|
||||
r i0 1 0 z
|
||||
r i1 z 0 o
|
||||
|
||||
# XOR Gate
|
||||
def xor i0 i1 o :
|
||||
r i0 1 b a
|
||||
r i1 o a b
|
||||
|
||||
# XNOR Gate
|
||||
def xnor i0 i1 o :
|
||||
r i0 1 a b
|
||||
r i1 o a b
|
||||
|
||||
# Half Adder
|
||||
def halfAdder a b s1 s0 :
|
||||
and a b s1
|
||||
xor a b s0
|
||||
|
||||
# Full Adder
|
||||
def fullAdder carryIn a b carryOut sum :
|
||||
halfAdder a b s1 s0
|
||||
halfAdder s0 carryIn carry sum
|
||||
or s1 carry carryOut
|
||||
|
||||
# 2-bit Adder
|
||||
def adder2 carryIn a1 a0 b1 b0 carryOut s1 s0 :
|
||||
fullAdder carryIn a0 b0 carry s0
|
||||
fullAdder carry a1 b1 carryOut s1
|
||||
|
||||
# 4-bit Adder
|
||||
def adder4 carryIn a3 a2 a1 a0 b3 b2 b1 b0 carryOut s3 s2 s1 s0 :
|
||||
adder2 carryIn a1 a0 b1 b0 carry s1 s0
|
||||
adder2 carry a3 a2 b3 b2 carryOut s3 s2
|
||||
|
||||
# 8-bit Adder
|
||||
def adder8 carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
adder4 carryIn a3 a2 a1 a0 b3 b2 b1 b0 carry s3 s2 s1 s0
|
||||
adder4 carry a7 a6 a5 a4 b7 b6 b5 b4 carryOut s7 s6 s5 s4
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry Full Adder
|
||||
def zuseFullAdder carryInNeg carryIn a b carryOutNeg carryOut sum :
|
||||
r4 a carryInNeg y z sum w x 1 v y carryIn u v
|
||||
r4 b carryOutNeg z y carryInNeg x w carryIn w x carryOut v u
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 2-bit Adder
|
||||
def zuseAdder2 carryInNeg carryIn a1 a0 b1 b0 carryOutNeg carryOut s1 s0 :
|
||||
zuseFullAdder carryInNeg carryIn a0 b0 cOutNeg cOut s0
|
||||
zuseFullAdder cOutNeg cOut a1 b1 carryOutNeg carryOut s1
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 4-bit Adder
|
||||
def zuseAdder4 carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s3 s2 s1 s0 :
|
||||
zuseAdder2 carryInNeg carryIn a1 a0 b1 b0 cOutNeg cOut s1 s0
|
||||
zuseAdder2 cOutNeg cOut a3 a2 b3 b2 carryOutNeg carryOut s3 s2
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 8-bit Adder
|
||||
def zuseAdder8 carryInNeg carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
zuseAdder4 carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0 cOutNeg cOut s3 s2 s1 s0
|
||||
zuseAdder4 cOutNeg cOut a7 a6 a5 a4 b7 b6 b5 b4
|
||||
carryOutNeg carryOut s7 s6 s5 s4
|
||||
|
||||
# 1-bit Partial Adder/Subtractor
|
||||
def xFullAdder subtract carryInNeg carryIn a b carryOutNeg carryOut sum :
|
||||
xor subtract b bNeg
|
||||
zuseFullAdder carryInNeg carryIn a bNeg carryOutNeg carryOut sum
|
||||
|
||||
# 2-bit Partial Adder/Subtractor
|
||||
def xFullAdder2 subtract carryInNeg carryIn
|
||||
a1 a0 b1 b0 carryOutNeg carryOut s1 s0 :
|
||||
xFullAdder subtract carryInNeg carryIn a0 b0 cOutNeg cOut s0
|
||||
xFullAdder subtract cOutNeg cOut a1 b1 carryOutNeg carryOut s1
|
||||
|
||||
# 4-bit Partial Adder/Subtractor
|
||||
def xFullAdder4 subtract carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s3 s2 s1 s0 :
|
||||
xFullAdder2 subtract carryInNeg carryIn a1 a0 b1 b0 cOutNeg cOut s1 s0
|
||||
xFullAdder2 subtract cOutNeg cOut a3 a2 b3 b2 carryOutNeg carryOut s3 s2
|
||||
|
||||
# 8-bit Partial Adder/Subtractor
|
||||
def xFullAdder8 subtract carryInNeg carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
xFullAdder4 subtract carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
cOutNeg cOut s3 s2 s1 s0
|
||||
xFullAdder4 subtract cOutNeg cOut a7 a6 a5 a4 b7 b6 b5 b4
|
||||
carryOutNeg carryOut s7 s6 s5 s4
|
||||
|
||||
# 8-bit Adder/Subtractor
|
||||
def adderSubtractor subtract
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
inv subtract carryInNeg
|
||||
xFullAdder8 subtract carryInNeg subtract
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg cOut s7 s6 s5 s4 s3 s2 s1 s0
|
||||
xor cOut subtract carryOut
|
||||
|
||||
# 2-to-1 Mux
|
||||
def mux a i1 i0 o :
|
||||
r a o i1 i0
|
||||
|
||||
# 4-to-1 Mux
|
||||
def mux4to1 a1 a0 i3 i2 i1 i0 o :
|
||||
mux a0 i1 i0 x
|
||||
mux a0 i3 i2 y
|
||||
mux a1 y x o
|
||||
|
||||
# 8-to-1 Mux
|
||||
def mux8to1 a2 a1 a0 i7 i6 i5 i4 i3 i2 i1 i0 o :
|
||||
mux4to1 a1 a0 i3 i2 i1 i0 x
|
||||
mux4to1 a1 a0 i7 i6 i5 i4 y
|
||||
mux a2 y x o
|
||||
|
||||
# 3-to-8 Decoder
|
||||
def decoder3to8 a2 a1 a0 o7 o6 o5 o4 o3 o2 o1 o0 :
|
||||
mux8to1 a2 a1 a0 o7 o6 o5 o4 o3 o2 o1 o0 1
|
||||
|
||||
def trans enabled a b :
|
||||
r enabled a b 0
|
||||
|
||||
# 2-bit transmission gate
|
||||
def trans2 enabled a1 a0 b1 b0 :
|
||||
trans enabled a1 b1
|
||||
trans enabled a0 b0
|
||||
|
||||
# 4-bit transmission gate
|
||||
def trans4 enabled a3 a2 a1 a0 b3 b2 b1 b0 :
|
||||
trans2 enabled a3 a2 b3 b2
|
||||
trans2 enabled a1 a0 b1 b0
|
||||
|
||||
# 8-bit transmission gate
|
||||
def trans8 enabled a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0 :
|
||||
trans4 enabled a7 a6 a5 a4 b7 b6 b5 b4
|
||||
trans4 enabled a3 a2 a1 a0 b3 b2 b1 b0
|
||||
|
||||
# 16-bit transmission gate
|
||||
def trans16 enabled
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 :
|
||||
trans8 enabled a15 a14 a13 a12 a11 a10 a9 a8 b15 b14 b13 b12 b11 b10 b9 b8
|
||||
trans8 enabled a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
|
||||
# Latch, stores when w = 1
|
||||
def latch w d q :
|
||||
mux w d q z
|
||||
buf z q
|
||||
|
||||
# Latch, stores when w = 0
|
||||
def latchNeg w d q :
|
||||
mux w q d z
|
||||
buf z q
|
||||
|
||||
# Flip flop, stores when w rises to 1, expresses new value when w drops to 0
|
||||
def flipFlop w d q :
|
||||
latch w d q2
|
||||
latchNeg w q2 q
|
||||
|
||||
def flipFlopRegister w d7 d6 d5 d4 d3 d2 d1 d0 q7 q6 q5 q4 q3 q2 q1 q0:
|
||||
flipFlop w d7 q7
|
||||
flipFlop w d6 q6
|
||||
flipFlop w d5 q5
|
||||
flipFlop w d4 q4
|
||||
flipFlop w d3 q3
|
||||
flipFlop w d2 q2
|
||||
flipFlop w d1 q1
|
||||
flipFlop w d0 q0
|
||||
|
||||
def latchRegister w d7 d6 d5 d4 d3 d2 d1 d0 q7 q6 q5 q4 q3 q2 q1 q0:
|
||||
latch w d7 q7
|
||||
latch w d6 q6
|
||||
latch w d5 q5
|
||||
latch w d4 q4
|
||||
latch w d3 q3
|
||||
latch w d2 q2
|
||||
latch w d1 q1
|
||||
latch w d0 q0
|
||||
|
||||
def tinyLatchRegister writeNeg d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
r d7 d7 writeNeg 0
|
||||
r d6 d6 writeNeg 0
|
||||
r d5 d5 writeNeg 0
|
||||
r d4 d4 writeNeg 0
|
||||
r d3 d3 writeNeg 0
|
||||
r d2 d2 writeNeg 0
|
||||
r d1 d1 writeNeg 0
|
||||
r d0 d0 writeNeg 0
|
||||
|
||||
def memoryRegister select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
inv load writeNeg
|
||||
inv writeNeg select
|
||||
trans8 select d7 d6 d5 d4 d3 d2 d1 d0 z7 z6 z5 z4 z3 z2 z1 z0
|
||||
tinyLatchRegister writeNeg z7 z6 z5 z4 z3 z2 z1 z0
|
||||
|
||||
# 2 Bytes of memory
|
||||
def memory2 address select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux address select1 select0 select
|
||||
mux address load1 load0 load
|
||||
memoryRegister select0 load0 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memoryRegister select1 load1 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 4 Bytes of memory
|
||||
def memory4 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a1 select1 select0 select
|
||||
mux a1 load1 load0 load
|
||||
memory2 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory2 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 8 Bytes of memory
|
||||
def memory8 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a2 select1 select0 select
|
||||
mux a2 load1 load0 load
|
||||
memory4 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory4 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 16 Bytes of memory
|
||||
def memory16 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a3 select1 select0 select
|
||||
mux a3 load1 load0 load
|
||||
memory8 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory8 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 32 Bytes of memory
|
||||
def memory32 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a4 select1 select0 select
|
||||
mux a4 load1 load0 load
|
||||
memory16 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory16 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 64 Bytes of memory
|
||||
def memory64 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a5 select1 select0 select
|
||||
mux a5 load1 load0 load
|
||||
memory32 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory32 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 128 Bytes of memory
|
||||
def memory128 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a6 select1 select0 select
|
||||
mux a6 load1 load0 load
|
||||
memory64 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory64 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 256 Bytes of memory
|
||||
def memory256 a7 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a7 select1 select0 select
|
||||
mux a7 load1 load0 load
|
||||
memory128 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory128 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
def counterElement andIn andOut value :
|
||||
xor andIn value data
|
||||
flipFlop c data value
|
||||
and andIn value andOut
|
||||
|
||||
def counter2 andIn andOut v1 v0 :
|
||||
counterElement andIn x v0
|
||||
counterElement x andOut v1
|
||||
|
||||
def counter4 andIn andOut v3 v2 v1 v0 :
|
||||
counter2 andIn x v1 v0
|
||||
counter2 x andOut v3 v2
|
||||
|
||||
def counter8 andIn andOut v7 v6 v5 v4 v3 v2 v1 v0 :
|
||||
counter4 andIn x v3 v2 v1 v0
|
||||
counter4 x andOut v7 v6 v5 v4
|
||||
|
||||
def shift2 shiftIn q1 q0 :
|
||||
flipFlop c shiftIn q1
|
||||
flipFlop c q1 q0
|
||||
|
||||
def shift4 shiftIn q3 q2 q1 q0 :
|
||||
shift2 shiftIn q3 q2
|
||||
shift2 q2 q1 q0
|
||||
|
||||
def shift8 shiftIn q7 q6 q5 q4 q3 q2 q1 q0 :
|
||||
shift4 shiftIn q7 q6 q5 q4
|
||||
shift4 q4 q3 q2 q1 q0
|
||||
|
||||
def shiftOne q7 q6 q5 q4 q3 q2 q1 q0 :
|
||||
flipFlop c 1 q
|
||||
inv q shiftIn
|
||||
shift8 shiftIn q7 q6 q5 q4 q3 q2 q1 q0
|
||||
|
||||
def loop q7 q6 q5 q4 q3 q2 q1 q0 :
|
||||
flipFlop c 1 q
|
||||
inv q shiftIn
|
||||
shift8 shiftIn q7 q6 q5 q4 q3 q2 q1 q0
|
||||
buf q0 shiftIn
|
||||
|
||||
# 1-bit adder
|
||||
def mAdder add carryInNeg carryIn a b carryOutNeg carryOut sum :
|
||||
trans add b s
|
||||
zuseFullAdder carryInNeg carryIn a s carryOutNeg carryOut sum
|
||||
|
||||
# 2-bit adder
|
||||
def mAdder2 add carryInNeg carryIn a1 a0 b1 b0 carryOutNeg carryOut s1 s0 :
|
||||
mAdder add carryInNeg carryIn a0 b0 cOutNeg cOut s0
|
||||
mAdder add cOutNeg cOut a1 b1 carryOutNeg carryOut s1
|
||||
|
||||
# 4-bit adder
|
||||
def mAdder4 add carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s3 s2 s1 s0 :
|
||||
mAdder2 add carryInNeg carryIn a1 a0 b1 b0 cOutNeg cOut s1 s0
|
||||
mAdder2 add cOutNeg cOut a3 a2 b3 b2 carryOutNeg carryOut s3 s2
|
||||
|
||||
# 8-bit adder
|
||||
def mAdder8 add
|
||||
carryInNeg carryIn a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
mAdder4 add carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
cOutNeg cOut s3 s2 s1 s0
|
||||
mAdder4 add cOutNeg cOut a7 a6 a5 a4 b7 b6 b5 b4
|
||||
carryOutNeg carryOut s7 s6 s5 s4
|
||||
|
||||
# 16-bit adder
|
||||
def mAdder16 add
|
||||
carryInNeg carryIn a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s15 s14 s13 s12 s11 s10 s9 s8 s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
mAdder8 add carryInNeg carryIn a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
cOutNeg cOut s7 s6 s5 s4 s3 s2 s1 s0
|
||||
mAdder8 add cOutNeg cOut
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 b15 b14 b13 b12 b11 b10 b9 b8
|
||||
carryOutNeg carryOut s15 s14 s13 s12 s11 s10 s9 s8
|
||||
|
||||
def multiplier
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0 :
|
||||
mAdder16 b0 1 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
0 0 d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
mAdder16 b1 1 0
|
||||
d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
0 0 0 0 0 0 0 a7 a6 a5 a4 a3 a2 a1 a0 0
|
||||
0 0 e15 e14 e13 e12 e11 e10 e9 e8 e7 e6 e5 e4 e3 e2 e1 e0
|
||||
mAdder16 b2 1 0
|
||||
e15 e14 e13 e12 e11 e10 e9 e8 e7 e6 e5 e4 e3 e2 e1 e0
|
||||
0 0 0 0 0 0 a7 a6 a5 a4 a3 a2 a1 a0 0 0
|
||||
0 0 f15 f14 f13 f12 f11 f10 f9 f8 f7 f6 f5 f4 f3 f2 f1 f0
|
||||
mAdder16 b3 1 0
|
||||
f15 f14 f13 f12 f11 f10 f9 f8 f7 f6 f5 f4 f3 f2 f1 f0
|
||||
0 0 0 0 0 a7 a6 a5 a4 a3 a2 a1 a0 0 0 0
|
||||
0 0 g15 g14 g13 g12 g11 g10 g9 g8 g7 g6 g5 g4 g3 g2 g1 g0
|
||||
mAdder16 b4 1 0
|
||||
g15 g14 g13 g12 g11 g10 g9 g8 g7 g6 g5 g4 g3 g2 g1 g0
|
||||
0 0 0 0 a7 a6 a5 a4 a3 a2 a1 a0 0 0 0 0
|
||||
0 0 h15 h14 h13 h12 h11 h10 h9 h8 h7 h6 h5 h4 h3 h2 h1 h0
|
||||
mAdder16 b5 1 0
|
||||
h15 h14 h13 h12 h11 h10 h9 h8 h7 h6 h5 h4 h3 h2 h1 h0
|
||||
0 0 0 a7 a6 a5 a4 a3 a2 a1 a0 0 0 0 0 0
|
||||
0 0 i15 i14 i13 i12 i11 i10 i9 i8 i7 i6 i5 i4 i3 i2 i1 i0
|
||||
mAdder16 b6 1 0
|
||||
i15 i14 i13 i12 i11 i10 i9 i8 i7 i6 i5 i4 i3 i2 i1 i0
|
||||
0 0 a7 a6 a5 a4 a3 a2 a1 a0 0 0 0 0 0 0
|
||||
0 0 j15 j14 j13 j12 j11 j10 j9 j8 j7 j6 j5 j4 j3 j2 j1 j0
|
||||
mAdder16 b7 1 0
|
||||
j15 j14 j13 j12 j11 j10 j9 j8 j7 j6 j5 j4 j3 j2 j1 j0
|
||||
0 a7 a6 a5 a4 a3 a2 a1 a0 0 0 0 0 0 0 0
|
||||
0 0 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0
|
||||
|
||||
# 100 x 200 = 20,000
|
||||
run 100 1 multiplier
|
||||
0 1 1 0 0 1 0 0
|
||||
1 1 0 0 1 0 0 0
|
||||
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,516 @@
|
||||
# Four double-pole relay
|
||||
def r4 coil l3 nd3 nc3 l2 nd2 nc2 l1 nd1 nc1 l0 nd0 nc0 :
|
||||
r coil l3 nd3 nc3
|
||||
r coil l2 nd2 nc2
|
||||
r coil l1 nd1 nc1
|
||||
r coil l0 nd0 nc0
|
||||
|
||||
# Buffer
|
||||
def buf input output :
|
||||
r input output 1 0
|
||||
|
||||
# Inverter
|
||||
def inv input output :
|
||||
r input output 0 1
|
||||
|
||||
# AND Gate
|
||||
def and i1 i0 o :
|
||||
r i0 z 1 0
|
||||
r i1 o z 0
|
||||
|
||||
# NAND Gate
|
||||
def nand i0 i1 o :
|
||||
r i0 1 0 o
|
||||
r i1 1 0 o
|
||||
|
||||
# OR Gate
|
||||
def or i0 i1 o :
|
||||
r i0 1 o 0
|
||||
r i1 1 o 0
|
||||
|
||||
# NOR Gate
|
||||
def nor i0 i1 o :
|
||||
r i0 1 0 z
|
||||
r i1 z 0 o
|
||||
|
||||
# XOR Gate
|
||||
def xor i0 i1 o :
|
||||
r i0 1 b a
|
||||
r i1 o a b
|
||||
|
||||
# XNOR Gate
|
||||
def xnor i0 i1 o :
|
||||
r i0 1 a b
|
||||
r i1 o a b
|
||||
|
||||
# Half Adder
|
||||
def halfAdder a b s1 s0 :
|
||||
and a b s1
|
||||
xor a b s0
|
||||
|
||||
# Full Adder
|
||||
def fullAdder carryIn a b carryOut sum :
|
||||
halfAdder a b s1 s0
|
||||
halfAdder s0 carryIn carry sum
|
||||
or s1 carry carryOut
|
||||
|
||||
# 2-bit Adder
|
||||
def adder2 carryIn a1 a0 b1 b0 carryOut s1 s0 :
|
||||
fullAdder carryIn a0 b0 carry s0
|
||||
fullAdder carry a1 b1 carryOut s1
|
||||
|
||||
# 4-bit Adder
|
||||
def adder4 carryIn a3 a2 a1 a0 b3 b2 b1 b0 carryOut s3 s2 s1 s0 :
|
||||
adder2 carryIn a1 a0 b1 b0 carry s1 s0
|
||||
adder2 carry a3 a2 b3 b2 carryOut s3 s2
|
||||
|
||||
# 8-bit Adder
|
||||
def adder8 carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
adder4 carryIn a3 a2 a1 a0 b3 b2 b1 b0 carry s3 s2 s1 s0
|
||||
adder4 carry a7 a6 a5 a4 b7 b6 b5 b4 carryOut s7 s6 s5 s4
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry Full Adder
|
||||
def zuseFullAdder carryInNeg carryIn a b carryOutNeg carryOut sum :
|
||||
r4 a carryInNeg y z sum w x 1 v y carryIn u v
|
||||
r4 b carryOutNeg z y carryInNeg x w carryIn w x carryOut v u
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 2-bit Adder
|
||||
def zuseAdder2 carryInNeg carryIn a1 a0 b1 b0 carryOutNeg carryOut s1 s0 :
|
||||
zuseFullAdder carryInNeg carryIn a0 b0 cOutNeg cOut s0
|
||||
zuseFullAdder cOutNeg cOut a1 b1 carryOutNeg carryOut s1
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 4-bit Adder
|
||||
def zuseAdder4 carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s3 s2 s1 s0 :
|
||||
zuseAdder2 carryInNeg carryIn a1 a0 b1 b0 cOutNeg cOut s1 s0
|
||||
zuseAdder2 cOutNeg cOut a3 a2 b3 b2 carryOutNeg carryOut s3 s2
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 8-bit Adder
|
||||
def zuseAdder8 carryInNeg carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
zuseAdder4 carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0 cOutNeg cOut s3 s2 s1 s0
|
||||
zuseAdder4 cOutNeg cOut a7 a6 a5 a4 b7 b6 b5 b4
|
||||
carryOutNeg carryOut s7 s6 s5 s4
|
||||
|
||||
# 1-bit Partial Adder/Subtractor
|
||||
def xFullAdder subtract carryInNeg carryIn a b carryOutNeg carryOut sum :
|
||||
xor subtract b bNeg
|
||||
zuseFullAdder carryInNeg carryIn a bNeg carryOutNeg carryOut sum
|
||||
|
||||
# 2-bit Partial Adder/Subtractor
|
||||
def xFullAdder2 subtract carryInNeg carryIn
|
||||
a1 a0 b1 b0 carryOutNeg carryOut s1 s0 :
|
||||
xFullAdder subtract carryInNeg carryIn a0 b0 cOutNeg cOut s0
|
||||
xFullAdder subtract cOutNeg cOut a1 b1 carryOutNeg carryOut s1
|
||||
|
||||
# 4-bit Partial Adder/Subtractor
|
||||
def xFullAdder4 subtract carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s3 s2 s1 s0 :
|
||||
xFullAdder2 subtract carryInNeg carryIn a1 a0 b1 b0 cOutNeg cOut s1 s0
|
||||
xFullAdder2 subtract cOutNeg cOut a3 a2 b3 b2 carryOutNeg carryOut s3 s2
|
||||
|
||||
# 8-bit Partial Adder/Subtractor
|
||||
def xFullAdder8 subtract carryInNeg carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
xFullAdder4 subtract carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
cOutNeg cOut s3 s2 s1 s0
|
||||
xFullAdder4 subtract cOutNeg cOut a7 a6 a5 a4 b7 b6 b5 b4
|
||||
carryOutNeg carryOut s7 s6 s5 s4
|
||||
|
||||
# 8-bit Adder/Subtractor
|
||||
def adderSubtractor subtract
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
inv subtract carryInNeg
|
||||
xFullAdder8 subtract carryInNeg subtract
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg cOut s7 s6 s5 s4 s3 s2 s1 s0
|
||||
xor cOut subtract carryOut
|
||||
|
||||
# 2-to-1 Mux
|
||||
def mux a i1 i0 o :
|
||||
r a o i1 i0
|
||||
|
||||
# 4-to-1 Mux
|
||||
def mux4to1 a1 a0 i3 i2 i1 i0 o :
|
||||
mux a0 i1 i0 x
|
||||
mux a0 i3 i2 y
|
||||
mux a1 y x o
|
||||
|
||||
# 8-to-1 Mux
|
||||
def mux8to1 a2 a1 a0 i7 i6 i5 i4 i3 i2 i1 i0 o :
|
||||
mux4to1 a1 a0 i3 i2 i1 i0 x
|
||||
mux4to1 a1 a0 i7 i6 i5 i4 y
|
||||
mux a2 y x o
|
||||
|
||||
# 3-to-8 Decoder
|
||||
def decoder3to8 a2 a1 a0 o7 o6 o5 o4 o3 o2 o1 o0 :
|
||||
mux8to1 a2 a1 a0 o7 o6 o5 o4 o3 o2 o1 o0 1
|
||||
|
||||
def trans enabled a b :
|
||||
r enabled a b 0
|
||||
|
||||
# 2-bit transmission gate
|
||||
def trans2 enabled a1 a0 b1 b0 :
|
||||
trans enabled a1 b1
|
||||
trans enabled a0 b0
|
||||
|
||||
# 4-bit transmission gate
|
||||
def trans4 enabled a3 a2 a1 a0 b3 b2 b1 b0 :
|
||||
trans2 enabled a3 a2 b3 b2
|
||||
trans2 enabled a1 a0 b1 b0
|
||||
|
||||
# 8-bit transmission gate
|
||||
def trans8 enabled a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0 :
|
||||
trans4 enabled a7 a6 a5 a4 b7 b6 b5 b4
|
||||
trans4 enabled a3 a2 a1 a0 b3 b2 b1 b0
|
||||
|
||||
# 16-bit transmission gate
|
||||
def trans16 enabled
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 :
|
||||
trans8 enabled a15 a14 a13 a12 a11 a10 a9 a8 b15 b14 b13 b12 b11 b10 b9 b8
|
||||
trans8 enabled a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
|
||||
# Latch, stores when w = 1
|
||||
def latch w d q :
|
||||
mux w d q z
|
||||
buf z q
|
||||
|
||||
# Latch, stores when w = 0
|
||||
def latchNeg w d q :
|
||||
mux w q d z
|
||||
buf z q
|
||||
|
||||
# Flip flop, stores when w rises to 1, expresses new value when w drops to 0
|
||||
def flipFlop w d q :
|
||||
latch w d q2
|
||||
latchNeg w q2 q
|
||||
|
||||
def flipFlopRegister w d7 d6 d5 d4 d3 d2 d1 d0 q7 q6 q5 q4 q3 q2 q1 q0:
|
||||
flipFlop w d7 q7
|
||||
flipFlop w d6 q6
|
||||
flipFlop w d5 q5
|
||||
flipFlop w d4 q4
|
||||
flipFlop w d3 q3
|
||||
flipFlop w d2 q2
|
||||
flipFlop w d1 q1
|
||||
flipFlop w d0 q0
|
||||
|
||||
def latchRegister w d7 d6 d5 d4 d3 d2 d1 d0 q7 q6 q5 q4 q3 q2 q1 q0:
|
||||
latch w d7 q7
|
||||
latch w d6 q6
|
||||
latch w d5 q5
|
||||
latch w d4 q4
|
||||
latch w d3 q3
|
||||
latch w d2 q2
|
||||
latch w d1 q1
|
||||
latch w d0 q0
|
||||
|
||||
def tinyLatchRegister writeNeg d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
r d7 d7 writeNeg 0
|
||||
r d6 d6 writeNeg 0
|
||||
r d5 d5 writeNeg 0
|
||||
r d4 d4 writeNeg 0
|
||||
r d3 d3 writeNeg 0
|
||||
r d2 d2 writeNeg 0
|
||||
r d1 d1 writeNeg 0
|
||||
r d0 d0 writeNeg 0
|
||||
|
||||
def memoryRegister select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
inv load writeNeg
|
||||
inv writeNeg select
|
||||
trans8 select d7 d6 d5 d4 d3 d2 d1 d0 z7 z6 z5 z4 z3 z2 z1 z0
|
||||
tinyLatchRegister writeNeg z7 z6 z5 z4 z3 z2 z1 z0
|
||||
|
||||
# 2 Bytes of memory
|
||||
def memory2 address select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux address select1 select0 select
|
||||
mux address load1 load0 load
|
||||
memoryRegister select0 load0 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memoryRegister select1 load1 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 4 Bytes of memory
|
||||
def memory4 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a1 select1 select0 select
|
||||
mux a1 load1 load0 load
|
||||
memory2 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory2 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 8 Bytes of memory
|
||||
def memory8 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a2 select1 select0 select
|
||||
mux a2 load1 load0 load
|
||||
memory4 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory4 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 16 Bytes of memory
|
||||
def memory16 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a3 select1 select0 select
|
||||
mux a3 load1 load0 load
|
||||
memory8 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory8 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 32 Bytes of memory
|
||||
def memory32 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a4 select1 select0 select
|
||||
mux a4 load1 load0 load
|
||||
memory16 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory16 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 64 Bytes of memory
|
||||
def memory64 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a5 select1 select0 select
|
||||
mux a5 load1 load0 load
|
||||
memory32 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory32 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 128 Bytes of memory
|
||||
def memory128 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a6 select1 select0 select
|
||||
mux a6 load1 load0 load
|
||||
memory64 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory64 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 256 Bytes of memory
|
||||
def memory256 a7 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a7 select1 select0 select
|
||||
mux a7 load1 load0 load
|
||||
memory128 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory128 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
def counterElement andIn andOut value :
|
||||
xor andIn value data
|
||||
flipFlop c data value
|
||||
and andIn value andOut
|
||||
|
||||
def counter2 andIn andOut v1 v0 :
|
||||
counterElement andIn x v0
|
||||
counterElement x andOut v1
|
||||
|
||||
def counter4 andIn andOut v3 v2 v1 v0 :
|
||||
counter2 andIn x v1 v0
|
||||
counter2 x andOut v3 v2
|
||||
|
||||
def counter8 andIn andOut v7 v6 v5 v4 v3 v2 v1 v0 :
|
||||
counter4 andIn x v3 v2 v1 v0
|
||||
counter4 x andOut v7 v6 v5 v4
|
||||
|
||||
def shift2 shiftIn q1 q0 :
|
||||
flipFlop c shiftIn q1
|
||||
flipFlop c q1 q0
|
||||
|
||||
def shift4 shiftIn q3 q2 q1 q0 :
|
||||
shift2 shiftIn q3 q2
|
||||
shift2 q2 q1 q0
|
||||
|
||||
def shift8 shiftIn q7 q6 q5 q4 q3 q2 q1 q0 :
|
||||
shift4 shiftIn q7 q6 q5 q4
|
||||
shift4 q4 q3 q2 q1 q0
|
||||
|
||||
def shiftOne q7 q6 q5 q4 q3 q2 q1 q0 :
|
||||
flipFlop c 1 q
|
||||
inv q shiftIn
|
||||
shift8 shiftIn q7 q6 q5 q4 q3 q2 q1 q0
|
||||
|
||||
def loop q7 q6 q5 q4 q3 q2 q1 q0 :
|
||||
flipFlop c 1 q
|
||||
inv q shiftIn
|
||||
shift8 shiftIn q7 q6 q5 q4 q3 q2 q1 q0
|
||||
buf q0 shiftIn
|
||||
|
||||
# 1-bit adder
|
||||
def mAdder add carryInNeg carryIn a b carryOutNeg carryOut sum :
|
||||
trans add b s
|
||||
zuseFullAdder carryInNeg carryIn a s carryOutNeg carryOut sum
|
||||
|
||||
# 2-bit adder
|
||||
def mAdder2 add carryInNeg carryIn a1 a0 b1 b0 carryOutNeg carryOut s1 s0 :
|
||||
mAdder add carryInNeg carryIn a0 b0 cOutNeg cOut s0
|
||||
mAdder add cOutNeg cOut a1 b1 carryOutNeg carryOut s1
|
||||
|
||||
# 4-bit adder
|
||||
def mAdder4 add carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s3 s2 s1 s0 :
|
||||
mAdder2 add carryInNeg carryIn a1 a0 b1 b0 cOutNeg cOut s1 s0
|
||||
mAdder2 add cOutNeg cOut a3 a2 b3 b2 carryOutNeg carryOut s3 s2
|
||||
|
||||
# 8-bit adder
|
||||
def mAdder8 add
|
||||
carryInNeg carryIn a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
mAdder4 add carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
cOutNeg cOut s3 s2 s1 s0
|
||||
mAdder4 add cOutNeg cOut a7 a6 a5 a4 b7 b6 b5 b4
|
||||
carryOutNeg carryOut s7 s6 s5 s4
|
||||
|
||||
# 16-bit adder
|
||||
def mAdder16 add
|
||||
carryInNeg carryIn a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s15 s14 s13 s12 s11 s10 s9 s8 s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
mAdder8 add carryInNeg carryIn a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
cOutNeg cOut s7 s6 s5 s4 s3 s2 s1 s0
|
||||
mAdder8 add cOutNeg cOut
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 b15 b14 b13 b12 b11 b10 b9 b8
|
||||
carryOutNeg carryOut s15 s14 s13 s12 s11 s10 s9 s8
|
||||
|
||||
def multiplier
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0 :
|
||||
mAdder16 b0 1 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
0 0 d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
mAdder16 b1 1 0
|
||||
d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
0 0 0 0 0 0 0 a7 a6 a5 a4 a3 a2 a1 a0 0
|
||||
0 0 e15 e14 e13 e12 e11 e10 e9 e8 e7 e6 e5 e4 e3 e2 e1 e0
|
||||
mAdder16 b2 1 0
|
||||
e15 e14 e13 e12 e11 e10 e9 e8 e7 e6 e5 e4 e3 e2 e1 e0
|
||||
0 0 0 0 0 0 a7 a6 a5 a4 a3 a2 a1 a0 0 0
|
||||
0 0 f15 f14 f13 f12 f11 f10 f9 f8 f7 f6 f5 f4 f3 f2 f1 f0
|
||||
mAdder16 b3 1 0
|
||||
f15 f14 f13 f12 f11 f10 f9 f8 f7 f6 f5 f4 f3 f2 f1 f0
|
||||
0 0 0 0 0 a7 a6 a5 a4 a3 a2 a1 a0 0 0 0
|
||||
0 0 g15 g14 g13 g12 g11 g10 g9 g8 g7 g6 g5 g4 g3 g2 g1 g0
|
||||
mAdder16 b4 1 0
|
||||
g15 g14 g13 g12 g11 g10 g9 g8 g7 g6 g5 g4 g3 g2 g1 g0
|
||||
0 0 0 0 a7 a6 a5 a4 a3 a2 a1 a0 0 0 0 0
|
||||
0 0 h15 h14 h13 h12 h11 h10 h9 h8 h7 h6 h5 h4 h3 h2 h1 h0
|
||||
mAdder16 b5 1 0
|
||||
h15 h14 h13 h12 h11 h10 h9 h8 h7 h6 h5 h4 h3 h2 h1 h0
|
||||
0 0 0 a7 a6 a5 a4 a3 a2 a1 a0 0 0 0 0 0
|
||||
0 0 i15 i14 i13 i12 i11 i10 i9 i8 i7 i6 i5 i4 i3 i2 i1 i0
|
||||
mAdder16 b6 1 0
|
||||
i15 i14 i13 i12 i11 i10 i9 i8 i7 i6 i5 i4 i3 i2 i1 i0
|
||||
0 0 a7 a6 a5 a4 a3 a2 a1 a0 0 0 0 0 0 0
|
||||
0 0 j15 j14 j13 j12 j11 j10 j9 j8 j7 j6 j5 j4 j3 j2 j1 j0
|
||||
mAdder16 b7 1 0
|
||||
j15 j14 j13 j12 j11 j10 j9 j8 j7 j6 j5 j4 j3 j2 j1 j0
|
||||
0 a7 a6 a5 a4 a3 a2 a1 a0 0 0 0 0 0 0 0
|
||||
0 0 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0
|
||||
|
||||
# 16-bit Partial Adder/Subtractor
|
||||
def xFullAdder16 subtract carryInNeg carryIn
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s15 s14 s13 s12 s11 s10 s9 s8 s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
xFullAdder8 subtract carryInNeg carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
cOutNeg cOut s7 s6 s5 s4 s3 s2 s1 s0
|
||||
xFullAdder8 subtract cOutNeg cOut
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 b15 b14 b13 b12 b11 b10 b9 b8
|
||||
carryOutNeg carryOut s15 s14 s13 s12 s11 s10 s9 s8
|
||||
|
||||
# 16-bit Adder/Subtractor
|
||||
def adderSubtractor16 subtract
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOut s15 s14 s13 s12 s11 s10 s9 s8 s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
inv subtract carryInNeg
|
||||
xFullAdder16 subtract carryInNeg subtract
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg cOut s15 s14 s13 s12 s11 s10 s9 s8 s7 s6 s5 s4 s3 s2 s1 s0
|
||||
xor cOut subtract carryOut
|
||||
|
||||
def signedMultiplier signed
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0 :
|
||||
and signed a7 negateA
|
||||
and signed b7 negateB
|
||||
adderSubtractor negateA 0 0 0 0 0 0 0 0
|
||||
a7 a6 a5 a4 a3 a2 a1 a0 0 c7 c6 c5 c4 c3 c2 c1 c0
|
||||
adderSubtractor negateB 0 0 0 0 0 0 0 0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0 0 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
multiplier
|
||||
c7 c6 c5 c4 c3 c2 c1 c0
|
||||
d7 d6 d5 d4 d3 d2 d1 d0
|
||||
q15 q14 q13 q12 q11 q10 q9 q8 q7 q6 q5 q4 q3 q2 q1 q0
|
||||
xor a7 b7 negateProduct
|
||||
and signed negateProduct negateQ
|
||||
adderSubtractor16 negateQ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
q15 q14 q13 q12 q11 q10 q9 q8 q7 q6 q5 q4 q3 q2 q1 q0
|
||||
0 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0
|
||||
|
||||
# 4-input OR gate
|
||||
def or4 i3 i2 i1 i0 o :
|
||||
or i3 i2 o
|
||||
or i1 i0 o
|
||||
|
||||
# 8-input OR gate
|
||||
def or8 i7 i6 i5 i4 i3 i2 i1 i0 o :
|
||||
or4 i7 i6 i5 i4 o
|
||||
or4 i3 i2 i1 i0 o
|
||||
|
||||
def multiplier2
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0 :
|
||||
|
||||
# 16-bit register made of flip flops
|
||||
flipFlop c d15 p15
|
||||
flipFlop c d14 p14
|
||||
flipFlop c d13 p13
|
||||
flipFlop c d12 p12
|
||||
flipFlop c d11 p11
|
||||
flipFlop c d10 p10
|
||||
flipFlop c d9 p9
|
||||
flipFlop c d8 p8
|
||||
flipFlop c d7 p7
|
||||
flipFlop c d6 p6
|
||||
flipFlop c d5 p5
|
||||
flipFlop c d4 p4
|
||||
flipFlop c d3 p3
|
||||
flipFlop c d2 p2
|
||||
flipFlop c d1 p1
|
||||
flipFlop c d0 p0
|
||||
|
||||
# Transmission gates and 8-bit adder
|
||||
trans8 loadB d7 d6 d5 d4 d3 d2 d1 d0 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
trans8 p0 a7 a6 a5 a4 a3 a2 a1 a0 z7 z6 z5 z4 z3 z2 z1 z0
|
||||
zuseAdder8 1 0 p15 p14 p13 p12 p11 p10 p9 p8 z7 z6 z5 z4 z3 z2 z1 z0
|
||||
0 s8 s7 s6 s5 s4 s3 s2 s1 s0
|
||||
trans16 tallyShift d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
s8 s7 s6 s5 s4 s3 s2 s1 s0 p7 p6 p5 p4 p3 p2 p1
|
||||
trans16 keepValue d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0
|
||||
|
||||
# State machine
|
||||
flipFlop c 1 boot
|
||||
inv boot loadB
|
||||
flipFlop c loadB state1
|
||||
flipFlop c state1 state2
|
||||
flipFlop c state2 state3
|
||||
flipFlop c state3 state4
|
||||
flipFlop c state4 state5
|
||||
flipFlop c state5 state6
|
||||
flipFlop c state6 state7
|
||||
flipFlop c state7 state8
|
||||
flipFlop c state8 keepValue
|
||||
or8 state1 state2 state3 state4 state5 state6 state7 state8 tallyShift
|
||||
buf keepValue keepValue
|
||||
|
||||
# 170 x 105 = 17850
|
||||
run 1000 3 multiplier2
|
||||
1 0 1 0 1 0 1 0
|
||||
0 1 1 0 1 0 0 1
|
||||
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
run 3 1 r 1 1 ? ?
|
||||
@@ -0,0 +1,323 @@
|
||||
# Four double-pole relay
|
||||
def r4 coil l3 nd3 nc3 l2 nd2 nc2 l1 nd1 nc1 l0 nd0 nc0 :
|
||||
r coil l3 nd3 nc3
|
||||
r coil l2 nd2 nc2
|
||||
r coil l1 nd1 nc1
|
||||
r coil l0 nd0 nc0
|
||||
|
||||
# Buffer
|
||||
def buf input output :
|
||||
r input output 1 0
|
||||
|
||||
# Inverter
|
||||
def inv input output :
|
||||
r input output 0 1
|
||||
|
||||
# AND Gate
|
||||
def and i1 i0 o :
|
||||
r i0 z 1 0
|
||||
r i1 o z 0
|
||||
|
||||
# NAND Gate
|
||||
def nand i0 i1 o :
|
||||
r i0 1 0 o
|
||||
r i1 1 0 o
|
||||
|
||||
# OR Gate
|
||||
def or i0 i1 o :
|
||||
r i0 1 o 0
|
||||
r i1 1 o 0
|
||||
|
||||
# NOR Gate
|
||||
def nor i0 i1 o :
|
||||
r i0 1 0 z
|
||||
r i1 z 0 o
|
||||
|
||||
# XOR Gate
|
||||
def xor i0 i1 o :
|
||||
r i0 1 b a
|
||||
r i1 o a b
|
||||
|
||||
# XNOR Gate
|
||||
def xnor i0 i1 o :
|
||||
r i0 1 a b
|
||||
r i1 o a b
|
||||
|
||||
# Half Adder
|
||||
def halfAdder a b s1 s0 :
|
||||
and a b s1
|
||||
xor a b s0
|
||||
|
||||
# Full Adder
|
||||
def fullAdder carryIn a b carryOut sum :
|
||||
halfAdder a b s1 s0
|
||||
halfAdder s0 carryIn carry sum
|
||||
or s1 carry carryOut
|
||||
|
||||
# 2-bit Adder
|
||||
def adder2 carryIn a1 a0 b1 b0 carryOut s1 s0 :
|
||||
fullAdder carryIn a0 b0 carry s0
|
||||
fullAdder carry a1 b1 carryOut s1
|
||||
|
||||
# 4-bit Adder
|
||||
def adder4 carryIn a3 a2 a1 a0 b3 b2 b1 b0 carryOut s3 s2 s1 s0 :
|
||||
adder2 carryIn a1 a0 b1 b0 carry s1 s0
|
||||
adder2 carry a3 a2 b3 b2 carryOut s3 s2
|
||||
|
||||
# 8-bit Adder
|
||||
def adder8 carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
adder4 carryIn a3 a2 a1 a0 b3 b2 b1 b0 carry s3 s2 s1 s0
|
||||
adder4 carry a7 a6 a5 a4 b7 b6 b5 b4 carryOut s7 s6 s5 s4
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry Full Adder
|
||||
def zuseFullAdder carryInNeg carryIn a b carryOutNeg carryOut sum :
|
||||
r4 a carryInNeg y z sum w x 1 v y carryIn u v
|
||||
r4 b carryOutNeg z y carryInNeg x w carryIn w x carryOut v u
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 2-bit Adder
|
||||
def zuseAdder2 carryInNeg carryIn a1 a0 b1 b0 carryOutNeg carryOut s1 s0 :
|
||||
zuseFullAdder carryInNeg carryIn a0 b0 cOutNeg cOut s0
|
||||
zuseFullAdder cOutNeg cOut a1 b1 carryOutNeg carryOut s1
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 4-bit Adder
|
||||
def zuseAdder4 carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s3 s2 s1 s0 :
|
||||
zuseAdder2 carryInNeg carryIn a1 a0 b1 b0 cOutNeg cOut s1 s0
|
||||
zuseAdder2 cOutNeg cOut a3 a2 b3 b2 carryOutNeg carryOut s3 s2
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 8-bit Adder
|
||||
def zuseAdder8 carryInNeg carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
zuseAdder4 carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0 cOutNeg cOut s3 s2 s1 s0
|
||||
zuseAdder4 cOutNeg cOut a7 a6 a5 a4 b7 b6 b5 b4
|
||||
carryOutNeg carryOut s7 s6 s5 s4
|
||||
|
||||
# 1-bit Partial Adder/Subtractor
|
||||
def xFullAdder subtract carryInNeg carryIn a b carryOutNeg carryOut sum :
|
||||
xor subtract b bNeg
|
||||
zuseFullAdder carryInNeg carryIn a bNeg carryOutNeg carryOut sum
|
||||
|
||||
# 2-bit Partial Adder/Subtractor
|
||||
def xFullAdder2 subtract carryInNeg carryIn
|
||||
a1 a0 b1 b0 carryOutNeg carryOut s1 s0 :
|
||||
xFullAdder subtract carryInNeg carryIn a0 b0 cOutNeg cOut s0
|
||||
xFullAdder subtract cOutNeg cOut a1 b1 carryOutNeg carryOut s1
|
||||
|
||||
# 4-bit Partial Adder/Subtractor
|
||||
def xFullAdder4 subtract carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s3 s2 s1 s0 :
|
||||
xFullAdder2 subtract carryInNeg carryIn a1 a0 b1 b0 cOutNeg cOut s1 s0
|
||||
xFullAdder2 subtract cOutNeg cOut a3 a2 b3 b2 carryOutNeg carryOut s3 s2
|
||||
|
||||
# 8-bit Partial Adder/Subtractor
|
||||
def xFullAdder8 subtract carryInNeg carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
xFullAdder4 subtract carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
cOutNeg cOut s3 s2 s1 s0
|
||||
xFullAdder4 subtract cOutNeg cOut a7 a6 a5 a4 b7 b6 b5 b4
|
||||
carryOutNeg carryOut s7 s6 s5 s4
|
||||
|
||||
# 8-bit Adder/Subtractor
|
||||
def adderSubtractor subtract
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
inv subtract carryInNeg
|
||||
xFullAdder8 subtract carryInNeg subtract
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg cOut s7 s6 s5 s4 s3 s2 s1 s0
|
||||
xor cOut subtract carryOut
|
||||
|
||||
# 2-to-1 Mux
|
||||
def mux a i1 i0 o :
|
||||
r a o i1 i0
|
||||
|
||||
# 4-to-1 Mux
|
||||
def mux4to1 a1 a0 i3 i2 i1 i0 o :
|
||||
mux a0 i1 i0 x
|
||||
mux a0 i3 i2 y
|
||||
mux a1 y x o
|
||||
|
||||
# 8-to-1 Mux
|
||||
def mux8to1 a2 a1 a0 i7 i6 i5 i4 i3 i2 i1 i0 o :
|
||||
mux4to1 a1 a0 i3 i2 i1 i0 x
|
||||
mux4to1 a1 a0 i7 i6 i5 i4 y
|
||||
mux a2 y x o
|
||||
|
||||
# 3-to-8 Decoder
|
||||
def decoder3to8 a2 a1 a0 o7 o6 o5 o4 o3 o2 o1 o0 :
|
||||
mux8to1 a2 a1 a0 o7 o6 o5 o4 o3 o2 o1 o0 1
|
||||
|
||||
def trans enabled a b :
|
||||
r enabled a b 0
|
||||
|
||||
# 2-bit transmission gate
|
||||
def trans2 enabled a1 a0 b1 b0 :
|
||||
trans enabled a1 b1
|
||||
trans enabled a0 b0
|
||||
|
||||
# 4-bit transmission gate
|
||||
def trans4 enabled a3 a2 a1 a0 b3 b2 b1 b0 :
|
||||
trans2 enabled a3 a2 b3 b2
|
||||
trans2 enabled a1 a0 b1 b0
|
||||
|
||||
# 8-bit transmission gate
|
||||
def trans8 enabled a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0 :
|
||||
trans4 enabled a7 a6 a5 a4 b7 b6 b5 b4
|
||||
trans4 enabled a3 a2 a1 a0 b3 b2 b1 b0
|
||||
|
||||
# 16-bit transmission gate
|
||||
def trans16 enabled
|
||||
a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 :
|
||||
trans8 enabled a15 a14 a13 a12 a11 a10 a9 a8 b15 b14 b13 b12 b11 b10 b9 b8
|
||||
trans8 enabled a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0
|
||||
|
||||
# Latch, stores when w = 1
|
||||
def latch w d q :
|
||||
mux w d q z
|
||||
buf z q
|
||||
|
||||
# Latch, stores when w = 0
|
||||
def latchNeg w d q :
|
||||
mux w q d z
|
||||
buf z q
|
||||
|
||||
# Flip flop, stores when w rises to 1, expresses new value when w drops to 0
|
||||
def flipFlop w d q :
|
||||
latch w d q2
|
||||
latchNeg w q2 q
|
||||
|
||||
def flipFlopRegister w d7 d6 d5 d4 d3 d2 d1 d0 q7 q6 q5 q4 q3 q2 q1 q0:
|
||||
flipFlop w d7 q7
|
||||
flipFlop w d6 q6
|
||||
flipFlop w d5 q5
|
||||
flipFlop w d4 q4
|
||||
flipFlop w d3 q3
|
||||
flipFlop w d2 q2
|
||||
flipFlop w d1 q1
|
||||
flipFlop w d0 q0
|
||||
|
||||
def latchRegister w d7 d6 d5 d4 d3 d2 d1 d0 q7 q6 q5 q4 q3 q2 q1 q0:
|
||||
latch w d7 q7
|
||||
latch w d6 q6
|
||||
latch w d5 q5
|
||||
latch w d4 q4
|
||||
latch w d3 q3
|
||||
latch w d2 q2
|
||||
latch w d1 q1
|
||||
latch w d0 q0
|
||||
|
||||
def tinyLatchRegister writeNeg d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
r d7 d7 writeNeg 0
|
||||
r d6 d6 writeNeg 0
|
||||
r d5 d5 writeNeg 0
|
||||
r d4 d4 writeNeg 0
|
||||
r d3 d3 writeNeg 0
|
||||
r d2 d2 writeNeg 0
|
||||
r d1 d1 writeNeg 0
|
||||
r d0 d0 writeNeg 0
|
||||
|
||||
def memoryRegister select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
inv load writeNeg
|
||||
inv writeNeg select
|
||||
trans8 select d7 d6 d5 d4 d3 d2 d1 d0 z7 z6 z5 z4 z3 z2 z1 z0
|
||||
tinyLatchRegister writeNeg z7 z6 z5 z4 z3 z2 z1 z0
|
||||
|
||||
# 2 Bytes of memory
|
||||
def memory2 address select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux address select1 select0 select
|
||||
mux address load1 load0 load
|
||||
memoryRegister select0 load0 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memoryRegister select1 load1 d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 4 Bytes of memory
|
||||
def memory4 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a1 select1 select0 select
|
||||
mux a1 load1 load0 load
|
||||
memory2 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory2 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 8 Bytes of memory
|
||||
def memory8 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a2 select1 select0 select
|
||||
mux a2 load1 load0 load
|
||||
memory4 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory4 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 16 Bytes of memory
|
||||
def memory16 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a3 select1 select0 select
|
||||
mux a3 load1 load0 load
|
||||
memory8 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory8 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 32 Bytes of memory
|
||||
def memory32 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a4 select1 select0 select
|
||||
mux a4 load1 load0 load
|
||||
memory16 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory16 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 64 Bytes of memory
|
||||
def memory64 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a5 select1 select0 select
|
||||
mux a5 load1 load0 load
|
||||
memory32 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory32 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 128 Bytes of memory
|
||||
def memory128 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a6 select1 select0 select
|
||||
mux a6 load1 load0 load
|
||||
memory64 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory64 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
# 256 Bytes of memory
|
||||
def memory256 a7 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0 :
|
||||
mux a7 select1 select0 select
|
||||
mux a7 load1 load0 load
|
||||
memory128 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
memory128 a6 a5 a4 a3 a2 a1 a0 select load d7 d6 d5 d4 d3 d2 d1 d0
|
||||
|
||||
def counterElement andIn andOut value :
|
||||
xor andIn value data
|
||||
flipFlop c data value
|
||||
and andIn value andOut
|
||||
|
||||
def counter2 andIn andOut v1 v0 :
|
||||
counterElement andIn x v0
|
||||
counterElement x andOut v1
|
||||
|
||||
def counter4 andIn andOut v3 v2 v1 v0 :
|
||||
counter2 andIn x v1 v0
|
||||
counter2 x andOut v3 v2
|
||||
|
||||
def counter8 andIn andOut v7 v6 v5 v4 v3 v2 v1 v0 :
|
||||
counter4 andIn x v3 v2 v1 v0
|
||||
counter4 x andOut v7 v6 v5 v4
|
||||
|
||||
def shift2 shiftIn q1 q0 :
|
||||
flipFlop c shiftIn q1
|
||||
flipFlop c q1 q0
|
||||
|
||||
def shift4 shiftIn q3 q2 q1 q0 :
|
||||
shift2 shiftIn q3 q2
|
||||
shift2 q2 q1 q0
|
||||
|
||||
def shift8 shiftIn q7 q6 q5 q4 q3 q2 q1 q0 :
|
||||
shift4 shiftIn q7 q6 q5 q4
|
||||
shift4 q4 q3 q2 q1 q0
|
||||
|
||||
run 100 5 shift8 1 ? ? ? ? ? ? ? ?
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
# Four double-pole relay
|
||||
def r4 coil l3 nd3 nc3 l2 nd2 nc2 l1 nd1 nc1 l0 nd0 nc0 :
|
||||
r coil l3 nd3 nc3
|
||||
r coil l2 nd2 nc2
|
||||
r coil l1 nd1 nc1
|
||||
r coil l0 nd0 nc0
|
||||
|
||||
# Buffer
|
||||
def buf input output :
|
||||
r input output 1 0
|
||||
|
||||
# Inverter
|
||||
def inv input output :
|
||||
r input output 0 1
|
||||
|
||||
# AND Gate
|
||||
def and i1 i0 o :
|
||||
r i0 z 1 0
|
||||
r i1 o z 0
|
||||
|
||||
# NAND Gate
|
||||
def nand i0 i1 o :
|
||||
r i0 1 0 o
|
||||
r i1 1 0 o
|
||||
|
||||
# OR Gate
|
||||
def or i0 i1 o :
|
||||
r i0 1 o 0
|
||||
r i1 1 o 0
|
||||
|
||||
# NOR Gate
|
||||
def nor i0 i1 o :
|
||||
r i0 1 0 z
|
||||
r i1 z 0 o
|
||||
|
||||
# XOR Gate
|
||||
def xor i0 i1 o :
|
||||
r i0 1 b a
|
||||
r i1 o a b
|
||||
|
||||
# XNOR Gate
|
||||
def xnor i0 i1 o :
|
||||
r i0 1 a b
|
||||
r i1 o a b
|
||||
|
||||
# Half Adder
|
||||
def halfAdder a b s1 s0 :
|
||||
and a b s1
|
||||
xor a b s0
|
||||
|
||||
# Full Adder
|
||||
def fullAdder carryIn a b carryOut sum :
|
||||
halfAdder a b s1 s0
|
||||
halfAdder s0 carryIn carry sum
|
||||
or s1 carry carryOut
|
||||
|
||||
# 2-bit Adder
|
||||
def adder2 carryIn a1 a0 b1 b0 carryOut s1 s0 :
|
||||
fullAdder carryIn a0 b0 carry s0
|
||||
fullAdder carry a1 b1 carryOut s1
|
||||
|
||||
# 4-bit Adder
|
||||
def adder4 carryIn a3 a2 a1 a0 b3 b2 b1 b0 carryOut s3 s2 s1 s0 :
|
||||
adder2 carryIn a1 a0 b1 b0 carry s1 s0
|
||||
adder2 carry a3 a2 b3 b2 carryOut s3 s2
|
||||
|
||||
# 8-bit Adder
|
||||
def adder8 carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
adder4 carryIn a3 a2 a1 a0 b3 b2 b1 b0 carry s3 s2 s1 s0
|
||||
adder4 carry a7 a6 a5 a4 b7 b6 b5 b4 carryOut s7 s6 s5 s4
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry Full Adder
|
||||
def zuseFullAdder carryInNeg carryIn a b carryOutNeg carryOut sum :
|
||||
r4 a carryInNeg y z sum w x 1 v y carryIn u v
|
||||
r4 b carryOutNeg z y carryInNeg x w carryIn w x carryOut v u
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 2-bit Adder
|
||||
def zuseAdder2 carryInNeg carryIn a1 a0 b1 b0 carryOutNeg carryOut s1 s0 :
|
||||
zuseFullAdder carryInNeg carryIn a0 b0 cOutNeg cOut s0
|
||||
zuseFullAdder cOutNeg cOut a1 b1 carryOutNeg carryOut s1
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 4-bit Adder
|
||||
def zuseAdder4 carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s3 s2 s1 s0 :
|
||||
zuseAdder2 carryInNeg carryIn a1 a0 b1 b0 cOutNeg cOut s1 s0
|
||||
zuseAdder2 cOutNeg cOut a3 a2 b3 b2 carryOutNeg carryOut s3 s2
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 8-bit Adder
|
||||
def zuseAdder8 carryInNeg carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
zuseAdder4 carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0 cOutNeg cOut s3 s2 s1 s0
|
||||
zuseAdder4 cOutNeg cOut a7 a6 a5 a4 b7 b6 b5 b4
|
||||
carryOutNeg carryOut s7 s6 s5 s4
|
||||
|
||||
# 57 + 142 = ?
|
||||
run 100 1 zuseAdder8 1 0
|
||||
0 0 1 1 1 0 0 1
|
||||
1 0 0 0 1 1 1 0
|
||||
? ? ? ? ? ? ? ? ? ?
|
||||
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
# Four double-pole relay
|
||||
def r4 coil l3 nd3 nc3 l2 nd2 nc2 l1 nd1 nc1 l0 nd0 nc0 :
|
||||
r coil l3 nd3 nc3
|
||||
r coil l2 nd2 nc2
|
||||
r coil l1 nd1 nc1
|
||||
r coil l0 nd0 nc0
|
||||
|
||||
# Buffer
|
||||
def buf input output :
|
||||
r input output 1 0
|
||||
|
||||
# Inverter
|
||||
def inv input output :
|
||||
r input output 0 1
|
||||
|
||||
# AND Gate
|
||||
def and i1 i0 o :
|
||||
r i0 z 1 0
|
||||
r i1 o z 0
|
||||
|
||||
# NAND Gate
|
||||
def nand i0 i1 o :
|
||||
r i0 1 0 o
|
||||
r i1 1 0 o
|
||||
|
||||
# OR Gate
|
||||
def or i0 i1 o :
|
||||
r i0 1 o 0
|
||||
r i1 1 o 0
|
||||
|
||||
# NOR Gate
|
||||
def nor i0 i1 o :
|
||||
r i0 1 0 z
|
||||
r i1 z 0 o
|
||||
|
||||
# XOR Gate
|
||||
def xor i0 i1 o :
|
||||
r i0 1 b a
|
||||
r i1 o a b
|
||||
|
||||
# XNOR Gate
|
||||
def xnor i0 i1 o :
|
||||
r i0 1 a b
|
||||
r i1 o a b
|
||||
|
||||
# Half Adder
|
||||
def halfAdder a b s1 s0 :
|
||||
and a b s1
|
||||
xor a b s0
|
||||
|
||||
# Full Adder
|
||||
def fullAdder carryIn a b carryOut sum :
|
||||
halfAdder a b s1 s0
|
||||
halfAdder s0 carryIn carry sum
|
||||
or s1 carry carryOut
|
||||
|
||||
# 2-bit Adder
|
||||
def adder2 carryIn a1 a0 b1 b0 carryOut s1 s0 :
|
||||
fullAdder carryIn a0 b0 carry s0
|
||||
fullAdder carry a1 b1 carryOut s1
|
||||
|
||||
# 4-bit Adder
|
||||
def adder4 carryIn a3 a2 a1 a0 b3 b2 b1 b0 carryOut s3 s2 s1 s0 :
|
||||
adder2 carryIn a1 a0 b1 b0 carry s1 s0
|
||||
adder2 carry a3 a2 b3 b2 carryOut s3 s2
|
||||
|
||||
# 8-bit Adder
|
||||
def adder8 carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
adder4 carryIn a3 a2 a1 a0 b3 b2 b1 b0 carry s3 s2 s1 s0
|
||||
adder4 carry a7 a6 a5 a4 b7 b6 b5 b4 carryOut s7 s6 s5 s4
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry Full Adder
|
||||
def zuseFullAdder carryInNeg carryIn a b carryOutNeg carryOut sum :
|
||||
r4 a carryInNeg y z sum w x 1 v y carryIn u v
|
||||
r4 b carryOutNeg z y carryInNeg x w carryIn w x carryOut v u
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 2-bit Adder
|
||||
def zuseAdder2 carryInNeg carryIn a1 a0 b1 b0 carryOutNeg carryOut s1 s0 :
|
||||
zuseFullAdder carryInNeg carryIn a0 b0 cOutNeg cOut s0
|
||||
zuseFullAdder cOutNeg cOut a1 b1 carryOutNeg carryOut s1
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 4-bit Adder
|
||||
def zuseAdder4 carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s3 s2 s1 s0 :
|
||||
zuseAdder2 carryInNeg carryIn a1 a0 b1 b0 cOutNeg cOut s1 s0
|
||||
zuseAdder2 cOutNeg cOut a3 a2 b3 b2 carryOutNeg carryOut s3 s2
|
||||
|
||||
# Konrad Zuse Dual-Rail-Carry 8-bit Adder
|
||||
def zuseAdder8 carryInNeg carryIn
|
||||
a7 a6 a5 a4 a3 a2 a1 a0
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
carryOutNeg carryOut s7 s6 s5 s4 s3 s2 s1 s0 :
|
||||
zuseAdder4 carryInNeg carryIn a3 a2 a1 a0 b3 b2 b1 b0 cOutNeg cOut s3 s2 s1 s0
|
||||
zuseAdder4 cOutNeg cOut a7 a6 a5 a4 b7 b6 b5 b4
|
||||
carryOutNeg carryOut s7 s6 s5 s4
|
||||
|
||||
# 255 + 1 = ?
|
||||
run 100 1 zuseAdder8 1 0
|
||||
1 1 1 1 1 1 1 1
|
||||
0 0 0 0 0 0 0 1
|
||||
? ? ? ? ? ? ? ? ? ?
|
||||
|
||||
Reference in new issue
Block a user