0、先验知识
参考资料
单端口RAM(Single-Port RAM)
单端口RAM的读写操作不能同时进行。当we(使能位)拉高时,会将数据写入对应的地址,同时q输出的数据与此时写入的数据是一致的,因此在读的时候需要重新生成对应的读地址给addr,并且disable掉wea。
伪双端口RAM(Simple Dual-Port RAM)
输入有一组数据线,两组地址线,两个时钟。两个输出端口共用有个输出端口。
所以一个端口只读,另一个端口只写,但写入和读取的时钟可以不同,且位宽比可以不是1:1。即允许写A的同时读B,且速率可以不同。
提供两个端口,可以通过端口1写访问,通过端口2进行读访问。
双端口RAM(True Dual-Port RAM)
输入有两组地址线和两组数据线,两个时钟。输出有两个分别的数据线。
所以双口RAM两个端口都分别带有读写端口,可以在没有干扰的情况下进行读写,彼此互不干扰。
1、数组分割
我们可以通过resource directive 来设定看,数组采用怎么样的memory(如双端口、单端口)来实现,如果没有明确告知,HLS编译器会自行决定采用双端口还是双端口。
数组最终会以Memory形式出现(RAM、ROM或者FIFO),如果是顶层函数中的形参就会以相应Memory的接口呈现,包括读写地址、使能以及数据;如果数组是在内部,就会综合成内部的block RAM、LUTRAM、registers,这取决于优化设置;