LatticeXP2的双端口随机存储器(RAM)IP模块在输入与输出端口位宽不同时的处理
LatticeXP2提供了RAM_DP和RAM_DP_TRUE等双端口RAM的IP模块。这些IP模块可以配置为具有不同的位宽。此时,需要处理不同位宽下的读/写差异问题。
在LatticeXP2的RAM模块手册( https://www.latticesemi.com/view_document?document_id=23976 )中,对于该问题作如下描述:
3.2. Byte Order with Different Port Widths
When instantiating memories that have different port widths, the following examples show the byte order as it relates to endian of the memory input and output.
Example 1: 8-bit Write, 32-bit Read
Big Endian Write Order – Byte[31:24], Byte[23:16], Byte[15:8], Byte[7:0]
Big Endian Read Order – Word[31:0]
Little Endian Write Order – Byte[0:7], Byte[8:15], Byte[16:23], Byte[24:31]
Little Endian Read Order – Word[0:31]
Example 2: 32-bit Write, 8-bit Read
Big Endian Write Order – Word[31:0]
Big Endian Read Order – Byte[31:24], Byte[23:16], Byte[15:8], Byte[7:0]
Little Endian Write Order – Word[0:31]
Little Endian Read Order – Byte[0:7], Byte[8:15], Byte[16:23], Byte[24:31]
需要注意的是,这里使用逗号(“,”)分隔的顺序是需要从右往左阅读的。
下面是一个实例:一个16位读、32位写的大端序(Big Endian)RAM_DP模块,输入端Data固定为{16'd245, 16'd250}(0x00F500FA),并测试输出端Q的输出。可以发现,仿真结果中最先输出的是16'd250(0x00FA)(低16位),随后是16'd245(0x00F5)(高16位)。
下面是一个实例:一个32位读、16位写的大端序(Big Endian)RAM_DP模块,两次写入的输入端Data分别为16'd245(0x00F5)和16'd250(0x00FA),并测试输出端Q的输出。可以发现,仿真结果中的输出为0x00FA00F5。
页面版本: 17, 最后编辑于: 29 May 2024 10:16