diff --git a/gallery/test6.pdf b/gallery/test6.pdf new file mode 100644 index 0000000..0fbaa69 Binary files /dev/null and b/gallery/test6.pdf differ diff --git a/gallery/test6.png b/gallery/test6.png new file mode 100644 index 0000000..ad23796 Binary files /dev/null and b/gallery/test6.png differ diff --git a/gallery/test6.typ b/gallery/test6.typ new file mode 100644 index 0000000..3fb4bbe --- /dev/null +++ b/gallery/test6.typ @@ -0,0 +1,194 @@ +#import "@preview/cetz:0.2.2": draw, vector +#import "../src/lib.typ": * + +#set page(width: auto, height: auto, margin: .5cm) + +#circuit({ + element.multiplexer( + x: 10, y: 0, w: 1, h: 6, id: "ResMux", + entries: ("000", "001", "010", "011", "101"), + h-ratio: 90%, + fill: util.colors.blue + ) + element.extender( + x: (rel: -3, to: "ResMux.west"), + y: (from: "ResMux-port-in4", to: "out"), + w: 2, h: 1, id: "Ext", + name: "Zero Ext", + name-anchor: "south", + fill: util.colors.green + ) + gates.gate-or( + x: (rel: -2, to: "ResMux.west"), + y: (from: "ResMux-port-in3", to: "out"), + w: 1, h: 1, id: "Or" + ) + gates.gate-and( + x: (rel: -2, to: "ResMux.west"), + y: (from: "ResMux-port-in2", to: "out"), + w: 1, h: 1, id: "And" + ) + element.alu( + x: (rel: -2.5, to: "Ext.west"), + y: (from: "ResMux-port-in0", to: "out"), + w: 1.5, h: 3, id: "Add", + name: text("+", size: 1.5em), + name-anchor: "name", + fill: util.colors.pink + ) + element.multiplexer( + x: (rel: -1.5, to: "Add.west"), + y: (from: "Add-port-in1", to: "out"), + w: 0.5, h: 1.5, id: "NotMux", + h-ratio: 80%, + fill: util.colors.blue + ) + gates.gate-not( + x: (rel: -2, to: "NotMux.west"), + y: (from: "NotMux-port-in1", to: "out"), + w: 1, h: 1, id: "Not" + ) + + draw.hide( + draw.line(name: "l1", + "Not-port-in0", + (rel: (-2, 0), to: ()), + (horizontal: (), vertical: "NotMux-port-in0") + ) + ) + let b = "l1.end" + draw.hide( + draw.line(name: "l2", + b, + (horizontal: (), vertical: "Add-port-in2") + ) + ) + let a = "l2.end" + + wire.wire("wB0", (b, "NotMux-port-in0"), bus: true) + wire.wire( + "wB1", (b, "Not-port-in0"), + style: "zigzag", + zigzag-ratio: 1.5, + bus: true + ) + wire.wire( + "wB2", (b, "And-port-in0"), + style: "zigzag", + zigzag-ratio: 1, + bus: true + ) + wire.wire( + "wB3", (b, "Or-port-in0"), + style: "zigzag", + zigzag-ratio: 1, + bus: true + ) + wire.intersection("wB1.zig") + wire.intersection("wB2.zig") + wire.intersection("wB2.zag") + + wire.wire("wNot", ("Not-port-out", "NotMux-port-in1"), bus: true) + wire.wire("wAddA", ("NotMux-port-out", "Add-port-in1"), bus: true) + + wire.wire("wA0", (a, "Add-port-in2"), bus: true) + wire.wire( + "wA1", (a, "And-port-in1"), + style: "zigzag", + zigzag-ratio: 0.5, + bus: true + ) + wire.wire( + "wA2", (a, "Or-port-in1"), + style: "zigzag", + zigzag-ratio: 0.5, + bus: true + ) + wire.intersection("wA1.zig") + wire.intersection("wA1.zag") + + wire.wire("wMux0", ("Add-port-out", "ResMux-port-in0"), bus: true) + wire.wire( + "wMux1", ("Add-port-out", "ResMux-port-in1"), + style: "zigzag", + zigzag-ratio: 2, + bus: true + ) + wire.wire("wMux2", ("And-port-out", "ResMux-port-in2"), bus: true) + wire.wire("wMux3", ("Or-port-out", "ResMux-port-in3"), bus: true) + wire.wire("wMux4", ("Ext-port-out", "ResMux-port-in4"), bus: true) + + wire.wire( + "wAdd", ("Add-port-out", "Ext-port-in"), + style: "zigzag", + zigzag-ratio: 0.5, + bus: true + ) + + wire.intersection("wMux1.zig") + wire.intersection("wAdd.zig") + + let c = (rel: (0, 2), to: "ResMux.north") + wire.wire("wResCtrl", (c, "ResMux.north"), bus: true) + wire.wire( + "wAddCtrl", (c, "Add.north"), + style: "zigzag", + zigzag-dir: "horizontal" + ) + + let d = (rel: (1, 0), to: "ResMux-port-out") + wire.wire("wRes", ("ResMux-port-out", d), bus: true) + + draw.content( + "wAddCtrl.zag", + [ALUControl#sub("[1]")], + anchor: "south-west", + padding: 3pt + ) + + wire.wire( + "wCout", ("Add.south", (horizontal: (), vertical: "Ext.north-east")) + ) + draw.content( + "wCout.end", + [C#sub("out")], + angle: 90deg, + anchor: "east", + padding: 3pt + ) + draw.content( + a, + [A], + angle: 90deg, + anchor: "south", + padding: 3pt + ) + draw.content( + b, + [B], + angle: 90deg, + anchor: "south", + padding: 3pt + ) + draw.content( + c, + [ALUControl#sub("[2:0]")], + angle: 90deg, + anchor: "west", + padding: 3pt + ) + draw.content( + d, + [Result], + angle: 90deg, + anchor: "north", + padding: 3pt + ) + draw.content( + ("wAdd.zig", 0.2, "wAdd.zag"), + text("[N-1]", size: 0.8em), + angle: 90deg, + anchor: "north-east", + padding: 3pt + ) +}) \ No newline at end of file