Slides to Accompany a Video Tutorial on
Harry Porter’s Relay Computer
Harry Porter, Ph.D.
Portland State University November 7, 2007
Harry Porters Relay Computer Harry Porter, Ph.D. Portland State - - PowerPoint PPT Presentation
Slides to Accompany a Video Tutorial on Harry Porters Relay Computer Harry Porter, Ph.D. Portland State University November 7, 2007 +V Double Throw Relay Double Throw Relay +V Four Pole, Double Throw Relay Four Pole, Double Throw
Harry Porter, Ph.D.
Portland State University November 7, 2007
+V
Double Throw Relay
+V
Double Throw Relay
Four Pole, Double Throw Relay
+V
Four Pole, Double Throw Relay
Assume other terminal is connected to ground
Assume other terminal is connected to ground +V
in
in
+V in out 0 1 1 0 1 Convention: “1” = +12V “0” = not connected
in
in
+V in out 0 1 1 0 1 Convention: “1” = +12V “0” = not connected
c
b b or c +V +V
b c OUT 0 0 0 0 1 1 1 0 1 1 1 1
b c b or c
c b b or c b or c b c
c
b b or c b b or c c c or d d d c or d
c
b b or c b b or c c c or d d d c or d
b or c c b +V d c or d b b or c c c or d d
b c NOT
b c NOT AND OR XOR 0 0 1 0 0 0 0 1 1 0 1 1 1 0 0 0 1 1 1 1 0 1 1 0
AND OR XOR
b V NOT AND OR XOR c
b c NOT AND OR XOR 0 0 1 0 0 0 0 1 1 0 1 1 1 0 0 0 1 1 1 1 0 1 1 0
b V c NOT AND OR XOR
b c NOT AND OR XOR 0 0 1 0 0 0 0 1 1 0 1 1 1 0 0 0 1 1 1 1 0 1 1 0
b V c NOT AND OR XOR
b c NOT AND OR XOR 0 0 1 0 0 0 0 1 1 0 1 1 1 0 0 0 1 1 1 1 0 1 1 0
b V c NOT AND OR XOR
b c NOT AND OR XOR 0 0 1 0 0 0 0 1 1 0 1 1 1 0 0 0 1 1 1 1 0 1 1 0
b V c NOT AND OR XOR
b c NOT AND OR XOR 0 0 1 0 0 0 0 1 1 0 1 1 1 0 0 0 1 1 1 1 0 1 1 0
AND7 OR7
Logic Circuit
NOT7
B7 C7
XOR7 AND1 OR1
Logic Circuit
NOT1
B1 C1
XOR1 AND0 OR0
Logic Circuit
NOT0
B0 C0
XOR0
Carryin Carryout
Full Adder
Sum B C
Cyin B C Cyout Sum 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1
Carry
Full Adder Full Adder
B0 C0 Sum0 Sum1 B1 C1 Carry
Full Adder
Sum7 B7 C7
8 8 8
Carry Carry
Zero V+
Zero V+ Sign
Enable
x7 x6 x5 x4 x3 x2 x1 x0
B XOR C Enable
Enable
b7 b6 b5 b4 b3 b2 b1 b0
B
f1
V
f0 f2
INC AND OR XOR NOT SHL <unused> ADD
f0 f1 f2 OUTPUT 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 0 1
Carry Sign
8 8 8
3 Zero
8-bit Logic 8-bit Adder
Enable En En En En En En AND OR XOR NOT SHL INC ADD
Function
3-to-8 Decoder Zero-Detect
Carry Sign
8 8 8
Function Code
000 add 001 inc 010 and 011 or 100 xor 101 not 110 shl 111 <nop>
3 Zero
+V A
+V
A7 A0 A6
+V
Enable
A7 A0 A6 Select
A7 Select Load A0
Enable
A6
A7 Select Load A0
Enable
A6
Load Select Load Select “X” Register “Y” Register
“X” Register “Y” Register Load Select Load Select Load Select
16-bit
Increment
Inst
M1 M2
M
X Y
XY
J1 J2
J PC Inc
8-bit
ALU Memory
Addr Data
Z Cy S
8-bit Data Bus
A B C D
16-bit Address Bus
32K Byte Static RAM Chip LEDs 8 FET Power Transistors (to drive relays during a memory-read operation)
16-bit
Increment
Inst
M1 M2
M
X Y
XY
J1 J2
J PC Inc
8-bit
ALU Memory
Addr Data
Z Cy S
8-bit Data Bus
A B C D
16-bit Address Bus
16-bit
Increment
Inst
M1 M2
M
X Y
XY
J1 J2
J PC Inc
8-bit
ALU Memory
Addr Data
Z Cy S
8-bit Data Bus
A B C D
MEM-READ SELECT LOAD
16-bit Address Bus
Inst
M1 M2
M
X Y
XY
J1 J2
J PC Inc
8-bit
ALU Memory
Addr Data
Z Cy S
8-bit Data Bus
A B C D
SELECT LOAD
16-bit
Increment
16-bit Address Bus
16-bit
Increment
Inst
M1 M2
M
X Y
XY
J1 J2
J PC Inc
8-bit
ALU Memory
Addr Data
Z Cy S
8-bit Data Bus
A B C D
LOAD SELECT
16-bit Address Bus
16-bit
Increment
Inst
M1 M2
M
X Y
XY
J1 J2
J PC Inc
Memory
Addr Data
Z Cy S
8-bit Data Bus
A D
FUNCTION LOAD LOAD
B C 8-bit
ALU 16-bit Address Bus
Switch +V Output +V
Switch +V Output +V Charging
Switch +V Output +V Discharging
Switch +V Output +V
+V +V
+V +V
+V +V
Charging
+V +V On On
Discharging
+V +V
Charging
+V +V On
Discharging
On
+V +V
Charging
+V +V On
Discharging
On
+V +V
Charging
+V +V On
Discharging
On
+V +V
Charging
+V +V On
Discharging
On
Clock Clock = (A and B) or (C and D)
t7 t5 t4 t3 t2 t1
1 2 3 4 5 6 7 8 t6 t8
clock
2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 1 t1 t2 t3 t4 t5 t6 t7 t8
Select PC Memory Read Load Instr Load Inc Select Inc Load PC ALU Function Load A Load Cond.Code Reg. 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 1
Select PC Memory Read Load Instr Load Inc Select Inc Load PC ALU Function Load Cond.Code Reg. 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 1
Load A
Select PC Memory Read Load Instr Load Inc Select Inc Load PC ALU Function Load Cond.Code Reg. 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 1
Load A
Select PC Memory Read Load Instr Load Inc Select Inc Load PC ALU Function Load Cond.Code Reg. 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 1 Load A
Instruction Register Finite State Machine
(Load, Select, Mem-Read, etc.)
1 2 3 4 5 6
7 6 5 4 3 2 1
1 2 3 4 5 6 7 8 9 10
Select PC Memory Read Load Instr Load Inc Select Inc Load PC Select Source-Register 2 3 4 5 6 7 8 1 1 Load Dest-Register
1 2 3 4 5 6 7 9 11 13 15 16 17 18 19 20 21 22 23 10 12 14 24 8
Clock Instruction Register Finite State Machine
Data Bus
0 0 d d d s s s 1 0 0 0 r f f f 0 1 r d d d d d 1 0 1 1 0 0 0 0
Move ALU Load Immediate 16-bit Increment
ddd = destination register sss = source register
(A, B, C, D, M1 ,M2 ,X or Y)
r = destination register (A or D) fff = function code
(add, inc, and, or, xor, not, shl)
r = destination register (A or B) ddddd = value (-16..15)
XY ← XY + 1
1 0 0 1 0 0 r r 1 0 0 1 1 0 r r 1 1 0 0 0 0 0 0 1 0 1 0 1 1 1 0
Load Store Load 16-bit Immediate Halt
rr = destination register (A, B, C, D)
reg ← [M]
rr = source register (A, B, C, D)
[M] ← reg Load the immediate value into M (i.e., M1 and M2)
v v v v v v v v v v v v v v v v
1 1 1 0 0 1 1 0 1 0 1 0 d s s 0 1 0 1 0 1 0 1 0
Goto Call 16-Bit Move Return / Branch Indirect
a a a a a a a a a a a a a a a a
Branch to the given address
1 1 1 0 0 1 1 1 a a a a a a a a a a a a a a a a
Branch to the given address Save return location in XY register PC ← XY
d = destination register (PC or XY) ss = source register (M, XY or J)
1 1 1 1 0 0 0 0
Branch If Negative Branch If Carry Branch If Zero Branch If Not Zero
a a a a a a a a a a a a a a a a
Branch to the given address if S = 1
1 1 1 0 1 0 0 0 a a a a a a a a a a a a a a a a
Branch to the given address if Cy = 1 Branch to the given address if Z = 1 Branch to the given address if Z = 0
1 1 1 0 0 1 0 0 a a a a a a a a a a a a a a a a 1 1 1 0 0 0 1 0 a a a a a a a a a a a a a a a a
address instr assembly comment 0000 0000 0011 1001 Y=B Y ← B 0000 0001 0011 0110 X=0 X ← 0 0000 0010 1000 0101 A=¬B If sign(Y)==1 0000 0011 1111 0000 BNEG Else . 0000 0100 0000 0000 . . 0000 0101 0000 0111 . . 0000 0110 0011 0010 X=C X ← C Else: . 0000 0111 0101 1001 A=-7 D ← -7 0000 1000 0001 1000 D=A . Loop: Loop: 0000 1001 0000 1110 B=X Shift X left (circular) 0000 1010 1000 0110 A=B<<1 . 0000 1011 0011 0000 X=A . 0000 1100 0000 1111 B=Y Shift Y left (circular) 0000 1101 1000 0110 A=B<<1 . 0000 1110 0011 1000 Y=A . 0000 1111 0000 1111 B=Y If sign(Y)==1 0001 0000 1000 0101 A=¬B . 0001 0001 1111 0000 BNEG Else2 . 0001 0010 0000 0000 . . 0001 0011 0001 0111 . . 0001 0100 0000 1110 B=X X ← X + C 0001 0101 1000 0000 A=B+C . 0001 0110 0011 0000 X=A . Else2: . 0001 0111 0000 1011 B=D D ← D + 1 0001 1000 1000 1001 D=B+1 . 0001 1001 1110 0010 BNZ Loop If D != 0 goto Loop 0001 1010 0000 0000 . . 0001 1011 0000 1001 . . 0001 1100 1010 1110 HALT HALT