1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
.PS
# mplex.m4
log_init
linewid = linewid*0.9
define(`short',elen_*2/3)
del = BUF_ht*L_unit
down_
P: NOR_gate(8)
B: P.In3+(0,del/2)
dx = P.In1.x-P.In2.x
line down del/2 from P.Out then right 2*del; dot
{line up del*1.5; right_; BUFFER_gate(right_ short); "$\bar{Y}$" ljust }
# BUFFER_gate(right_ short,N) ; "$Y$" ljust
NOT_gate(right_ short,n) ; "$Y$" ljust
for_(0,7,1,
`line from P.In`'eval(8-m4x) \
up B.y-P.In`'eval(8-m4x).y + (3.5-abs(m4x-3.5)) * dx \
then left (3.5-m4x)*AND_wd*L_unit then up (0.5+abs(m4x-3.5))*dx; down_
A`'m4x: AND_gate(5) with .Out at Here ')
Eb: "$\bar{E}$" rjust at (A0.In5.x-2*short-dx/2,A0.n.y+del/2)
# BUFFER_gate(from Eb right_ short,N); line to (A7.In1,Here) then to A7.In1
NOT_gate(from Eb right_ short,n); line to (A7.In1,Here) then to A7.In1
for_(0,6,1,
`line from A`'m4x.In1 to (A`'m4x.In1,Eb) ; dot')
for_(0,2,1,
`"`$S_'m4x$" wid 0.17 with .e at (Eb.x-textoffset,Eb.y+(1+m4x)*del*2)
NOT_gate(right_ short)
V1`'m4x: Here+(N_diam*L_unit/2,-del); {dot(at (V1`'m4x,Here))}
# NOT_gate(right_ short)
NOT_gate(right_ short,n)
V0`'m4x: Here')
for_(0,7,1,`define(`i',m4x)dnl
for_(0,2,1,`define(`j',m4x)define(`k',`eval(((i+2**j)/2**j)%2)')dnl
move to A`'i.In`'eval(j+2)
line up V`'k`'j.y - Here.y dnl
ifelse(eval((i==7)|(i==(7-2**j))),1,
`then to V`'k`'j ifelse(eval(k==1),1,`then up del')',
`; dot')
')
move to A`'i.In5; line to (Here,V02)
reversed(`BUFFER_gate',up_ short)
"$`I_'i$" at last line.end rjust
')
.PE
|