After setting up the host and VCK190 environment, list all the PCIe BAR spaces using the
lspci command on the host computer. There are four PCIe BARs that the host could access, as shown in the
The BAR3 space has a size of 256 MB, which is from address 0xE000_0000 to 0xEFFF_FFFF. This BAR3 space is mapped to Versal device address 0x1_0000_0000 to 0x1_0FFFF_FFFF, which includes the PMC slave space. The QSPI controller is located at the PMC.
In this application note, the host also accesses the BAR4 space. There is a block RAM segment with a base address of 0xF000_0000 and size of 8 KB.
|PCIe BAR3 Space||Device Name||Versal Device Address Base|
|0xE103_0000 ~ 0xE103_FFFF||QSPI controller||0x1_0103_0000 ~ 0x1_0103_FFFF (64 KB)|
|0xF000_0000 ~ 0xF000_1FFF||
Block RAM Port0For read operation
|0xF000_0000 ~ 0xF000_1FFF (8 KB)|
This block RAM has independent addresses for the two ports. As described previously, one address is for the host readback which maps to PCIe BAR4. Another address is written by the QSPI controller, so the software tells the QSPI controller that the BOARD_BRAM_BASE address is 0x201_8000_0000. This access is internal to the Versal device.
|PCIe BAR4||Device Name||Size (B)||Versal Device Address Base||Host Access|
Block RAM Port0For read
|8K||0xF000_000||Host accesses BAR space|
Block RAM Port1For write
|8K||0x201_8000_0000||Host configures this 64-bit address to QSPI controller DMA address register|
In the software application, the BOARD_BRAM_BASE and BOARD_BRAM_SIZE macros are defined in the file xqspipsu.h.
Host Application Data Flow
The following figure shows the overall programming guideline. Generally, the complete programming flow includes these subflows: QSPI Abort and Initialization, Read Flash ID, Erase Flash, Write Flash, and Verify Flash. In the Verify Flash subflow, there is a DMA Read Flash to the block RAM followed by a Host Read Block RAM to the Host local RAM and then a comparison on the host side.