import os
import argparse
+import sys
import litex_boards.targets.versa_ecp5 as versa_ecp5
import litex_boards.targets.ulx3s as ulx3s
+#import litex_boards.targets.arty as arty
+import digilent_arty as arty
+
+from litex.build.lattice.trellis import trellis_args, trellis_argdict
from litex.soc.integration.soc_sdram import (soc_sdram_args,
soc_sdram_argdict)
builder_argdict)
from libresoc import LibreSoC
-#from microwatt import Microwatt
+from microwatt import Microwatt
# HACK!
from litex.soc.integration.soc import SoCCSRHandler
kwargs["integrated_rom_size"] = 0x10000
#kwargs["integrated_main_ram_size"] = 0x1000
kwargs["csr_data_width"] = 32
- kwargs['csr_address_width'] = 12 # limit to 0x8000
+ kwargs['csr_address_width'] = 15 # limit to 0x8000
kwargs["l2_size"] = 0
#bus_data_width = 16,
kwargs["integrated_rom_size"] = 0x10000
#kwargs["integrated_main_ram_size"] = 0x1000
kwargs["csr_data_width"] = 32
+ kwargs['csr_address_width'] = 15 # limit to 0x8000
kwargs["l2_size"] = 0
#bus_data_width = 16,
self.comb += self.cpu.jtag_tdi.eq(jtag_tdi)
self.comb += jtag_tdo.eq(self.cpu.jtag_tdo)
+
+class ArtyTestSoC(arty.BaseSoC):
+ def __init__(self, sys_clk_freq=int(100e6), **kwargs):
+ kwargs["integrated_rom_size"] = 0x10000
+ #kwargs["integrated_main_ram_size"] = 0x1000
+ kwargs["csr_data_width"] = 32
+ kwargs['csr_address_width'] = 15 # limit to 0x8000
+ kwargs["l2_size"] = 0
+ #bus_data_width = 16,
+
+ arty.BaseSoC.__init__(self,
+ sys_clk_freq = sys_clk_freq,
+ cpu_type = "external",
+ cpu_cls = LibreSoC,
+ cpu_variant = "standardjtag",
+ #cpu_cls = Microwatt,
+ variant = "a7-100",
+ toolchain = "symbiflow",
+ **kwargs)
+
+
# Build
# ----------------------------------------------------------------------------
help="System clock frequency (default=16MHz)")
parser.add_argument("--fpga", default="versa_ecp5", help="FPGA target " \
"to build for/load to")
+ parser.add_argument("--load-from", default=None, help="svf to load, disables build")
+ parser.add_argument("--toolchain", default="trellis", help="Gateware toolchain to use, trellis (default) or diamond")
builder_args(parser)
soc_sdram_args(parser)
+ trellis_args(parser)
args = parser.parse_args()
+ loadext = ".svf"
if args.fpga == "versa_ecp5":
soc = VersaECP5TestSoC(sys_clk_freq=int(float(args.sys_clk_freq)),
**soc_sdram_argdict(args))
soc = ULX3S85FTestSoC(sys_clk_freq=int(float(args.sys_clk_freq)),
**soc_sdram_argdict(args))
+ elif args.fpga == "artya7100t":
+ soc = ArtyTestSoC(sys_clk_freq=int(float(args.sys_clk_freq)),
+ **soc_sdram_argdict(args))
+ loadext = ".bit"
+
else:
soc = VersaECP5TestSoC(sys_clk_freq=int(float(args.sys_clk_freq)),
**soc_sdram_argdict(args))
- builder = Builder(soc, **builder_argdict(args))
- builder.build(run=args.build)
+ if args.load_from == None:
+ builder = Builder(soc, **builder_argdict(args))
+ builder_kargs = trellis_argdict(args) \
+ if args.toolchain == "trellis" else {}
+ builder.build(**builder_kargs, run=args.build)
- if args.load:
+ if args.load:
+ prog = soc.platform.create_programmer()
+ prog.load_bitstream(os.path.join(builder.gateware_dir,
+ soc.build_name + loadext))
+ else:
+ if args.load or args.build:
+ print("--load-from is incompatible with --load and --build",
+ file=sys.stderr)
+ sys.exit(1)
prog = soc.platform.create_programmer()
- prog.load_bitstream(os.path.join(builder.gateware_dir,
- soc.build_name + ".svf"))
+ prog.load_bitstream(args.load_from)
if __name__ == "__main__":
main()