购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 FPGA设计流程

2.2.1 Vivado套件的设计流程

随着FPGA器件规模的不断增长,FPGA器件的设计技术也日趋复杂,设计工具的设计流程也随之不断发展,而且越来越像专用集成电路(Application Specific Integrated Circuits,ASIC)芯片的设计流程。

20世纪90年代,FPGA的设计流程与当时的简易ASIC设计流程一样,如图2.18所示。最初的设计流程以RTL级的设计描述为基础,在对设计功能进行仿真的基础上,采用综合及布局布线工具,在FPGA中以硬件的方式实现设计要求。寄存器传输级(Register Transfer Level,RTL)向电子系统级(Electronic System Level,ESL)解决方案转移。

图2.18 FPGA工具设计流程的变迁

随着FPGA设计逐步趋于复杂化,软件开发平台增加了时序分析功能,确保设计项目能够按照指定的频率运行。目前的FPGA已经发展为庞大的系统级设计平台,设计团队通常要通过RTL分析来最小化设计迭代,并确保设计能够实现相应的性能目标。借鉴ASIC的设计方法,在整个设计流程中贯穿约束机制。首先添加比较完善的约束条件,然后通过RTL仿真、时序分析、后仿真来解决问题,尽量避免在FPGA电路板上进行调试。Vivado设计套件支持当下最流行的一种约束方法——Synopsys设计约束(SDC)格式。

基于Xilinx前一代ISE开发环境的FPGA设计流程如图2.19所示,主要过程包括:设计规划、设计输入、仿真验证、综合、实现、FPGA配置等。设计输入主要有原理图和硬件描述语言两种方式。通常原理图方法只适合设计简单的逻辑电路,硬件描述语言非常适用于复杂的数字系统设计。综合前仿真属于功能仿真,是针对RTL代码的功能和性能仿真和验证。综合后仿真主要验证综合后的逻辑功能是否正确,以及综合时序约束是否正确。布局布线后的仿真属于时序仿真,由于不同的器件、不同的布局布线会造成不同的延时,通过时序仿真可以验证芯片时序约束是否添加正确,以及是否存在竞争冒险。

Vivado设计套件不仅支持传统的寄存器传输级(RTL)到比特流的FPGA设计流程,而且支持基于C和IP核的系统级设计流程,如图2.20所示。系统级设计流程的核心是基于IP核的设计。利用Vivado套件进行基于RTL的设计,如果设计阶段占用了20%的研发时间,那么需要花费80%的研发时间用于调试,使其正常工作。利用Vivado套件进行基于C和IP核的设计,第一次设计阶段会提高10~15倍效率,后续设计阶段将提高约40倍。

图2.19 基于ISE的FPGA设计流程

图2.20 Vivado两种设计方式的对比

Vivado设计套件中的高级综合工具(High-Level Synthesis,HLS)、C/C++语言库和IP集成器,可以加速开发进度和实现系统集成,如图2.21所示。用户根据自己的项目需求,可以选择基于IP核的设计方式、基于硬件描述语言的设计方式或利用HLS工具实现。对于一些简单的数字逻辑实验,不建议使用HLS工具。

图2.21 Vivado HLS设计流程

2.2.2 设计综合流程

1.设计综合

综合的过程是将行为级或RTL级的设计描述和原理图等设计输入转换成由与门、或门、非门、RAM和触发器等基本逻辑单元组成的逻辑连接的过程,并将RTL级推演的网表文件映射到FPGA器件的原语,生成综合的网表文件,这个过程有时也称为工艺映射。综合过程包括两个内容:一是对硬件语言源代码输入进行翻译与逻辑层次上的优化;二是对翻译结果进行逻辑映射与结构层次上的优化,最后生成逻辑网表。

Vivado设计套件不仅支持VHDL和Verilog HDL,同时能全面支持System Verilog。Vivado支持基于电路行业标准综合设计约束,约束文件由UCF转为XDC文件,并且不再支持UCF文件。在综合的过程中,综合工具使用XDC约束文件进行综合优化,因此必须存在XDC文件。

网表文件是对创建的设计项目进行的完整描述,网表文件由单元(Cell)、引脚(Pin)、端口(Port)和网线(Nets)四个基本元素构成。

单元(Cell)是设计的对象,可能是设计项目中模块(modules)或实体(entities)的例示、标准库元件(查找表、触发器、存储器、DSP模块等)的例示、硬件功能的通用技术表示及黑盒等。

引脚(Pin)是单元之间的连接点,端口(Port)是设计项目顶层的输入端口和输出端口,网线(Net)是包含引脚与引脚及引脚与端口之间的连接线。实际应用中,容易混淆引脚和端口,要注意它们之间的差别。端口是指设计项目主要的输入端口和输出端口,通常位于设计项目源文件的顶层模块,而引脚是指设计项目中例示元件的连接点,这些例示元件包括网表文件中各层次的例示对象及各个原语单元。

以下三个不同的网表文件作为执行设计的基础贯穿整个工程项目的设计过程:

● 推演的(Elaborated)设计网表文件;

● 综合的(Synthesized)设计网表文件;

● 实现的(Implemented)设计网表文件。

2.Vivado设计综合选项

在“Flow Navigator”流程浏览器窗口界面下,展开“Synthesis”选项,鼠标左键单击“Synthesis Settings”选项,弹出项目综合属性设置对话框,如图2.22所示。

图2.22 综合属性设置对话框

(1)默认约束集合(Default Constraint Set)

在默认约束集合右侧,通过下拉列表框中,可以选择用于综合的多个不同的设计约束集合。一个约束集合是多个文件的集合,包含了XDC文件中用于工程项目的设计约束条件。有两种类型的设计约束,通过选择不同的约束,可以得到不同的综合结果。

物理约束:定义了引脚的位置和内部单元的绝对或相对位置。内部单元包括块RAM、查找表、触发器和器件配置设置。

时序约束:定义了设计要求的频率。如果没有时序约束,Vivado设计套件仅对布线长度和布局阻塞进行优化。

(2)运行策略(Strategy)

在“Option”区域下的运行策略右侧的下拉列表框中选择用于运行综合的预定义策略,用户也可以自己定义运行策略。运行策略选项和默认设置如表2.4所示。

表2.4 运行策略选项和默认设置

1)tcl.pre和tcl.post:用户可以通过该选项加入自己的Tcl脚本,分别在综合前和综合后运行。

2)-flatten_hierarchy:用户可以按下面的选项进行设置。

● none:设置综合工具不要将层次设计展开,即综合的输出和最初的RTL具有相同的层次。

● full:设置综合工具将层次化设计,充分展开,只留下顶层。

● rebuilt:允许综合工具展开层次,执行综合,然后基于最初的RTL重新建立层次。

这个值允许跨越边界进行优化。为了分析方便,最终的层次类似于RTL。

3)-gate_clock_conversion:该选项用于打开或关闭综合工具对带有使能时钟逻辑的转换,门控时钟转换的使用也要求使用RTL属性。

4)–bufg:该选项用于控制综合工具推断设计中需要的全局缓冲(BUFG)的个数。在网表内,如果设计中使用的其他BUFG对综合过程是不可见的,使用该选项。

由“-bufg”后面的数字决定工具所能推断出的BUFG的个数。例如,如果“-bufg”选项设置为最多12个,在RTL例化了4个BUFG,则工具还能推断出8个BUFG。

5)-fanout_limit:该选项用于指定在开始复制逻辑之前信号必须驱动的负载个数。这个目标限制通常是引导性质的。该选项不影响控制信号,如置位、复位和时钟使能。如果需要,则使用max_fanout告诉工具扇出的寄存器和信号的限制。

6)–directive:该选项用于指定不同的优化策略运行Vivado综合过程。“-directive”的选项为“Default”和“RuntimeOptimized”时,更快地运行综合,以及进行较少的优化。

7)-fsm_extraction:该选项用于控制如何提取和映射有限状态机。当该选项为“off”时,将状态机综合为逻辑。用户也可以从“one-hot”、“sequential”、“johnson”、“jzaij”和“auto”选项中指定状态机的编码类型。

8)-keep_equivalent_registers:该选项用于阻止将带有相同逻辑输入的寄存器进行合并。

9)-resource_sharing:该选项用于在不同的信号间共享算数操作符。选项为“auto”时,表示根据设计要求的时序决定是否采用资源共享;选项为“on”时,表示总是进行资源共享;选项为“off”时,表示总是关闭资源共享。

10)-control_set_opt_threshold:该选项用于设置时钟使能优化的门限,以降低控制集的个数。给定的值是扇出的个数,Vivado工具将把这些控制设置移动到一个D触发器的逻辑中。如果扇出比这个数值多,则工具尝试让信号驱动寄存器上的“control_set_pin”。

11)-no_lc:当选中该选项时,关闭LUT组合,即不允许将两个LUT组合在一起构成一个双输出的LUTs。

12)-shreg_min_size:该选项用于推断将寄存器链接后映射到移位寄存器(SRL)的最小长度。

13)-max_bram:该选项指的是设计中允许块RAM的最大值,默认值“-1”表示让工具尽可能选择最大数量的块RAM。

14)-max_dsp:该选项指的是设计中允许的块DSP的最大值,含义与“-max_bram”选项类似。

2.2.3 设计实现流程

1.设计实现

实现是将综合输出的网表文件翻译成所选器件的底层模块与硬件原语,将设计映射到FPGA器件结构上,进行布局布线,达到利用选定器件实现设计的目的。

在Xilinx ISE设计套件中,FPGA的设计实现过程分为三部分:翻译(Translate)、映射(Map)、布局布线(Place & Route),在其运行过程中,会与存储在硬盘的相关文件有大量的数据交换。翻译的主要作用是将综合输出的逻辑网表翻译为特定的Xilinx器件的底层结构和硬件原语;映射的主要作用是将设计映射到具体型号的Xilinx器件上(如LUT、FF、Carry等);布局布线是调用布局布线器,根据用户约束和物理约束,对设计模块进行实际的布局,并根据设计连接,对布局后的模块进行布线,产生FPGA配置文件。

而在Vivado中,实现的细节有很大的不同,Vivado的实现流程是一系列运行于内存的数据库之上的Tcl命令,具有更大的灵活性和互动性,Vivado与ISE设计实现比较如表2.5所示。

表2.5 Vivado与ISE设计实现对比

2.Vivado设计实现选项

在“Flow Navigator”流程浏览器窗口界面下,展开“Implementation”选项,鼠标左键单击“Implementation Settings”选项,弹出项目实现属性设置对话框,如图2.23所示。

图2.23 项目实现属性设置对话框

3.策略选项

Vivado设计套件包含多个预定义的综合策略,用户也可以根据自己的需求创建策略。根据策略的目的,将其分解为不同的类,类的名字作为策略的前缀。表2.6给出了综合策略类别和用途。

表2.6 综合策略分类和用途

4.实现过程选项

(1)网表优化(opt_design)

该选项用于控制逻辑优化过程,为布局提供优化的网表,对综合后的RTL、IP模块整合后的网表进行深度优化。

● 对输入的网表文件进行逻辑整理。

● 利用常数传播技术(propconst)移除不必要的静态逻辑。

● 重新映射LUT方程。

● 清理无负载的逻辑单元。

(2)功率优化(power_opt_design)

该选项用于控制功耗优化过程,包含对高精度门控时钟的调整,可降低大约30%功耗。这种优化不会改变现有的逻辑和时钟。

Vivado设计套件提供了全局和对象级的优化控制,包括:

1)用于优化设计的全局命令power_opt_design;

2)用于局部级控制的SDC指令set_power_opt。

● 实例级:为功率优化而要包含或排除的实例;

● 时钟域:优化由特定的时钟驱动的实例;

● 单元类型级:块RAM、寄存器和SRL等。

(3)布局设计(place_design)

该选项用于控制布局过程。逻辑优化的下一步是布局,一个完整的布局包括以下主要阶段:

1)布局前的DRC检查。

检查设计中不可布线的连接、有效的物理约束、是否超出器件容量。

2)开始布局。

执行I/O和时钟布局,以及宏单元和原语布局,采用时序驱动和线长驱动及拥塞判别策略。

3)细节布局。

改善小的“形态”,触发器和LUT的位置,提交到位置点,即封装进Slice。

4)提交后的优化。

(4)物理优化(phys_opt_design)

该选项用于布局后时序驱动的优化,对高扇出带负裕量网线的驱动进行复制和布局,如果改善时序只执行复制,裕量必须在临界范围内,接近最坏负裕量的10%。

物理优化在布局设计和布线设计之间使用,在基于项目和非项目批作业流程中都是可用的,并可以在GUI的设置界面中关闭。

(5)布线设计(route_design)

该选项用于控制布线过程,布线器在全面布线阶段包含以下步骤。

1)执行特殊网线和时钟的布线。

2)进行时序驱动的布线。优先考虑建立/保持路径的关键性,交换LUT输入来改善关键路径,修复保持时间违反规则的布线。

布线有如下两种模式。

1)默认的正常布线模式:布线器开始已布局的设计,达到全部网线的布线。

2)只对非项目批作业流程的布线模式:布线器可以布线/不布线,以及锁定/不锁定指定的网线。

(6)生成比特流文件(write_bitstreanm)

该选项用于生成比特流文件。 abxTuPzZCNXoXEhBqnW9fNlbZD+9wKVN3/rUFT7CV2jeGjf6Ijj6yBVXnN2hYMBi

点击中间区域
呼出菜单
上一章
目录
下一章
×