re-bba-rb/re-bba/ReBba/amaranth_boards/quickfeather.py

83 lines
2.4 KiB
Python

import os
import sys
import subprocess
from amaranth.build import *
from amaranth.vendor.quicklogic import *
from amaranth_boards.resources import *
__all__ = ["QuickfeatherPlatform"]
class QuickfeatherPlatform(QuicklogicPlatform):
device = "ql-eos-s3_wlcsp"
package = "PU64"
default_clk = "sys_clk0"
# It is possible to configure both oscillator frequency and
# clock divider. Resulting frequency is: 60MHz / 12 = 5MHz
osc_freq = int(60e6)
osc_div = 12
connectors = [
Connector("J", 2, "- 28 22 21 37 36 42 40 7 2 4 5"),
Connector("J", 3, "- 8 9 17 16 20 6 55 31 25 47 - - - - 41"),
Connector("J", 8, "27 26 33 32 23 57 56 3 64 62 63 61 59 - - -"),
]
resources = [
*ButtonResources(pins="62"),
RGBLEDResource(0, r="34", g="39", b="38"),
UARTResource(0,
rx="9", tx="8",
),
SPIResource(0,
cs_n="11", clk="20", copi="16", cipo="17"
),
SPIResource(1,
cs_n="37", clk="40", copi="36", cipo="42",
role="peripheral"
),
I2CResource(0,
scl="4", sda="5"
),
I2CResource(1,
scl="22", sda="21"
),
DirectUSBResource(0, d_p="10", d_n="14"),
Resource("swd", 0,
Subsignal("clk", Pins("54", dir="io")),
Subsignal("io", Pins("53", dir="io")),
),
]
# This programmer requires OpenOCD with support for eos-s3:
# https://github.com/antmicro/openocd/tree/eos-s3-support
def toolchain_program(self, products, name):
openocd = os.environ.get("OPENOCD", "openocd")
with products.extract("{}.openocd".format(name),
"{}_iomux.openocd".format(name)) as \
(bitstream_openocd_filename, iomux_openocd_filename):
subprocess.check_call([
openocd,
"-s", "tcl",
"-f", "interface/ftdi/antmicro-ftdi-adapter.cfg",
"-f", "interface/ftdi/swd-resistor-hack.cfg",
"-f", "board/quicklogic_quickfeather.cfg",
"-f", bitstream_openocd_filename,
"-c", "init",
"-c", "reset halt",
"-c", "load_bitstream",
"-f", iomux_openocd_filename,
"-c", "exit"
])
if __name__ == "__main__":
from .test.blinky import *
QuickfeatherPlatform().build(Blinky())