From 6174baf650ce0c4fd768cf324f48cfe7b521f26d Mon Sep 17 00:00:00 2001 From: LordBaryhobal Date: Thu, 16 May 2024 23:35:54 +0200 Subject: [PATCH] added test diagram --- gallery/test.pdf | Bin 0 -> 22533 bytes gallery/test.typ | 300 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 300 insertions(+) create mode 100644 gallery/test.pdf create mode 100644 gallery/test.typ diff --git a/gallery/test.pdf b/gallery/test.pdf new file mode 100644 index 0000000000000000000000000000000000000000..620bc68d61ecbaf222691b06f6a15d53cd7b0df9 GIT binary patch literal 22533 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 literal 0 HcmV?d00001 diff --git a/gallery/test.typ b/gallery/test.typ new file mode 100644 index 0000000..d143f40 --- /dev/null +++ b/gallery/test.typ @@ -0,0 +1,300 @@ +#import "../src/lib.typ": circuit, element, util, wire + +#set page(flipped: true) + +#circuit({ + element.block( + x: 0, y: 0, w: 1.5, h: 2.2, + id: "PC-buf", + fill: util.colors.orange, + ports: ( + west: ( + (id: "PCNext"), + ), + north: ( + (id: "CLK", clock: true), + ), + east: ( + (id: "PC"), + ), + south: ( + (id: "EN", name: "EN"), + ) + ) + ) + wire.stub("PC-buf-port-CLK", "north", name: "CLK") + wire.stub("PC-buf-port-EN", "south", name: "PCWrite") + + element.multiplexer( + x: 3, y: (from: "PC-buf-port-PC", to: "in0"), w: 1, h: 2, + id: "AdrSrc-MP", + fill: util.colors.orange, + entries: 2 + ) + wire.wire( + "wPCBuf-InstDataMgr", ( + "PC-buf-port-PC", + "AdrSrc-MP-port-in0" + ), + name: "PC", + bus: true + ) + wire.stub("AdrSrc-MP.north", "north", name: "AdrSrc") + + element.block( + x: 6, y: (from: "AdrSrc-MP-port-out", to: "A"), w: 3, h: 4, + id: "InstDataMgr", + fill: util.colors.yellow, + ports: ( + west: ( + (id: "A", name: "A"), + (id: "WD", name: "WD") + ), + north: ( + (id: "CLK", clock: true), + (id: "WE", name: "WE", vertical: true), + (id: "IRWrite", name: "IRWrite", vertical: true) + ), + east: ( + (id: "Instr", name: "Instr."), + (id: "RD", name: "RD") + ) + ), + ports-margins: ( + west: (30%, 0%), + east: (40%, 0%) + ) + ) + wire.wire( + "wAdrSrcMP-InstDataMgr", ( + "AdrSrc-MP-port-out", + "InstDataMgr-port-A" + ), + name: "Adr", + name-pos: "end", + bus: true + ) + + wire.stub("InstDataMgr-port-CLK", "north", name: "CLK") + wire.stub("InstDataMgr-port-WE", "north") + wire.stub("InstDataMgr-port-IRWrite", "north") + wire.stub("InstDataMgr-port-WD", "west") + + element.block( + x: 15, y: (from: "InstDataMgr-port-RD", to: "WD3"), w: 3, h: 4, + id: "RegFile", + fill: util.colors.pink, + ports: ( + west: ( + (id: "A1", name: "A1"), + (id: "A2", name: "A2"), + (id: "A3", name: "A3"), + (id: "WD3", name: "WD3"), + ), + north: ( + (id: "CLK", clock: true), + (id: "WE3", name: "WE3", vertical: true) + ), + east: ( + (id: "RD1", name: "RD1"), + (id: "RD2", name: "RD2"), + ) + ), + ports-margins: ( + east: (20%, 20%) + ) + ) + wire.stub("RegFile-port-CLK", "north", name: "CLK") + wire.stub("RegFile-port-WE3", "north", name: "Regwrite", vertical: true) + wire.stub("RegFile-port-A2", "west") + wire.stub("RegFile-port-RD2", "east") + + element.extender( + x: 15, y: -3.5, w: 3, h: 1, + id: "Extender", + fill: util.colors.green + ) + wire.wire( + "wExtender-ImmSrc", ( + "Extender.north", + (18, -2) + ), + style: "zigzag", + zigzag-ratio: 0%, + name: "ImmSrc", + name-pos: "end", + bus: true + ) + + let mid = ("InstDataMgr.east", 50%, "RegFile.west") + wire.wire( + "wInstDataMgr-Bus", ( + "InstDataMgr-port-Instr", + (vertical: (), horizontal: mid) + ), + name: "Instr", + name-pos: "start", + bus: true + ) + wire.wire( + "wBus", ( + (v => (v.at(0), -3.5), mid), + (horizontal: (), vertical: (0, 3.5)), + ), + bus: true + ) + wire.wire( + "wBus-RegFile-A1", ( + "RegFile-port-A1", + (horizontal: mid, vertical: ()), + ), + name: "RS1", + name-pos: "end", + slice: (19, 15), + reverse: true, + bus: true + ) + wire.wire( + "wBus-RegFile-A3", ( + "RegFile-port-A3", + (horizontal: mid, vertical: ()), + ), + name: "RD", + name-pos: "end", + slice: (11, 7), + reverse: true, + bus: true + ) + wire.wire( + "wBus-Extender", ( + "Extender-port-in", + (horizontal: mid, vertical: ()), + ), + slice: (31, 7), + reverse: true, + bus: true + ) + + element.alu( + x: 22, y: (from: "RegFile-port-RD1", to: "in1"), w: 1, h: 2, + id: "ALU", + fill: util.colors.purple + ) + wire.wire( + "wRegFile-ALU", ( + "RegFile-port-RD1", + "ALU-port-in1" + ), + name: ("A", "SrcA"), + bus: true + ) + + element.block( + x: 26, y: (from: "ALU-port-out", to: "in"), w: 1.5, h: 2, + id: "OutBuf", + fill: util.colors.orange, + ports: ( + west: ( + (id: "in"), + ), + north: ( + (id: "CLK", clock: true), + ), + east: ( + (id: "out"), + ) + ) + ) + wire.stub("OutBuf-port-CLK", "north", name: "CLK") + wire.wire( + "wALU-OutBuf", ( + "ALU-port-out", + "OutBuf-port-in" + ), + name: "ALUResult", + bus: true + ) + + element.multiplexer( + x: 30, y: (from: "OutBuf-port-out", to: "in0"), w: 1, h: 2.5, + id: "Res-MP", + fill: util.colors.orange, + entries: 3 + ) + wire.stub("Res-MP.north", "north", name: "ResultSrc") + wire.stub("Res-MP-port-in2", "west") + wire.wire( + "wOutBuf-ResMP", ( + "OutBuf-port-out", + "Res-MP-port-in0" + ), + name: "ALUOut", + bus: true + ) + + wire.wire( + "wExt-ALU", ( + "Extender-port-out", + "ALU-port-in2", + ), + name: ("ImmExt", "SrcB"), + bus: true, + style: "zigzag", + zigzag-ratio: 60% + ) + + wire.wire( + "wInstDataMgr-ResMP", ( + "InstDataMgr-port-RD", + "Res-MP-port-in1" + ), + style: "dodge", + dodge-y: -4, + dodge-sides: ("east", "west"), + name: "Data", + name-pos: "start", + bus: true + ) + + wire.wire( + "wResMP-AdrSrc", ( + "Res-MP-port-out", + "AdrSrc-MP-port-in1" + ), + style: "dodge", + dodge-y: -5, + dodge-sides: ("east", "west"), + dodge-margins: (0.5, 1), + bus: true + ) + + wire.wire( + "wResMP-RegFile", ( + "Res-MP-port-out", + "RegFile-port-WD3" + ), + style: "dodge", + dodge-y: -5, + dodge-sides: ("east", "west"), + dodge-margins: (0.5, 1), + bus: true + ) + + wire.wire( + "wResMP-PCBuf", ( + "Res-MP-port-out", + "PC-buf-port-PCNext" + ), + style: "dodge", + dodge-y: -5, + dodge-sides: ("east", "west"), + dodge-margins: (0.5, 1.5), + name: "PCNext", + name-pos: "end", + bus: true + ) + + + wire.intersection("wResMP-RegFile.dodge-end") + wire.intersection("wResMP-AdrSrc.dodge-end") +}) \ No newline at end of file