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

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

7.1. 实例:覆盖组合式存储器架构

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

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

  • hls_bankwidth(N)
  • hls_numbanks(N)
  • hls_singlepump
  • hls_max_replicates(N)

原始代码组合两个存储器访问,形成一个存储器系统,其为256个位置深乘以64位宽(256x64位)(两个片上存储器块):

component unsigned int mem_coalesce_default(unsigned int raddr,
                                            unsigned int waddr,
                                            unsigned int wdata){
    unsigned int data[512];
    data[2*waddr] = wdata;
    data[2*waddr + 1] = wdata + 1;
    unsigned int rdata = data[2*raddr] + data[2*raddr + 1];
    return rdata;
}

下图显示代码实例的256x64位存储器结构,以及高级设计报告(report.html)中显示的组件存储器结构

图 33. 针对mem_coalesce_default生成的存储器结构

已修改的代码会实现单个片上存储器块,该存储快为512字深乘以32位宽且可停顿仲裁:

component unsigned int mem_coalesce_override(unsigned int raddr,
                                             unsigned int waddr,
                                             unsigned int wdata){
    //Attributes that stop memory coalescing
    hls_bankwidth(4) hls_numbanks(1)
    //Attributes that specify a single-pumped single-replicate memory
    hls_singlepump hls_max_replicates(1)
    unsigned int data[512];
    data[2*waddr] = wdata;
    data[2*waddr + 1] = wdata + 1;
    unsigned int rdata = data[2*raddr] + data[2*raddr + 1];
    return rdata;
} 

下图显示代码实例512x32位可停机仲裁的存储器结构,以及高级设计报告(report.html)中显示的组件存储器结构。

图 34. 针对mem_coalesce_override生成的存储器结构

虽然看起来可通过减少组件所需要的RAM块数量来节省硬件面积,但引入可停机仲裁会增加实现组件所需要的硬件数量。以下表格中,可比较组件所需的ALM和FF数量。