Files
2026-06-23 10:04:14 -04:00

768 lines
17 KiB
Python

load("units.zen", "Voltage", "Impedance")
Net = builtin.net_type(
"Net",
symbol=Symbol,
voltage=field(Voltage | None, default=None),
impedance=field(Impedance | None, default=None),
)
Power = builtin.net_type(
"Power",
symbol=field(Symbol, default=Symbol("kicad-symbols/power.kicad_symdir/VCC.kicad_sym")),
voltage=field(Voltage | None, default=None),
)
Ground = builtin.net_type(
"Ground",
symbol=field(Symbol, default=Symbol("kicad-symbols/power.kicad_symdir/GND.kicad_sym")),
voltage=field(Voltage, default=Voltage("0V")),
)
NotConnected = builtin.not_connected
Analog = builtin.net_type("Analog")
Pwm = builtin.net_type("Pwm")
Gpio = builtin.net_type("Gpio")
DiffPair = interface(
P=Net(),
N=Net(),
impedance=field(Impedance | None, default=None),
)
Can = interface(
CAN_H=Net(),
CAN_L=Net(),
)
CanTtl = interface(
TX=Net(),
RX=Net(),
)
Csi = interface(
CLK=DiffPair(impedance=Impedance(100)),
D0=DiffPair(impedance=Impedance(100)),
D1=DiffPair(impedance=Impedance(100)),
D2=DiffPair(impedance=Impedance(100)),
D3=DiffPair(impedance=Impedance(100)),
)
Dvp8 = interface(
XCLK=Net(),
PCLK=Net(),
HREF=Net(),
VSYNC=Net(),
D0=Net(),
D1=Net(),
D2=Net(),
D3=Net(),
D4=Net(),
D5=Net(),
D6=Net(),
D7=Net(),
)
Dvp10 = interface(
XCLK=Net(),
PCLK=Net(),
HREF=Net(),
VSYNC=Net(),
D0=Net(),
D1=Net(),
D2=Net(),
D3=Net(),
D4=Net(),
D5=Net(),
D6=Net(),
D7=Net(),
D8=Net(),
D9=Net(),
)
Dvp12 = interface(
XCLK=Net(),
PCLK=Net(),
HREF=Net(),
VSYNC=Net(),
D0=Net(),
D1=Net(),
D2=Net(),
D3=Net(),
D4=Net(),
D5=Net(),
D6=Net(),
D7=Net(),
D8=Net(),
D9=Net(),
D10=Net(),
D11=Net(),
)
Dvp16 = interface(
XCLK=Net(),
PCLK=Net(),
HREF=Net(),
VSYNC=Net(),
D0=Net(),
D1=Net(),
D2=Net(),
D3=Net(),
D4=Net(),
D5=Net(),
D6=Net(),
D7=Net(),
D8=Net(),
D9=Net(),
D10=Net(),
D11=Net(),
D12=Net(),
D13=Net(),
D14=Net(),
D15=Net(),
)
DisplayPort = interface(
AUX=DiffPair(impedance=Impedance(100)),
ML0=DiffPair(impedance=Impedance(100)),
ML1=DiffPair(impedance=Impedance(100)),
ML2=DiffPair(impedance=Impedance(100)),
ML3=DiffPair(impedance=Impedance(100)),
HPD=Net(),
)
Dsi = interface(
CLK=DiffPair(impedance=Impedance(100)),
D0=DiffPair(impedance=Impedance(100)),
D1=DiffPair(impedance=Impedance(100)),
D2=DiffPair(impedance=Impedance(100)),
D3=DiffPair(impedance=Impedance(100)),
)
Edp = interface(
AUX=DiffPair(impedance=Impedance(100)),
TX0=DiffPair(impedance=Impedance(100)),
TX1=DiffPair(impedance=Impedance(100)),
TX2=DiffPair(impedance=Impedance(100)),
TX3=DiffPair(impedance=Impedance(100)),
)
Emmc = interface(
CLK=Net(impedance=Impedance(50)),
CMD=Net(impedance=Impedance(50)),
DAT0=Net(impedance=Impedance(50)),
DAT1=Net(impedance=Impedance(50)),
DAT2=Net(impedance=Impedance(50)),
DAT3=Net(impedance=Impedance(50)),
DAT4=Net(impedance=Impedance(50)),
DAT5=Net(impedance=Impedance(50)),
DAT6=Net(impedance=Impedance(50)),
DAT7=Net(impedance=Impedance(50)),
DS=Net(impedance=Impedance(50)),
RST_N=Net(),
)
Ethernet = interface(
TX=DiffPair(impedance=Impedance(100)),
RX=DiffPair(impedance=Impedance(100)),
)
Ethernet_Phy = interface(
TR0=DiffPair(impedance=Impedance(100)),
TR1=DiffPair(impedance=Impedance(100)),
TR2=DiffPair(impedance=Impedance(100)),
TR3=DiffPair(impedance=Impedance(100)),
)
Ethernet_1000BaseT = interface(
BI_DA=DiffPair(impedance=Impedance(100)),
BI_DB=DiffPair(impedance=Impedance(100)),
BI_DC=DiffPair(impedance=Impedance(100)),
BI_DD=DiffPair(impedance=Impedance(100)),
)
Hdmi = interface(
CLK=DiffPair(impedance=Impedance(100)),
D0=DiffPair(impedance=Impedance(100)),
D1=DiffPair(impedance=Impedance(100)),
D2=DiffPair(impedance=Impedance(100)),
CEC=Net(),
SCL=Net(),
SDA=Net(),
HPD=Net(),
)
I2c = interface(
SDA=Net(),
SCL=Net(),
)
I2s = interface(
BCLK=Net(),
LRCLK=Net(),
SDATA=Net(),
MCLK=Net(),
)
I2sBidirectional = interface(
BCLK=Net(),
LRCLK=Net(),
SDATA_IN=Net(),
SDATA_OUT=Net(),
MCLK=Net(),
)
I3c = interface(
SDA=Net(),
SCL=Net(),
)
Jtag = interface(
TDI=Net(),
TDO=Net(),
TCK=Net(),
TMS=Net(),
TRST=Net(),
)
Lcd = interface(
VSYNC=Net(),
HSYNC=Net(),
DE=Net(),
CLK=Net(),
R0=Net(),
R1=Net(),
R2=Net(),
R3=Net(),
R4=Net(),
R5=Net(),
R6=Net(),
R7=Net(),
G0=Net(),
G1=Net(),
G2=Net(),
G3=Net(),
G4=Net(),
G5=Net(),
G6=Net(),
G7=Net(),
B0=Net(),
B1=Net(),
B2=Net(),
B3=Net(),
B4=Net(),
B5=Net(),
B6=Net(),
B7=Net(),
)
Lvds = interface(
CLK=DiffPair(impedance=Impedance(100)),
DATA0=DiffPair(impedance=Impedance(100)),
DATA1=DiffPair(impedance=Impedance(100)),
DATA2=DiffPair(impedance=Impedance(100)),
)
Mdio = interface(
MDC=Net(),
MDIO=Net(),
)
Mdi = interface(
A=DiffPair(impedance=Impedance(100)),
B=DiffPair(impedance=Impedance(100)),
C=DiffPair(impedance=Impedance(100)),
D=DiffPair(impedance=Impedance(100)),
)
Mii = interface(
TXD0=Net(),
TXD1=Net(),
TXD2=Net(),
TXD3=Net(),
TX_EN=Net(),
TX_CLK=Net(),
RXD0=Net(),
RXD1=Net(),
RXD2=Net(),
RXD3=Net(),
RX_DV=Net(),
RX_CLK=Net(),
RX_ER=Net(),
COL=Net(),
CRS=Net(),
)
Mipi = interface(
CLK=DiffPair(impedance=Impedance(100)),
DATA0=DiffPair(impedance=Impedance(100)),
DATA1=DiffPair(impedance=Impedance(100)),
DATA2=DiffPair(impedance=Impedance(100)),
DATA3=DiffPair(impedance=Impedance(100)),
)
OneWire = interface(
DQ=Net(),
)
Opamp = interface(
IN_P=Net(),
IN_N=Net(),
OUT=Net(),
)
OscPair = interface(
XIN=Net(),
XOUT=Net(),
)
Pcie = interface(
TX=DiffPair(impedance=Impedance(85)),
RX=DiffPair(impedance=Impedance(85)),
REFCLK=DiffPair(impedance=Impedance(85)),
PERST=Net(),
WAKE=Net(),
)
PcieGen3x1Lane = interface(
TX=DiffPair(impedance=Impedance(85)),
RX=DiffPair(impedance=Impedance(85)),
REFCLK=DiffPair(impedance=Impedance(85)),
RESET_N=Net(),
WAKE_N=Net(),
CLK_REQ_N=Net(),
)
PcieGen3x2Lane = interface(
TX0=DiffPair(impedance=Impedance(85)),
RX0=DiffPair(impedance=Impedance(85)),
TX1=DiffPair(impedance=Impedance(85)),
RX1=DiffPair(impedance=Impedance(85)),
REFCLK=DiffPair(impedance=Impedance(85)),
RESET_N=Net(),
WAKE_N=Net(),
CLK_REQ_N=Net(),
)
PcieGen4x1Lane = interface(
TX=DiffPair(impedance=Impedance(85)),
RX=DiffPair(impedance=Impedance(85)),
REFCLK=DiffPair(impedance=Impedance(85)),
RESET_N=Net(),
WAKE_N=Net(),
CLK_REQ_N=Net(),
)
PcieGen4x2Lane = interface(
TX0=DiffPair(impedance=Impedance(85)),
RX0=DiffPair(impedance=Impedance(85)),
TX1=DiffPair(impedance=Impedance(85)),
RX1=DiffPair(impedance=Impedance(85)),
REFCLK=DiffPair(impedance=Impedance(85)),
RESET_N=Net(),
WAKE_N=Net(),
CLK_REQ_N=Net(),
)
PcieGen4x4Lane = interface(
TX0=DiffPair(impedance=Impedance(85)),
RX0=DiffPair(impedance=Impedance(85)),
TX1=DiffPair(impedance=Impedance(85)),
RX1=DiffPair(impedance=Impedance(85)),
TX2=DiffPair(impedance=Impedance(85)),
RX2=DiffPair(impedance=Impedance(85)),
TX3=DiffPair(impedance=Impedance(85)),
RX3=DiffPair(impedance=Impedance(85)),
REFCLK=DiffPair(impedance=Impedance(85)),
RESET_N=Net(),
WAKE_N=Net(),
CLK_REQ_N=Net(),
)
PcieGen4x8Lane = interface(
TX0=DiffPair(impedance=Impedance(85)),
RX0=DiffPair(impedance=Impedance(85)),
TX1=DiffPair(impedance=Impedance(85)),
RX1=DiffPair(impedance=Impedance(85)),
TX2=DiffPair(impedance=Impedance(85)),
RX2=DiffPair(impedance=Impedance(85)),
TX3=DiffPair(impedance=Impedance(85)),
RX3=DiffPair(impedance=Impedance(85)),
TX4=DiffPair(impedance=Impedance(85)),
RX4=DiffPair(impedance=Impedance(85)),
TX5=DiffPair(impedance=Impedance(85)),
RX5=DiffPair(impedance=Impedance(85)),
TX6=DiffPair(impedance=Impedance(85)),
RX6=DiffPair(impedance=Impedance(85)),
TX7=DiffPair(impedance=Impedance(85)),
RX7=DiffPair(impedance=Impedance(85)),
REFCLK=DiffPair(impedance=Impedance(85)),
RESET_N=Net(),
WAKE_N=Net(),
CLK_REQ_N=Net(),
)
PcieGen4x16Lane = interface(
TX0=DiffPair(impedance=Impedance(85)),
RX0=DiffPair(impedance=Impedance(85)),
TX1=DiffPair(impedance=Impedance(85)),
RX1=DiffPair(impedance=Impedance(85)),
TX2=DiffPair(impedance=Impedance(85)),
RX2=DiffPair(impedance=Impedance(85)),
TX3=DiffPair(impedance=Impedance(85)),
RX3=DiffPair(impedance=Impedance(85)),
TX4=DiffPair(impedance=Impedance(85)),
RX4=DiffPair(impedance=Impedance(85)),
TX5=DiffPair(impedance=Impedance(85)),
RX5=DiffPair(impedance=Impedance(85)),
TX6=DiffPair(impedance=Impedance(85)),
RX6=DiffPair(impedance=Impedance(85)),
TX7=DiffPair(impedance=Impedance(85)),
RX7=DiffPair(impedance=Impedance(85)),
TX8=DiffPair(impedance=Impedance(85)),
RX8=DiffPair(impedance=Impedance(85)),
TX9=DiffPair(impedance=Impedance(85)),
RX9=DiffPair(impedance=Impedance(85)),
TX10=DiffPair(impedance=Impedance(85)),
RX10=DiffPair(impedance=Impedance(85)),
TX11=DiffPair(impedance=Impedance(85)),
RX11=DiffPair(impedance=Impedance(85)),
TX12=DiffPair(impedance=Impedance(85)),
RX12=DiffPair(impedance=Impedance(85)),
TX13=DiffPair(impedance=Impedance(85)),
RX13=DiffPair(impedance=Impedance(85)),
TX14=DiffPair(impedance=Impedance(85)),
RX14=DiffPair(impedance=Impedance(85)),
TX15=DiffPair(impedance=Impedance(85)),
RX15=DiffPair(impedance=Impedance(85)),
REFCLK=DiffPair(impedance=Impedance(85)),
RESET_N=Net(),
WAKE_N=Net(),
CLK_REQ_N=Net(),
)
QLink = interface(
CLK=DiffPair(impedance=Impedance(100)),
L0=DiffPair(impedance=Impedance(100)),
L1=DiffPair(impedance=Impedance(100)),
L2=DiffPair(impedance=Impedance(100)),
L3=DiffPair(impedance=Impedance(100)),
L4=DiffPair(impedance=Impedance(100)),
)
Qspi = interface(
CS=Net(impedance=Impedance(50)),
CLK=Net(impedance=Impedance(50)),
IO0=Net(impedance=Impedance(50)),
IO1=Net(impedance=Impedance(50)),
IO2=Net(impedance=Impedance(50)),
IO3=Net(impedance=Impedance(50)),
)
Rgmii = interface(
TXD0=Net(impedance=Impedance(50)),
TXD1=Net(impedance=Impedance(50)),
TXD2=Net(impedance=Impedance(50)),
TXD3=Net(impedance=Impedance(50)),
TX_CTL=Net(impedance=Impedance(50)),
TXC=Net(impedance=Impedance(50)),
RXD0=Net(impedance=Impedance(50)),
RXD1=Net(impedance=Impedance(50)),
RXD2=Net(impedance=Impedance(50)),
RXD3=Net(impedance=Impedance(50)),
RX_CTL=Net(impedance=Impedance(50)),
RXC=Net(impedance=Impedance(50)),
)
Rmii = interface(
TXD0=Net(),
TXD1=Net(),
TX_EN=Net(),
RXD0=Net(),
RXD1=Net(),
CRS_DV=Net(),
RX_ER=Net(),
REF_CLK=Net(),
)
Rs232 = interface(
TX=Net("TX"),
RX=Net("RX"),
RTS=Net("RTS"),
CTS=Net("CTS"),
DTR=Net("DTR"),
DSR=Net("DSR"),
DCD=Net("DCD"),
RI=Net("RI"),
)
Rs422 = interface(
TX=DiffPair(impedance=Impedance(100)),
RX=DiffPair(impedance=Impedance(100)),
RTS=DiffPair(impedance=Impedance(100)),
CTS=DiffPair(impedance=Impedance(100)),
)
Rs485 = Rs422
Sata = interface(
TX=DiffPair(impedance=Impedance(100)),
RX=DiffPair(impedance=Impedance(100)),
)
Sdio = interface(
CLK=Net(impedance=Impedance(50)),
CMD=Net(impedance=Impedance(50)),
DAT0=Net(impedance=Impedance(50)),
DAT1=Net(impedance=Impedance(50)),
DAT2=Net(impedance=Impedance(50)),
DAT3=Net(impedance=Impedance(50)),
)
Sdmmc = interface(
CLK=Net(impedance=Impedance(50)),
CMD=Net(impedance=Impedance(50)),
DAT0=Net(impedance=Impedance(50)),
DAT1=Net(impedance=Impedance(50)),
DAT2=Net(impedance=Impedance(50)),
DAT3=Net(impedance=Impedance(50)),
DAT4=Net(impedance=Impedance(50)),
DAT5=Net(impedance=Impedance(50)),
DAT6=Net(impedance=Impedance(50)),
DAT7=Net(impedance=Impedance(50)),
)
Lpddr4Channel = interface(
CA0=Net(impedance=Impedance(40)),
CA1=Net(impedance=Impedance(40)),
CA2=Net(impedance=Impedance(40)),
CA3=Net(impedance=Impedance(40)),
CA4=Net(impedance=Impedance(40)),
CA5=Net(impedance=Impedance(40)),
DQ0=Net(impedance=Impedance(40)),
DQ1=Net(impedance=Impedance(40)),
DQ2=Net(impedance=Impedance(40)),
DQ3=Net(impedance=Impedance(40)),
DQ4=Net(impedance=Impedance(40)),
DQ5=Net(impedance=Impedance(40)),
DQ6=Net(impedance=Impedance(40)),
DQ7=Net(impedance=Impedance(40)),
DQ8=Net(impedance=Impedance(40)),
DQ9=Net(impedance=Impedance(40)),
DQ10=Net(impedance=Impedance(40)),
DQ11=Net(impedance=Impedance(40)),
DQ12=Net(impedance=Impedance(40)),
DQ13=Net(impedance=Impedance(40)),
DQ14=Net(impedance=Impedance(40)),
DQ15=Net(impedance=Impedance(40)),
CK=DiffPair(impedance=Impedance(80)),
CKE0=Net(impedance=Impedance(40)),
CS0=Net(impedance=Impedance(40)),
DMI0=Net(impedance=Impedance(40)),
DMI1=Net(impedance=Impedance(40)),
DQS0=DiffPair(impedance=Impedance(80)),
DQS1=DiffPair(impedance=Impedance(80)),
ODT_CA=Net(impedance=Impedance(40)),
)
Sdram16 = interface(
A0=Net(),
A1=Net(),
A2=Net(),
A3=Net(),
A4=Net(),
A5=Net(),
A6=Net(),
A7=Net(),
A8=Net(),
A9=Net(),
A10=Net(),
A11=Net(),
A12=Net(),
BA0=Net(),
BA1=Net(),
DQ0=Net(),
DQ1=Net(),
DQ2=Net(),
DQ3=Net(),
DQ4=Net(),
DQ5=Net(),
DQ6=Net(),
DQ7=Net(),
DQ8=Net(),
DQ9=Net(),
DQ10=Net(),
DQ11=Net(),
DQ12=Net(),
DQ13=Net(),
DQ14=Net(),
DQ15=Net(),
CLK=Net(),
CKE=Net(),
CS_N=Net(),
RAS_N=Net(),
CAS_N=Net(),
WE_N=Net(),
DQM0=Net(),
DQM1=Net(),
)
Sdram32 = interface(
A0=Net(),
A1=Net(),
A2=Net(),
A3=Net(),
A4=Net(),
A5=Net(),
A6=Net(),
A7=Net(),
A8=Net(),
A9=Net(),
A10=Net(),
A11=Net(),
A12=Net(),
BA0=Net(),
BA1=Net(),
DQ0=Net(),
DQ1=Net(),
DQ2=Net(),
DQ3=Net(),
DQ4=Net(),
DQ5=Net(),
DQ6=Net(),
DQ7=Net(),
DQ8=Net(),
DQ9=Net(),
DQ10=Net(),
DQ11=Net(),
DQ12=Net(),
DQ13=Net(),
DQ14=Net(),
DQ15=Net(),
DQ16=Net(),
DQ17=Net(),
DQ18=Net(),
DQ19=Net(),
DQ20=Net(),
DQ21=Net(),
DQ22=Net(),
DQ23=Net(),
DQ24=Net(),
DQ25=Net(),
DQ26=Net(),
DQ27=Net(),
DQ28=Net(),
DQ29=Net(),
DQ30=Net(),
DQ31=Net(),
CLK=Net(),
CKE=Net(),
CS_N=Net(),
RAS_N=Net(),
CAS_N=Net(),
WE_N=Net(),
DQM0=Net(),
DQM1=Net(),
DQM2=Net(),
DQM3=Net(),
)
SmBus = I2c
Spi = interface(
CS=Net(),
MISO=Net(),
MOSI=Net(),
CLK=Net(),
)
Spmi = interface(
CLK=Net(impedance=Impedance(50)),
DATA=Net(impedance=Impedance(50)),
)
Swd = interface(
SWDIO=Net(),
SWCLK=Net(),
)
Uart = interface(
TX=Net(),
RX=Net(),
)
Usart = interface(
TX=Net(),
RX=Net(),
CK=Net(),
RTS=Net(),
CTS=Net(),
)
def UartPair(name_a: str, name_b: str) -> (Uart, Uart):
txa_rxb = Net(name_a + "_TX/" + name_b + "_RX")
rxa_txb = Net(name_a + "_RX/" + name_b + "_TX")
uart_a = Uart(name=name_a, TX=txa_rxb, RX=rxa_txb)
uart_b = Uart(name=name_b, TX=rxa_txb, RX=txa_rxb)
return (uart_a, uart_b)
def UsartPair(name_a: str, name_b: str) -> (Usart, Usart):
txa_rxb = Net(name_a + "_TX/" + name_b + "_RX")
rxa_txb = Net(name_a + "_RX/" + name_b + "_TX")
rtsa_ctsb = Net(name_a + "_RTS/" + name_b + "_CTS")
ctsa_rtsb = Net(name_a + "_CTS/" + name_b + "_RTS")
ck = Net(name_a + "_CK/" + name_b + "_CK")
usart_a = Usart(name=name_a, TX=txa_rxb, RX=rxa_txb, CK=ck, RTS=rtsa_ctsb, CTS=ctsa_rtsb)
usart_b = Usart(name=name_b, TX=rxa_txb, RX=txa_rxb, CK=ck, RTS=ctsa_rtsb, CTS=rtsa_ctsb)
return (usart_a, usart_b)
Ufs = interface(
REFCLK=Net(),
RESET_N=Net(),
L0_RX=DiffPair(impedance=Impedance(100)),
L0_TX=DiffPair(impedance=Impedance(100)),
L1_RX=DiffPair(impedance=Impedance(100)),
L1_TX=DiffPair(impedance=Impedance(100)),
)
Usb2 = interface(
D=DiffPair(impedance=Impedance(90)),
)
Usb3 = interface(
D=DiffPair(impedance=Impedance(90)),
SSTX=DiffPair(impedance=Impedance(90)),
SSRX=DiffPair(impedance=Impedance(90)),
)
UsbTypeC = interface(
D=DiffPair(impedance=Impedance(90)),
SSTX0=DiffPair(impedance=Impedance(90)),
SSRX0=DiffPair(impedance=Impedance(90)),
SSTX1=DiffPair(impedance=Impedance(90)),
SSRX1=DiffPair(impedance=Impedance(90)),
SBU1=Net(),
SBU2=Net(),
CC1=Net(),
CC2=Net(),
)
def Usb2TypeC(usb2: Usb2, CC1: Net, CC2: Net) -> UsbTypeC:
return UsbTypeC(
D=usb2.D,
SSTX0=DiffPair(P=NotConnected(), N=NotConnected()),
SSRX0=DiffPair(P=NotConnected(), N=NotConnected()),
SSTX1=DiffPair(P=NotConnected(), N=NotConnected()),
SSRX1=DiffPair(P=NotConnected(), N=NotConnected()),
SBU1=NotConnected(),
SBU2=NotConnected(),
CC1=CC1,
CC2=CC2,
)