summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/circuit-macros/examples/dpv/XORDPV.m4
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex/circuit-macros/examples/dpv/XORDPV.m4')
-rw-r--r--Master/texmf-dist/doc/latex/circuit-macros/examples/dpv/XORDPV.m467
1 files changed, 67 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/circuit-macros/examples/dpv/XORDPV.m4 b/Master/texmf-dist/doc/latex/circuit-macros/examples/dpv/XORDPV.m4
new file mode 100644
index 00000000000..cf373cb065d
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/circuit-macros/examples/dpv/XORDPV.m4
@@ -0,0 +1,67 @@
+.PS
+# `XORDPV.m4'
+# Realizations of the XOR function
+log_init
+scale = 2.54
+
+define(`gatelineth',1.6) # gate line thickness
+define(`lineth',0.8) # connection thickness
+
+define(`labels',`
+ "svg_it(A)" at last [].InA above wid 0.25
+ "svg_it(B)" at last [].InB above wid 0.25
+ "svg_it(A) O`'svg_sup(+,100,0,-1.4ex) svg_it(B)" at last [].Out ljust wid 1.2
+#"svg_it(A) svg_font(Latin,,,"O")`'svg_sup(+,100,0,-1.4ex) svg_it(B)" at last [].Out ljust
+')
+
+# single gate
+ XOR: Autologix(Xor(A,B))
+ labels
+
+# canonical form
+ Autologix(Or(And(A,Not(B)),And(Not(A),B))) \
+ with .nw at last [].sw+(0,-1)
+ labels
+
+# mixed gates
+ Autologix(And(Nand(A,B),Or(A,B))) \
+ with .nw at last [].nw+(8,0)
+ labels
+
+# nand realization
+ Autologix(Nand(Nand(Nand(A,A),B),Nand(Nand(B,B),A))) \
+ with .nw at 2nd last [].sw+(0,-1)
+ labels
+
+# nor realization
+ Autologix(Nor(Nor(Nor(A,A),Nor(B,B)),Nor(A,B))) \
+ with .nw at last [].nw+(8,0)
+ labels
+
+# These functions contain topologies in common so write a macro
+define(`customAB',
+ `S: Autologix(N`$1'(N`$1'(A,B1),N`$1'(B1,B)),N) with .Out at Here
+ line thick lineth from S.In2 to S.In3; InAB: dot(at last line.c)
+ line thick lineth from InAB left 2*L_unit
+ TN: Autologix(N`$1'(A,B)) with .Out at Here
+ line thick lineth from TN.InA up 3*L_unit; InA: Here
+ line thick lineth from TN.InB up 3*L_unit; InB: Here
+ line thick lineth from S.In4 to (InB,S.In4) then to (InB,TN.In2); dot
+ line thick lineth from S.In1 to (InA,S.In1); dot')
+
+ [ customAB(and)
+ Out: S.Out
+ ] with .nw at 2nd last [].sw+(0,-1)
+ labels
+
+ [ linethick = gatelineth
+ H: NOR_gate(2); linethick = lineth
+ L:dot(at H.w-(2*L_unit,0))
+ line from H.In1 to (L,H.In1) then to (L,H.In2) then to H.In2
+ line from L left 2*L_unit
+ customAB(or)
+ Out: H.Out
+ ] with .nw at last [].nw+(8,0)
+ labels
+
+.PE