Vivado从此开始(进阶篇)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-10-06 12:46:19

点击下载

作者:高亚军

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Vivado从此开始(进阶篇)

Vivado从此开始(进阶篇)试读:

EDA精品智汇馆Vivado从此开始(进阶篇)高亚军 编著内容简介

本书力图帮助读者了解Vivado新版本的特性,重点围绕代码风格、时序约束、时序收敛等进行阐述,并针对应用越来越广泛的SSI器件介绍了相应的设计指南,包括如何在早期进行设计规划、如何对跨die路径进行处理、如何使用LAGUNA寄存器、如何对基于SSI器件的设计进行分析等,除此之外,还根据实践经验总结了一些常用技巧,尽可能地帮助读者提高工作效率。

本书不仅适合作为电子工程领域内本科生、研究生的学习用书,还适合作为FPGA工程师和自学者的参考用书。

未经许可,不得以任何方式复制或抄袭本书之部分或全部内容。

版权所有,侵权必究。

图书在版编目(CIP)数据

Vivado从此开始.进阶篇/高亚军编著.—北京:电子工业出版社,2020.1(EDA精品智汇馆)

ISBN 978-7-121-37352-7

Ⅰ.①V… Ⅱ.①高… Ⅲ.①现场可编程门阵列-系统设计-教材 Ⅳ.①TP331.202.1

中国版本图书馆CIP数据核字(2019)第191748号

策划编辑:张 楠

责任编辑:张 楠

印  刷:

装  订:

出版发行:电子工业出版社

     北京市海淀区万寿路173信箱   邮编:100036

开  本:787×1092 1/16  印张:14  字数:358.4千字

版  次:2020年1月第1版

印  次:2020年1月第1次印刷

定  价:56.00元

凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010)88254888,88258888。

质量投诉请发邮件至zlts@phei.com.cn,盗版侵权举报请发邮件至dbqq@phei.com.cn。

本书咨询联系方式:(010)88254579。前 言

Vivado自2012年面世至今已有7个年头了。随着不断地升级,其功能越来越强大,操作界面越来越友好。目前(截至2019年3月1日),Vivado的最新版本为2018.3,即本书讲述的版本。

本书力图帮助读者解决的第一个问题是深入了解新版本的特性。Vivado的每次版本升级,都会带来一些功能上的变化,有些是细微的,有些是显著的。例如,Vivado 2018.3版本中菜单栏的字体与之前的版本不同,所带来的好处是显示更清晰,去除了因字体不适带来的模糊感;从Vivado 2018.1版本开始,增加了模块化综合技术,可进一步改善综合质量;从Vivado 2017.1版本开始,在place_design命令中增加了选项−fanout_opt,使得Vivado在布局阶段就可对高扇出网线进行优化,而在Vivado 2018.2版本中,该选项已被替换为−no_fanout_opt,意味着在布局阶段会默认对高扇出网线进行优化,如果不期望进行此类优化,则可添加选项−no_fanout_opt进行设置;在Vivado 2018.3版本中,route_design中的选项−directive增加了一个新的值AggressiveExplore,使得工具在布线阶段还可进行物理优化,并且实现了在布局中、布局后和布线中都可进行物理优化,对设计整体性能的改善和提升将大有裨益。

本书力图帮助读者解决的第二个问题是深入了解UltraFast设计方法学。UltraFast设计方法学并不是一个新概念,而是伴随着Vivado一起面世的。随着Vivado的升级,该方法学也在不断完善,内容愈加丰富。这在UG949中有着明显的体现。例如,针对SSI器件,UltraFast设计方法学指出了如何进行早期设计规划,以便达到资源在每个SLR中比较均衡的配置;如何对跨die路径进行处理,以避免因跨die路径过多导致布线拥塞或跨die路径时序违例;如何确保跨die路径使用LAGUNA寄存器等。理解并应用这些新的方法可加速设计收敛。

虽然在Vivado的基础知识掌握方面,很难通过一两本书就让读者达到从入门到精通的效果,但一本好书应给读者留有足够多的思考空间,而不是像快餐一般,吃过之后没有任何余味,希望本书能够对读者有所帮助。动手实践是不可或缺的环节,若读者可结合书中案例亲自操作,相信一定会对所讲内容有更深入的理解,或许会有意想不到的收获。

需要说明的是,对于综合阶段用到的综合属性(Synthesis Attribute),以及实现阶段用到的约束属性(set_property命令包含的属性),Vivado不区分大小写。

如果您在阅读过程中发现任何错误或有任何建议,请发送邮件至LaurenGao @126.com。更多Vivado的相关内容,可通过关注微信公众号“Lauren的FPGA”获取。高亚军2019年3月第1章 综合阶段1.1 综合设置分析1.1.1 −flatten_hierarchy

−flatten_hierarchy在综合设置(Synth Design)中的位置如图1.1所示。图1.1

−flatten_hierarchy有三个可选值,每个值的具体含义如表1.1所示[1]。通常来讲,当−flatten_hierarchy为none时,工具进行的优化最少,消耗的资源最多,层次保留最为完整。相反,当其为full时,工具进行的优化最多,消耗的资源最少,层次完全被打平(只能看到顶层)。从这个角度来说,−flatten_hierarchy的三个值体现了工具对设计层次完整性和优化力度的折中。在通常情况下,使用默认值rebuilt即可。表1.1

−flatten_hierarchy是一个全局设置(凡是出现在综合设置中的均为全局设置),意味着对设计中的所有模块生效。如果期望模块中的某个层次使用与−flatten_hierarchy的可选值不同的层次优化方式,则要用到综合属性(Synthesis Attribute)中的KEEP_HIERARCHY,它只能在RTL代码中使用,其优先级高于−flatten_hierarchy。

在Verilog版中,KEEP_HIERARCHY的使用方法如下。

(* KEEP_HIERARCHY="yes" *) module uart_r ();

在VHDL版中,KEEP_HIERARCHY的使用方法如下。

作用于entity:

attribute KEEP_HIERARCHY : string;

attribute KEEP_HIERARCHY of uart_rx : entity is "yes";

作用于Instance:

attribute KEEP_HIERARCHY : string;

attribute KEEP_HIERARCHY of uart_rx_u0 : label is "yes";

结论:① 对于−flatten_hierarchy,通常使用默认值rebuilt即可。使用默认值rebuilt的一个好处是,在使用Vivado Logic Analyzer 时,可快速根据层次找到待观测信号。② KEEP_HIERARCHY的优先级高于−flatten_hierarchy,因此,可根据设计需求灵活地对某些层次设置此属性。1.1.2 −control_set_opt_threshold

−control_set_opt_threshold在综合设置中的位置如图1.2所示。图1.2

触发器的控制集由时钟信号、复位/置位信号和使能信号构成。在通常情况下,只有{clk,rst/ set, ce}均相同的触发器才可以被放置在一个SLICE中。但是,对于同步复位、同步置位和同步使能信号,Vivado会根据−control_set_opt_threshold的设置进行优化,其目的是减少控制集的个数。优化的方法如图1.3所示。在优化之前,3个触发器被分别放置在3个SLICE中;而在优化后,3个触发器被放置在1个SLICE中,但此时需要占用LUT(Look Up Table,查找表)资源。

−control_set_opt_threshold的值为控制信号(不包括时钟)的扇出个数,表明对小于此值的同步信号进行优化。显然,此值越大,被优化的触发器越多,被占用的LUT也越多。若此值为0,则不进行优化。在通常情况下,按默认值auto运行即可。图1.3

对控制集百分比的说明(适用于7系列FPGA和UltraScale FPGA)如图1.4所示。从图中可以看到:当控制集的百分比超过15%时,需要降低控制集。图1.4

计算控制集百分比的步骤如下:❶ 打开综合阶段或实现阶段生成的DCP(Design Checkpoint,Vivado专用网表文件),通过report_control_sets −verbose命令获取unique_ctrl_set,即unique control sets值,如图1.5所示。图1.5❷ 通过两条命令获得当前芯片中SLICE的个数slice_num:set part [get_property PART [current_design]]set slice_num [get_property SLICES [get_parts $part]]❸ 计算控制集百分比,即unique_ctrl_set/slice_num*100%。

此外,CONTROL_SET_THRESHOLD(可选值为0~128)也是综合设置中的一个选项。利用该选项可以根据设计需求灵活地对某些模块的控制集进行控制。例如:

set_property BLOCK_SYNTH. CONTROL_SET_THRESHOLD { 8 } [get_cells uart_rx]

set_property BLOCK_SYNTH. CONTROL_SET_THRESHOLD { 16 } [get_cells uart_tx]

可将上述两条语句写入一个单独的XDC文件中,并将文件设置为综合阶段使用。1.1.3 −no_lc

对于两个布尔表达式x和y,只要满足x+y <= 5(相同变量只算一次),则这两个布尔表达式就可以放置在一个LUT6(6输入查找表)中实现。此时A6=1,运算结果分别由O6和O5输出。

在默认情况下(不勾选−no_lc),当存在共享变量时,Vivado会自动把这两个布尔表达式放在一个LUT6中实现,称之为LUT整合(LUT Combining);否则,仍占用两个LUT6,分别实现每个布尔表达式。但是,当勾选−no_lc(No LUT Combining)时,则不允许出现LUT整合,如图1.6所示,其中a1~a5连接到相应的A1~A5端口。通过LUT整合可以减少对LUT的使用量,但也可能导致布线拥塞。图1.6

在实现后的报告中,单击如图1.7所示的using O5 and O6可查看LUT6的使用个数,也可通过Tcl命令查看。图1.7

此外,Vivado模块化综合技术提供了一个类似选项LUT_COMBINING,可以灵活地对某些模块进行LUT整合或不进行LUT整合。其值是0或1(1表示进行LUT整合)。一个可能的判断依据是设计的布线拥塞报告。

结论:① LUT整合的好处是减少了对LUT的使用量。② LUT整合的坏处是可能会导致布线拥塞。1.1.4 −keep_equivalent_registers

−keep_equivalent_registers在综合设置中的位置如图1.8所示。

所谓等效寄存器(Equivalent Registers)是指具有同源的寄存器,即共享输入端口(时钟端口和数据端口)的寄存器。等效寄存器可能是设计者无意引入的,也可能是有意为之的。对于无意引入的寄存器,Vivado在综合阶段可将其优化,从而避免额外的触发器(Flip Flop)开销。这里重点关注“特意”构造的等效寄存器。图1.8

一个典型案例如图1.9所示。代码(代码的描述方式有VHDL和Verilog版,其含义是等效的,选择适合自己的一种描述方式即可)中的信号rst_rep1和rst_rep2都是信号rst在一个时钟周期延迟后的输出结果。从数字电路的角度看,可理解为有两个D触发器,它们的输入数据端口均为rst,时钟端口均为clk;而输出数据端口分别为rst_rep1和rst_rep2。此时,称这两个寄存器为等效寄存器。图1.9

对于上述代码,在综合阶段,如果勾选−keep_equivalent_registers,那么rst_rep1和rst_rep2对应的寄存器均被保留,即在Schematic中会看到rst_rep1和rst_rep2。但是,通常上述代码只是工程中一个很小的部分,勾选−keep_equivalent_registers会造成Vivado无法对其他无意引入的等效寄存器进行优化,这是不利的方面。鉴于此,可利用综合属性keep保留等效寄存器,如图1.10所示。图1.10

将keep作用于rst_rep1和rst_rep2,可确保这两个寄存器不被优化,同时不勾选−keep_equivalent_registers也使得Vivado可以对其他无意引入的寄存器进行优化。“特意”引入等效寄存器(也可称之为手工复制寄存器)的一个重要原因是可以有效降低关键路径上的扇出、优化时序,尤其对于全局复位或全局使能信号而言,是一种行之有效的方式。

结论:① 在通常情况下,建议不要勾选−keep_equivalent_registers,以确保工具可对无意引入的等效寄存器进行优化。② 对于手工复制的寄存器而言,可通过综合属性keep确保其不被优化。③ 对于全局复位或全局使能信号而言,可通过手工复制寄存器的方式降低扇出、优化时序。1.1.5 −resource_sharing

−resource_sharing在综合设置中的位置如图1.11所示。图1.11

−resource_sharing的作用是对算术运算实现资源共享。它有三个值:auto、off和on,默认值为auto,可根据设计时序的需求确定是否共享资源。这里需要强调的是,它只对算术运算,即加法(减法也可认为是加法运算)和乘法运算有效。

一个典型案例的代码如图1.12所示。这是一个通过控制信号实现加/减法运算的电路:当op为1时,执行opa+opb;否则,执行opa−opc。图1.12

当−resource_sharing为off和on时,对应的电路如图1.13所示。当−resource_sharing为on时,少用了一个加法器,也就是减少了LUT和进位链(Carry Chain)等资源。这可进一步在资源利用率中得以验证,如图1.14所示。图1.13图1.14

−resource_sharing也可用于乘法运算,代码如图1.15所示。图1.15

结论:在默认情况下,将−resource_sharing设置为auto即可。1.1.6 −gated_clock_conversion

−gated_clock_conversion在综合设置中的位置如图1.16所示。图1.16

−gated_clock_conversion用于管理门控时钟(Gated Clock)。所谓门控时钟是指由门电路而非专用时钟模块(如MMCM或PLL)生成的时钟。如图1.17所示即为门控时钟案例的代码。在该案例中,gate_clk由输入时钟clk和clkdiv2相与构成。其中clkdiv2是clk的二分频时钟。图1.17

门控时钟会给设计带来一些负面影响。典型的危害包括:时钟信号可能会有毛刺;时钟歪斜(Clock Skew)的情况会继续恶化。同时,一个不可忽略的影响是Vivado并不会主动对门控时钟插入BUFG(全局时钟缓冲器),这就意味着该时钟会占用传统的布线资源,也就是Fabric中的布线资源,而不会使用时钟网络资源,从而可能会跟其他关键路径争夺布线资源,并影响时序。

−gated_clock_conversion可将门控时钟信号变为使能信号,对于如图1.17所示的代码,Vivado默认的综合设置结果如图1.18所示,此时−gated_clock_conversion关闭。可以看到对于gate_clk,工具并未插入BUFG。图1.18

如果将−gated_clock_conversion设置为on,那么综合设置后的结果如图1.19所示。此时,clkdiv2变为使能信号,连接到触发器的CE端口,同时,该信号与rst相与,作为复位信号连接到触发器的复位端口,从而移除了门控时钟。图1.19

结论:① 门控时钟会给设计带来一些负面影响,可通过−gated_clock_conversion消除。② 当时钟负载少且时钟频率低(如小于5MHz)时,可以适当使用门控时钟。此时建议手工插入BUFG。1.1.7 −fanout_limit

−fanout_limit在综合设置中的位置如图1.20所示。图1.20

−fanout_limit是一个全局选项,用于设定信号所能承载的最大负载,也就是最高的扇出个数,默认值为10000。需要注意的是,该选项对设计中的控制信号,如置位、复位和使能信号是无效的。

以Vivado自带的工程CPU(VHDL版)为例,当−fanout_limit分别为10000和800时,通过report_high_fanout_nets显示的高扇出网线报告均与图1.21一致。图1.21

−fanout_limit只是给Vivado提供了一个宏观的指导原则,并非强制命令。相比之下,综合属性MAX_FANOUT就严格很多。因此,如果很明确地需要对某个信号降低扇出,应使用MAX_FANOUT而不是−fanout_limit。关于MAX_FANOUT的具体使用方法,后续会专门介绍。

结论:① 对于−fanout_limit,采用默认值即可。② 作为全局选项,−fanout_limit对控制信号(置位、复位和使能)是无效的。③ 对于需要明确降低扇出的信号,MAX_FANOUT是可选方法之一。1.1.8 −shreg_min_size和−no_srlextract

−shreg_min_size和−no_srlextract在综合设置中的位置如图1.22所示。图1.22

在Xilinx FPGA中,LUT可以配置为移位寄存器(Shift Register)。以UltraScale芯片为例,SLICEM中的8个LUT可级联构成深度为256的移位寄存器,并且不会消耗额外的触发器。移位寄存器的工作原理如图1.23所示(此图只是工作原理,并非真实架构)。通过addr的控制,可实现深度的动态切换。图1.23

采用LUT实现移位寄存器有两种方式:一种是通过SRL16E或SRLC32E实现;另一种是通过手工RTL代码实现。对于第一种方式,SRL16E和SRLC32E的区别在于深度不同,同时后者提供了级联端口Q31。端口A0~A3的功能与图1.23中的addr等效,并且当addr为0时,深度为1,如图1.24所示。图1.24

对于手工描述的实现方式,相应的RTL代码如图1.25(VHDL版)和图1.26(Verilog版)所示。注意:这里没有复位信号。图1.25图1.26

−shreg_min_size用于管理移位寄存器是否映射为LUT,默认值为3。通过实验可以得到如图1.27所示的结论:当移位寄存器的深度小于等于−shreg_min_size时,最终的实现方式为触发器级联的形式;当其深度大于−shreg_min_size时,实现方式则为FF+LUT+FF的形式。

−no_srlextract用于阻止工具将移位寄存器映射为LUT,其优先级高于−shreg_min_size。例如,当移位寄存器的深度为4、−shreg_min_size为3、−no_srlextract被勾选时,最终的实现方式是4个触发器级联的形式,而非FF+LUT+FF的形式。

在System Generator中有两个模块:Delay和Register,如图1.28所示。这两个模块是不同的:Delay的延迟深度可设定;Register的延迟深度是1。图1.27图1.28

对于Delay的详细描述如图1.29所示。可见,Delay最终的实现形式是LUT+FF;Register则直接对应SLICE中的FF。

对于移位寄存器的实现方式,可通过−shreg_min_size进行全局

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载