176 lines
5.2 KiB
Python
176 lines
5.2 KiB
Python
|
import os
|
||
|
import subprocess
|
||
|
|
||
|
from amaranth.build import *
|
||
|
from amaranth.vendor.xilinx_7series import *
|
||
|
from .resources import *
|
||
|
|
||
|
|
||
|
__all__ = ["ArtyZ720Platform"]
|
||
|
|
||
|
|
||
|
class ArtyZ720Platform(Xilinx7SeriesPlatform):
|
||
|
device = "xc7z020"
|
||
|
package = "clg400"
|
||
|
speed = "1"
|
||
|
default_clk = "clk125"
|
||
|
resources = [
|
||
|
Resource("clk125", 0,
|
||
|
Pins("H16", dir="i"), Clock(125e6), Attrs(IOSTANDARD="LVCMOS33")),
|
||
|
|
||
|
*SwitchResources(
|
||
|
pins="M20 M19",
|
||
|
attrs=Attrs(IOSTANDARD="LVCMOS33")),
|
||
|
|
||
|
RGBLEDResource(0,
|
||
|
r="N15", g="G17", b="L15", # LD4
|
||
|
attrs=Attrs(IOSTANDARD="LVCMOS33")),
|
||
|
RGBLEDResource(1, # LD5
|
||
|
r="M15", g="L14", b="G14",
|
||
|
attrs=Attrs(IOSTANDARD="LVCMOS33")),
|
||
|
|
||
|
*LEDResources(
|
||
|
pins="R14 P14 N16 M14",
|
||
|
attrs=Attrs(IOSTANDARD="LVCMOS33")),
|
||
|
|
||
|
*ButtonResources(
|
||
|
pins="D19 D20 L20 L19",
|
||
|
attrs=Attrs(IOSTANDARD="LVCMOS33")),
|
||
|
|
||
|
Resource("audio", 0,
|
||
|
Subsignal("pwm", Pins("R18", dir="o")),
|
||
|
Subsignal("sd", PinsN("T17", dir="o")),
|
||
|
Attrs(IOSTANDARD="LVCMOS33")),
|
||
|
|
||
|
Resource("crypto_sda", 0, # ATSHA204A
|
||
|
Pins("J15", dir="io"),
|
||
|
Attrs(IOSTANDARD="LVCMOS33")),
|
||
|
|
||
|
Resource("hdmi_rx", 0, # J10
|
||
|
Subsignal("cec", Pins("H17", dir="io")),
|
||
|
Subsignal("clk", DiffPairs("N18", "P19", dir="i"),
|
||
|
Attrs(IOSTANDARD="TMDS_33")),
|
||
|
Subsignal("d", DiffPairs("V20 T20 N20", "W20 U20 P20", dir="i"),
|
||
|
Attrs(IOSTANDARD="TMDS_33")),
|
||
|
Subsignal("hpd", Pins("T19", dir="o")),
|
||
|
Subsignal("scl", Pins("U14", dir="io")),
|
||
|
Subsignal("sda", Pins("U15", dir="io")),
|
||
|
Attrs(IOSTANDARD="LVCMOS33")),
|
||
|
|
||
|
Resource("hdmi_tx", 0, # J11
|
||
|
Subsignal("cec", Pins("G15", dir="io")),
|
||
|
Subsignal("clk", DiffPairs("L16", "L17", dir="o"),
|
||
|
Attrs(IOSTANDARD="TMDS_33")),
|
||
|
Subsignal("d", DiffPairs("K17 K19 J18", "K18 J19 H18", dir="o"),
|
||
|
Attrs(IOSTANDARD="TMDS_33")),
|
||
|
Subsignal("hpd", PinsN("R19", dir="i")),
|
||
|
Subsignal("scl", Pins("M17", dir="io")),
|
||
|
Subsignal("sda", Pins("M18", dir="io")),
|
||
|
Attrs(IOSTANDARD="LVCMOS33"))
|
||
|
]
|
||
|
connectors = [
|
||
|
Connector("pmod", 0, "Y18 Y19 Y16 Y17 - - U18 U19 W18 W19 - -"), # JA
|
||
|
Connector("pmod", 1, "W14 Y14 T11 T10 - - V16 W16 V12 W13 - -"), # JB
|
||
|
|
||
|
Connector("ck_io", 0, {
|
||
|
# Outer Digital Header
|
||
|
"io0": "T14",
|
||
|
"io1": "U12",
|
||
|
"io2": "U13",
|
||
|
"io3": "V13",
|
||
|
"io4": "V15",
|
||
|
"io5": "T15",
|
||
|
"io6": "R16",
|
||
|
"io7": "U17",
|
||
|
"io8": "V17",
|
||
|
"io9": "V18",
|
||
|
"io10": "T16",
|
||
|
"io11": "R17",
|
||
|
"io12": "P18",
|
||
|
"io13": "N17",
|
||
|
|
||
|
# Inner Digital Header
|
||
|
"io26": "U5",
|
||
|
"io27": "V5",
|
||
|
"io28": "V6",
|
||
|
"io29": "U7",
|
||
|
"io30": "V7",
|
||
|
"io31": "U8",
|
||
|
"io32": "V8",
|
||
|
"io33": "V10",
|
||
|
"io34": "W10",
|
||
|
"io35": "W6",
|
||
|
"io36": "Y6",
|
||
|
"io37": "Y7",
|
||
|
"io38": "W8",
|
||
|
"io39": "Y8",
|
||
|
"io40": "W9",
|
||
|
"io41": "Y9",
|
||
|
|
||
|
# Outer Analog Header as Digital IO
|
||
|
"a0": "Y11",
|
||
|
"a1": "Y12",
|
||
|
"a2": "W11",
|
||
|
"a3": "V11",
|
||
|
"a4": "T5",
|
||
|
"a5": "U10",
|
||
|
|
||
|
# Inner Analog Header as Digital IO
|
||
|
"a6": "F19",
|
||
|
"a7": "F20",
|
||
|
"a8": "C20",
|
||
|
"a9": "B20",
|
||
|
"a10": "B19",
|
||
|
"a11": "A20",
|
||
|
|
||
|
# Misc.
|
||
|
"a": "Y13"
|
||
|
}),
|
||
|
|
||
|
Connector("ck_spi", 0, {
|
||
|
"cipo": "W15",
|
||
|
"copi": "T12",
|
||
|
"sck": "H15",
|
||
|
"ss": "F16"
|
||
|
}),
|
||
|
|
||
|
Connector("ck_i2c", 0, {
|
||
|
"scl": "P16",
|
||
|
"sda": "P15"
|
||
|
}),
|
||
|
|
||
|
Connector("xadc", 0, {
|
||
|
# Outer Analog Header
|
||
|
"vaux1_n": "D18",
|
||
|
"vaux1_p": "E17",
|
||
|
"vaux9_n": "E19",
|
||
|
"vaux9_p": "E18",
|
||
|
"vaux6_n": "J14",
|
||
|
"vaux6_p": "K14",
|
||
|
"vaux15_n": "J16",
|
||
|
"vaux15_p": "K16",
|
||
|
"vaux5_n": "H20",
|
||
|
"vaux5_p": "J20",
|
||
|
"vaux13_n": "G20",
|
||
|
"vaux13_p": "G19",
|
||
|
|
||
|
# Inner Analog Header
|
||
|
"vaux12_n": "F20",
|
||
|
"vaux12_p": "F19",
|
||
|
"vaux0_n": "B20",
|
||
|
"vaux0_p": "C20",
|
||
|
"vaux8_n": "A20",
|
||
|
"vaux8_p": "B19"
|
||
|
})
|
||
|
]
|
||
|
|
||
|
def toolchain_program(self, products, name, **kwargs):
|
||
|
xc3sprog = os.environ.get("XC3SPROG", "xc3sprog")
|
||
|
with products.extract("{}.bit".format(name)) as bitstream_filename:
|
||
|
subprocess.run([xc3sprog, "-c", "jtaghs1_fast", "-p", "1", bitstream_filename], check=True)
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
from .test.blinky import *
|
||
|
ArtyZ720Platform().build(Blinky(), do_program=True)
|