FPGA设计,视时序为一切

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FPGA设计,视时序为一切

当您的FPGA 设计无法满足时序性能目标时,其原因可能并不明显。解决方案不仅取决于FPGA 实现工具为满足时序要求而优化设计的能力,还取决于设计人员指定前方目标,诊断并隔离下游时序问题的能力。目前,设计人员掌握了一些使用技巧,可以帮助您设置时钟;通过Synopsys Synplify Premier 等工具正确设置时序约束;然后调整参数,以满足赛灵思FPGA 设计的性能目标。

有多个攻克角度,其中包括:

•更好的设计设置,例如完整、准确的时序约束和时钟规格;

•节省时间的设计技术,例如仔细RTL编码,以求更佳的性能效果,以及将造成最大性能问题的设计部件整合在一起,从而缩短随后调整设计时序的迭代运行时间。

•综合关联,并布局布线时序,以产生更好的时序结果质量(QoR)和时序收敛。

现在从三个方面详细介绍一下这些技术,并检测如何使用以实现您的时序目标。

您需要确认您已经充分、完全地对您的设计进行约束,且未过度约束。

第一步:更好的设计设置

最大的成本开销来自于指定正确、完整的设计约束条件。这些约束条件可以在设计意图和设计性能目标与综合工具之间实现通信。综合设计之后,这些约束条件和关键路径信息将自动传递至Vivado®Design Suite布局布线(P&R)工具,以进一步确保满足时序要求。

综合工具可以帮助您应对设置综合前约束这项艰巨的任务。您的任务清单如下:

1.识别时钟

2.识别并创建时钟组和时钟关系

3.约束时钟

4.约束设计输入和输出

5.定义多周期路径和错误的路径

您需要确认已经充分、完全地对您的设计进行约束,且未过度约束。过度约束将导致运行时间延长,并有可能报告错误的关键路径。务必要指定多周期和错误路径,并对衍生时钟设置约束(define_path_delay, define_false_path)。

设置Vivado流程的初始约束文件

由于约束条件设置工作非常困难,因此综合软件可以提供一个初始约束模版,其中的基础约束和语法可以作为此项工作的起点。例如,在Synplify综合软件中,运行TCL实用程序为特定的设计创建一个初始FDC文件:

TCL: create_fdc_template

图1给出了该流程将生成的约束文件(.fdc)的实例。该实例中,您可以看到声明时钟、时钟组(时钟之间的关系)和输入/输出延迟等关键项目已经纳入考虑范围。

针对Vivado Design Suite流程中约束设置的最佳实践

在Vivado Design Suite流程中设置约束条件时,要确保进行以下操作:

•定义输入端口或与输入端口连接的网络上的所有基础时钟。

•定义黑盒输出引脚上的时钟。

•定义网络上生成的时钟。

•不要定义逻辑选通时钟。

•提供正确的时钟约束:不要过度约束,并确保将不相关的(又称异步)时钟放置在单独的时钟组中。

•定义时序例外,例如错误路径和多周期路径。

提示:在Vivado Design Suite中,时钟约束应尽量接近源时钟,而不是赛灵思ISE® Design Suite流程中的BUFG。

确保您的约束条件正确无误

我们建议在设计设置阶段采用四种约束验证技术。为了让您了解应该做的约束检查类型,我们来看一下Synplify软件执行的各项检查。

首先,运行―语法检查‖—即快速进行约束条件检查,其中包括其嵌入的―get_XX‖ 和

―all_XX‖命令,用以发现和清理任何约束语法错误。错误会显示在日志文件中,并可以超链接至错误手册,以解释错误并提出修改建议。使用Tcl命令check_fdc_query。

第二,运行―综合检查‖以检测与硬件相关的错误,例如错误编写的触发器。这些错误会以单独的日志文件报告。

第三,运行基础―快速综合‖,以检查时钟设置问题,包括声明、衍生和推断时钟。快速综合支持执行时钟设置检查,因其可生成时钟报告和时序报告,进而使时钟设置问题明朗化。

一些综合工具可支持在―快速‖模式下运行综合,其为了实现较短的运行时间,其会禁用一些综合优化。在Synplify Premier综合软件中,您可以通过以下命令实现:

set_option –fast_synthesis 1

综合编译器将创建一个综合报告时钟总结,您可以使用其中有关推断时钟的信息用以识别、定义和约束时钟。

第四,运行全面的―约束条件检查‖。该检查会查找关于时钟关系、未约束开始/结束点、未锁定I/O和无约束I/O的约束设置问题。

一个全面的约束检查还会查找正确应用的约束和实例名称。例如,它会标记出应用于不存在或无效参数和对象的时序约束。然后该工具会针对不可应用的约束和未找到的实例生成详细的解释性报告,以便纠正约束文件。Synplify综合工具将在综合预先映射阶段自动运行这些检查,或者您可以在综合开始时使用以下TCL命令运行约束检查:TCL: project -run constraint_check

运行这些基本的检查类型可在综合周期的早期就能找出潜在的错误,从而改进结果的质量(见图2)。

运行综合之后,请务必要分析后期综合时序报告,因为其可以提供重要的信息。例如在使用Synplify软件时,时序报告的起始时钟部分中的―系统时钟‖显示,一些I/O没有被约束。此报告的接口信息将确认情况是否如此。

第二步:RTL代码风格和关键路径调整

为了收敛更好的时序,我们建议您针对有限状态机、RAMS、数学/DSP功能、时钟树和移位寄存器使用特定的代码风格。结果将改进时序QoR,因为通过FPGA原语构建模块,综合工具能够更好地推断实现。

另外,这些代码风格可以避免创建不必要的逻辑,例如推断锁存器、RAMS的读取/写入检查逻辑,以及已经装入DSP原语中的逻辑。关于这个话题我们已经谈了很多,使用综合工具中的核生成器性能是关键考虑因素。例如,Synplify软件包含一个SynCore IP 向导,它可以为支持字节的RAM自动生成所需的RTL代码风格。其他IP生成器,例如赛灵思IP Catalog、Synopsys Synphony Model Compiler或Synopsys DesignWare coreTools和DesignWare Building Blocks,也可以帮助您配置IP,执行许多DSP和数学功能,并创建良好的RTL代码风格。如果是手动编码,请记住以下内容:

针对有限状态机

•对于赛灵思流程,启动后请使用同步复位将硬件设置为有效状态,或者在操作期间复位硬件。

•将时序模块从combinational-always模块中分离。

•为所有可能的现态指定次态。

针对模块RAM

•在一切可能的地方尽量编码同步RAM,因为它们一般会以较高的时钟频率运行。

•将RAM编码放置在单独的模块里,以便易于在网表级别进行调试。

•在决定使用RAM(带特定复位条件、支持双端口或字节的RAM,或非对称RAM)之前,请看一下推荐的代码风格,并查看是否支持推断。如果不支持,则网表结束时可能创建较多的控制逻辑。

•请勿从写入相同时钟周期的同一个地址中读取。

•如果其他方法均告失败,可以使用属性(syn_ramstyle for Synplify software)强制让使用寄存器实现,释放RAM资源供以用于更重要的时序和更大的RAM。

针对DSP模块

您可以使用这些原语执行过滤器和数学函数,例如计数器、加法器、乘法器、除法器等。•将DSP编码放在单独的模块里,以便易于在网表级别进行调试。

•如果其他方法均告失败,可以使用属性(syn_ dspstyle for Synplify in Vivado Design Suite flows)强制使用DSP 模块实现。

针对SRL

您可以将移位寄存器装入选择select_SRL Xilinx SRL原语或在寄存器中执行。

•封装自动进行。对于移位寄存器链,Synplify软件始终会将链中最后一个寄存器留在封装select_srl之外,以便优化时序QoR。

•如果其他方法均告失败,可以使用syn_srl风格属性来控制SRL的实现方式。

相关文档
最新文档