在特定 URAM 内存地址上分配和分配阵列内存

时间:2021-01-21 02:29:38

标签: memory fpga xilinx microblaze

我正在使用 Xilinx FPGA (MicroBlaze) 开发 SoC 上的收发器。

这种情况是我需要从 FPGA 的 UltraRam(URAM) 块加载收发器的固件,因为固件阵列无法与程序中的所有其他内容一起放入 MicroBlaze 系统的 BlockRam。 因此,需要将固件数据移动到 URAM 中。 但是URAM不支持初始化,所以我必须在主程序运行时写入固件数据。

我编写的代码遵循以下类似的模式。请注意,我有两种将程序写入 FPGA 的方法:通过 Vitis/UART (#define UART_LOAD) 和通过内存配置。 *为了一致性,“#ifndef UART_LOAD”表示固件是通过内存配置从外部 CPU 加载的。

#ifndef UART_LOAD //load bitstream from external CPU

    unsigned char *FW_Array;

#else // load bitstream + program via Vitis/Uart

/* URAMBLOCK Starts at 0xD0000000 */
    unsigned char FW_Array[] __attribute__((section(".URAMBLOCK")))= {0x00, 0x01, ... , 0xFF};

#endif

unsigned int FW_Array_Len = 0x100;

int main(void)
{
#ifndef UART_LOAD

     FW_Array = (unsigned char *) 0xD0000000; // UpdateMem error if I allocate/assign outside runtime

/* ... Load/Write FW_Array contents from external CPU via some comm interface ...*/

#endif

/* Read FW_Array contents here */

return 0;
}

有没有更好的方法来实现这一目标?

只有 .URAMBLOCK 部分链接到物理 URAM,程序部分(.data、.bss 等)的重置链接到 BRAM。我担心实际程序可能会不小心写到 FW_Array 的 URAM 空间。

0 个答案:

没有答案
相关问题