信号控制技巧
•
检查是否真正需要全局复位。
•
避免异步控制信号。
•
保持时钟、使能和复位信号极性一致。
•
勿将置位和复位编码到同一寄存器元件中。
•
如果确实需要异步复位,应务必与异步复位的解除保持同步。
掌握推断的结果
您的代码最终必须映射到器件资源上。应努力掌握所针对架构中的关键算术、存储和逻辑元件。因此在对设计功能进
行编码时,应预计可供代码映射的硬件资源。了解这种映射,可让您尽早洞察出任何潜在的问题。
下面的实例将证明掌握硬件资源和映射如何有助于弄清楚设计决策:
•
对大于四位的加法、减法和加减法,一般会使用进位链,而且每两位相加使用一个 LUT (即 8 位与 8 位相加使用
8 个寄存器和相关的进位链)。在三值相加时或把一个加法器的结果与另一个值且在其间不使用寄存器的情况下相
加时,每三位相加使用一个 LUT (即 8 位、 8 位、 8 位相加也使用 8 个寄存器和相关的进位链)。
如果需超过一次以上的相加,可以在每两级相加后设置寄存器以实现三值相加,从而将器件的占用率减半。
•
一般乘法针对的是 DSP 块。位宽不足 18x25 (在 UltraScale 器件中为 18x27 )的符号位映射到单个 DSP 块。会产
生更大乘积的乘法可映射到一个以上的 DSP 块。 DSP 块内部有流水线化资源。
适当地将推断到 DSP 块中的逻辑流水线化,能够显著提升性能和降低功耗。在描述乘法的时候,围绕其进行三级
流水线化可实现最佳的建立、输出相对于时钟时延 (clock-to-out) 和功耗特性。太浅的流水线化 (一或零级)可能
造成时序问题,增加这些块的功耗,同时 DSP 中的流水线寄存器未得到利用。
•
深度为 16 位或者更浅的两个 SRL 可以映射到一个 LUT ,高达 32 位的单个 SRL 也可以映射到一个 LUT 中。
•
对用条件代码得到标准 MUX 组件的情况:
°
4 选 1 的 MUX (4-to-1 MUX) 可实现在单个 LUT 中,产生一个逻辑层。
°
8 选 1 的 MUX (8-to-1 MUX) 可实现在两个 LUT 和一个 MUXF7 组件中,实际上仍然只产生一个逻辑 (LUT)
层。
°
16 选 1 的 MUX (16-to-1 MUX) 可实现在四个 LUT 及一个 MUXF7 和 MUXF8 组件组合中,实际上还是只产生
一个逻辑 (LUT) 层。
把 LUT 、 MUXF7 和 MUXF8 组合在同一 CLB/slice 结构中,产生的组合延迟极低。因此这些组合可视为等同于仅一个逻
辑层。了解这一代码有助于更好地管理资源,也有助于更好地鉴别和控制逻辑层,设置合理的数据路径。
对通用逻辑而言,考虑给定寄存器具有唯一的输入数。根据这个数量,就可以估计出可能实现的 LUT 数量和逻辑层数
量。一般来说, 6 个或六个以下输入会产生一个逻辑层。理论上两个逻辑层可以管理多达 36 个输入。但实际上两个逻
辑层最多仅能管理 20 个输入。一般来说如果输入数量越多,逻辑等式越复杂,那么需要的 LUT 和逻辑层就越多。
重要提示: 检查硬件资源的可用性以及如何在设计周期早期高效率地加以运用,从而简化修改工作。这种方法与在时
序收敛过程中等待直到设计周期尾声相比,更能提供优质的结果。
推断 RAM 和 ROM
可以用多种方式设定 RAM 和 ROM 。每种方法都有各自的优势和不足。
•
推断
优势:
°
高度可移植
°
便于阅读取和理解
°
自我文档化
°
快速仿真
不足:
°
不能访问所有可用的 RAM 配置
°
可能产生不够理想的结果
由于推断一般能产生良好的结果,因此建议采用此方法,除非不支持指定的用途,或是产生的结果在性能、占位面
积或功耗上不令人满意。如果发生这种情况,建议尝试其它方法。
在推断 RAM 时,赛灵思建议使用 Vivado 工具中提供的 HDL 模板。如前文所述,使用异步复位会给 RAM 推断造
成不利影响,应避免使用。请参阅 “ 使用 Vivado Design Suite HDL 模板 ” 。
•
赛灵思可参数化宏 (XPM)
优势:
°
可在赛灵思器件系列之间移植
°
快速仿真
°
支持不对称宽度
°
可预测的 QoR
不足:
°
仅支持 XPM 选项
XPM 是基于不能修改的固定模板的推断构建的。因此,他们可以保证 QoR ,并且可以支持标准推断没有的功能。
当标准推断不支持所需的功能时,赛灵思建议您改用 XPM 。
注释: 当使用 compile_simlib 编译仿真库时, XPM 会自动编译。如需了解更多信息,请参阅《 Vivado Design
Suite 用户指南:逻辑仿真》 (UG900) [ 参照 14] 。
•
直接实例化 RAM 原语
优势:
°
对实现方案有最高控制权限
°
能访问块的各项功能
不足:
°
代码可移植性差
°
功能和用途冗长繁琐,难以理解
• IP 目录提供的 IP 核
优势:
°
在使用多个组件时一般能提供更优化的结果
°
设定和设置简单
不足:
°
代码可移植性差
°
需要管理核