verilog 算法加速模块设计流程_FPGA工程师进阶必学:时序分析的基本步骤和整体设计思路...

原标题:FPGA工程师进阶必学:时序分析的基本步骤和整体设计思路

最近看了看了一篇《vivado使用误区与进阶》的文章,觉得写得挺不错了,看完后自己对时序分析又有了更深一层的理解,故记录下来。可能排版有些乱,有些图都是直接从文章中截取,但是不影响阅读。

时序分析的基本步骤

一个合理的时序约束,可以分为以下步骤:

时序约束整体的思路与之前我说的方法基本一致。整体的思路如下:

1. 先是约束时钟,让软件先解决内部时序问题;(在这一步骤中可以适当加入时序例外,以便时序通过)

2. 然后再加入IO的延迟约束;

3. 最后针对没有过的时序,添加时序例外。

在《vivado使用误区与进阶》中,提到了一种叫 UltraFAST 的设计方法。针对下图中所说的根据迭代结果添加必要的例外约束(步骤1),为什么是添加必要的呢?是因为虽然是跨时钟域,但是有时候就算不约束,时序也能过。当碰到时序不过的时候,现阶段可以去针对该部分路径进行时序例外约束,以便后续继续分析。需要注意的是,就算没有报时序为例,现阶段也一定要去留意那些跨时钟的路径(通过clock_interaction),确认代码有没有做相应的跨时钟域处理。针对跨时钟域的代码处理后面会提到。

定义时钟约束

时钟主要可以分为主时钟以及衍生时钟。

创建主时钟。典型的主时钟根包括有以下几种情况:输入端口、千兆位收发器输出引脚以及某些硬件原语输出管脚。

约束实例 :

create_clock -name SysClk -period 10 -waveform {0 5} [get_ports sysclk]

GT 收发器输入引脚,例如已恢复的时钟。

约束实例 :

create_clock -name txclk -period 6.667 [get_pin gt0/TXOUTCLK]

创建生成时钟

自动衍生时钟

• MMCM*/ PLL*

• BUFR

• PHASER*

如果 Vivado 设计套件时序引擎所选择的自动衍生时钟名称并不合适,您可以使用 create_generated_clock 命令强行定义自己的名称,此时无需指定波形转换。该约束应刚好位于约束文件中定义主时钟的约束之后。例如,由 MMCM 实例生成的时钟的默认名称是 net0,您可以添加如下约束强制将其设定为自己的名称(例如fftClk):

create_generated_clock -name fftClk [get_pins mmcm_i/CLKOUT0]

生成时钟源自另一个现有时钟(主时钟)。通常用来描述由逻辑模块在主时钟上执行的波形变换。由于生成时钟的定义取决于主时钟特性,因此必须首先定义主时钟。要明确定义生成时钟,必须使用 create_generated_clock 命令。

<
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值