FPGA开发环境 Vivado

这篇具有很好参考价值的文章主要介绍了FPGA开发环境 Vivado。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


Vivado是Xilinx系列FPGA开发环境。本文记载收录了vivado常用开发技巧,随机记录、随时更新。。。

任何Xilinx相关问题都可到WELCOME TO XILINX SUPPORT!查询

1. STA

静态时序分析(Static Timing Analysis, STA):简介及内容导航
VIVADO的综合属性ASYNC_REG

1.1. 同步器

在XDC中作如下约束,表示对名字末尾为_cdc_to的寄存器不进行STA

set_false_path -through [get_pins -hier *cdc_to*]

同时,对于跨时钟域的同步寄存器,要作如下声明。这样这几个同步寄存器就可以接收异步信号,且会布局到同一个SLICE/CLB来提高Mean Time Between Failure(MTBF)

(*ASYNC_REG = "TRUE"*)reg res_cdc_to;
(*ASYNC_REG = "TRUE"*)reg res_d1;

1.2. Report Timing Summary

详细报告可以点击Open Implemented Design下的Report Timing Summary,之后在右侧TIming一栏中选择具体的路径显示延迟

FPGA开发环境 Vivado
上图中,我们将From触发器看作是UFF0,To触发器看作是UFF1,则时序路径可简化为如下图

FPGA开发环境 Vivado

名词解释如下

● Slack:建立时间裕量
● Levels:逻辑级数,从UFF0/Q到UFF1/D之间组合逻辑器件的个数
● Fanout:表示从这一点连接到了几个目的端点,fanout = 1就表示连接了1个目的端点
● From To:发起触发器与捕获触发器
● Total Delay:路径UFF0/CK到UFF1/D的总延迟,即 T C K 2 Q U F F 0 + T U F F 0 / Q _ t o _ U F F 1 / D T_{CK2Q}^{UFF0}+T_{UFF0/Q\_to\_UFF1/D} TCK2QUFF0+TUFF0/Q_to_UFF1/D
● Logic Delay:路径UFF0/CK到UFF1/D的逻辑元件延迟,包括触发器延迟 T C K 2 Q U F F 0 T_{CK2Q}^{UFF0} TCK2QUFF0
● Net Delay:路径UFF0/CK到UFF1/D的走线延迟

由此可见,Total Delay = Logic Delay + Net Delay

之后双击Path 5那一行,得到该时序路径的时序报告,如下

FPGA开发环境 Vivado
Summary一栏:
● slack:建立时间裕量,为正表示这条路径是满足建立时间要求
● source:源端触发器,即时序分析的起点,发射沿(Launch Edge)
● destination:目的触发器,即时序分析的终点,锁存沿(Latch Edge)
● path group:时序分析的时钟源
● path type:路径类型,此路径为建立时间的分析
● requirement:时序要求,设定为25MHz,所以就是40ns
● data path delay:路径UFF0/CK到UFF1/D的总延迟,即 T C K 2 Q U F F 0 + T U F F 0 / Q _ t o _ U F F 1 / D T_{CK2Q}^{UFF0}+T_{UFF0/Q\_to\_UFF1/D} TCK2QUFF0+TUFF0/Q_to_UFF1/D
● logic levels:逻辑级数,从UFF0/Q到UFF1/D之间组合逻辑器件的个数
● clock path skew:时钟到达目的寄存器和源寄存器之间的时间差值
● clock uncertainty :时钟的不确定度,包括skew和jitter

Source Clock Path一栏:
● Delay Type:路径CLK到UFF0/CK产生时延的项目。从表中可见是IO-走线-IBUF-走线-BUFG-走线
● Incr(ns):每个项目的时延。例如IBUF时延是1.749ns、BUFG实验室0.120ns
● Path(ns):截止到目前项目,时延的累加和。例如IO-走线-IBUF-走线-BUFG的时延累计为3.709ns

Data Path一栏:

● Delay Type:路径UFF0/CK到UFF1/D产生时延的项目。从表中可见是FDRE-走线
● Arrival Time:即路径CK到UFF1/D的时延总和

以及下图

FPGA开发环境 Vivado

Destination Clock Path一栏:

● Delay Type:路径CLK到UFF1/CK产生时延的项目,考虑了时钟周期、时钟不确定度和建立时间
● Required Time:即 T c l k + T C L K 2 U F F 1 / C K + T c l k _ p e r m i s s i m o n − T c l k _ u n c e r t a i n − T s e t u p U F F 1 T_{clk}+T_{CLK2UFF1/CK}+T_{clk\_permissimon}-T_{clk\_uncertain}-T_{setup}^{UFF1} Tclk+TCLK2UFF1/CK+Tclk_permissimonTclk_uncertainTsetupUFF1

并且满足 Slack = Required Time - Arrival Time

《基于Xilinx的时序分析、约束和收敛》目录与传送门

2. 编译

2.1. 一直卡在route_design问题

综合能通过说明能生成网表,但布局布线一直不成功,可能是没地方放了。

可查看工程名.runs/synth_1/runme.log信息,文中显示number of nodes with overlaps 一直在刷新,且等号右边的值一直不为零,为零才表示布局布线找到可行解。并且每次迭代iterationWNS一直为负,导致卡在route design。

可能的原因如下:

  1. IP核设置不合理,例如multiplier用的是LUTs就会导致布线时间长,应该为Mults。
  2. 设置了多个同名IP核,建议建立新的工程重新设置IP
  3. BUFR改为BUFG等clock buffer使用是否正确

可通过回溯更改内容锁定问题位置。

Router is stuck at “Number of Nodes with overlaps…”
What is “Number of Nodes with overlaps” parameter in implementation?

3. 综合

《Vivado Design Suite User Guide Synthesis - UG901》
Vivado使用技巧(24):HDL/XDC中设置综合属性

3.1. Report

在点击Open Implemented Design之后,可以在TCL中直接输入以下指令获取部分报告

vivado之report

利用率报告 report_utilization

功耗报告 report_power

拥塞 report_design_analysis -congestion

时序违例路径 report_design_analysis -max_paths 50 -setup

工程编译完成之后,点击Open Implemented Design,之后tcl中输入以下内容即可显示最差的50条路径

report_design_analysis -max_paths 50 -setup

3.2. IOB

为了保证FPGA输入输出接口的时序,一般会要求将输入管脚首先打一拍再使用,输出接口也要打一拍再输出FPGA。这样做的目的是为了让这打一拍的寄存器约束到IO Buffer(IOB)上,从而使得每一次编译输入或者输出的时序不会发生改变。

这是因为,IOB是FPGA上距离IO最近的寄存器,并且位置固定。当你输入或者输出采用了IOB约束,那么就可以保证从IBUF到达寄存器或者从寄存器到达OBUF之间的走线延迟最短,即输入端走线为IO-IBUF-ILOGIC-...,输出端走线为...-OLOGIC-OBUF-IO

最大限度保证时序满足要求,同时由于IO的位置是固定的,所以每一次编译都不会造成输入或者输出的时序发生改变。

哪些信号需要置于IOB呢?对于关键输入输出信号,对时序有要求的信号,都要布置到IOB上,其他电平信号则无需布置、时钟信号无需布置、LVDS非时钟信号只需布置p端。

FPGA基础资源之IOB的应用

配置

可在XDC中对接口信号作约束

set_property  IOB true [get_ports {port_name}]

或者是在verilog中作约束,如下所示

(*IOB = "TRUE"*)output res_o,
...
(*IOB = "TRUE"*) reg a;

同时在verilog中要保证:输入信号以及输出信号和其所直连的寄存器之间 不能存在任何时序逻辑、任何组合逻辑和走线分支。且那个直连的寄存器,就会被放入IOB中。

检查

工程编译完成后,打开Open Implemented Design,再下方Tcl Console中输入tclapp::install ultrafast后回车

之后再在Tcl Console中输入xilinx::ultrafast::report_io_reg后回车,则出现IO Ports Summary 表格

FPGA开发环境 Vivado

其中

● Info为Unconnected的信号,无需布置
● Info为No Input FF的信号,其ILOGIC为0,表示该输入信号未连接到IOB
● Info为No Output FF的信号,其OLOGIC为0,表示该输出信号未连接到IOB
● Info无信息的信号,其ILOGIC为1或OLOGIC为1,表示该信号已连接到IOB。双向信号要ILOGIC和OLOGIC均为1

3.3. 安全状态机

状态机中的default语句意思是异常状态下状态机能跳转到正常状态,但EDA工具会对default语句自动忽视,这是对状态机进行优化的结果。

而安全状态机模式改变了状态机编码方式,在异常状态下也能跳转至正常状态,应当进行配置。

vivado 如何设置安全状态机模式

配置

推荐的写法是,在verilog中将 所有状态机的状态寄存器加入安全声明,并且位宽与实际使用一致,即定义如下

(*fsm_safe_state = "reset_state"*) reg [2:0] cur_state;

检查

编译完毕后,打开工程目录下/*.runs/synth_1/runme.log

若显示如下内容,则表示安全状态机配置成功

Implemented safe state 'reset_state' for state register 'cur_state_reg' in module '...'
encoded FSM with state register 'cur_state_reg' using encoding 'Hamming 2' in module '...'

若只显示如下内容,没有显示Implemented safe state...,则表示配置失败

encoded FSM with state register 'cur_state_reg' using encoding 'one-hot' in module '...'

3.4. DONT_TOUCH

DONT_TOUCH 属性可以用于保护信号或module不会在综合、布局布线阶段被优化掉。与 KEEP 和 KEEP_HIERARCHY 属性相比,DONT_TOUCH还能在布局布线时起作用,而且有更高的优先级。可用于等效寄存器、等效组合逻辑保留。

示例代码如下:

(*DONT_TOUCH = "TRUE"*) wire sig1;
assign sig1 = in1 & in2;
assign out1 = sig1 & in2;

VIVADO学习笔记之–DONT_TOUCH
Vivado防止信号被综合掉的三种方法
Vivado综合属性系列之七 DONT TOUCH

3.5. MAX_FANOUT

可通过Open Implementation Design之后,在tcl中写入如下语句显示几个最大扇出的路径

report_high_fanout_nets
report_high_fanout_nets -help

设置寄存器和组合逻辑信号的最大扇出限制(即最大驱动元件数量)。超出该设置值时,会复制一个完全相同的寄存器或组合逻辑。

(* MAX_FANOUT=50 *) reg sig1;  //Verilog示例

Vivado那些事儿—扇出分析与优化

4. Device Primitive Instantiation

即Vivado源语,可看作是参数化的IP,可直接设置参数例化IP,无需在IP Catalog中设置好了再例化。

下面介绍几种常用的源语。

4.1. IO Components

Input/Output Differential Buffers (IBUFDS/OBUFDS)

对于FPGA设计者来说,需要将外部输入的差分信号转成单端信号、或将单端信号转成差分信号输出,需要用到IBUFDS和OBUFDS两个源语,例化如下

IBUFDS #(
      .DIFF_TERM	("TRUE"		),     // Differential Termination
      .IBUF_LOW_PWR	("TRUE"			),    // Low power="TRUE", Highest performance="FALSE" 
      .IOSTANDARD	("LVDS"		)     // Specify the input I/O standard
   ) IBUFDS_inst (
      .O			(data_clk_tmp	),  // Buffer output
      .I			(data_clk_p		),  // Diff_p buffer input (connect directly to top-level port)
      .IB			(data_clk_n		) 	// Diff_n buffer input (connect directly to top-level port)
   );
OBUFDS #(
      .IOSTANDARD	("LVDS"	), // Specify the output I/O standard
      .SLEW			("SLOW"		)           // Specify the output slew rate
   ) OBUFDS_inst (
      .O		(tx_frame_p	),     // Diff_p output (connect directly to top-level port)
      .OB		(tx_frame_n	),   // Diff_n output (connect directly to top-level port)
      .I		(tx_frame	)      // Buffer input 
   );

Output Double Data Rate(ODDR)

4.2. Clock Buffers

Xilinx FPGA输入输出缓冲 BUF 的使用

4.3. Xilinx Parameterized Macros(XPM)

XILINX-VIVADO IP参数化方法(XPM)
《Vivado Design Suite 7 SeriesFPGA and Zynq-7000 SoCLibraries Guide》 - ug953

可以参数化例化IP,例如FIFO、Dual port RAM等,可以从 vivado内的Language Templates中寻找。

XPM IP自身的RTL设计文件路径在xxx\Xilinx\Vivado\2019.1\data\ip\xpm

注意XPM中MEMORY_SIZEFIFO_WRITE_DEPTH单位都是bit,必须为2的次幂

4.4. Unimacros

《Vivado Design Suite 7 SeriesFPGA and Zynq-7000 SoCLibraries Guide》 - ug953

也是一种参数化例化IP的方法,详见文档说明

5. 工程目录组织

可以直接参考RTL Project Directory,了解一个工程的文件夹目录如何组织。

6. ECO (Engineering Change Order)

ECO指的是Engineering Change Order,即工程变更指令。目的是为了在设计的后期,快速灵活地做小范围修改,从而尽可能的保持已经验证的功能和时序。ECO的叫法算是从IC设计领域继承而来,其实在以往的FPGA设计上已被广泛采用。简单来说,ECO便相当于ISE上的FPGA Editor。

工程编译完毕后,在/xxx.runs/impl_1/目录下有*_opt.dcp, *_place.dcp, *_route.dcp三个文件,分别对应opt_design、placed_design和routed_design之后的文件,可根据对网表修改程度的大小,选择某一阶段的DCP文件进行ECO。

ECO可实现修改ILA、增加/删除/修改内部CELL、RAM/ROM/FF初值等功能。

Vivado-ECO修改网表进行加速debug
Vivado ECO实例教程一 增加LUT(GUI操作)
“揭秘” Xilinx FPGA 的 ECO 功能
《Vivado Design Suite User Guide Implementation》 - ug904 - Chapter 3 - Vivado ECO Flow文章来源地址https://www.toymoban.com/news/detail-506265.html

到了这里,关于FPGA开发环境 Vivado的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Xilinx Alveo系列FPGA加速卡软件开发入门

    随着异构计算越来越火,FPGA加速卡在诸多领域的应用也越来越多。 FPGA加速卡与GPU加速卡加速原理完全不同。 GPU本质上是依靠海量的并行运算单元,提升整体的吞吐量,来吃尽内存带宽。 FPGA是通用的门阵列,按照数据结构和运算特点搭建专用运算单元,能够以更低功耗和时

    2024年02月05日
    浏览(29)
  • FPGA开发环境安装VIVADO

     BASYS3开发板使用的是 Xilinx 厂商的 Artix-7 FPGA 芯片,所以要使用 Xilinx 提供的配套开发软件 Vivado ,我使用的是 Vivado 18.3 。Vivado 18.3 的版本相对来说是较为稳定的,所以推荐给大家这个版本当然 读者也可安装更新的版本,安装步骤都是大同小异的。 第一步: 找到 Vivado 2018.

    2024年02月09日
    浏览(75)
  • FPGA时钟资源与设计方法——Xilinx(Vivado)

    1.时钟资源包括:时钟布线、时钟缓冲器(BUFGBUFRBUFIO)、时钟管理器(MMCM/PLL)。 2.时钟类型有三种:全局时钟,可以驱动整个内核上的同步逻辑;局部时钟,可以驱动特定和相邻区域的逻辑;IO时钟,可以驱动某个IO的特定逻辑。 3.混合模式时钟管理器(MMCM)和数字时钟管理

    2024年02月22日
    浏览(37)
  • 【FPGA】Xilinx vivado生成.dcp文件的方法

    DCP文件是vivado软件生成的网表文件,主要起到加密的作用,在不需要提供源代码的情况下运行工程。 首先,需要新建工程,工程顶层文件就是生成后dcp文件的名称,然后在vivado-Tool-setting-project-setting-synthesis路径下,在More options中输入-mode out_of_context(综合时不产生IO buffer),

    2024年04月12日
    浏览(33)
  • 【FPGA】 xilinx vivado中AXI4通信协议详解

    AXI是ARM 1996年提出的微控制器总线家族AMBA中的一部分。AXI的第一个版本出现在AMBA3.0,发布于2003年。当前的最新的版本发布于2010年。AXI 4总线和别的总线一样,都用来传输bits信息 (包含了数据或者地址) 。AXI4总线有三种类型,分别是AXI4、AXI4-Lite、AXI4-Stream AXI4:主要面向高性能

    2024年04月28日
    浏览(29)
  • 轻松搭建FPGA开发环境:第三课——Vivado 库编译与设置说明

    工欲善其事必先利其器,很多人想从事 FPGA 的开发,但是不知道如何下手。既要装这个软件,又要装那个软件,还要编译仿真库,网上的教程一大堆,不知道到底应该听谁的。所以很多人还没开始就被繁琐的开发环境搭建吓退了,还没开始就放弃了! 笔者用几节课的时间,从

    2024年02月04日
    浏览(27)
  • xilinx FPGA 除法器ip核(divider)的学习和仿真(Vivado)

    在设计中,经常出现除法运算, 实现方法 : 1、移位操作 2、取模取余 3、调用除法器IP核 4、查找表 简单学习除法器IP。 网上很多IP翻译文档,不详细介绍,记录几个重要的点: 1、三种算法模式(不同模式所消耗的资源类型不同) 2、分清除数和被除数;余数模式的选择 3、延

    2024年04月28日
    浏览(56)
  • xilinx FPGA 乘法器ip核(multipler)的使用(VHDL&Vivado)

    一、创建除法ip核  可以选择两个变量数相乘,也可以选择一个变量输入数据和一个常数相乘 可以选择mult(dsp资源)或者lut(fpga资源) 可以选择速度优先或者面积优先 可以自己选择输出位宽 还有时钟使能和复位功能  二、编写VHDL程序:声明和例化乘法器ip核 三、编写仿真程

    2024年02月11日
    浏览(44)
  • FPGA开发之Vivado安装及HLS环境配置,并实现流水灯实例

    HLS(High-Level Synthesis)高层综合,就是将 C/C++的功能用 RTL 来实现,将 FPGA 的组件在一个软件环境中来开发,这个模块的功能验证在软件环境中来实现,无缝的将硬件仿真环境集合在一起,使用软件为中心的工具、报告以及优化设计,很容易的在 FPGA 传统的设计工具中生成 IP。

    2024年02月05日
    浏览(34)
  • Xilinx 7系列 FPGA硬件知识系列(八)——Xilinx FPGA的复位

    目录  概要  Xilinx复位准则 全局复位主要由以下三种方式实现 高时钟频率下的复位时序全局复位对时序的要求真的很关键吗? 独热码状态机的复位        FPGA配置 Xilinx白皮书WP272《Get Smart About Reset: Think Local, Not Global》详细讲述了FPGA的全局复位。在数字系统设计中,我们

    2024年03月11日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包