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,37 +1,68 @@
# 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 = [
("clk300", 0,
# clk / rst
("clk300", 0,
Subsignal("n", Pins("AY38"), IOStandard("DIFF_SSTL12")),
Subsignal("p", Pins("AY37"), IOStandard("DIFF_SSTL12")),
),
("clk300", 1,
("clk300", 1,
Subsignal("n", Pins("AW19"), IOStandard("DIFF_SSTL12")),
Subsignal("p", Pins("AW20"), IOStandard("DIFF_SSTL12")),
),
("clk300", 2,
("clk300", 2,
Subsignal("n", Pins("E32"), IOStandard("DIFF_SSTL12")),
Subsignal("p", Pins("F32"), IOStandard("DIFF_SSTL12")),
),
("clk300", 3,
("clk300", 3,
Subsignal("n", Pins("H16"), IOStandard("DIFF_SSTL12")),
Subsignal("p", Pins("J16"), IOStandard("DIFF_SSTL12")),
),
("cpu_reset", 0, Pins("AL20"), IOStandard("LVCMOS12")),
("ddr4_reset_gate", 0, Pins("AU21"), IOStandard("LVCMOS12")),
("ddram", 0,
# 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",
"BA37 BB37 AR35 BA39 BB40 AN36"),
"BA37 BB37 AR35 BA39 BB40 AN36"),
IOStandard("SSTL12_DCI")),
Subsignal("act_n", Pins("BB39"), IOStandard("SSTL12_DCI")),
Subsignal("ba", Pins("AT35 AT34"), IOStandard("SSTL12_DCI")),
@ -49,21 +80,21 @@ _io = [
"AL30 AM30 AU32 AT32 AN31 AN32 AR32 AR31",
"AP29 AP28 AN27 AM27 AN29 AM29 AR27 AR28",
"AT28 AV27 AU27 AT27 AV29 AY30 AW30 AV28",
"BD34 BD33 BE33 BD35 BF32 BF33 BF34 BF35"),
IOStandard("POD12_DCI"),
Misc("PRE_EMPHASIS=RDRV_240"),
"BD34 BD33 BE33 BD35 BF32 BF33 BF34 BF35"),
IOStandard("POD12_DCI"),
Misc("PRE_EMPHASIS=RDRV_240"),
Misc("EQUALIZATION=EQ_LEVEL2")),
Subsignal("dqs_n", Pins(
"BB30 BC26 BD29 BE26 BB36 BD31 AW33 BA33",
"AM32 AP31 AL29 AT30 AU30 AY28 BE36 BE32"),
IOStandard("DIFF_POD12"),
Misc("PRE_EMPHASIS=RDRV_240"),
"AM32 AP31 AL29 AT30 AU30 AY28 BE36 BE32"),
IOStandard("DIFF_POD12"),
Misc("PRE_EMPHASIS=RDRV_240"),
Misc("EQUALIZATION=EQ_LEVEL2")),
Subsignal("dqs_p", Pins(
"BA30 BB26 BD28 BD26 BB35 BC31 AV33 BA32",
"AM31 AP30 AL28 AR30 AU29 AY27 BE35 BE31"),
IOStandard("DIFF_POD12"),
Misc("PRE_EMPHASIS=RDRV_240"),
"AM31 AP30 AL28 AR30 AU29 AY27 BE35 BE31"),
IOStandard("DIFF_POD12"),
Misc("PRE_EMPHASIS=RDRV_240"),
Misc("EQUALIZATION=EQ_LEVEL2")),
Subsignal("odt", Pins("AP34"), IOStandard("SSTL12_DCI")),
Subsignal("ras_n", Pins("AR36"), IOStandard("SSTL12_DCI")),
@ -71,10 +102,10 @@ _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"),
"AY25 BA23 AM26 BA25 BB22 AL24"),
IOStandard("SSTL12_DCI")),
Subsignal("act_n", Pins("AW25"), IOStandard("SSTL12_DCI")),
Subsignal("ba", Pins("AU24 AP26"), IOStandard("SSTL12_DCI")),
@ -92,21 +123,21 @@ _io = [
"BE13 BD14 BF12 BD13 BD15 BD16 BF14 BF13",
"AY17 BA17 AY18 BA18 BA15 BB15 BC11 BD11",
"AV16 AV17 AU16 AU17 BB17 BB16 AT18 AT17",
"AM15 AL15 AN17 AN16 AR18 AP18 AL17 AL16"),
IOStandard("POD12_DCI"),
Misc("PRE_EMPHASIS=RDRV_240"),
"AM15 AL15 AN17 AN16 AR18 AP18 AL17 AL16"),
IOStandard("POD12_DCI"),
Misc("PRE_EMPHASIS=RDRV_240"),
Misc("EQUALIZATION=EQ_LEVEL2")),
Subsignal("dqs_n", Pins(
"BF9 BF8 AY15 AY12 BB10 BA9 AT13 AP14",
"BE11 BF15 BC12 BC14 AW18 AY16 AR16 AM16"),
IOStandard("DIFF_POD12"),
Misc("PRE_EMPHASIS=RDRV_240"),
"BE11 BF15 BC12 BC14 AW18 AY16 AR16 AM16"),
IOStandard("DIFF_POD12"),
Misc("PRE_EMPHASIS=RDRV_240"),
Misc("EQUALIZATION=EQ_LEVEL2")),
Subsignal("dqs_p", Pins(
"BF10 BE8 AW15 AY13 BB11 BA10 AT14 AN14",
"BE12 BE15 BC13 BB14 AV18 AW16 AP16 AM17"),
IOStandard("DIFF_POD12"),
Misc("PRE_EMPHASIS=RDRV_240"),
"BE12 BE15 BC13 BB14 AV18 AW16 AP16 AM17"),
IOStandard("DIFF_POD12"),
Misc("PRE_EMPHASIS=RDRV_240"),
Misc("EQUALIZATION=EQ_LEVEL2")),
Subsignal("odt", Pins("AW23"), IOStandard("SSTL12_DCI")),
Subsignal("ras_n", Pins("AN23"), IOStandard("SSTL12_DCI")),
@ -114,10 +145,10 @@ _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"),
"A32 D31 A34 E31 M30 F33"),
IOStandard("SSTL12_DCI")),
Subsignal("act_n", Pins("B31"), IOStandard("SSTL12_DCI")),
Subsignal("ba", Pins("D33 B36"), IOStandard("SSTL12_DCI")),
@ -135,21 +166,21 @@ _io = [
"F35 E38 D38 E35 E36 E37 F38 G38",
"P30 R30 P29 N29 L32 M32 P31 N32",
"J35 K35 L33 K33 J34 J33 N34 P34",
"H36 G36 H37 J36 K37 K38 G35 G34"),
IOStandard("POD12_DCI"),
Misc("PRE_EMPHASIS=RDRV_240"),
"H36 G36 H37 J36 K37 K38 G35 G34"),
IOStandard("POD12_DCI"),
Misc("PRE_EMPHASIS=RDRV_240"),
Misc("EQUALIZATION=EQ_LEVEL2")),
Subsignal("dqs_n", Pins(
"M26 P28 J26 L28 D30 H27 A28 B29",
"E40 F37 M31 R31 L36 L34 H38 H34"),
IOStandard("DIFF_POD12"),
Misc("PRE_EMPHASIS=RDRV_240"),
"E40 F37 M31 R31 L36 L34 H38 H34"),
IOStandard("DIFF_POD12"),
Misc("PRE_EMPHASIS=RDRV_240"),
Misc("EQUALIZATION=EQ_LEVEL2")),
Subsignal("dqs_p", Pins(
"N26 R28 J25 M27 D29 H26 A27 C29",
"E39 G37 N31 T30 L35 M34 J38 H33"),
IOStandard("DIFF_POD12"),
Misc("PRE_EMPHASIS=RDRV_240"),
"E39 G37 N31 T30 L35 M34 J38 H33"),
IOStandard("DIFF_POD12"),
Misc("PRE_EMPHASIS=RDRV_240"),
Misc("EQUALIZATION=EQ_LEVEL2")),
Subsignal("odt", Pins("E33"), IOStandard("SSTL12_DCI")),
Subsignal("ras_n", Pins("K30"), IOStandard("SSTL12_DCI")),
@ -157,10 +188,10 @@ _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"),
"F13 A13 D14 C13 B13 K16"),
IOStandard("SSTL12_DCI")),
Subsignal("act_n", Pins("H13"), IOStandard("SSTL12_DCI")),
Subsignal("ba", Pins("J15 H14"), IOStandard("SSTL12_DCI")),
@ -178,21 +209,21 @@ _io = [
"A23 A22 B24 B25 B22 C22 C24 C23",
"C19 C18 C21 B21 A18 A17 A20 B20",
"E17 F20 E18 E20 D19 D20 H18 J18",
"F22 E22 G22 G21 F24 E25 F25 G25"),
IOStandard("POD12_DCI"),
Misc("PRE_EMPHASIS=RDRV_240"),
"F22 E22 G22 G21 F24 E25 F25 G25"),
IOStandard("POD12_DCI"),
Misc("PRE_EMPHASIS=RDRV_240"),
Misc("EQUALIZATION=EQ_LEVEL2")),
Subsignal("dqs_n", Pins(
"R22 N21 H21 L22 K20 K17 P18 M17",
"A24 D23 B17 A19 F17 G19 E23 H22"),
IOStandard("DIFF_POD12"),
Misc("PRE_EMPHASIS=RDRV_240"),
"A24 D23 B17 A19 F17 G19 E23 H22"),
IOStandard("DIFF_POD12"),
Misc("PRE_EMPHASIS=RDRV_240"),
Misc("EQUALIZATION=EQ_LEVEL2")),
Subsignal("dqs_p", Pins(
"T22 N22 J21 M22 L20 K18 P19 N17",
"A25 D24 C17 B19 F18 H19 F23 H23"),
IOStandard("DIFF_POD12"),
Misc("PRE_EMPHASIS=RDRV_240"),
"A25 D24 C17 B19 F18 H19 F23 H23"),
IOStandard("DIFF_POD12"),
Misc("PRE_EMPHASIS=RDRV_240"),
Misc("EQUALIZATION=EQ_LEVEL2")),
Subsignal("odt", Pins("C16"), IOStandard("SSTL12_DCI")),
Subsignal("ras_n", Pins("F15"), IOStandard("SSTL12_DCI")),
@ -200,31 +231,33 @@ _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", 0,
# 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")),
("mgt_si570_clock", 0,
# 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")),
),
("mgt_si570_clock", 1,
("mgt_si570_clock", 1,
Subsignal("n", Pins("T10")),
Subsignal("p", Pins("T11")),
),
("pcie_x16", 0,
# 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,7 +271,9 @@ _io = [
"AF7 AG9 AH7 AJ9 AK7 AL9 AM7 AN9",
"AP7 AR9 AT7 AU9 AV7 BB5 BD5 BF5")),
),
("qsfp28", 0,
# qsfp28
("qsfp28", 0,
Subsignal("clk_n", Pins("K10")),
Subsignal("clk_p", Pins("K11")),
Subsignal("fs0", Pins("AT20"), IOStandard("LVCMOS12")),
@ -254,7 +289,7 @@ _io = [
Subsignal("txn", Pins("N8 M6 L8 K6")),
Subsignal("txp", Pins("N9 M7 L9 K7")),
),
("qsfp28", 1,
("qsfp28", 1,
Subsignal("clk_n", Pins("P10")),
Subsignal("clk_p", Pins("P11")),
Subsignal("fs0", Pins("AR22"), IOStandard("LVCMOS12")),
@ -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()