litex/boards: add machxo3 starter kit platform
[litex.git] / litex / boards / platforms / machxo3.py
1 # This file is Copyright (c) 2016 Florent Kermarrec <florent@enjoy-digital.fr>
2 # License: BSD
3
4 from litex.build.generic_platform import *
5 from litex.build.lattice import LatticePlatform
6 from litex.build.lattice.programmer import LatticeProgrammer
7
8
9 _io = [
10 ("clk12", 0, Pins("C8"), IOStandard("LVCMOS33")),
11 ("rst_n", 0, Pins("B3"), IOStandard("LVCMOS33")),
12
13 ("user_led", 0, Pins("H11"), IOStandard("LVCMOS33")),
14 ("user_led", 1, Pins("J13"), IOStandard("LVCMOS33")),
15 ("user_led", 2, Pins("J11"), IOStandard("LVCMOS33")),
16 ("user_led", 3, Pins("L12"), IOStandard("LVCMOS33")),
17 ("user_led", 4, Pins("K11"), IOStandard("LVCMOS33")),
18 ("user_led", 5, Pins("L13"), IOStandard("LVCMOS33")),
19 ("user_led", 6, Pins("N15"), IOStandard("LVCMOS33")),
20 ("user_led", 7, Pins("P16"), IOStandard("LVCMOS33")),
21
22 ("user_dip_btn", 0, Pins("N2"), IOStandard("LVCMOS33")),
23 ("user_dip_btn", 1, Pins("P1"), IOStandard("LVCMOS33")),
24 ("user_dip_btn", 2, Pins("M3"), IOStandard("LVCMOS33")),
25 ("user_dip_btn", 3, Pins("N1"), IOStandard("LVCMOS33")),
26
27 ("serial", 0,
28 Subsignal("tx", Pins("C11"), IOStandard("LVCMOS33")),
29 Subsignal("rx", Pins("A11"), IOStandard("LVCMOS33")),
30 ),
31 ]
32
33
34 class Platform(LatticePlatform):
35 default_clk_name = "clk12"
36 default_clk_period = 83
37
38 def __init__(self):
39 LatticePlatform.__init__(self, "LCMXO3L-6900C-5BG256C", _io)
40
41 def create_programmer(self):
42 _xcf_template = """
43 <?xml version='1.0' encoding='utf-8' ?>
44 <!DOCTYPE ispXCF SYSTEM "IspXCF.dtd" >
45 <ispXCF version="3.6.0">
46 <Comment></Comment>
47 <Chain>
48 <Comm>JTAG</Comm>
49 <Device>
50 <SelectedProg value="TRUE"/>
51 <Pos>1</Pos>
52 <Vendor>Lattice</Vendor>
53 <Family>MachXO3L</Family>
54 <Name>LCMXO3L-6900C</Name>
55 <IDCode>0x412bd043</IDCode>
56 <Package>All</Package>
57 <PON>LCMXO3L-6900C</PON>
58 <Bypass>
59 <InstrLen>8</InstrLen>
60 <InstrVal>11111111</InstrVal>
61 <BScanLen>1</BScanLen>
62 <BScanVal>0</BScanVal>
63 </Bypass>
64 <File>{bitstream_file}</File>
65 <JedecChecksum>N/A</JedecChecksum>
66 <Operation>SRAM Fast Configuration</Operation>
67 <Option>
68 <SVFVendor>JTAG STANDARD</SVFVendor>
69 <IOState>HighZ</IOState>
70 <PreloadLength>664</PreloadLength>
71 <IOVectorData>0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF</IOVectorData>
72 <Usercode>0x00000000</Usercode>
73 <AccessMode>SRAM</AccessMode>
74 </Option>
75 </Device>
76 </Chain>
77 <ProjectOptions>
78 <Program>SEQUENTIAL</Program>
79 <Process>ENTIRED CHAIN</Process>
80 <OperationOverride>No Override</OperationOverride>
81 <StartTAP>TLR</StartTAP>
82 <EndTAP>TLR</EndTAP>
83 <VerifyUsercode value="FALSE"/>
84 </ProjectOptions>
85 <CableOptions>
86 <CableName>USB2</CableName>
87 <PortAdd>FTUSB-0</PortAdd>
88 <USBID>Lattice XO3L Starter Kit A Location 0000 Serial A</USBID>
89 </CableOptions>
90 </ispXCF>
91 """
92 return LatticeProgrammer(_xcf_template)