Intel®高层次综合编译器专业版: 最佳实践指南

ID 683152
日期 12/04/2023
Public
文档目录

7.2. 实例:覆盖Banked存储器架构

在代码中以各种组合方式使用存储器属性,可允许覆盖 Intel® HLS Compiler Pro Edition针对组件推断的存储器架构。

以下代码实例演示如何使用存储器架构覆盖banked存储器,以节省FPGA上的存储器block:

  • hls_bankwidth(N)
  • hls_numbanks(N)
  • hls_singlepump
  • hls_doublepump

原始代码创建的两个bank的single-pumped片上存储器块为16位宽:

component unsigned short mem_banked(unsigned short raddr,
                                    unsigned short waddr,
                                    unsigned short wdata){
    unsigned short data[1024];
    
    data[2*waddr] = wdata;
    data[2*waddr + 9] = wdata +1;

    unsigned short rdata = data[2*raddr] + data[2*raddr + 9];

    return rdata;
}

为节省banked存储器,可通过先添加以下属性然后声明data[1024]来实现一个bank的double-pumped(双泵)32-bit宽片上存储器块。这些属性将两个已使用一半的存储bank折叠成一个double-pumped的完全使用的存储bank,以便可以像访问两个已使用一半的存储bank一样迅速。

hls_bankwidth(2) hls_numbanks(1)
hls_doublepump
unsigned short data[1024];

或者,可在声明data[1024]前先添加以下属性来实现一个bank的single-pumped片上存储块从而避免double-pumped存储器的双时钟要求。但是,在该实例中,这些属性会将可停机仲裁添加到组件存储器中,这样会损害组件属性。

hls_bankwidth(2) hls_numbanks(1)
hls_singlepump
unsigned short data[1024];