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

问题描述

我正在使用 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 空间。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...