re-bba-rb/re-bba/amaranth_boards/arrow_deca.py

89 lines
3.5 KiB
Python

import os
import subprocess
from amaranth.build import *
from amaranth.vendor.intel import *
from .resources import *
__all__ = ["ArrowDECAPlatform"]
class ArrowDECAPlatform(IntelPlatform):
device = "10M50DA" # MAX 10
package = "F484"
speed = "C6"
suffix = "GES"
default_clk = "clk50"
resources = [
Resource("clk50", 0, Pins("M8", dir="i"),
Clock(50e6), Attrs(io_standard="2.5 V")),
Resource("clk50", 1, Pins("P11", dir="i"),
Clock(50e6), Attrs(io_standard="3.3 V")),
Resource("clk50", 2, Pins("N15", dir="i"),
Clock(50e6), Attrs(io_standard="1.5 V")),
Resource("clk10", 0, Pins("M9", dir="i"),
Clock(10e6), Attrs(io_standard="2.5 V")),
*LEDResources(
pins="C7 C8 A6 B7 C4 A5 B4 C5",
invert=True,
attrs=Attrs(io_standard="1.2 V")),
*ButtonResources(
pins="H21 H22",
invert=True,
attrs=Attrs(io_standard="1.5 V")),
*SwitchResources(
pins="J21 J22",
attrs=Attrs(io_standard="1.5 V")),
]
connectors = [
Connector("gpio", 0,
"W18 Y18 Y19 AA17 AA20 AA19 AB21 AB20 AB19 Y16 V16 "
"AB18 V15 W17 AB17 AA16 AB16 W16 AB15 W15 Y14 AA15 "
"AB14 AA14 AB13 AA13 AB12 AA12 AB11 AA11 AB10 Y13 Y11 "
"W13 W12 W11 V12 V11 V13 V14 Y17 W14 U15 R13"),
Connector("gpio", 1,
"Y5 Y6 W6 W7 W8 V8 AB8 V7 R11 AB7 AB6 "
"AA7 AA6 Y7 V10 U7 W9 W5 R9 W4 P9 V17 "
"W3"),
]
def toolchain_program(self, products, name):
quartus_pgm = os.environ.get("QUARTUS_PGM", "quartus_pgm")
with products.extract("{}.sof".format(name)) as bitstream_filename:
subprocess.check_call([quartus_pgm, "--haltcc", "--mode", "JTAG",
"--operation", "P;" + bitstream_filename])
@property
def file_templates(self):
# Configure the voltages of the I/O banks by appending the global
# assignments to the template. However, we create our own copy of the
# file templates before modifying them to avoid modifying the original.
return {
**super().file_templates,
"{{name}}.qsf":
super().file_templates.get("{{name}}.qsf") +
r"""
set_global_assignment -name IOBANK_VCCIO 2.5V -section_id 1A
set_global_assignment -name IOBANK_VCCIO 2.5V -section_id 1B
set_global_assignment -name IOBANK_VCCIO 2.5V -section_id 2
set_global_assignment -name IOBANK_VCCIO 3.3V -section_id 3
set_global_assignment -name IOBANK_VCCIO 3.3V -section_id 4
set_global_assignment -name IOBANK_VCCIO 1.5V -section_id 5
set_global_assignment -name IOBANK_VCCIO 1.5V -section_id 6
set_global_assignment -name IOBANK_VCCIO 1.8V -section_id 7
set_global_assignment -name IOBANK_VCCIO 1.2V -section_id 8
set_global_assignment -name FORCE_CONFIGURATION_VCCIO ON
set_global_assignment -name AUTO_RESTART_CONFIGURATION OFF
set_global_assignment -name ENABLE_CONFIGURATION_PINS OFF
set_global_assignment -name ENABLE_BOOT_SEL_PIN OFF
"""
}
if __name__ == "__main__":
from .test.blinky import Blinky
ArrowDECAPlatform().build(Blinky(), do_program=True)