aboutsummaryrefslogtreecommitdiff
path: root/amaranth_boards
diff options
context:
space:
mode:
Diffstat (limited to 'amaranth_boards')
-rw-r--r--amaranth_boards/machxo2_breakout.py127
1 files changed, 127 insertions, 0 deletions
diff --git a/amaranth_boards/machxo2_breakout.py b/amaranth_boards/machxo2_breakout.py
new file mode 100644
index 0000000..b90f1a9
--- /dev/null
+++ b/amaranth_boards/machxo2_breakout.py
@@ -0,0 +1,127 @@
+import os
+import subprocess
+
+from amaranth.build import *
+from amaranth.vendor import LatticeMachXO2Platform
+from .resources import *
+
+
+__all__ = ["MachXO2_7000HE_BreakoutPlatform", "MachXO2_1200ZE_BreakoutPlatform"]
+
+
+# https://www.latticesemi.com/Products/DevelopmentBoardsAndKits/MachXO2BreakoutBoard
+class MachXO2_7000HE_BreakoutPlatform(LatticeMachXO2Platform):
+ device = "LCMXO2-7000HE"
+ package = "TG144"
+ default_clk = "OSCH"
+ osch_frequency = 2.08 # documented default; see amaranth.vendor.lattice_machxo_2_3l for more options
+ speed = "4"
+ resources = [
+ *LEDResources(pins="97 98 99 100 104 105 106 107", invert=True),
+
+ # Connectable to the FTDI UART but disconnected by default. Populate R14-R21 to connect.
+ UARTResource(0, rx="73", tx="74", rts="75", cts="76", dtr="81", dsr="77", dcd="78", role="dte"),
+ ]
+ connectors = [
+ Connector("j", 2, # J2
+ "- - "
+ "109 - " # 110: INITn
+ "111 112 "
+ "- - "
+ "113 114 "
+ "115 117 "
+ "119 120 "
+ "- - "
+ "121 122 "
+ "125 126 "
+ "127 128 "
+ "- - "
+ "- - " # 130: TMS, 131: TCK
+ "132 133 "
+ "- - " # 136: TDI, 137: TDO
+ "- - "
+ "138 139 "
+ "140 141 "
+ "142 143 "
+ "- - "),
+ Connector("j", 3, # J3
+ "- - "
+ "- - "
+ "74 73 "
+ "76 75 "
+ "- - "
+ "78 77 "
+ "82 81 "
+ "- - "
+ "84 83 "
+ "86 85 "
+ "- - "
+ "92 91 "
+ "94 93 "
+ "- - "
+ "96 95 "
+ "98 97 "
+ "- - "
+ "100 99 "
+ "105 104 "
+ "107 106 "),
+ Connector("j", 4, # J4
+ "- - "
+ "- - "
+ "1 2 "
+ "3 4 "
+ "5 6 "
+ "9 10 "
+ "- - "
+ "11 12 "
+ "13 14 "
+ "- - "
+ "19 20 "
+ "21 22 "
+ "- - "
+ "23 24 "
+ "25 26 "
+ "- - "
+ "27 28 "
+ "- - "
+ "32 33 "
+ "34 35 "),
+ Connector("j", 5, # J5
+ "- - "
+ "71 69 "
+ "70 68 "
+ "67 62 "
+ "65 61 "
+ "- - "
+ "60 58 "
+ "59 57 "
+ "- - "
+ "56 54 "
+ "55 52 "
+ "- - "
+ "50 48 "
+ "49 47 "
+ "- - "
+ "45 43 "
+ "44 42 "
+ "- - "
+ "41 39 "
+ "40 38 "),
+ ]
+
+ def toolchain_program(self, products, name):
+ tool = os.environ.get("OPENFPGALOADER", "openFPGALoader")
+ with products.extract("{}.bit".format(name)) as bitstream_filename:
+ subprocess.check_call([tool, "-b", "machXO2EVN", "-m", bitstream_filename])
+
+
+# This is an older version of the board, that has an FPGA with less logic
+# resources. It is otherwise the same.
+class MachXO2_1200ZE_BreakoutPlatform(MachXO2_7000HE_BreakoutPlatform):
+ device = "LCMXO2-1200ZE"
+ speed = "1"
+
+
+if __name__ == "__main__":
+ from .test.blinky import *
+ MachXO2_7000HE_BreakoutPlatform().build(Blinky(), do_program=True)