8774b849f87918544594f3f3dd49cc2b4669c9d3
6 import litex_boards
.targets
.versa_ecp5
as versa_ecp5
7 import litex_boards
.targets
.ulx3s
as ulx3s
9 from litex
.soc
.integration
.soc_sdram
import (soc_sdram_args
,
11 from litex
.soc
.integration
.builder
import (Builder
, builder_args
,
14 from libresoc
import LibreSoC
15 #from microwatt import Microwatt
18 # ----------------------------------------------------------------------------
20 class VersaECP5TestSoC(versa_ecp5
.BaseSoC
):
21 def __init__(self
, sys_clk_freq
=int(16e6
), **kwargs
):
22 kwargs
["integrated_rom_size"] = 0x10000
23 #kwargs["integrated_main_ram_size"] = 0x1000
24 kwargs
["csr_data_width"] = 32
28 versa_ecp5
.BaseSoC
.__init
__(self
,
29 sys_clk_freq
= sys_clk_freq
,
30 cpu_type
= "external",
32 cpu_variant
= "standardjtagnoirq",
37 if False: # well that didn't work. connectors are different
39 # get 4 arbitrarily-selected pins from the X3 connector
40 jtag_tck
= self
.platform
.request("X3", "B19")
41 jtag_tms
= self
.platform
.request("X3", "B12")
42 jtag_tdi
= self
.platform
.request("X3", "B9")
43 jtag_tdo
= self
.platform
.request("X3", "E6")
45 # wire the pins up to CPU JTAG
46 self
.comb
+= self
.cpu
.jtag_tck
.eq(jtag_tck
)
47 self
.comb
+= self
.cpu
.jtag_tms
.eq(jtag_tms
)
48 self
.comb
+= self
.cpu
.jtag_tdi
.eq(jtag_tdi
)
49 self
.comb
+= jtag_tdo
.eq(self
.cpu
.jtag_tdo
)
52 #self.add_constant("MEMTEST_BUS_SIZE", 256//16)
53 #self.add_constant("MEMTEST_DATA_SIZE", 256//16)
54 #self.add_constant("MEMTEST_ADDR_SIZE", 256//16)
56 #self.add_constant("MEMTEST_BUS_DEBUG", 1)
57 #self.add_constant("MEMTEST_ADDR_DEBUG", 1)
58 #self.add_constant("MEMTEST_DATA_DEBUG", 1)
60 class ULX3S85FTestSoC(ulx3s
.BaseSoC
):
61 def __init__(self
, sys_clk_freq
=int(16e6
), **kwargs
):
62 kwargs
["integrated_rom_size"] = 0x10000
63 #kwargs["integrated_main_ram_size"] = 0x1000
64 kwargs
["csr_data_width"] = 32
68 ulx3s
.BaseSoC
.__init
__(self
,
69 sys_clk_freq
= sys_clk_freq
,
70 cpu_type
= "external",
72 cpu_variant
= "standardjtag",
78 # ----------------------------------------------------------------------------
81 parser
= argparse
.ArgumentParser(description
="LiteX SoC with LibreSoC " \
82 "CPU on Versa ECP5 or ULX3S LFE5U85F")
83 parser
.add_argument("--build", action
="store_true", help="Build bitstream")
84 parser
.add_argument("--load", action
="store_true", help="Load bitstream")
85 parser
.add_argument("--sys-clk-freq", default
=int(16e6
),
86 help="System clock frequency (default=16MHz)")
87 parser
.add_argument("--fpga", default
="versa_ecp5", help="FPGA target " \
88 "to build for/load to")
91 soc_sdram_args(parser
)
92 args
= parser
.parse_args()
94 if args
.fpga
== "versa_ecp5":
95 soc
= VersaECP5TestSoC(sys_clk_freq
=int(float(args
.sys_clk_freq
)),
96 **soc_sdram_argdict(args
))
98 elif args
.fpga
== "ulx3s85f":
99 soc
= ULX3S85FTestSoC(sys_clk_freq
=int(float(args
.sys_clk_freq
)),
100 **soc_sdram_argdict(args
))
103 soc
= VersaECP5TestSoC(sys_clk_freq
=int(float(args
.sys_clk_freq
)),
104 **soc_sdram_argdict(args
))
106 builder
= Builder(soc
, **builder_argdict(args
))
107 builder
.build(run
=args
.build
)
110 prog
= soc
.platform
.create_programmer()
111 prog
.load_bitstream(os
.path
.join(builder
.gateware_dir
,
112 soc
.build_name
+ ".svf"))
114 if __name__
== "__main__":