xilinx用户手册

用户手册

hls

ug1270-vivado-hls-opt-methodology-guide.pdf
c_ug902-vivado-high-level-synthesis
ug871-vivado-high-level-synthesis-tutorial
xapp599-Floating-Point Design with Vivado HLS.pdf hls浮点设计

MPSoC: Embedded Design Tutorial

ug998-vivado-intro-fpga-design-hls
ug1270-vivado-hls-opt-methodology-guide
ug1209-embedded-design-tutorial

zynq

ug1209-Zynq UltraScale+ MPSoC Embedded Design Tutorial
ug1228-Zynq UltraScale+ MPSoC Embedded Design Methodology Guide
ug1221-Zynq UltraScale+ MPSoC Base Targeted Reference Design
ug1137-Zynq UltraScale+ MPSoC Software Developer Guide
ug1085-Zynq UltraScale+ Device Technical Reference Manual( 待看)
ug1087-Zynq UltraScale+ Devices Register Reference

UG585 - Zynq-7000 SoC Technical Reference Manual

petalinux

ug1144-petalinux-tools-reference-guide
ug1157-petalinux-tools-command-line-guide

timing

UG903 - Vivado Design Suite User Guide: Using Constraints
c_ug949-vivado-design-methodology
c_ug1292-ultrafast-timing-closure-quick-reference

TCL

ug835 - Vivado Design Suite Tcl Command Reference Guide
ug894 - Vivado Design Suite User Guide: Using Tcl Scripting

Vivado

UG892 - Vivado Design Suite User Guide: Design Flows Overview
UG893 - Vivado Design Suite User Guide: Using the Vivado IDE
UG894 - Vivado Design Suite User Guide: Using Tcl Scripting
UG895 - Vivado Design Suite User Guide: System-Level Design Entry
UG896 - Vivado Design Suite User Guide: Designing with IP (OOC等)
UG897 - Vivado Design Suite User Guide: Model-Based DSP Design Using System Generator
UG898 - Vivado Design Suite User Guide: Embedded Processor Hardware Design
UG899 - Vivado Design Suite User Guide: I/O and Clock Planning
UG900 - Vivado Design Suite User Guide: Logic Simulation
UG901 - Vivado Design Suite User Guide: Synthesis
UG902 - Vivado Design Suite User Guide: High-Level Synthesis
UG903 - Vivado Design Suite User Guide: Using Constraints (时序约束)
UG904 - Vivado Design Suite User Guide: Implementation
UG905 - Vivado Design Suite User Guide: Hierarchical Design
UG906 - Vivado Design Suite User Guide: Design Analysis and Closure Techniques 设计分析与收敛技巧
UG907 - Vivado Design Suite User Guide: Power Analysis and Optimization
UG908 - Vivado Design Suite User Guide: Programming and Debugging
UG909 - Vivado Design Suite User Guide: Dynamic Function eXchange
UG910 - Vivado Design Suite User Guide: Getting Started
UG911 - ISE to Vivado Design Suite Migration Guide
UG912 - Vivado Design Suite Properties Reference Guide

UG888 - Vivado Design Suite Tutorial: Design Flows Overview
UG939 - Vivado Design Suite Tutorial: Designing with IP

ug947-vivado-partial-reconfiguration-tutorial(Dynamic Function eXchange: 可通过下载部分比特文件动态修改逻辑块,而其余逻辑将继续不间断运行)
UG949 - UltraFast 设计方法指南 (适用于 Vivado Design Suite)

解决timimg的思路:
哪种setup holdup
跨时钟域否
delay类型

ultra ram 做级联使用

设计方法

OOC

参见UG896
https://blog.csdn.net/Setul/article/details/81903800
https://www.cnblogs.com/yiwenbo/p/10222942.html
Global 即全局
如果选择的是全局综合选项,那IP生成的文件将会和其他的用户文件一起进行综合,这也就意味着,每一次用户文件被修改后,源码级IP都会跟着一起综合一遍。

Out-Of-Context (OOC) 即脱离上下文
OOC选项是Vivado给我们的默认选项,在OOC模式下,Vivado将会把生成的IP当成一个单独的模块来进行综合,生成.dcp (design checkpoint)文件,工程要用到IP的时候,只需从.dcp文件中解析出对应IP的网表文件即可,而不需对IP进行重新综合,这样的方式可以加快综合的速度;而Gobal选择则是每次工程综合的时候,IP核都会和工程一起综合,综合时间很长,也不会产生.dcp文件。OOC同时会使用一个只在OOC模式下有用的约束文件“_ooc.xdc”。 除了生成.dcp文件,OOC还会生成一个以”stub.v”结尾的HDL文件,是当前IP设计的一个黑盒文件,只有输入输出端口,工程调用这个的时候实际上是在解析.dcp中的网表文件,进而继续综合和布局布线。

提高vivado的编译速度

https://blog.csdn.net/jj2060/article/details/83964169

多线程
设置多线程的命令为: set_param general.maxThreads 4
读取当前线程数的命令: 为get_param general.maxThreads

增量编译法
implementation setting→options→incremental compile浏览dcp文件

综合策略和实现策略

对跨时钟域(CDC)的路径进行约束
vivado默认对所有的路径,包括跨时钟域的路径进行分析,这样会使vivado在布线时遇到困难,导致工程编译时间变长。设置伪路径 set_false_path

logic delay、net delay

https://zhuanlan.zhihu.com/p/140498220

时序约束技巧

来自:http://www.elecfans.com/pld/811068.html

  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综合设置,导致电路没有得到充分的优化,给时序收敛造成困难。

  1. 时序修正

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

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

1)setup TIme 建立时间问题

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

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

Vivado工程经验与各种时序约束技巧分享

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

Vivado工程经验与各种时序约束技巧分享

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

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

Vivado工程经验与各种时序约束技巧分享

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

如果不是关键时序路径,而且高扇出网络直接连接到触发器,对扇出超过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处理比较复杂,本人打算之后另外写一篇文章详细讲述。

  1. 工程设置

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

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

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

Adam Taylor blog

Adam Taylor玩转MicroZed系列68:AXI DMA Ⅲ,软件部分
http://xilinx.eepw.com.cn/news/article/a/1473

Adam Taylor玩转MicroZed系列,第75部分:放置约束——Pblocks
http://xilinx.eepw.com.cn/news/article/a/1565
https://forums.xilinx.com/t5/Xcell-Daily-Blog-Archived/Adam-Taylor-s-MicroZed-Chronicles-Part-75-Placement-Constraints/ba-p/581437

Adam Taylor玩转MicroZed系列53:聊聊Linux 和 SMP
http://xilinx.eepw.com.cn/news/article/a/1114

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值