您的位置首页  家电资讯  新闻

FPGA初学者做时序最易忽视的几个要点,每一项都很重要!

  • 来源:互联网
  • |
  • 2020-10-03
  • |
  • 0 条评论
  • |
  • |
  • T小字 T大字

FPGA毕竟不是ASIC,对时序收敛的要求更加严格,本文主要介绍本人在工程中学习到的各种时序约束技巧。

首先强烈推荐阅读官方文档UG903和UG949,这是最重要的参考资料,没有之一。它提倡要在设计的早期阶段就要排除问题,越到后期时序的改善就越困难。其中HLS层次对性能的影响是最大的。

本文将从代码风格,时序修正,工程设置等几个方面介绍本人的实践经验,希望让各位初学者快速提高,也希望FPGAer能给出宝贵建议。

1. 代码风格

推荐使用Xilinx language templates的代码块,这里的代码能够综合出正确且结构简洁的电路,包括移位寄存器,乘法,复数乘法,FIR滤波器等,凡是涉及到的模块尽量使用官方写法。

合理的设计代码框架。IO相关的代码、时钟管理单元尽量放在顶层,后者有助于以共享资源从而提高性能降低功耗。模块的输出最好是使用寄存器输出,有助于降低路径延时帮助时序收敛。

复位也是非常重要的问题。和ASIC不同,Xilinx FPGA的寄存器是高电平复位,支持异步复位和同步复位,但是DSP和BRAM内部的寄存器不支持异步复位。因此,官方更推荐设计采用高电平同步复位,可以降低资源的使用和功耗,有助于时序收敛。由于FPGA的初始状态是确定的(可以在定义说明中指定),为了更快地时序收敛,官方文档认为,能不用复位是最好的,尤其数据路径和移位寄存器的设计中。不过使用同步复位仍需要注意控制集不能太多的问题。关于这方面的内容,UG949第三章Control Signals and Control Sets给了详细的说明。

数学运算使用DSP单元速度会更快一些,根据DSP的结构重组数学运算,充分利用FPGA的DSP、BRAM资源。并且能做到对代码映射的硬件资源心里有数。如果并不需要优先级,尽量将If语句转化为case语句。

尽量不要使用Don't Touch这类语句。如今Vivado综合工具已经很完善了,除非代码有问题或者手动复制寄存器,否则一般不会发生电路被综合掉的现象。使用这些语句会覆盖Vivado综合设置,导致电路没有得到充分的优化,给时序收敛造成困难。

2. 时序修正

严格遵守Vivado开发流程,在第一次跑综合时最好是在没有任何物理约束的情况下,Vivado在越少物理约束的情况下综合出来的效果越好。查看每个阶段的时序报告,将每一阶段的时序违例控制在300ps以内,尽早消除问题。以前本人RTL Analysis阶段过了之后选择运行Implementation跳过Synthesis报告,这是不可取的行为。有时候会发现Synthesis有时序问题而在Implementation阶段反而没问题,这是因为Vivado在Implementation阶段对时序不满足的地方倾斜了更多的资源保证时序收敛。但是忽略Synthesis的时序问题会在后期顶层模块集成占用大资源时爆发出来。

下面介绍主要面对的两个时序问题的处理技巧。

1)setup time 建立时间问题

建立时间是工程设计中最常遇到的问题了。一般说来,导致建立时间违例主要有两个原因:逻辑级数太大或者扇出太大。

打开Report Timing Summary界面查看路径延迟信息,如下图所示。

Levels指的是逻辑级数logic level,一个logic level的延迟对应的是一个LUT和一个Net的延迟,对于不同的器件,不同频率的设计能容纳的logic level是不同的。假设7系列的-2速度等级250MHz的设计,电路设计的大部分levels最好不要超过8,否则会造成时序收敛困难。

Logic level太大的处理方法就是重定时(Retiming)了,典型的重定时方法就是流水线,将过于冗长的组合逻辑增加寄存器进行打拍。

High Fanout指的是扇出,同样和器件、设计频率等有关,如下图所示:

降低扇出最好不要在综合设置中指定,过低的扇出限制会造成设计堵塞反而不利于时序收敛,最好的方法是根据设计中时序最差路径的扇出进行针对性的优化。如果是寄存器的输出扇出很大,可以使用max_fanout属性标记寄存器声明,也可以手动复制寄存器。

如果不是关键时序路径,而且高扇出网络直接连接到触发器,对扇出超过25K的net插入BUFG:

set_property CLOCK_BUFFER_TYPE BUFG [get_nets netName]

当然,也可以在后期Implementation的物理优化设置中优化扇出。

2)hold time 保持时间问题

在实践中,我发现保持时间问题的问题往往是异步处理的问题。

对于一个信号的跨时钟域问题,一般使用双寄存器法(对于慢采快的结绳法这里不讨论)。为了降低MTBF(Mean Time Between Failures,平均无障碍时间),这两个寄存器最好位于同一个slice中。可以使用tcl语言指定,如:

set_property ASYNC_REG TRUE [get_cells [list sync0_reg sync1_reg]]

也可以直接在代码中指定:

(* ASYNC_REG = "TRUE" *) (* keep = "true" *)reg sync0_reg, sysnc1_reg;

也可以参考代码模板使用XPM模板进行处理。

多个信号一般是使用FIFO或者握手的方法,这里不再赘述原理。同步CDC处理比较复杂,本人打算之后另外写一篇文章详细讲述。

3. 工程设置

Vivado综合实现本质是时序驱动的,和ISE不同,因此再也没有ISE那种用随机种子综合实现满足时序收敛的工具。不过Vivado在布局布线方面提供了几种不同的策略(directive),通过不同策略的组合可以产生上千种不同的布局布线结果,还可以使用tcl钩子脚本自定义布局布线过程,足以满足需求。而且,Vivado可支持同时运行多个Implementation,这为这种设计时间换取性能的方法提供了工具上的便利。

Implementation里Post-place Phys Opt Design和Post-route Phys Opt Design是没有使能的。工程后期使能这两个配置也能在一定程度上改善时序收敛。

FPGA工程师的工作不只是将电路功能实现,由于器件和工具不是理想的,所以还需要研究器件特性和工具的局限,尤其是在如今算法结构越来越成熟的背景下,不断被工具折磨,也许这也是FPGA工程师的悲哀吧。

为了帮助学员能够更深入地掌握FPGA系统设计与实际应用。编者给大家准备了FPGA系列学习电子书籍,包括了 CPLD/Verilog编程语言基础与设计,数字IC、基本逻辑、组合逻辑等基础电路,Vivado平台开发与调试、集成开发环境使用及相关技巧,FPGA数字信号处理、数字图像处理及各种FPGA实战项目设计案例等等。

1.Verilog数字系统设计教程

本书从算法和计算的基本概念出发,讲述如何用硬线逻辑电路实现复杂数字逻辑系统的方法。全书共分三部分。部分内容共18章;二部分共12个上机练习实验范例;三部分是Verilog硬件描述语言参考手册,可供读者学习、查询之用。本书2版后,在语法篇中增加了IEEE Verilog1364-2001标准简介,以反映Verilog语法的新变化。

2.数字电路与逻辑设计

本书系统地阐述了逻辑电路的基础理论--逻辑函数及其数学工具;重点讨论了逻辑电路的设计方法和分析方法;详细介绍了通用性强的几类中、大规模集成器件,并结合实例介绍了它们在各领域中的应用;对可编程逻辑器件及其硬件描述语言也进行了系统介绍。

全书共10章,主要内容有:逻辑函数、集成逻辑门、组合逻辑电路、集成触发器、时序逻辑电路、硬件描述语言、半导体存储器、可编程逻辑器件、脉冲单元电路、模数及数模转换技术等。各章均附有内容提要、小结、思考题和习题。

3.Vivado从此开始

本书涵盖了Vivado的四大主题:设计流程、时序约束、设计分析和Tcl脚本的使用,结合实例深入浅出地阐述了Vivado的使用方法,精心总结了Vivado在实际工程应用中的一些技巧和注意事项,既包含图形界面操作方式,也包含相应的Tcl命令。本书语言流畅,图文并茂。全书共包含405张图片、17个表格、172个Tcl脚本和39个HDL代码,同时,本书配有41个电子教学课件,为读者提供了直观而生动的资料。本书可供电子工程领域内的本科高年级学生和研究生学习参考,也可供FPGA工程师和自学者参考使用。

4.Xilinx新一代FPGA设计套件Vivado应用指南

本书系统论述了新一代FPGA设计套件Vivado的性能、使用方法以及FPGA的开发方法。全书内容包括Vivado设计套件的特性,全面可编程FPGA器件的架构,使用Vivado套件创建复杂数字系统设计项目,仿真系统功能,RTL分析产生网表文件,性能要求的时序约束及综合,布局布线及静态时序分析和生成位流文件等全部设计过程,基于项目和非项目批作业两种用Tcl指令的设计模式,同步设计技术、HDL编码技术、时序收敛和HI.S优化DSP算法等关键技术,并以实例介绍了嵌入式系统的设计方法等。

5.Xilinx FPGA设计权威指南 Vivado集成设计环境

本书全面系统地介绍了Xilinx新一代集成开发环境Vivado的设计方法、设计流程和具体实现。全书共分8章,内容包括:Vivado设计导论、Vivado工程模式和非工程模式设计流程、Vivado调试流程、基于IP的嵌入式系统设计流程、Vivado HLS设计流程、System Generator设计流程、Vivado部分可重配置设计流程和Vivado高级设计技术。本书参考了Xilinx公司提供的Vivado最新设计资料,理论与应用并重,将Xilinx公司最新的设计方法贯穿在具体的设计实现中。

6.基于FPGA的嵌入式图像处理系统设计

本书详细介绍了FPGA这种新型可编程电子器件的特点,对FPGA的各种编程语言的发展历程进行了回顾,并针对嵌入式图像处理系统的特点和应用背景,详细介绍了如何利用FPGA的硬件并行性特点研制开发高性能嵌入式图像处理系统。作者还结合自己的经验,介绍了研制开发基于FPGA的嵌入式图像处理系统所需要的正确思路以及许多实用,并给出了许多图像处理算法在FPGA上的具体实现方法以及多个基于FPGA实现嵌入式图像处理系统的应用实例。

7.基于FPGA的数字图像处理原理及应用

本书首先介绍FPGA程序设计和图像与视频处理的关键基础理论,然后通过实例代码详细讲解了如何利用FPGA实现直方图操作中的直方图统计/均衡化/线性拉伸/规定化、线性滤波器操作中的均值滤波器、Sobel算子(滤波、求模、求角度)、非线性滤波器操作中的排序类算法/形态学滤波、图像分割算法中的局部自适应分割/Canny算子等。本书在仿真测试部分设计了一种完善的通用测试系统,并利用此测试系统在每一章的仿真测试环节对所设计算法进行严格的测试和验证。本书在很后一章介绍了在视频处理领域常见的输入/输出接口。本书偏向于工程应用,在书中有大量关于如何利用FPGA实现图像处理算法的实例及代码,并对这些算法的原理及其实现过程、算法测试等做了详细的介绍,全部的算法都进行了仿真测试验证。

8.数字信号处理的FPGA实现

FPGA仍旧是快速创新的领域,很高兴SpringerVerla9公司给我这个机会将FPGA领域的新发展囊括到本书的第3版中。本版新增了总计150多页全新的理念和当前的设计方法。第3版的创新主要包括以下几方面。

现在许多FPGA都包含嵌入式l8位×18位乘法器,因而推荐在以DSP为主的应用中使用这些器件,因为嵌入式乘法器可以节省很多LE。例如,在本版的所有示例,中都用到的CycloneIIEP2C35F672C6器件就具有35个18位×18位乘法器。

9.FPGA设计实战演练(逻辑篇+高级技巧篇)

FPGA设计实战演练共分为两册,分别是逻辑篇和高级技巧篇。

逻辑篇:主要面向广大的FPGA/CPLD初学者,从零基础开始讲述FPGA/CPLD以及相关的基础知识,并以一个支持各种入门、进阶的子母板形式的学习套件为实验平台,针对Altera公司的Cyclone Ⅲ器件量身打造的24个应用实例贯穿其中。实例讲解深入浅出,不仅有基本的Verilog语法讲解,也有设计思路和背景知识的详细描述; 开发工具(Quartus Ⅱ+ModelSim)的使用更是手把手、图文并茂地展示给读者。

高级技巧篇:现代FPGA的结构越来越复杂,多时钟域的设计现在已是常态。对于功能电路来说,复位结构都必不可少。在同步逻辑设计中如何很好地处理异步复位,甚至在多时钟域之间传递(异步)复位信号也是逻辑工程师经常面临的挑战。本书除专门介绍了上述电路的设计方法外,还介绍了状态机的设计。在介绍这些通用电路结构的基础上,还介绍了代码优化以及如何对设计进行综合与布局布线优化方面的相关内容。

10.FPGA项目开发实战讲解

本书立足于工程实践经验,首先介绍FPGA的原理、语法、设计技巧,然后详细介绍了7项常用技术的实现。每项技术从以下几方面介绍:相关技术介绍、FPGA方案框图设计、子模块设计、仿真和测试、项目开发过程中遇到的问题、定位和解决措施,其中插入了大量的状态机转换图和关键代码,方便读者学习。

FPGA工程师经典必读10+本全阶学习推荐书目,资料截图如下:

如何领取以上完整FPGA经典开发电子书?

扫一扫立即领取!

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:
  • 标签:郭夫人落难记
  • 编辑:郭晓刚
  • 相关文章
热网推荐更多>>