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

ID 683152
日期 6/22/2020
Public

本文档可提供新的版本。客户应 单击此处 前往查看最新版本。

文档目录

6.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)中显示的组件存储器结构

图 10. 针对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)中显示的组件存储器结构。

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

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