FPGA设计-时序约束(中篇-实例分析)

ADS6445开发笔记(2)---- LVDS 高速接口 从上一章节,芯片资料可以看到,串行输出LVDS数据的bit clock,都是400MHZ以上的。这显然不能用fpga Verilog 语言直接写代码进行采样,需要用到专门的 iserdese 原语。 1. 数据接口时序图 数据接口有很多中模式,这里只贴了一种的图 上图可以看到以下几点: 信号线分3类,数据采集时钟DCLK,帧同步信号FCLK,输入数据DATA 输入数据采样时钟默认是已经对齐了输入数据的中点,但帧时钟是和数据字边缘对齐 使用iserdese接收数据,idelay调整时钟延迟.. 阅读详情
关注、星标公众号,精彩内容每日送达
来源:网络素材

现有一块ADC连接到FPGA上,需要在FPGA上实现高速数据的读取,那么第一步自然就是完成可靠的硬件连线,其中需要注意的是:

1. 注意信号的完整性,尽可能的避免边沿退化;这两区分两个概念:

    i. 高速信号,指的是信号翻转,由高电平到低电平或者反之所耗得时间非常小;可能一个1MHz的TTL信号或者LVDS信号,只要边沿足够陡,那也算是高速信号!

    ii. 高频信号,一般指的是周期性信号的周期时间足够小;

    iii. 也就是说高速信号不一定是高频的;数字信号一般都是高速信号,所以必须要保证其边沿的完整性,如果边沿发生退化或者变形,那么将相当于加入了额外的时序上的偏差;

2. 保持时钟信号和数据信号路径等长,不管是单端还是差分信号,需要用绕线等形式迫使两类线几乎等长;这个在之前的时序分析中非常重要,如果真的不能够做到等长,甚至差的还挺多的,也必须提前获得该差值,并将则合成时间差,在后面的时序分析中将会有用;

保证以上两点后,就可以着手时序的分析了,那么首先我们会得到目标器件ADC的时序,如下图所示:

f9f3d5df619936acde6b285b63283848.jpeg

图 1 某ADC的时序图

从上图中我们首先得到几个信息:

1. 这是个同步时序,由两类信号组成,时钟信号DCO和数据信号FCO以及D(忽略它们是差分信号,下面的分析会把它画成单端信号,简化好画一点)

2. 这是个DDR信号,DDR指的是数据是同步于时钟信号的上升、下降边沿,所以该类同步信号需要引入虚拟时钟概念,后面继续介绍;

3. 信号是不是边沿对齐,而是偏移了90度!也就是说DCO边沿翻转后,数据信号没有第一时间翻转,而是延后了四分之一个周期,这是高速信号惯用的伎俩,后面会发现,这个延时让时序更好分析;

将FCO信号和D信号的实际意义扔一边,在设计者看来,他们都仅仅是数据而已,将上面的时序图简化成下图:

f40601787b01dbc40219b22a6fa0a714.png

图 2 简化后的时序图

可以看到,实际上所有的数据信号都是同步于DCO的边沿,但是并不是对齐的,而是相差了90度,同时还是个DDR系统(上下边沿都是Launch Edge)

一般来说DDR系统会引入一个虚拟时钟的概念,就是说DCO是实际存在的时钟,设计和虚构出一个2倍频的DCOX2时钟,并将其相移180度以后,我们重新得到了下图:

0ef44506c3103ec5c437f4693e552ddd.jpeg

图 3 引入虚拟时钟后的数据时序图

引入虚拟时钟后,我们重新规划Launch Edge,将其规划到DCOX2-Shift180的上升沿,其所对应的的Latch Edge仍然还是在DCO上。

到目前为止,我们已经很清楚的规划了ADC的时钟和数据输出的关系,至于如何用SDC语言描述,见下文;接下来就要考虑到这些信号实际上是各自经过PCB走线后来到FPGA的引脚,从FPGA引脚由进入到FPGA内部,然后又经过各自的FPGA内部走线延时以后来到了他们目标的寄存器,如下图所示:

e617863044458db6f31b179082523ae0.png

图 4 傻瓜化后的ADC和FPGA的信号流向图

从上图可以获知:

1. ADC内部看起来有一个源时钟,这个源时钟我们不用管怎么产生,它分成了两路,其中一路经过倍频+移相后触发了ADC上的REG0(就是说其上升沿作为Launch Edge),另一路直接输出到ADC引脚DCO;

2. 数据由REG0产生后输出至ADC引脚D,经过一个延时后来到FPGA的相应输入引脚D`,与此同时,DCO引脚也经由PCB来到了FPGA的输入引脚DCO`;

3. 这两个信号进入FPGA后,都各自分成了两路,分别经过各自的延时来到其目标:

    a) DCO`引脚输入后,进过TCLK2,来到了REG1的clk引脚

    b) DCO`引脚输入后,进过TCLK3,来到了REG2的clk引脚

    c) D`引脚输入后,进过Tdata2,来到了REG1的D引脚

    d) D`引脚输入后,进过Tdata3,来到了REG2的D引脚

4. REG1和REG2有所区别,一个是上升沿触发,一个是下降沿触发(clk前加了个小圈圈),这是因为latch edge本来就是上升沿又有下降沿的;后期实际上也可以给DCO`也引入虚拟时钟,这里不表;

5. 不管是REG1还是REG2,想要锁存latch数据就必须满足建立时间和保持时间,这个在下文的图中也有所体现;

说了那么多,都不如实际的时序图来的实际,下面放图:

d8fbba1109d3e3610c5ba6d1ba99d99a.png

58ce4ecc3bfed04ff056f5219241ee9f.png

图 5 实际时序分析

上图由三个颜色的时序,分别是:

1. 紫色代表DAT,也就是数据到达时间,它由Tco(图中没有体现,可以参考手册)、Tdata1和Tdata2三者构成,是不是和我们的DAT定义不一样?公式是死的,只需要理解其意思就可以。和公式相比少了Tclk(源时钟到REG0的clk的延时),是因为我们不需要考虑这个延时,我们是根据ADC数据手册的时序图反推回里面的结构图,所以所有延时在反推的过程中已经都被体现或者被折合!

2. 绿色伙同棕色线,表达出两个意思DRTsu和DRTh,分别代表数据建立所需时间和数据保持所需时间;

3. 将两者按照定义做减法,就能够得到建立时间裕量和保持时间裕量!

如上图所示,棕色线所划分的时间窗中,REG1.D已经是新的数据,而且在这个时间窗内并没有变化,所以就同时满足了建立时间裕量大于0和保持时间裕量大于0两个关系,这样的时序是稳定的!

但是这个只是图示而已,所有的Tdata1、2、3以及Tclk1、2、3都是我们目前假设的,在实际进行约束时,那些量时需要设计者提前设定,而那些量是自动生成的那?答案是:

1. Tdata1和Tclk1是由PCB实际布线所决定的,如果能够按照等长布线规则,就能够让两者相互抵消;

2. DCO和DCOX2-shift180的时序是由器件决定的;

3. Tdata2、3,Tclk2、3是FPGA在布线时自动产生的!

所以说这里我们只需要告诉FPGA,DCO`和D`之间的时序关系就可以了,要获得这两者之间的时序关系,我们就必须获得DCO和D之间的原始关系,以及他们是如何被布线延时变成DCO`和D`的;如何去描述上面所说的这种关系呢?利用SDC文件!

也就是说SDC文件就是要准确的告诉FPGA,所有输入(输出先不管)信号在进入FPGA时会是个什么样子,然后根据这个信息,FPGA会自动布线,使得REG1和REG2能够获得正确的数据;如果万一SDC文件所描述的时序关系非常的恶劣,将会导致不管FPGA怎么优化布线和布局,都不能够实现正确时时序时,就会输出报错,这个在以后的文章TimeQuest TA中会有详细的分析;那么接下来就开始写SDC文件吧;

#设置各种延时常数

#这里假设ADC片上的延时都为0

    set ADC_CLKs_max 0

    set ADC_CLKs_min 0

    Set ADC_CLKd_max 0

    set ADC_CLKd_min 0

# 同时根据ADC手册去设置Launch edge到有效数据之间的延时,这里假设他为X

    set ADC_tCO_max X

    set ADC_tCO_min X

#这里设置时钟信号和数据信号在PCB板上的延时差,即使是等长布线,我们也要可以给

#定两个值,这样可以给FPGA布线更多的压力,使得后期布线会往一个最理想的方向进行,

#分别是

    set ADC_BD_min XX

    set ADC_BD_max XX

#设置两个时钟,第一个时钟为DCO,它会从FPGA的DCO引脚输入

#另一个时钟是虚拟时钟,根据设置,它是DCO的两倍频,而且有180度的相移

#这两个时钟之间是同步的,一个是很是存在的,另一个是虚拟的!

    create_clock -name DCO-period 5-waveform {1.25   3.75} [get_ports {DCO}]

    create_clock -name DCO_virtual-period 2.5 -waveform {0    1.25}

#最后将所有的数据引脚同步到DCO_virtual的上升沿,根据上面的延时常数设置输入延时和

#输出延时,这条语句非常关键,它告诉FPGA所有的输入信号,在进入FPGA之前,相对于

#时钟存在怎么样的关系!

    set_input_delay -clock DCO_virtual -max [expr $ADC_CLKs_max + $ADC_tCO_max + $ADC_BD_max - $ADC_CLKd_min] [get_ports {D*}]

    set_input_delay -clock DCO_virtual -min [expr $ADC_CLKs_min + $ADC_tCO_min + $ADC_BD_min - $ADC_CLKd_max] [get_ports {}D*}]

SDC文件解释

1. 蓝色底部分代表定义一些延时参数,这些延时参数都是根据实际的PCB布线或者是ADC的书籍参数来设定的

2. 绿色底部分设定同步时钟,如果有必要的话还要设置虚拟时钟;

3. 紫色底部分将所有的输入信号同步到时钟,在这里这个时钟是虚拟时钟,因为我们假设虚拟时钟的上升沿是launch edge,这里其实可以也可以同步到DCO上,但就要设置下降沿同步,会显得比较麻烦;但是一样都是可以实现的!

通过上面的语句,FPGA就知道了,这些属于信号之间的关系:D和DCO之间的关系,D和DCOX2-shift180(就是DCO_Virtual)之间关系;

FPGA之全数字锁相环(DPLL) 1. 数字锁相环的基本原理和组成 1.1 锁相环(PLL)的简介 锁相环最开始并不是用在数字电路中,而是模拟短路中。对于模拟电路中的锁相环,大家可以参考这篇文章稍微看一下,数字和模拟只是实现的方法不同,但是原理、步骤还是共同的。关于模拟PLL。可以参考一片文章: http://www.sohu.com/a/190569594_464086 首先在学习数字锁相环之前,我们应该先了解什么是锁相环?锁相... 阅读详情

相关推荐

FPGA时序分析与时序约束(二)——时钟约束

主时钟通常是FPGA器件外部的板级时钟(如晶振、数据传输的同步时钟等)或FPGA的高速收发器输出数据的同步恢复时钟信号等。

STATEABC的博客 9212

四通道数据采集卡(ADS6445、4 channel、14bit、125MHz)

推荐给大家一款高性能的AD转换芯片,来自德州仪器的AZ6445(ADS6445),具有4个通道,每个通道都是14bit、125MHz的采样速率,数据传输采用LVDS接口,很适合高速传输数据。 首先来看一下ADS6445的器件手册,下图是ADS6445的器件结构图: 从上面的结构图可以看出4个通道的输入都是差分的输入信号,往往我们需要采集的信号都是单端的信号,所以将单端转差分,使用变压器或者单端转差分的运放都是可以的。这里我们采用的是单端转差分的运放。当然在器件手册里面这些信息都会给我们提供,我们就可以照图

FPGA小学生的博客 8827

FPGA时序分析与时序约束(一)——基础知识

FPGA的时序分析与约束需要设计者根据实际的系统功能,通过时序约束的方式提出时序要求;FPGA编译工具根据设计者的时序要求,进行布局布线;编译完成后,FPGA编译工具还需要针对布局布线的结果,套用特定的时序模型,给出最终的时序分析和报告;设计者通过查看时序报告,确认布局布线后的时序结果是否满足设计要求。

STATEABC的博客 6731

Intel (Altera) LVDS

Altera的FPGA顶部、底部和左右侧会有真LVDS 输入缓冲器和LVDS I/O缓冲器。(不同封装 不同系列的器件LVDS的位置,数量会有差异) LVDS 输入缓冲器支持具有100-Ω 的片上差分匹配(RD OCT)。 可将LVDS I/O缓冲器配置成LVDS 输入( 不带RD OCT) 或者真LVDS 输出缓冲器。 也可以将器件顶端、底部和右侧的LVDS 管脚配置成伪LVDS 输出缓冲器,把两个单端输出缓冲器和一个电路板上的电阻网络一起使用,来支持LVDS、mini- LVDS 和RSDS

maccor的博客 3533

FPGA工程师面试——时序约束

同步电路的速度是指同步系统时钟的速度,同步时钟愈快,电路处理数据的时间间隔越短,电路在单位时间内处理的数据量就愈大。假设数据已被时钟打入D触发器,那么数据到达第一个触发器的Q输出端需要的延时时间是Tco,经过组合逻辑的延时时间为Tdelay,然后到达第二个触发器的D端,要希望时钟能在第二个触发器再次被稳定地打入触发器,则时钟的延迟必须大于Tco+Tdelay+Tsetup,也就是说最小的时钟周期Tmin =Tco+Tdelay+Tsetup,即最快的时钟频率Fmax =1/Tmin。Tpd为时钟的延时。

缘来远去 3883

FPGA时序分析与时序约束(五)——使用Timing Analyzer进行时序分析与约束

通过Quartu自带例程fir_filter进行学习如何使用Timing Analyzer进行时序分析与约束。

STATEABC的博客 5042

[转]FPGA设计-时序约束(中篇-实例分析)

原文地址:https://blog.youkuaiyun.com/u012176730/article/details/54426491 转载于:https://www.cnblogs.com/tubujia/p/11393074.html

ddk43521的博客 384

FPGA 静态时序分析与约束(2)

Quartus II时序约束工具简要操作项目简述时序约束步骤约束时钟创建输入时钟创建生成时钟约束自己分频的时钟输入延迟的约束输出延迟的约束设置时序例外设置多周期路径设置false路径操作小结总结 项目简述 这里提醒,在看这篇文章之前一定要先把前一篇时序约束的文章看完,前面一篇才是重点,这篇就是一些简单的工具使用。 我们前面的一篇博客已经讲解了FPGA内部、IO接口的延迟约束。对建立时间、保持时间进行了深入的讲解,并且通过几个例子让大家明白了input delay max、input delay min、ou

zhangningning1996的博客 4053

FPGA时序约束与分析

首先介绍时序约束相关的基本概念,然后从时钟,建立时间和保持时间等概念入手,详细地阐述时序分析理论中的基本时序路径;随后对主时钟约束、虚拟时钟约束、时钟特性约束、衍生时钟约束、输入输出接口约束、多周期约束、虚假路径约束、最大最小延时约束等进行介绍

wszwszwszqwer的博客 7324

FPGA之道(17)FPGA设计的时序分析

时序分析是形式化验证在FPGA领域中的一个非常好的应用典范,它和功能仿真环节一起,并称为FPGA基本开发流程中的验证双雄。对于大部分FPGA项目的开发来说,只要能够保证FPGA设计通过这两个环节的验证,那么项目成功的可能性就非常之大。

Reborn Lee 6409

时序分析、时序约束和时序收敛(1)--时序分析、时序约束和时序收敛分别都是什么?

什么是时序分析?什么是时序约束?什么又是时序收敛?

孤独的单刀 2万+

FPGA设计之时序约束

在FPGA的设计当中,时序约束的重要性不言而喻。这也是要做好FPGA设计必须掌握的一门基本功。但是我发现,很多初学者甚至有一两年设计经验的已经入门的工程师(包括本尊..汗),并不重视这一基本技能。 归根到底原因可能有以下几个方面:1.没有遇到问题,代码写完后编译通过了,板测功能实现就OK啦。2.感觉有点无从下手,没有很系统的资料,有些概念难以理解,公式又多,并且sdc文件里面的相关约束语法比较陌...

wenjia7803的博客 4534

ResourceOptimizer:基于FCO和DCO优化策略的DPP资源优化器

资源优化器 基于FCO和DCO优化策略的DPP资源优化器。 资源优化器组件的自定义实现,作为AuraEN应用程序的一部分,支持为数据管道中的服务计算成本优化的资源分配。 支持两种策略:不同资源和合同组合下的完全容量优化(FCO)和增量容量优化(DCO)。 所需输入:-所选实例类型的云定价。 -用于每种服务的所有实例类型的可持续QoS配置文件-2D数组的形式。 -端到端QoS约束。 -用于处理和接收服务的QoS阈值(基于所有服务的e2e QoS和QoS配置文件数据)。 构建:Maven构建Java项目。

FPGA设计-时序约束(上篇,理论篇)

最近都在做ARM的方面学习工作,感觉有必要记录下来之前FPGA的工作,好记性也不如烂笔头;说起FPGA,断断续续的也用过4,5年了,中间接触过DSP,就是因为没有记录文档资料,目前几乎快忘光了;FPGA方面的心得,将会由以下几个方面进行总结: 1.FPGA时序约束以及高速ADC约束实例 2.TDC进位延时链设计以及研究 3.TDC的精度以及自动校正算法的实现 STA:S

老王的博客 5万+

睿尔曼超轻量仿人机械臂--机械臂接口介绍

本文介绍了睿尔曼超轻量仿人机械臂的控制器接口及末端接口。

realman_Rop的博客 3433

RFSOC实战解析(一):深入RF Data Converter的时钟与数据接口设计

本文深入解析RFSOC中RF Data Converter的时钟与数据接口设计,涵盖GHz采样、数据流处理、时钟树同步及AXI-Stream接口实战。通过详细案例和调试技巧,帮助工程师高效配置IP核,优化ADC/DAC性能,解决跨时钟域和信号完整性等关键问题。

weixin_30955617的博客 473

FPGA静态时序分析与约束(四)、时序约束

前三章我们已经掌握了时序分析基本原理。但是,综合工具不知道我们的设计时钟频率是多大,我们想要的设计需求延时是多少,外部进来的时钟和数据之间的走线延时是多少,就没办法给出正确的时序报告以及违规路径。因此时序约束是必不可少的,只有正确的时序设计加上合理的时序约束,整个设计系统才能高效的运转。设计者根据实际的系统功能,通过时序约束的方式提出时序要求FPGA 编译工具根据设计者的时序要求,进行布局布线。

主要分享学习中的知识和遇到的问题 5837

RocketMq面板访问异常 com.alibaba.fastjson.JSONException: not close json text, token : string

rocketmq JSONException: not close json text, token : string 问题解决

qq_21067307的博客 5573

FPGA时序约束

FPGA时序设计概述时序约束相关概念发起沿和捕获沿时序路径常规时钟路径数据到达时间时钟到达时间数据需求时间(建立情况下)数据需求时间(保持情况下)建立时间的裕量保持时间的裕量时序分类时序约束语法创建时钟周期约束设置输入延时约束设置输出延时约束FPGA内部组合逻辑从输入端口到输出端口虚拟时钟设置多周期约束两倍时钟周期使能信号相同的时钟周期,目的时钟正向偏移相同的时钟周期,目的时钟负向偏移发端慢速,收端快速发端快速,收端慢速设置伪路径约束1. 组合逻辑中的伪路径2. 时序路径中的伪路径3. 跨时钟域中的伪路径

u013709322的博客 6180

激光雷达+相机标定避坑指南:手把手教你用KITTI数据完成坐标转换

本文详细介绍了激光雷达与相机标定的实战指南,利用KITTI数据集完成精准坐标转换。从数据准备、工具链搭建到标定矩阵加载与验证,再到坐标转换流水线的工程实现,提供了全面的避坑技巧和工程实践建议。特别强调了多传感器融合中的常见问题及解决方案,帮助开发者提升自动驾驶和机器人感知系统的环境感知精度。

book8的博客 834

Scratch(四十一):升级版垃圾分类

哈喽,大家好!之前给大家展示过“Scratch(二十四):垃圾分类”。今天呢,给大家展示的Scratch是`升级版垃圾分类`。接下来,我们一起看一下效果吧。

我可以很大侠的博客 6862
上一篇: 关于图像传感器图像质量的四大误区!你踩过几个坑?
下一篇: FPGA设计-时序约束(上篇,理论篇)
Hack电子
博客等级 码龄5年 1437粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值