Xilinx ISE块ram推断的鲁棒性

时间:2011-02-01 15:03:05

标签: vhdl fpga xilinx

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

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

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;

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

3 个答案:

答案 0 :(得分:5)

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

假设您正在使用XST进行综合,XST用户指南是一个很好的开始,可以看到Xilinx正式声明XST将识别块公羊推理的内容。 XST User Guide for 12.4 (pdf)

答案 1 :(得分:5)

这是一般性评论,并非针对您的问题。试图假设第二次猜测合成工具效率不高。结果可能因工具版本以及设计和实现的上下文(不同的开关,优化目标,目标体系结构等)而异.ISE / XST是免费的...下载并尝试您的代码。然后你可以更有意义地问这个问题......“为什么XST版本X.Y在这些条件下不能推断Block RAM?”然后我们还可以讨论XST是否具有正确和预期的行为。

答案 2 :(得分: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)。我通过直接实例化BlockRAM宏Xilinx的提供并通过创建适当的内存解码模块来选择/写入/读取内存模块中适当的单独BlockRAM来解决问题。