一、数组在顶层接口的使用
1.数组在顶层接口上使用,默认是ap_memory接口
一般这个ap_memory接口,默认类似为一个单口RAM,这个单口RAM访问就会收到限制,
因为一次只能访问一个数据样本;
2.突破默认的单口访问ap_memory接口
使用#pragram resource core = RAM-2P_BLOCK的方式进行优化,这样就可以突破上述的限制,这样,一个clock
就可以访问两个样本数据
3.使用array_partition将端口分为多个RAM端口,提高访问瓶颈
二、axilite修饰顶层接口的数组
1.当axilite修饰数组的时候,在顶层接口的数组不再是被综合为接口,而是被综合为一个axi_bram了,
这个axi_bram是一个单口的,注意axi_bram只能是一个单口RAM,如果你想多个,那么,你就得分成多个数组了
2.如果想这个数组不影响后续得数据流设计
你需要定义一个局部的静态数组作为桥梁,来接收顶层数组,这样就能够对设计起到解绑的作用。
针对这个静态数组,如果不大的话,你可以使用array_partition全部打散,然后在loop循环中,使用unroll来展开缓存;
如果数组比较大,这种方式就不太合适,因为index索引的不确定会综合出一个非常大的多路选择器,这个会影响时序收敛,
所以这个时候,需要使用array_partition进行分组,分成多个小的RAM,这样port就变得很大,能够让你的设计更加合理。
三、顶层参数的数组作为dataflow的子函数访问
1.这个手册推荐使用stable来优化
注意,使用stable的前提是,你不能在顶层使用axilite同时优化这个数组,因为是不兼容的,如果你使用了axilite,你不能使用
stable,stale的原因是这个数组被综合为dataflow的FIFO,你将其综合为RAM,那么就不会存在阻塞了。