我从未初始化过信号。这样,任何缺少重置或分配的信号都将是未知的或已初始化。在一些参考代码中它们有初始化。这违背了我的愿望。此外,由于初始化不可综合,因此可能会出现模拟/综合不匹配的情况。
在这种情况下有什么理由初始化信号吗?
编辑 2011 年 6 月 17 日:正如 @Adam12 所问,这适用于存储(Verilog reg)和组合(线)元素。
(以下建议很大程度上取决于器件架构和综合工具,我的发言来自 Xilinx FPGA(例如 Virtex-5 部件)的经验)。
您关于初始化不可综合的假设是不正确的。初始化信号绝对是可合成的!
例如,可以对其进行综合,以便使用初始值对设备进行编程:
signal arb_onebit : std_logic := '0';
signal arb_priority : std_logic_vector(3 downto 0) := "1011"
此外,您可以使用信号初始化并放弃传统的异步或同步全局重置方案来实现更好的结果质量 (QoR)。这是因为这些工具不再需要将复位信号路由到零件周围的所有 FF。虽然一些老一代 FPGA 可能具有用于复位的专用资源,但较新部件的情况并非如此。这意味着重置的路由就像设计中的所有其他信号一样,从而减慢构建过程并降低性能。
你可以做什么呢?使用信号初始化。
- 使用专用的“GSR”(我相信是全局设置/重置)。这可以通过专用的 Xilinx 原语访问。请注意,使用 GSR 时,并非器件的所有存储元件都会重置。例如,我认为 BRAM 会保留值,但 FF 会重置为初始化值。
- PROGL 您的设备。这将导致整个器件从原始比特流(位于 PROM 中)重新编程。每次从 PROM 加载器件时,所有存储元件(FF、BRAM 等)都会进入由初始化决定的已知状态。如果不初始化,我相信它默认为“0”状态。您可以使用 FPGA 编辑器(作为 Xilinx 工具集的一部分提供)等工具查看结果来验证存储器元件初始化的状态
如果您确实需要重置设计的一小部分(“本地”重置),那么您应该像通常处理重置一样处理此问题。
以下是 Xilinx 工具的一些参考:
- 白皮书描述了重置的高级注意事项
-
XST 13.1 用户指南参见第 50 页和 128 页
-
Xilinx Virtex 5 YouTube 培训系列。第 4 部分看起来就是你想要的。
EDIT
经过进一步的研究,我发现指定初始值虽然在某些情况下有助于提高 QoR,但在其他情况下可能会产生损害。这实际上取决于您的综合工具供应商将如何兑现初始值。从本质上讲,初始值是对工具的约束。当您的设计被综合然后映射到零件时,您的设计中会添加一条注释,即“当您实现此内存元素时,请为其指定此初始值”。在许多情况下,添加此约束会阻止元素被优化(删除、组合等)。
建议:对于重置和初始化,没有硬性/快速/一刀切的规则。为了获得最佳优化和资源利用,您must了解您的综合工具,并且您must了解您的目标技术。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)