先简单说说这段时间遇到的问题。FPGA采集前端scaler的视频数据。像素时钟(随路时钟),视频数据,行场同步,DE。这些信号进入FPGA后。通过CSC(颜色空间转换)。输出后的图像有噪点。通过查看时序报告。时序没有过。然后通过随路时钟将这些信号用寄存器打了两拍。时序也没有通过。时序错误少了很多。于是考虑到Input Delay。FPGA在高速IO传输时,只有合理约束。保证IO的建立时间和保持时间。才能保证FPGA采用数据的正确性。

(以下内容转自网友)

FPGA整体概念

由于IO口时序约束分析是针对于电路板整个系统进行时序分析,所以FPGA需要作为一个整体分析,其中包括FPGA的建立时间、保持时间以及传输延时。传统的建立时间、保持时间以及传输延时都是针对寄存器形式的分析。但是针对整个系统FPGA的建立时间保持时间可以简化。

图1.1  FPGA整体时序图

如图1.1所示,为分解的FPGA内部寄存器的性能参数:

(1) Tdin为从FPGA的IO口到FPGA内部寄存器输入端的延时;

(2) Tclk为从FPGA的IO口到FPGA内部寄存器时钟端的延时;

(3) Tus/Th为FPGA内部寄存器的建立时间和保持时间;

(4) Tco为FPGA内部寄存器传输时间;

(5) Tout为从FPGA寄存器输出到IO口输出的延时;

对于整个FPGA系统分析,可以重新定义这些参数:FPGA建立时间可以定义为:

(1) FPGA建立时间:FTsu = Tdin + Tsu – Tclk;

(2) FPGA保持时间:FTh = Th + Tclk;

(3) FPGA数据传输时间:FTco = Tclk + Tco + Tout;

由上分析当FPGA成为一个系统后即可进行IO时序分析了。FPGA模型变为如图1.2所示。

图1.2  FPGA系统参数

1.3  输入最大最小延时

外部器件发送数据到FPGA系统模型如图1.3所示。对FPGA的IO口进行输入最大最小延时约束是为了让FPGA设计工具能够尽可能的优化从输入端口到第一级寄存器之间的路径延迟,使其能够保证系统时钟可靠的采到从外部芯片到FPGA的信号。

图1.3  FPGA数据输入模型

输入延时即为从外部器件发出数据到FPGA输入端口的延时时间。其中包括时钟源到FPGA延时和到外部器件延时之差、经过外部器件的数据发送Tco,再加上PCB板上的走线延时。如图1.4所示,为外部器件和FPGA接口时序。

图1.4  外部器件和FPGA接口时序

1.         最大输入延时

最大输入延时(input delay max)为当从数据发送时钟沿(lanuch edge)经过最大外部器件时钟偏斜(Tclk1),最大的器件数据输出延时(Tco),再加上最大的PCB走线延时(Tpcb),减去最小的FPGA时钟偏移(FTsu)的情况下还能保证时序满足的延时。这样才能保证FPGA的建立时间,准确采集到本次数据值,即为setup slack必须为正,如图1.1的所示,计算公式如下式所示:

Setup slack =(Tclk + Tclk2(min))–(Tclk1(max) +Tco(max) +Tpcb(max) +FTsu)≥0

推出如下公式:

Tclk1(max) + Tco(max) + Tpcb(max) –Tclk2(min) ≤ Tclk + FTsu

由Altera官方数据手册得知:

input delay max = Board Delay (max) – Board clock skew (min) + Tco(max)

结合本系统参数公式为:

input delay max = Tpcb(max) – (Tclk2(min)–Tclk1(max)) + Tco(max)

2.         最小输入延时

最小输入延时(input delay min)为当从数据发送时钟沿(lanuch edge)经过最小外部器件时钟偏斜(Tclk1),最小器件数据输出延时(Tco),再加上最小PCB走线延时(Tpcb),此时的时间总延时值一定要大于FPGA的最大时钟延时和建立时间之和,这样才能不破坏FPGA上一次数据的保持时间,即为hold slack必须为正,如图1.1的所示,计算公式如下式所示:

Hold slack = (Tclk1(min) + Tco(min) + Tpcb(min))–(FTh + Tclk2(max))≥ 0

推出如下公式:

Tclk1(min) + Tco(min) + Tpcb(min) – Tclk2(max) ≥ FTh

由Altera官方数据手册得知:

input delay max = Board Delay (min) - Board clock skew (min) + Tco(min)       

结合本系统参数公式为

input delay max = Tpcb(min) – (Tclk2(max)–Tclk1(min)) + Tco(min)                 

由公式4和公式8得知,进行输入最大最小延时的计算,我们需要估算4个值:

(1) 外部器件输出数据通过PCB板到达FPGA端口的最大值和最小值Tpcb,PCB延时经验值为600mil/ns,1mm = 39.37mil;

(2) 外部器件接收到时钟信号后输出数据延时的最大值和最小值Tco;

(3) 时钟源到达外部器件的最大、最小时钟偏斜Tclk1;

(4) 时钟源到达FPGA的最大、最小时钟偏斜Tclk2;

当外部器件时钟为FPGA提供的时候,Tclk1和Tclk2即合成Tshew,如图1.5所示:

图1.5  FPGA输出时钟模型

1.4  输出最大最小延时

FPGA输出数据给外部器件模型如图1.6所示。对FPGA的IO口进行输出最大最小延时约束是为了让FPGA设计工具能够尽可能的优化从第一级寄存器到输出端口之间的路径延迟,使其能够保证让外部器件能准确的采集到FPGA的输出数据。

图1.6  FPGA输出延时模型

输出延时即为从FPGA输出数据后到达外部器件的延时时间。其中包括时钟源到FPGA延时和到外部器件延时之差、PCB板上的走线延时以及外部器件的数据建立和保持时间。如所示,为FPGA和外部器件接口时序图。

图1.7  FPGA输出延时

1.         最大输出延时

由Altera官方数据手册得知:

Output delay max = Board Delay (max) – Board clock skew (min) + Tsu

由公式得知,最大输出延时(output delay max)为当从FPGA数据发出后经过最大的PCB延时、最小的FPGA和器件时钟偏斜,再加上外部器件的建立时间。约束最大输出延时,是为了约束IO口输出,从而使外部器件的数据建立时间,即为setup slack必须为正,计算公式如下式所示:

Setup slack =(Tclk + Tclk2(min))–(Tclk1(max) +FTco(max) +Tpcb(max) +Tsu)≥0

推导出如下公式:

FTco(max) + Tpcb(max) –(Tclk2(min) – Tclk1(max))+Tsu ≤Tclk

再次推导,得到如下公式:

FTco(max) + Output delay max ≤Tclk

由此可见,约束输出最大延时,即为通知编译器FPGA的FTco最大值为多少,根据这个值做出正确的综合结果。

2.  输出最小延时

由Altera官方数据手册得知:

Output delay min = Board Delay (min) – Board clock skew (max) –Th

由公式得知,最小输出延时(output delay min)为当从FPGA数据发出后经过最小的PCB延时、最大的FPGA和器件时钟偏斜,再减去外部器件的建立时间。约束最小输出延时,是为了约束IO口输出,从而使IO口输出有个最小延时值,防止输出过快,破坏了外部器件上一个时钟的数据保持时间,导致hlod slack为负值,不能正确的锁存到数据,最小输出延时的推导计算公式如下式所示:

Hold slack = (Tclk1(min) + FTco(min) + Tpcb(min))–(Th + Tclk2(max))≥ 0

推导出如下公式:

FTco(min) + Tpcb(min) – (Tclk2(max) – Tclk1(min))– Th ≥ 0

再次推导,得出如下公式:

FTco(min) + Output delay min ≥ 0

由公式得知,约束输出最大延时,即为通知编译器FPGA的FTco最小值为多少,根据这个值做出正确的综合结果。

由公式10和公式14得知,进行输出最大最小延时的计算,我们需要估算4个值:

(1) FPGA输出数据通过PCB板到达外部器件输入端口的最大值和最小值Tpcb,PCB延时经验值为600mil/ns,1mm = 39.37mil;

(2) 时钟源到达外部器件的最大、最小时钟偏斜Tclk2;

(3) 时钟源到达FPGA的最大、最小时钟偏斜Tclk1;

(4) 外部器件的建立时间Tsu和保持时间Th;

当外部器件时钟为FPGA提供的时候,Tclk1和Tclk2即合成Tshew,如图1.8所示:

图1.8  FPGA提供时钟模型

1.5  使用范围

通过作者使用总结情况,IO口时序约束主要使用在以下情况:

1.数据交换频率较高

由于IO时序约束一般计算值都是在几纳秒,当FPGA和外部数据交换频率较低,如FPGA操作640*480的TFT液晶进行刷屏,数据传输频率仅仅24Mhz,一个数据时钟都有41.666ns,完全不用约束都能满足时序要求。但是当操作SDRAM运行到120M时候,由于一个数据变换周期才8ns,因此IO口的少量延时都会影响到SDRAM数据,因此这种情况下需要对输入输出进行完整的IO口时序约束,并且分析正确,才能消除数据传输不稳定过的情况。

2.代码已经比较优化

当数据交换频率较高,但是时序约束还是不满足时序要求的时候,我们都需要对代码进行分析,好的时序都是设计出来的,不是约束出来的。如程序清单 1.1所示,首先hcount_r 和vcount_r 都为10位计数器,这样的代码TFT的三色输出的端口就会有很大的延时,因为dat_act的胶合逻辑太多,输出路径太长导致。这种情况下应该不是首先做时序约束,应该修改代码,尽量做到寄存器直接输出。只有当代码比较优化的情况,再做时序约束这样才能得到较好的结果。

程序清单 1.1  示例程序

1 assign dat_act  =    ((hcount_r >= hdat_begin) && (hcount_r < hdat_end))                 
2            && ((vcount_r >= vdat_begin) && (vcount_r < vdat_end));
3 assign tft_r = (dat_act) ? {rgb16_dat[15:11], 3'b111} : 8'h00;
4 assign tft_g = (dat_act) ? {rgb16_dat[10:5], 3'b111} : 8'h00;
5 assign tft_b = (dat_act) ? {rgb16_dat[4:0], 3'b111} : 8'h00;
 

1.6  总结

Altera官方的IO时序约束分析例子

lattice  INPUT_SEUP分析

INPUT _SETP 的TIME 值设定实际上就是FPGA的IO输入端的Tsu_f
Tsu_f=Tclk-Tpcb(max)-Tco_d(max)-(Tclk_d-Tclk_f);
在不考虑时钟偏斜的基础上(Tclk_d-Tclk_f)=0;
Tsu_f=Tclk-Tpcb(max)-Tco_d(max)
Tclk 时钟频率 Tco_d外设的输出最大延时;发现没(Tpcb(max)+Tco_d(max))这个就是Altera的输入最大延时(不考虑偏斜的)
HOLD TIME 就是Th_f;
Th_f<=TCo_d(min)+Tpcb(min);这个和Altera是一样的。TCo_d(min) 就是外部器件的To_h_d(输出HOLD值)
下面是关于这个的时序分析:

可以看到在时序分析中,可以看出Time就是SetUp值:Tsu_f就是Data Required 4ns;时间宽容=Req(必须时间)-Arrival(到达时间),可以这样理解 Required 是给FPGA 数据传送的最大时间限制 而Arrival时间是数据输入到FPGA要是用该数据的各个模块中寄存器的时间 必须保证有这个时间数据才能传送到。所以时间宽容就=给定的必须完成数据稳定输入的时间req-到达使用该数据路径消耗的时间。

Th_f就更没什么说的了理解的方式一样 slack=req-arri。
再来说说CLOCK_TO_OUT

这里的TIME 其实就是FPGA的Tco(max)的最大允许值。MinTime 其实就是FPGA输出的Th_of(输出HOLD值)
Tco(Max)=Tclk-Tco_d(max)-Tpcb(max);不考虑偏斜的;
Tco_d(max)+Tpcb(max) 眼熟不 这有是Alera的设定值。
Th_of+Tpcb>=Tco(min)_d
Th_of>=Tco(min)_d-Tpcb;
下面是关于这个的时序分析:

首先我们看到输入的Time其实就是Tco_f 也是一种逆向的setup呵呵。
slack(时间宽松)=req(必须时间Tco_f最大值Time)-arrival。这样理解数据需要通过的各个模块路径要arrival时间才能输出
而规定的最晚输出时间是req ,因此slack(时间宽松)=req(必须时间Tco_f最大值Time)-arrival。
再看保持时间Th_of

我们看到关于Min Time 其实就是Th_of 就req. Slack=arri-req.
可以这样理解,系统设计要求的FPGA保持时间最小值(Th_of>=Tco(min)_d-Tpcb)是req,而数据从产生到路径输出时间是arri 时间宽容自然就是arri-req 。

eg:

INPUT_SETUP GROUP "PDATA"3.00000 ns HOLD 4.00000  CLKPORT "pclk" ;
INPUT_SETUP GROUP "VTIMING"3.00000 ns HOLD4.00000 ns CLKPORT "pclk" ;

FPGA In/Out Delay Timing Constaint的更多相关文章

  1. FPGA中的delay与latency

    delay和latency都有延迟的意义,在FPGA中二者又有具体的区别. latency出现在时序逻辑电路中,表示数据从输入到输出有效经过的时间,通常以时钟周期为单位. delay出现在组合逻辑电路 ...

  2. FPGA Timing笔记

    很多FPGA工程师都会遇到timing的问题,如何让FPGA跑到更快的处理频率是永久话题.决定FPGA的timing关键是什么?如何才能跑到更快的频率呢? A. 第一步需要了解FPGA的timing路 ...

  3. FPGA时序约束的几种方法 (转)

    FPGA时序约束的几种方法 对自己的设计的实现方式越了解,对自己的设计的时序要求越了解,对目标器件的资源分布和结构越了解,对EDA工具执行约束的效果越了解,那么对设计的时序约束目标就会越清晰,相应地, ...

  4. 【黑金原创教程】【TimeQuest】【第五章】网表质量与外部模型

    声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...

  5. ITU-T G.1080 IPTV的体验质量(QoE)要求 (Quality of experience requirements for IPTV services)

    IPTV的服务质量(QoE)要求 Quality of experience requirements for IPTV services Summary This Recommendation de ...

  6. STA分析(四) lib model

    library中的一个cell可以是一个standard cell,IO buffer,或者一个complex IP.其中包含area,functionality,timing,power等相关的信息 ...

  7. report_delay_calculation/check_timing/report_annotated_parasitics/report_analysis_coverge

    如何debug 一颗cell 或一段net 的delay,  常用的办法是用report_delay_calculation 报这颗cell 或这段net, 会得到形式如下的report, 从该rep ...

  8. FPGA时序约束和timequest timing analyzer

    FPGA时序约束 时钟约束 #************************************************************** # Create Clock #****** ...

  9. FPGA静态时序分析——IO口时序(Input Delay /output Delay)

    1.1  概述 在高速系统中FPGA时序约束不止包括内部时钟约束,还应包括完整的IO时序约束和时序例外约束才能实现PCB板级的时序收敛.因此,FPGA时序约束中IO口时序约束也是一个重点.只有约束正确 ...

随机推荐

  1. NGINX+TOMCAT实现反向代理

    环境说明 NGINX: 192.168.10.10 TOMCAT: 192.168.10.11 NGINX部分 [root@nginx ~]# wget http://nginx.org/downlo ...

  2. 在IDEA中实战Git 实用

    工作中多人使用版本控制软件协作开发,常见的应用场景归纳如下: 假设小组中有两个人,组长小张,组员小袁 场景一:小张创建项目并提交到远程Git仓库 场景二:小袁从远程Git仓库上获取项目源码 场景三:小 ...

  3. CSS3实战-文字篇

    text-shadow的大作用 多颜色阴影效果,用逗号分隔text-shaodow即可. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tr ...

  4. 用JS获得QQ号码的昵称,头像,生日

    有一个网址,可以返回我们要的内容. http://r.qzone.qq.com/cgi-bin/user/cgi_personal_card?uin=指定QQ号码 将会返回下列内容: _Callbac ...

  5. tomcat关闭后没有及时释放内存资源

    1.ps -ef|grep java 找到对应的tomcat服务 2.kill -9  线程id 3.free -m 查看内存情况

  6. <eq>标签

    链接:http://document.thinkphp.cn/manual_3_2.html#taglib <eq name="menu.id" value="1& ...

  7. Indepence Mode 备份 weblogic

    一般不在administation server 停止这个模式 管理服务器挂了,不会影响其他服务器的运行 备份一个domain copy  一个  /bin  把启动的脚本做一个修改  里面的doma ...

  8. openjudge-NOI 2.5基本算法之搜索 专题题解目录

    1.1700 八皇后问题 2.1756 八皇后 3.1789 算24

  9. python 之datetime库学习

    # -*- coding:utf-8 -*- import refrom datetime import datetime, timezone, timedelta def rec_time():   ...

  10. linux文件管理 -> 系统目录结构

    几乎所有的计算机操作系统都是用目录结构组织文件.具体来说就是在一个目录中存放子目录和文件, 而在子目录中又会进一步存放子目录和文件,以此类推形成一个树状的文件结构,由于其结构很像一棵树的分支, 所以该 ...