1

我正在尝试使用以下配置在 Verilog 中构建 RAM 块:

  • 端口 A:128 位宽,使用 clk_a,将 RAM 块视为 128 位宽乘以 128 行深
  • 端口 B:32 位宽,带有 clk_b,将 RAM 块视为 32 位宽乘以 512 行深

不用担心 READ-WRITE 序列化和互斥,我会在上面一层来处理它。

基本上,生成 128 位乘以 128 行的代码如下所示:

reg [DATA_WIDTH-1:0]                 mem  [0:2**ADDRESS_WIDTH-1];

现在,如果我希望它看起来像 32 位乘以 512 深,我如何重构这个内存以看起来不同(有点像 C 中的重铸)?我知道我可以通过 32 位字启用来做到这一点,但我想看看是否有更清洁的方法来实现这一点。

让我知道你的想法 ?

RRS

更正:我指的是 Xilinx BRAM(BRAM 不能深 512)。但这本质上是一个具有链接多个 BRAM 的胶合逻辑的内存块。谢谢指出!!

4

2 回答 2

2

我是这样解决的:

在 ISE 中,我能够在其中一个包含实际代码示例的菜单中找到“语言模板”。有一个带有“文件 I/O”的,可以完美运行。

您还可以在双端口 RAM 周围构建一个包装器模块,这将改变另一侧的数据宽度。在较小的数据宽度端口(即更多的地址线)上,您可以使用较低的地址位作为字选择系统,允许您写入内存线的一部分。这对我来说是正确的合成(检查你的合成工具)。

于 2012-06-14T13:57:07.703 回答
0

有关具体如何执行此操作的说明,请参阅赛灵思文档。例如,http://www.xilinx.com/support/documentation/sw_manuals/xilinx13_2/xst_v6s6.pdf从第 217 页开始提供了明确的 VHDL 和 Verilog 示例,说明如何执行您的要求。

于 2012-06-14T04:37:00.950 回答