原创 【博客大赛】5. Constraining Input Delay (Timing Constraints in Vivado)

2014-4-4 13:51 3244 20 24 分类: FPGA/CPLD 文集: Timing Constraints in Vivado

       Timing Constraints in Vivado系列博文已有了一定的进展,经过上两节的介绍,约束设计中的时钟后,Vivado已能完成基本的时序分析。

       在第二节“Timing Basics”中提到时序路径分为以下四种:

1)      FPGA内部时序单元间的路径

20140404133133581001.jpg

2)      输入端口到FPGA内部时序单元的路径

20140404133140551002.jpg

3)      FPGA内部时序单元到输出端口的路径

20140404133147479003.jpg

4)      输入端口到输出端口的路径

20140404133155127004.jpg

       其中1. FPGA内部时序单元间的路径中,时序分析所需要的时间参数:Tclk-D1, Tclk-Q, Tdata_path_delay, Tclk_D2, Tsetup, Thold已能确定,只要属于FPGA内部的时间参数,Vivado则会根据相应设计计算得到,因此4. 输入端口到输出端口的路径的时间参数也能确定。

       其它两条路径都相应缺少FPGA外部的几个时间参数,这些参数都需要通过时序约束告知Vivado,然后Vivado才能精确地进行这些路径的时序分析。这一节先介绍2. 输入端口到FPGA内部时序单元的路径这条路径的约束。

       在输入端口到FPGA内部时序单元的路径中,Input Delay这段路径是在FPGA外部,因此需要约束设置其时间参数,通过set_input_delay约束命令约束,具体如下:

set_input_delay –clock {clk} –max/-min input_delay_value [get_ports {DIN}]

       另外根据source clockdestination clock,输入接口可分为以下两种情况:

1.     System Synchronous Input

       分析输入端口到FPGA内部时序单元的路径时,当source clockdestination clock来自同一个系统时钟时,称为系统同步输入(system synchronous input)

       1所示为系统同步输入,source clockCLKAdestination clockCLKB,其中CLKB通过输入端口引入FPGA内部(约束成主时钟),而CLKA引到了FPGA外部的板上芯片,并没有引入到FPGA内部,CLKB是采集输入端口的时钟,因此首先约束CLKB为主时钟,约束如下:

      

以下是约束指令:
create_clock -name CLKB -period 10 -waveform {0 5} [get_ports {CLKB}]

20140404133202444005.jpg

1

       其中Tclkd_ext表示外部时钟源到外部芯片的延时;Tclkd_int表示外部时钟源到FPGA输入端口的延时;Tco表示外部芯片tCO时间;Tbd表示外部芯片输出端口到FPGA芯片的板上延时。

       对应max_input_delaymin_input_delay,以上几个时间参数都有maxmin值,约束如下:

 

以下是约束指令:
set_input_delay -clock CLKB -max [Tclkd_ext_max + Tco_max + Tbd_max – Tclkd_int_min] [get_ports DIN]
set_input_delay -clock CLKB -min [Tclkd_ext_min + Tco_min + Tbd_min – Tclkd_int_max] [get_ports DIN]

2.     Source Synchronous Input

       分析输入端口到FPGA内部时序单元的路径时,当destination clock来自外部芯片,即与数据输入同源,称为源同步输入(source synchronous input)

       结构如图2所示,从板上芯片输入到FPGA除了有数据,还有一个随路时钟,是由板上芯片产生的。

20140404133210345006.jpg

2

2.1 Input Delay Value

       约束Input Delaymax值和min值,参考图2中时间参数,其中Tcd表示外部芯片时钟输出到FPGA输入端口的延时;Tco表示外部芯片tCO时间;Tbd表示外部芯片输出端口到FPGA芯片的板上延时。Input delay的计算式如下:

       max_input_delay = Tbd_max + Tco_max - Tcd_min

       min_input_delay = Tbd_min + Tco_min - Tcd_max

2.2 Clock & Data

       源同步输入的约束相比于系统同步输入的复杂些,其根据时钟与数据的关系,可分为边缘对齐(Edge Aligned Clock&Data)和中心对齐(Center Aligned Clock&Data)两种:

1)      Center Aligned

       中心对齐是指时钟和数据到达后级时序单元时,时钟沿在数据中心,如图3所示。

       在这种情况下可以直接使用时钟采集数据。

20140404133217863007.jpg

3

       约束如下:

 

以下是约束指令:
create_clock -name CLKB -period clk_period [get_ports {CLKB}]
set_input_delay -clock [get_clocks CLKB] -max max_input_delay [get_ports indata]
set_input_delay -clock [get_clocks CLKB] -min min_input_delay [get_ports indata] -add_delay

2)      Edge Aligned

       边缘对齐是指时钟和数据到达后级时序单元时,时钟沿与数据变化沿重合,如图4所示。

20140404133222421008.jpg

4

       这种情况下显然不满足后级时序单元的Setup要求,因此时钟需要经过一定的移相才能去采集数据,通常采用MMCM模块实现移相,如图5所示。

20140404133228602009.jpg

5

       时钟约束如下:

 

以下是约束指令:
create_clock -name CLKB -period clk_period [get_ports {CLKB}]
create_generated_clock -name CLKB_90 -source [get_clocks CLKB] –phase 90 [get_pins {MMCM|co[0]}]
set_input_delay -clock [get_clocks CLKB_90] -max max_input_delay [get_ports indata]
set_input_delay -clock [get_clocks CLKB_90] -min min_input_delay [get_ports indata] -add_delay

2.3 SDR & DDR

       源同步接口常用于高速数据传输,如DDR存储器、HyperTransport总线和SPI-4.2标准接口等。其中DDR指双倍速率数据采集(Double Data Rate),在时钟的上升沿和下降沿都传输数据实现双倍速率。

1)      SDR(Single Data Rate)

       单倍速率数据采集只在时钟的上升沿或者下降沿采集数据,如图6所示。

20140404133236650010.jpg

6

       Input约束只需针对时钟的上升沿或者下降沿进行,如:

 

以下是约束指令:
set_input_delay -clock [get_clocks CLKB] -max max_input_delay [get_ports indata]
set_input_delay -clock [get_clocks CLKB] -min min_input_delay [get_ports indata] -add_delay

2)      DDR(Double Data Rate)

       双倍速率数据采集在时钟的上升沿和下降沿都采集数据,如图7所示。

20140404133241425011.jpg

7

       针对时钟的上升沿和下降沿都需要进行Input约束,如:

 

以下是约束指令:
set_input_delay -clock [get_clocks CLKB] -max max_input_delay [get_ports indata]
set_input_delay -clock [get_clocks CLKB] -min min_input_delay [get_ports indata] -add_delay
set_input_delay -clock [get_clocks CLKB] -max max_input_delay [get_ports indata] -clock_fall -add_delay
set_input_delay -clock [get_clocks CLKB] -min min_input_delay [get_ports indata] -clock_fall -add_delay

20140404134835511001.gif
20140404134952792001.gif
20140404135039739001.gif

PARTNER CONTENT

文章评论4条评论)

登录后参与讨论

Hoki 2015-4-22 11:22

可以在timequest里查看

用户1653830 2015-4-22 09:41

前辈,请教一个问题:如果手册里面只给出了输出接口时钟和数据的建立时间和保持时间,怎么求得 Tco的值?

用户451637 2014-6-9 10:33

前辈,您好,我刚接触vivado不就,有些问题想向您请教,我能加下您qq吗?

用户468742 2014-5-14 22:59

不错,很喜欢,有时间仔细研读。
相关推荐阅读
Hoki 2017-01-11 17:35
LX9开发板呼吸灯实现
对LX9开发板硬件评测后,从这一节开始真正进入FPGA开发的世界。很多开发板的例程中必有跑马灯实验,老跑马也没意思,咱来把新潮的,整一个呼吸灯。 呼吸灯最初是出现在apple公司的笔记本产品中,当合上...
Hoki 2017-01-11 16:47
LX9的microblaze配置
虽然XC6SLX9芯片资源比较少,但是嵌一个microblaze还是搓搓有余的,这一节就来评测一下在XC6SLX9上microblaze的配置。 有两种方法配置microblaze,一是在ISE软件中...
Hoki 2017-01-11 16:32
zynq评测
Zynq芯片是业界第一款在FPGA中集成ARM核的芯片,由FPGA的发明者xilinx公司推出的。Zynq严格来说不能以FPGA来定义它,因为其是以处理器为中心的平台,能够在单芯片上提供软、硬件和 I...
Hoki 2017-01-11 16:19
u-boot
Zyny芯片启动加载分为3步: 1. 芯片上电启动,首先读取BootROM中的程序,初始化一些必要的外设,然后根据专用引脚电平判断该从何处启动first stage Bootloader(FSBL),...
Hoki 2017-01-11 16:09
基于zynq的交叉编译平台
Zynq芯片的最大特点是其集成了双ARM Cortex-A9处理器,因此zynq的应用基本是以这个ARM核为核心,再配合FPGA逻辑作为协处理器,几乎能实现所有较复杂的应用。并且在ARM上可以跑操作系...
Hoki 2017-01-11 15:54
u-boot image生成
这节介绍一下如何生成u-boot image文件,在SDK软件中点击Xilinx Tools→Create Boot Image工具即可生成,但是生成image文件需要首先集齐3个文件:u-boot....
EE直播间
更多
我要评论
4
20
关闭 站长推荐上一条 /3 下一条