from ...build import *
-__all__ = ["LatticeICE40Platform", "IceStormProgrammerMixin", "IceBurnProgrammerMixin"]
+__all__ = ["LatticeICE40Platform", "IceStormProgrammerMixin", "IceBurnProgrammerMixin", "TinyProgrammerMixin"]
class LatticeICE40Platform(TemplatedPlatform):
with tempfile.NamedTemporaryFile(prefix="nmigen_iceburn_") as bitstream_file:
bitstream_file.write(bitstream)
subprocess.run([iceburn, "-evw", bitstream_file.name], check=True)
+
+
+class TinyProgrammerMixin:
+ def toolchain_program(self, products, name):
+ tinyprog = os.environ.get("TINYPROG", "tinyprog")
+ options = ["-p"]
+ bitstream = products.get("{}.bin".format(name))
+ with tempfile.NamedTemporaryFile(prefix="nmigen_tinyprog_") as bitstream_file:
+ bitstream_file.write(bitstream)
+ subprocess.run([tinyprog, *options, bitstream_file.name], check=True)
--- /dev/null
+from ..build import *
+from .fpga.lattice_ice40 import LatticeICE40Platform, TinyProgrammerMixin
+
+
+__all__ = ["TinyFPGABPlatform"]
+
+
+class TinyFPGABPlatform(TinyProgrammerMixin, LatticeICE40Platform):
+ device = "lp8k"
+ package = "cm81"
+ clocks = [
+ ("clk16", 16e6),
+ ]
+ resources = [
+ Resource("clk16", 0, Pins("B2", dir="i"), extras=["IO_STANDARD=LVCMOS33"]),
+
+ Resource("user_led", 0, Pins("B3", dir="o"), extras=["IO_STANDARD=LVCMOS33"]),
+
+ Resource("usb", 0,
+ Subsignal("d_p", Pins("B4", dir="io")),
+ Subsignal("d_n", Pins("A4", dir="io")),
+ Subsignal("pull_up", Pins("A3", dir="o")),
+ extras=["IO_STANDARD=SB_LVCMOS33"]
+ ),
+
+ Resource("spiflash", 0,
+ Subsignal("cs_n", Pins("F7", dir="o")),
+ Subsignal("clk", Pins("G7", dir="o")),
+ Subsignal("mosi", Pins("G6", dir="io")),
+ Subsignal("miso", Pins("H7", dir="io")),
+ extras=["IO_STANDARD=SB_LVCMOS33"]
+ ),
+ ]