forked from HEL/circuiteria
		
	
		
			
				
	
	
		
			143 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Typst
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Typst
		
	
	
	
	
	
| #import "example.typ": example
 | |
| 
 | |
| #let alu = example(```
 | |
| element.alu(x: 0, y: 0, w: 1, h: 2, id: "alu")
 | |
| wire.stub("alu-port-in1", "west")
 | |
| wire.stub("alu-port-in2", "west")
 | |
| wire.stub("alu-port-out", "east")
 | |
| ```)
 | |
| 
 | |
| #let block = example(```
 | |
| element.block(
 | |
|   x: 0, y: 0, w: 2, h: 2, id: "block",
 | |
|   ports: (
 | |
|     north: ((id: "clk", clock: true),),
 | |
|     west: ((id: "in1", name: "A"),
 | |
|            (id: "in2", name: "B")),
 | |
|     east: ((id: "out", name: "C"),)
 | |
|   )
 | |
| )
 | |
| wire.stub("block-port-clk", "north")
 | |
| wire.stub("block-port-in1", "west")
 | |
| wire.stub("block-port-in2", "west")
 | |
| wire.stub("block-port-out", "east")
 | |
| ```)
 | |
| 
 | |
| #let extender = example(```
 | |
| element.extender(
 | |
|   x: 0, y: 0, w: 3, h: 1,
 | |
|   id: "extender"
 | |
| )
 | |
| wire.stub("extender-port-in", "west")
 | |
| wire.stub("extender-port-out", "east")
 | |
| ```)
 | |
| 
 | |
| #let multiplexer = example(```
 | |
| element.multiplexer(
 | |
|   x: 0, y: 0, w: 1, h: 3,
 | |
|   id: "multiplexer",
 | |
|   entries: 3
 | |
| )
 | |
| wire.stub("multiplexer.north", "north")
 | |
| wire.stub("multiplexer-port-out", "east")
 | |
| 
 | |
| element.multiplexer(
 | |
|   x: 0, y: -4, w: 1, h: 3,
 | |
|   id: "multiplexer2",
 | |
|   entries: ("A", "B", "C")
 | |
| )
 | |
| wire.stub("multiplexer2.south", "south")
 | |
| wire.stub("multiplexer2-port-out", "east")
 | |
| 
 | |
| for i in range(3) {
 | |
|   wire.stub("multiplexer-port-in" + str(i), "west")
 | |
|   wire.stub("multiplexer2-port-in" + str(i), "west")
 | |
| }
 | |
| ```)
 | |
| 
 | |
| #let wires = example(```
 | |
| for i in range(3) {
 | |
|   draw.circle((i * 3, 0), radius: .1, name: "p" + str(i * 2))
 | |
|   draw.circle((i * 3 + 2, 1), radius: .1, name: "p" + str(i * 2 + 1))
 | |
|   draw.content((i * 3 + 1, -1), raw(wire.wire-styles.at(i)))
 | |
| }
 | |
| wire.wire("w1", ("p0", "p1"), style: "direct")
 | |
| wire.wire("w2", ("p2", "p3"), style: "zigzag")
 | |
| wire.wire("w3", ("p4", "p5"), style: "dodge",
 | |
|           dodge-y: -0.5, dodge-margins: (0.5, 0.5))
 | |
| ```, vertical: true)
 | |
| 
 | |
| #let stub = example(```
 | |
| draw.circle((0, 0), radius: .1, name: "p")
 | |
| wire.stub("p", "north", name: "north", length: 1)
 | |
| wire.stub("p", "east", name: "east", vertical: true)
 | |
| wire.stub("p", "south", name: "south", length: 15pt)
 | |
| wire.stub("p", "west", name: "west", length: 3em)
 | |
| ```)
 | |
| 
 | |
| #let gate-and = example(```
 | |
| gates.gate-and(x: 0, y: 0, w: 1.5, h: 1.5)
 | |
| gates.gate-and(x: 3, y: 0, w: 1.5, h: 1.5, inverted: "all")
 | |
| ```, vertical: true)
 | |
| 
 | |
| #let gate-nand = example(```
 | |
| gates.gate-nand(x: 0, y: 0, w: 1.5, h: 1.5)
 | |
| gates.gate-nand(x: 3, y: 0, w: 1.5, h: 1.5, inverted: "all")
 | |
| ```, vertical: true)
 | |
| 
 | |
| #let gate-buf = example(```
 | |
| gates.gate-buf(x: 0, y: 0, w: 1.5, h: 1.5)
 | |
| gates.gate-buf(x: 3, y: 0, w: 1.5, h: 1.5, inverted: "all")
 | |
| ```, vertical: true)
 | |
| 
 | |
| #let gate-not = example(```
 | |
| gates.gate-not(x: 0, y: 0, w: 1.5, h: 1.5)
 | |
| gates.gate-not(x: 3, y: 0, w: 1.5, h: 1.5, inverted: "all")
 | |
| ```, vertical: true)
 | |
| 
 | |
| #let gate-or = example(```
 | |
| gates.gate-or(x: 0, y: 0, w: 1.5, h: 1.5)
 | |
| gates.gate-or(x: 3, y: 0, w: 1.5, h: 1.5, inverted: "all")
 | |
| ```, vertical: true)
 | |
| 
 | |
| #let gate-nor = example(```
 | |
| gates.gate-nor(x: 0, y: 0, w: 1.5, h: 1.5)
 | |
| gates.gate-nor(x: 3, y: 0, w: 1.5, h: 1.5, inverted: "all")
 | |
| ```, vertical: true)
 | |
| 
 | |
| #let gate-xor = example(```
 | |
| gates.gate-xor(x: 0, y: 0, w: 1.5, h: 1.5)
 | |
| gates.gate-xor(x: 3, y: 0, w: 1.5, h: 1.5, inverted: "all")
 | |
| ```, vertical: true)
 | |
| 
 | |
| #let gate-xnor = example(```
 | |
| gates.gate-xnor(x: 0, y: 0, w: 1.5, h: 1.5)
 | |
| gates.gate-xnor(x: 3, y: 0, w: 1.5, h: 1.5, inverted: "all")
 | |
| ```, vertical: true)
 | |
| 
 | |
| #let group = example(```
 | |
| element.group(
 | |
|   id: "g1", name: "Group 1", stroke: (dash: "dashed"),
 | |
|   {
 | |
|     element.block(id: "b1", w: 2, h: 2,
 | |
|       x: 0, y: 1.5,
 | |
|       ports: (east: ((id: "out"),)),
 | |
|       fill: util.colors.green
 | |
|     )
 | |
|     element.block(id: "b2", w: 2, h: 1,
 | |
|       x: 0, y: 0,
 | |
|       ports: (east: ((id: "out"),)),
 | |
|       fill: util.colors.orange
 | |
|     )
 | |
|   }
 | |
| )
 | |
| element.block(id: "b3", w: 2, h: 3,
 | |
|   x: (rel: 1, to: "g1.east"),
 | |
|   y: (from: "b1-port-out", to: "in1"),
 | |
|   ports: (west: ((id: "in1"), (id: "in2"))),
 | |
|   fill: util.colors.blue
 | |
| )
 | |
| wire.wire("w1", ("b1-port-out", "b3-port-in1"))
 | |
| wire.wire("w2", ("b2-port-out", "b3-port-in2"),
 | |
|           style: "zigzag")
 | |
| ```) |