文档章节

米联客(MSXBO)基于VIVADO FPGA时序笔记之多周期约束(四)

msxbo
 msxbo
发布于 11/09 17:47
字数 2359
阅读 12
收藏 0

1.1概述

在前面的文章中,我们都是关键的时序路径包括时钟进行的约束都是常规约束。常规的约束是我们用的最多的,但是VIVADO会对一些无关紧要的路径,或者2个异步时钟之间也进行分析等等。所以我们得告诉VIVADO IDE那些路径需要Exceptions。关于Exceptions的含义就是区分于前面的常规分析的异常时序分析。由于没有找到更好的意会的翻译中文,暂且就以“异常”来翻译Exceptions。

 

1.2 多周期路径(Multicycle Paths)

         默认情况下,Vivado IDE时序分析引擎采取单周期分析。这种分析可能过于严格,可能不适用于某些逻辑路径。多周期路径约束允许根据设计时钟波形来修改建立和保持关系。

最常见的例子就是数据在逻辑路径末端稳定需要多个时钟周期,如果路径起始端和末端允许路径控制,Xilinx建议使用“多周期约束”放松对建立时间的要求。保持时间要求可以保持与建立时间的默认关系,也可以根据设计者的需求进行修改,这样有助于时序驱动算法聚焦于关键路径,节省软件运行时间。

1.3 set_multicycle_path 指令

set_multicycle_path指令可以用于修改源时钟路径(source clock)和目的时钟路径(destination clock)成倍数关系的路径,可以用于设置建立时间(setup time)时序分析,保持时间(hold time)时序分析。

   语法:

         set_multicycle_path <path_multiplier> [-setup|-hold] [-start|-end] [-from <startpoints>] [-to <endpoints>] [-through <pins|cells|nets>]

要点:

1)、默认建立路径的周期倍数是相对于destination clock,使用-start属性可以修改为相对source clock;

2)、默认保持路径的周期倍数是相对source clock,使用-end属性将修改为相对destination clock;

3)、对于相同时钟域或者两个时钟的波形相同的情况下,-start和-end对对周期路径约束没有影响。

         set_multicycle_path命令的-setup命令不仅会影响建立时间关系, 而且它还会影响与建立时间相关联的两个保持时间关系,一般还需要使用-hold命令约束保持时间的关系。

可以在单个路径,多个路径甚至两个时钟之间设置多周期约束。下面我们会一一介绍。

1.4单时钟域中的多周期(Multicycles in Single Clock Domain)

单时钟域中的多周期约束

 

默认建立和保持关系

 

建立和保持时序要求为:

• Setup check

TDatapath(max) < TCLK(t=Period) - TSetup

• Hold check

TDatapath(min) > TCLK(t=0) + Thold

1.5 具有ce使能的多周期约束

如下图所示是一个适合采用多周期路径分析的电路,data0_reg和data1_reg两个触发器间的路径使能CE每2个周期使能一次,可以使用多周期约束,让第一个destination clock采样沿不捕获新数据,而在第二个destination clock采样沿捕获新数据。

如下图所示,在没有进行多周期约束前,在capture edge1和capture edge2都要对时序分析,所以我们判断这是一条适合使用多周期路径分析的时序。

所以使用以下语句设置多周期约束,让VIVADO IDE时序工具从capture edge2 分析setup建立时间(setup是为了确保数据在caputre edge可以被打入D触发器,由于ce使能存在,需要在launch edge后的capture edge2才是真正的capture edge)。所以通过以下约束把默认的capture edge 移动到capture edge2

set_multicycle_path 2 -setup -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]

当Setup check移动到了第二个capture edge2 ,默认情况下hold check会自动移动到第一个capture edge1。如下图所示:

Hold自动后,如果还是在capture dege1位置分析hold关系,相当于hold关系相对于launch edge保持了1个周期,有没要吗?没必要,如果还是不清楚,我们回顾下hold的作用:

hold的作用是为了数据可以从capture延稳定一段时间确保D触发器稳定输出,显然在caputre dege1无需考虑数据采集,更无需考虑数据setup也无需考虑数据的hold,所以这里可以放开hold保持的时序约束,把hold检查的capture edge后移1个周期,这样就和Launch edge 是同一个沿了。

set_multicycle_path 1 -hold -end -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]

这里使用了-end 前面提到过,-end是将默认分析hold保持关系的source clock改为desttination clock。如下图所示:

上图就是我们最终分析后,

1)、从capture edge2分析,setup时间很长相当宽裕可以非常容易满足建立时间要求

2)、从capture edge0分析 hold 只要保持很小的时间就可以满足数据的保持要求

由于这里的source clock和destination clock是相同的时钟,所以可以不用-end也一样,最后的约束如下:

set_multicycle_path 2 -setup -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]

set_multicycle_path 1 -hold -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]

 

趁热打铁,假如CE 使能是每4个周期使能一次,那么setup 放宽到第4个capture edge,而hold依然放宽到destination clock的第一个edge,时序约束如下:

set_multicycle_path 4 -setup -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]

set_multicycle_path 3 -hold -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]

 

1.6 时钟有相位移动的多周期约束

如下图,CLK1和CLK2是2个时钟域的时钟,它们具有相同的时钟周期,只是存在相位差,这种时钟关系就可以使用多周期约束,来约束这2个时钟之间的关系。

如下图所示,source clock 和 destinaion clock 我们实现知道destinaion clock相移+0.3ns,默认情况下,在launch延后第一个capture edge 评估setup时序,而后一个延评估hold时序,显然,目前的情况都无法满足时序要求,这不仅仅导致过约束,而且直接导致VIVADO IDE软件没法实现时序收敛。这是由于软件太笨了,也许以后的软件更加智能了,FPGA工程师就不需要去掌握时序约束了。

所以我们需要采用多周期时序分析,并且进行正确的约束,如下图所示,把capture edge 提前一个时钟周期。这样就很容满足setup 时间和hold时间的要求。

set_multicycle_path 2 -setup -from [get_clocks CLK1] -to [get_clocks CLK2]

由于默认hold分析延迟于setup 分析一个周期,而这里是单周期时序分析,可以不对hold做多周期约束,当让如果非要做也可以但是一定要写对

set_multicycle_path 1 -hold -from [get_clocks CLK1] -to [get_clocks CLK2] –end

注意这里的-end是必须要写的,因为这里的时钟只是波形周期相同,相位不相同,-end告知VIVADO 时序分析工具,是以destination clock分析的。

 

既然相位可以前移,也可以后移,假设destination clock相位后移-0.3ns,那么我们看如下时序分析图,可以发现,在capture edge 的时序依然满足要求,只是相对的setup时间变小了,而hold 时间变长了。所以一般后移不大的情况下,可以不用多周期时序约束的,当然如果后移大了,导致setup不能满足要求,就得做多周期约束了。

 

1.7 慢到快的多周期约束

慢到快的多周期时序分析,和我们前面采用CE使能的多周期时序分析非常类似,下图我们需要在destination clock的第四个时钟上升沿,capure数据,因此把setup 移到第四个时钟上升沿。从我们前面学习到的除了移动了setup,hold默认只是延后于caputre一个时钟沿,显然下图中我们是可以放宽hold的,而每必要让hold保持3个时钟周期。

set_multicycle_path 3 -setup -from [get_clocks CLK1] -to [get_clocks CLK2]

set_multicycle_path 2 -hold -end -from [get_clocks CLK1] -to [get_clocks CLK2]

我们总结下,慢到快的时钟约束可以总结为以下公式:

set_multicycle_path N -setup -from [get_clocks CLK1] -to [get_clocks CLK2]

set_multicycle_path N-1 -hold -end -from [get_clocks CLK1] -to [get_clocks CLK2]

 

1.8快慢的多周期约束

如下图对快到慢的多周期时序分析,下图是默认的时序分析图,可以看到source clock 是destination clcok的3倍。前面提到了,对于setup 默认分析是对于destination clock的分析,而-start可以修改分析的时钟改为source clock,我们这里就要用到-start

我们要实现如下图所示的时序约束分析,对于hold默认就是对应source clock 所以往前移2个周期

最终的多周期时序约束如下:

set_multicycle_path 3 -setup -start -from [get_clocks CLK1] -to [get_clocks CLK2]

set_multicycle_path 2 -hold -from [get_clocks CLK1] -to [get_clocks CLK2]

 

© 著作权归作者所有

msxbo
粉丝 5
博文 130
码字总数 326590
作品 0
南京
私信 提问
Vivado的XDC约束技巧——CDC篇

上一篇《XDC约束技巧之时钟篇》介绍了XDC的优势以及基本语法,详细说明了如何根据时钟结构和设计要求来创建合适的时钟约束。我们知道XDC与UCF的根本区别之一就是对跨时钟域路径(CDC)的缺省...

wordwarwordwar
2018/01/24
0
0
学习笔记04:《产品经理白皮书》

个人感觉这个分享偏向于介绍产品经理在日常工作中如何执行,比较适合1-3年的产品经理,学会很好的执行推动产品的落地。以大白这个形象来模拟产品经理从小白如何一步步升级闯关变成强大的大白...

小耳朵小
01/17
0
0
【Vivado使用误区与进阶】读懂用好 Timing Report

 更多精彩内容,请微信搜索“FPGAer俱乐部”关注我们。 《XDC约束技巧》系列中讨论了XDC约束的设置方法、约束思路和一些容易混淆的地方。我们提到过约束是为 了设计服务,写入Vivado中的...

fpgaerclub
2018/04/10
0
0
互联网项目管理流程(SOP)总结

无规矩不成方圆。 项目角色 产品经理(PM) 后台开发(RD) 前端开发(FE) 系统测试(QA) 项目周期 主要的环节包括 :需求评审、项目开发、提测、系统测试、发布上线等 序号 环节 主R(res...

高广超
2017/12/01
0
0
Vivado使用误区与进阶——如何读懂用好 Timing Report

《XDC约束技巧》系列中讨论了XDC约束的设置方法、约束思路和一些容易混淆的地方。我们提到过 约束是为了设计服务,写入Vivado中的XDC实际上就是用户设定的目标 ,Vivado对FPGA设计的实现过程...

wordwarwordwar
2018/01/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kafka实战(五) - 核心API及适用场景全面解析

1 四个核心API ● Producer API 允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic。 ● Consumer API 允许一个应用程序订阅一个或多个topic ,并且对发布给他们的流式数据进行处...

JavaEdge
27分钟前
7
0
实现线程的第三种方式——Callable & Future

Callable Runnable 封装一个异步运行的任务, 可以把它想象成为一个没有参数和返回值的异步方 法。Callable 与 Runnable 类似, 但是有返回值。Callable 接口是一个参数化的类型, 只有一 个...

ytuan996
今天
9
0
OSChina 周六乱弹 —— 不要摁F了!

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 : 朴树写的词曲都给人一种莫名的失落感,不过这首歌他自己却没有唱,换成赵传这种高音阶嘶喊的确很好,低沉但却有力,老男人的呐喊...

小小编辑
今天
11
0
Android Binder机制 - interface_cast和asBinder讲解

研究Android底层代码时,尤其是Binder跨进程通信时,经常会发现interface_cast和asBinder,很容易被这两个函数绕晕,下面来讲解一下: interface_cast 下面根据下述ICameraClient例子进行分析...

天王盖地虎626
昨天
13
0
计算机实现原理专题--存储器的实现(二)

计算机实现原理专题--存储器的实现(一)中描述了一种可以记住输入端变化的装置。现需要对其功能进行扩充,我们将上面的开关定义为置位,下面的开关定义为复位,然后需要增加一个保持位,当保...

FAT_mt
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部