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数量。