2

我对 Xilinx ISE 块 ram 推理的稳健性有疑问。

我的机器上没有安装 xilinx ise(今天),但我通常使用专用编码完美地推断块 ram,基本上依赖于:

type   ram_type is array(2**ADDR_WIDTH-1 downto 0) of std_logic_vector(DATA_WIDTH-1 downto 0);

我的问题是:你能告诉我 ISE 是否会推断出正确的块 ram

signed(DATA_WIDTH-1 downto 0)` instead of `std_logic_vector(DATA_WIDTH-1 downto 0)

甚至更多(在一个包中):

subtype signed8 is signed(7 downto 0)

进而

type   ram_type is array(2**ADDR_WIDTH-1 downto 0) of signed8;

我知道合成器有时很敏感......

4

3 回答 3

5

我自己没有对此进行测试,但是“签名”类型是从 std_logic 类型派生的,所以我不明白为什么这不起作用。

假设您正在使用 XST 进行综合,那么 XST 用户指南是了解 Xilinx 官方声明 XST 将识别用于块 ram 推理的内容的好地方。XST 12.4 用户指南 (pdf)

于 2011-02-01T16:25:07.210 回答
5

这是一般性评论,并非针对您的问题。尝试假设性地再次猜测合成工具并不是很有效率。结果可能会因工具版本以及您的设计和实施环境(不同的开关、优化目标、目标架构等)而异。ISE/XST 是免费的……下载并试用您的代码。然后你可以更有意义地问这个问题......“为什么 XST 版本 XY 在这些条件下不能推断出块 RAM?” 然后我们还可以讨论 XST 是否具有正确和预期的行为。

于 2011-02-01T21:42:21.343 回答
3

除了 Josh 建议的链接(其中详细介绍了 XST 的 RAM 实现),这里是 Xilinx 网站上的另一个文档,其中解释了不同的 RAM 实现及其权衡(第 76 页):

http://www.xilinx.com/support/documentation/sw_manuals/xilinx12_4/sim.pdf

附带说明一下,我使用了“阵列”方法,并且非常适合小型 Block RAM 大小。但是,我不得不说,我尝试使用它来生成一个内存模块,它比我的 Spartan-6 中的 1 BlockRAM 的大小要大得多,但它无法推断它(XST 试图将它实现为分布式 RAM)。我通过直接实例化 Xilinx 提供的 BlockRAM 宏并通过创建适当的内存解码模块来选择/写入/读取到内存模块中适当的单个 BlockRAM 解决了这个问题。

于 2011-02-01T18:39:57.507 回答