alveo_u250: re-organize the auto-generated IOs, add build/load parameters.

This commit is contained in:
Florent Kermarrec 2020-05-16 11:46:54 +02:00
parent c0b7afc739
commit b9ee3a797a
2 changed files with 118 additions and 87 deletions

View File

@ -1,15 +1,17 @@
# This file is Copyright (c) 2020 David Shah <dave@ds0.me>
# This file is Copyright (c) 2020 Florent Kermarrec <florent@enjoy-digital.fr>
# License: BSD
# Note that this board file should also be applicable to
# the Alveo U200, VCU1525, BCU1525 and other 1525 variants.
# Note: This platform should also be applicable to the Alveo U200, VCU1525, BCU1525 and other
# 1525 variants.
from litex.build.generic_platform import Pins, Subsignal, IOStandard, Misc
from litex.build.xilinx import XilinxPlatform, VivadoProgrammer
# This part auto-generated by extract_xdc_pins.py
# IOs (initially auto-generated by extract_xdc_pins.py) ---------------------------------------------
_io = [
# clk / rst
("clk300", 0,
Subsignal("n", Pins("AY38"), IOStandard("DIFF_SSTL12")),
Subsignal("p", Pins("AY37"), IOStandard("DIFF_SSTL12")),
@ -27,7 +29,36 @@ _io = [
Subsignal("p", Pins("J16"), IOStandard("DIFF_SSTL12")),
),
("cpu_reset", 0, Pins("AL20"), IOStandard("LVCMOS12")),
("ddr4_reset_gate", 0, Pins("AU21"), IOStandard("LVCMOS12")),
# led
("user_led", 0, Pins("BC21"), IOStandard("LVCMOS12")),
("user_led", 1, Pins("BB21"), IOStandard("LVCMOS12")),
("user_led", 2, Pins("BA20"), IOStandard("LVCMOS12")),
# switches
("set_sw", 0, Pins("AL21")),
("user_sw", 0, Pins("AN22"), IOStandard("LVCMOS12")),
("user_sw", 1, Pins("AM19"), IOStandard("LVCMOS12")),
("user_sw", 2, Pins("AL19"), IOStandard("LVCMOS12")),
("user_sw", 3, Pins("AP20"), IOStandard("LVCMOS12")),
# gpio
("gpio_msp", 0, Pins("AR20"), IOStandard("LVCMOS12")),
("gpio_msp", 1, Pins("AM20"), IOStandard("LVCMOS12")),
("gpio_msp", 2, Pins("AM21"), IOStandard("LVCMOS12")),
("gpio_msp", 3, Pins("AN21"), IOStandard("LVCMOS12")),
("serial", 0,
Subsignal("rx", Pins("BF18"), IOStandard("LVCMOS12")),
Subsignal("tx", Pins("BB20"), IOStandard("LVCMOS12")),
),
("serial_msp", 0,
Subsignal("rx", Pins("BA19"), IOStandard("LVCMOS12")),
Subsignal("tx", Pins("BB19"), IOStandard("LVCMOS12")),
),
# ddram
("ddram_reset_gate", 0, Pins("AU21"), IOStandard("LVCMOS12")),
("ddram", 0,
Subsignal("a", Pins(
"AT36 AV36 AV37 AW35 AW36 AY36 AY35 BA40",
@ -71,7 +102,7 @@ _io = [
Subsignal("we_n", Pins("AP35"), IOStandard("SSTL12_DCI")),
Misc("SLEW=FAST")
),
("ddram_ch2", 0,
("ddram", 1,
Subsignal("a", Pins(
"AN24 AT24 AW24 AN26 AY22 AY23 AV24 BA22",
"AY25 BA23 AM26 BA25 BB22 AL24"),
@ -114,7 +145,7 @@ _io = [
Subsignal("we_n", Pins("AL25"), IOStandard("SSTL12_DCI")),
Misc("SLEW=FAST")
),
("ddram_ch3", 0,
("ddram", 2,
Subsignal("a", Pins(
"L29 A33 C33 J29 H31 G31 C32 B32",
"A32 D31 A34 E31 M30 F33"),
@ -157,7 +188,7 @@ _io = [
Subsignal("we_n", Pins("A35"), IOStandard("SSTL12_DCI")),
Misc("SLEW=FAST")
),
("ddram_ch4", 0,
("ddram", 4,
Subsignal("a", Pins(
"K15 B15 F14 A15 C14 A14 B14 E13",
"F13 A13 D14 C13 B13 K16"),
@ -200,19 +231,19 @@ _io = [
Subsignal("we_n", Pins("D15"), IOStandard("SSTL12_DCI")),
Misc("SLEW=FAST")
),
("dip_sw", 0, Pins("AN22"), IOStandard("LVCMOS12")),
("dip_sw", 1, Pins("AM19"), IOStandard("LVCMOS12")),
("dip_sw", 2, Pins("AL19"), IOStandard("LVCMOS12")),
("dip_sw", 3, Pins("AP20"), IOStandard("LVCMOS12")),
("gpio_msp", 0, Pins("AR20"), IOStandard("LVCMOS12")),
("gpio_msp", 1, Pins("AM20"), IOStandard("LVCMOS12")),
("gpio_msp", 2, Pins("AM21"), IOStandard("LVCMOS12")),
("gpio_msp", 3, Pins("AN21"), IOStandard("LVCMOS12")),
# i2c
("i2c_rst_n", 0, Pins("BF19"), IOStandard("LVCMOS12")),
("i2c", 0,
Subsignal("scl", Pins("BF20"), IOStandard("LVCMOS12")),
Subsignal("sda", Pins("BF17"), IOStandard("LVCMOS12")),
),
("i2c_main_reset_n", 0, Pins("BF19"), IOStandard("LVCMOS12")),
# si570
("user_si570_clock", 0,
Subsignal("n", Pins("AV19"), IOStandard("DIFF_SSTL12")),
Subsignal("p", Pins("AU19"), IOStandard("DIFF_SSTL12")),
),
("mgt_si570_clock", 0,
Subsignal("n", Pins("M10")),
Subsignal("p", Pins("M11")),
@ -221,10 +252,12 @@ _io = [
Subsignal("n", Pins("T10")),
Subsignal("p", Pins("T11")),
),
# pcie
("pcie_x16", 0,
Subsignal("rst_n", Pins("BD21"), IOStandard("LVCMOS12")),
Subsignal("clk_n", Pins("AM10")),
Subsignal("clk_p", Pins("AM11")),
Subsignal("rst_n", Pins("BD21"), IOStandard("LVCMOS12")),
Subsignal("rx_n", Pins(
"AF1 AG3 AH1 AJ3 AK1 AL3 AM1 AN3",
"AP1 AR3 AT1 AU3 AV1 AW3 BA1 BC1")),
@ -238,6 +271,8 @@ _io = [
"AF7 AG9 AH7 AJ9 AK7 AL9 AM7 AN9",
"AP7 AR9 AT7 AU9 AV7 BB5 BD5 BF5")),
),
# qsfp28
("qsfp28", 0,
Subsignal("clk_n", Pins("K10")),
Subsignal("clk_p", Pins("K11")),
@ -270,22 +305,6 @@ _io = [
Subsignal("txn", Pins("U8 T6 R8 P6")),
Subsignal("txp", Pins("U9 T7 R9 P7")),
),
("serial", 0,
Subsignal("rx", Pins("BF18"), IOStandard("LVCMOS12")),
Subsignal("tx", Pins("BB20"), IOStandard("LVCMOS12")),
),
("serial_msp", 0,
Subsignal("rx", Pins("BA19"), IOStandard("LVCMOS12")),
Subsignal("tx", Pins("BB19"), IOStandard("LVCMOS12")),
),
("set_sw", 0, Pins("AL21")),
("user_led", 0, Pins("BC21"), IOStandard("LVCMOS12")),
("user_led", 1, Pins("BB21"), IOStandard("LVCMOS12")),
("user_led", 2, Pins("BA20"), IOStandard("LVCMOS12")),
("user_si570_clock", 0,
Subsignal("n", Pins("AV19"), IOStandard("DIFF_SSTL12")),
Subsignal("p", Pins("AU19"), IOStandard("DIFF_SSTL12")),
),
]
_connectors = []

View File

@ -17,6 +17,7 @@ from litex.soc.integration.soc_core import *
from litex.soc.integration.soc_sdram import *
from litex.soc.integration.builder import *
from litex.soc.cores.led import LedChaser
from litedram.modules import MTA18ASF2G72PZ
from litedram.phy import usddrphy
@ -32,7 +33,7 @@ class _CRG(Module):
# # #
self.submodules.pll = pll = USMMCM(speedgrade=-2)
self.comb += pll.reset.eq(0)
self.comb += pll.reset.eq(0) # FIXME
pll.register_clkin(platform.request("clk300", 0), 300e6)
pll.create_clkout(self.cd_pll4x, sys_clk_freq*4, buf=None, with_reset=False)
pll.create_clkout(self.cd_clk500, 500e6, with_reset=False)
@ -69,7 +70,6 @@ class BaseSoC(SoCCore):
cmd_latency = 1,
is_rdimm = True)
self.add_csr("ddrphy")
self.add_constant("USDDRPHY_DEBUG")
self.add_sdram("sdram",
phy = self.ddrphy,
module = MTA18ASF2G72PZ(sys_clk_freq, "1:4"),
@ -80,20 +80,32 @@ class BaseSoC(SoCCore):
l2_cache_reverse = True
)
# Firmware RAM (To ease initial LiteDRAM calibration support) ------------------------------
self.add_ram("firmware_ram", 0x20000000, 0x8000)
# Leds -------------------------------------------------------------------------------------
self.submodules.leds = LedChaser(
pads = Cat(*[platform.request("user_led", i) for i in range(3)]),
sys_clk_freq = sys_clk_freq)
self.add_csr("leds")
# Build --------------------------------------------------------------------------------------------
def main():
parser = argparse.ArgumentParser(description="LiteX SoC on Alveo U250")
parser.add_argument("--build", action="store_true", help="Build bitstream")
parser.add_argument("--load", action="store_true", help="Load bitstream")
builder_args(parser)
soc_sdram_args(parser)
args = parser.parse_args()
soc = BaseSoC(**soc_sdram_argdict(args))
builder = Builder(soc, **builder_argdict(args))
builder.build()
builder.build(run=args.build)
if args.load:
prog = soc.platform.create_programmer()
prog.load_bitstream(os.path.join(builder.gateware_dir, "top.bit"))
if __name__ == "__main__":
main()