blob: 4a6f52c0db85435717b25f0bcc9211305680a7c6 [file] [log] [blame]
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
load("@rules_pkg//pkg:mappings.bzl", "pkg_filegroup", "pkg_files")
load("//rules:fusesoc.bzl", "fusesoc_build")
load("//rules:otp.bzl", "get_otp_images")
load("//rules:splice.bzl", "bitstream_splice")
package(default_visibility = ["//visibility:public"])
# The readmem directives in the fusesoc-ized build tree will be in the subdir
# ${build_root}/src/lowrisc_prim_util_memload_0/rtl/prim_util_memload.svh,
# and ${build_root} will be a subdirectory called `build.fpga_cw310` inside of
# bazel-out/k8-{configname}/bin/hw/bitstream/vivado.
# Therefore, the relative path between prim_util_memload.svh and the project-root
# relative $(location ...) resolved labels is up 10 subdirectories.
_PREFIX = "../../../../../../../../../.."
_FPGA_CW310_TESTROM = "//sw/device/lib/testing/test_rom:test_rom_fpga_cw310_scr_vmem"
_FPGA_CW310_OTP_RMA = "//hw/ip/otp_ctrl/data:img_rma"
_FPGA_CW310_TESTROM_PATH = "{}/$(location {})".format(_PREFIX, _FPGA_CW310_TESTROM)
_FPGA_CW310_OTP_RMA_PATH = "{}/$(location {})".format(_PREFIX, _FPGA_CW310_OTP_RMA)
# Note: all of the targets are tagged with "manual" to prevent them from being
# matched by bazel wildcards like "//...". In order to build the bitstream,
# you need to ask for it directly or by dependency via another rule, such as
# a functest.
fusesoc_build(
name = "fpga_cw310",
testonly = True,
srcs = [
"//hw:all_files",
_FPGA_CW310_TESTROM,
_FPGA_CW310_OTP_RMA,
],
cores = ["//:cores"],
data = ["//hw/ip/otbn:all_files"],
flags = [
"--BootRomInitFile=" + _FPGA_CW310_TESTROM_PATH,
"--OtpCtrlMemInitFile=" + _FPGA_CW310_OTP_RMA_PATH,
],
output_groups = {
"bitstream": ["synth-vivado/lowrisc_systems_chip_earlgrey_cw310_0.1.bit"],
"rom_mmi": ["synth-vivado/rom.mmi"],
"otp_mmi": ["synth-vivado/otp.mmi"],
},
systems = ["lowrisc:systems:chip_earlgrey_cw310"],
tags = ["manual"],
target = "synth",
)
filegroup(
name = "fpga_cw310_test_rom",
testonly = True,
srcs = [":fpga_cw310"],
output_group = "bitstream",
tags = ["manual"],
)
filegroup(
name = "rom_mmi",
testonly = True,
srcs = [":fpga_cw310"],
output_group = "rom_mmi",
tags = ["manual"],
)
filegroup(
name = "otp_mmi",
testonly = True,
srcs = [":fpga_cw310"],
output_group = "otp_mmi",
tags = ["manual"],
)
bitstream_splice(
name = "fpga_cw310_rom",
testonly = True,
src = ":fpga_cw310_test_rom",
data = "//sw/device/silicon_creator/rom:rom_with_fake_keys_fpga_cw310_scr_vmem",
meminfo = ":rom_mmi",
tags = ["manual"],
)
# Splice OTP images into the ROM bitstream.
[
bitstream_splice(
name = "fpga_cw310_rom_otp_" + otp_name,
testonly = True,
src = ":fpga_cw310_rom",
data = img_target,
meminfo = ":otp_mmi",
tags = ["manual"],
)
for (otp_name, img_target) in get_otp_images()
]
# Standalone CW310 image for use with hyperdebug.
fusesoc_build(
name = "fpga_cw310_hyperdebug",
testonly = True,
srcs = [
"//hw:all_files",
_FPGA_CW310_TESTROM,
_FPGA_CW310_OTP_RMA,
],
cores = ["//:cores"],
data = ["//hw/ip/otbn:all_files"],
flags = [
"--BootRomInitFile=" + _FPGA_CW310_TESTROM_PATH,
"--OtpCtrlMemInitFile=" + _FPGA_CW310_OTP_RMA_PATH,
],
output_groups = {
"bitstream": ["synth-vivado/lowrisc_systems_chip_earlgrey_cw310_hyperdebug_0.1.bit"],
"rom_mmi": ["synth-vivado/rom.mmi"],
"otp_mmi": ["synth-vivado/otp.mmi"],
},
systems = ["lowrisc:systems:chip_earlgrey_cw310_hyperdebug"],
tags = ["manual"],
target = "synth",
)
filegroup(
name = "fpga_cw310_test_rom_hyp",
testonly = True,
srcs = [":fpga_cw310_hyperdebug"],
output_group = "bitstream",
tags = ["manual"],
)
filegroup(
name = "rom_mmi_hyp",
testonly = True,
srcs = [":fpga_cw310_hyperdebug"],
output_group = "rom_mmi",
tags = ["manual"],
)
filegroup(
name = "otp_mmi_hyp",
testonly = True,
srcs = [":fpga_cw310_hyperdebug"],
output_group = "otp_mmi",
tags = ["manual"],
)
# Packaging rules for bitstreams
pkg_files(
name = "standard",
testonly = True,
srcs = [
":fpga_cw310_rom",
":fpga_cw310_test_rom",
":otp_mmi",
":rom_mmi",
] + [
":fpga_cw310_rom_otp_" + otp_name
for (otp_name, _) in get_otp_images()
],
prefix = "earlgrey/fpga_cw310/standard",
tags = ["manual"],
)
pkg_files(
name = "hyperdebug",
testonly = True,
srcs = [
":fpga_cw310_test_rom_hyp",
":otp_mmi_hyp",
":rom_mmi_hyp",
],
prefix = "earlgrey/fpga_cw310/hyperdebug",
tags = ["manual"],
)
pkg_filegroup(
name = "package",
testonly = True,
srcs = [
":hyperdebug",
":standard",
],
tags = ["manual"],
)