Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions boards/vcu118/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,14 @@ partitions. Select the board's SPI configuration boot mode for startup
from flash. The programmer erases and verifies the ranges in its generated
configuration-memory file.

The mode switch is SW16. Positions 2, 3 and 4 are M2, M1 and M0 (ON = 1);
position 1 is not a mode bit. Set **ON / OFF / OFF / ON** for Master SPI
(M[2:0] = 001). With M[2:0] = 101 (JTAG) the FPGA ignores the flash, the user
LEDs stay dark, and `boot_hw_device` fails. Read the pins from an unconfigured
device with `list_property` on `REGISTER.CONFIG_STATUS.SLR0.*` after
`refresh_hw_device`; they update as the switch moves. A configured design
lights one user LED steadily and blinks another.

U-Boot stops at `frost=>`. Its environment is volatile; `saveenv` is not
supported. It provides `sf` commands for flash access and DHCP, ping and TFTP
through either NIC. For RJ-45 network loading, set the server address and use
Expand Down Expand Up @@ -186,6 +194,13 @@ The wrapped image supplies its length to U-Boot. The composed test
initramfs includes the NIC loader; RJ-45 DHCP and SSH key setup are
described below.

The initramfs runs a key-only SSH server (password logins are disabled). Add
your public key by appending a second newc cpio archive that holds
`root/.ssh/authorized_keys` (mode 600, directory mode 700) to
`sw/apps/linux_boot/rootfs.cpio`, then wrap it again with `mkimage -A riscv -O
linux -T ramdisk -C none` and copy it to the TFTP directory. Keep the keys
outside the repository.

## Debian over NFS

Both Ethernet interfaces support the shared Linux NIC driver and NFS boot.
Expand Down
4 changes: 4 additions & 0 deletions boards/vcu118/constr/vcu118.xdc
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,10 @@ set_property PULLUP true [get_ports io_phy_mdio]
# -----------------------------------------------------------------------------
set_property CONFIG_VOLTAGE 1.8 [current_design]
set_property CFGBVS GND [current_design]
# The bitstream exceeds 16 MiB, so the configuration engine needs 4-byte
# addresses to read it from the 128 MiB flash.
set_property CONFIG_MODE SPIx4 [current_design]
set_property BITSTREAM.CONFIG.SPI_32BIT_ADDR Yes [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
set_property BITSTREAM.CONFIG.CONFIGRATE 51.0 [current_design]
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
Expand Down
15 changes: 1 addition & 14 deletions boards/vcu118/vcu118_frost.sv
Original file line number Diff line number Diff line change
Expand Up @@ -310,20 +310,7 @@ module vcu118_frost #(
.i_ddr_axi_rresp (ddr_axi_rresp),
.i_ddr_axi_rlast (ddr_axi_rlast),

// No external Ethernet interface or CPU-visible ECC telemetry.
.i_nic_tx_clk (1'b0),
.i_nic_rx_clk (1'b0),
.i_nic_tx_clk_ok (1'b0),
.i_nic_rx_clk_ok (1'b0),
.i_nic_rx_raw_data ('0),
.i_nic_rx_raw_valid (1'b0),
.i_nic_rx_signal_ok (1'b0),
.i_nic_phy_status ('0),
.o_nic_tx_raw_data (),
.o_nic_tx_raw_valid (),
.o_nic_phy_ctrl (),
.o_nic_rx_block_lock(),

// No CPU-visible ECC telemetry.
.i_ecc_present (1'b0),
.i_ecc_poll (1'b0),
.i_ecc_ce_valid (1'b0),
Expand Down
3 changes: 3 additions & 0 deletions fpga/build/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -3213,6 +3213,7 @@ def generate_bitstream(

def main() -> None:
"""Run FPGA build."""
build_start = time.monotonic()
# The defaults the epilog quotes.
jobs = DEFAULT_MAX_JOBS
gate = X3_POST_PLACE_GATE_NS
Expand Down Expand Up @@ -3830,6 +3831,8 @@ def main() -> None:
print(f"\n{'#' * 70}")
print("# BUILD COMPLETE!")
print(f"{'#' * 70}")
wall = int(time.monotonic() - build_start)
print(f"\nBuild wall time: {wall // 3600}h {wall % 3600 // 60:02d}m {wall % 60:02d}s")

if last_report_prefix:
last_timing_rpt = main_work / f"{last_report_prefix}_timing.rpt"
Expand Down
2 changes: 1 addition & 1 deletion fpga/flash/program_flash.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ if {$mode eq "prepare" && $argc == 4} {
if {![string match "xcvu9p*" [get_property PART $device]]} {
error "Expected xcvu9p on the selected target"
}
set part [get_cfgmem_parts mt25qu01g-spi-x1_x2_x4]
set part [lsort -unique [get_cfgmem_parts mt25qu01g-spi-x1_x2_x4]]
if {[llength $part] != 1} {error "Expected the VCU118 configuration flash part"}
create_hw_cfgmem -hw_device $device $part
set memory [get_property PROGRAM.HW_CFGMEM $device]
Expand Down
Loading