aboutsummaryrefslogtreecommitdiff
path: root/amaranth_boards
diff options
context:
space:
mode:
authorCatherine <whitequark@whitequark.org>2023-09-03 01:02:29 +0000
committerCatherine <whitequark@whitequark.org>2023-12-08 01:16:10 +0000
commit48239718d0501c87179db16dc30adb0100831927 (patch)
treee799c6cc54c0bf392c4855ac56859c2d2d3ee604 /amaranth_boards
parent54000b09498080706152bbb8782f68b8efa0ad33 (diff)
Add support for Tang Nano 9k.
Co-authored-by: Bastian Löher <b.loeher@gsi.de>
Diffstat (limited to 'amaranth_boards')
-rw-r--r--amaranth_boards/tang_nano_9k.py74
1 files changed, 74 insertions, 0 deletions
diff --git a/amaranth_boards/tang_nano_9k.py b/amaranth_boards/tang_nano_9k.py
new file mode 100644
index 0000000..ab9ad2e
--- /dev/null
+++ b/amaranth_boards/tang_nano_9k.py
@@ -0,0 +1,74 @@
+import os
+import subprocess
+
+from amaranth.build import *
+from amaranth.vendor.gowin import *
+
+from .resources import *
+
+
+__all__ = ["TangNano9kPlatform"]
+
+
+class TangNano9kPlatform(GowinPlatform):
+ part = "GW1NR-LV9QN88PC6/I5"
+ family = "GW1NR-9C"
+ default_clk = "clk27"
+ resources = [
+ Resource("clk27", 0, Pins("52", dir="i"),
+ Clock(27e6), Attrs(IO_TYPE="LVCMOS33")),
+
+ *ButtonResources(pins="3 4", invert=True,
+ attrs=Attrs(IO_TYPE="LVCMOS33")),
+
+ *LEDResources(pins="10 11 13 14 15 16", invert=True,
+ attrs=Attrs(IO_TYPE="LVCMOS33")),
+
+ UARTResource(0, rx="18", tx="17",
+ attrs=Attrs(PULL_MODE="UP", IO_TYPE="LVCMOS33")),
+
+ *SPIFlashResources(0,
+ cs_n="60", clk="59", copi="61", cipo="62",
+ attrs=Attrs(IO_TYPE="LVCMOS33")),
+
+ *SDCardResources(0,
+ clk="36", cmd="37", dat0="39", dat3="38", wp_n="-",
+ attrs=Attrs(IO_TYPE="LVCMOS33")),
+
+ Resource("lcd", 0,
+ Subsignal("clk", Pins("35", dir="o")),
+ Subsignal("hs", Pins("40", dir="o")),
+ Subsignal("vs", Pins("34", dir="o")),
+ Subsignal("de", Pins("33", dir="o")),
+ Subsignal("r", Pins("75 74 73 72 71", dir="o")),
+ Subsignal("g", Pins("70 69 68 57 56 55", dir="o")),
+ Subsignal("b", Pins("54 53 51 42 41", dir="o")),
+ Attrs(IO_TYPE="LVCMOS33", DRIVE=24)),
+
+ Resource("lcd_backlight", 0, Pins("86", dir="o"),
+ Attrs(IO_TYPE="LVCMOS33")),
+
+ Resource("hdmi", 0,
+ Subsignal("clk", DiffPairs(p="69", n="68", dir="o")),
+ Subsignal("d", DiffPairs(p="71 73 75", n="70 72 74", dir="o")),
+ Attrs(IO_TYPE="LVCMOS33")),
+ ]
+ connectors = []
+
+ def toolchain_prepare(self, fragment, name, **kwargs):
+ overrides = {
+ "add_options":
+ "set_option -use_mspi_as_gpio 1 -use_sspi_as_gpio 1",
+ "gowin_pack_opts":
+ "--sspi_as_gpio --mspi_as_gpio"
+ }
+ return super().toolchain_prepare(fragment, name, **overrides, **kwargs)
+
+ def toolchain_program(self, products, name):
+ with products.extract("{}.fs".format(name)) as bitstream_filename:
+ subprocess.check_call(["openFPGALoader", "-b", "tangnano9k", bitstream_filename])
+
+
+if __name__ == "__main__":
+ from .test.blinky import *
+ TangNano9kPlatform().build(Blinky(), do_program=True)