通过上一节,我们了解了FPGA内部数据的传输形式,接下来我们就可以根据上一节的内容来总结一下FPGA内部的数据传输模型了。
时钟和数据传输路径通过上一节内容中,我绘制的那个FPGA内部数据在逻辑单元间的传输模型,我们可以提取归纳出一个通用的FPGA内部信号传输模型,如下图所示:
根据上图,可以概括出以下几个关键点:
1、 数据总是从一个D触发器(REG1)传到另一个D触发器(REG2),我们称数据发出D 触发器为源寄存器,数据接收D触发器为目的寄存器
2、 数据在传输过程中,可能参与多次组合逻辑变换
3、 数据在传输过程中,需要经过可编程互联线传递
4、 分析信号在两个寄存器之间的传递时,需要保证这两个寄存器的时钟信号是同源时钟。
针对第四点,需要补充的是,虽然通过上图可以看到,源寄存器和目的寄存器的时钟为同一个,那为啥要说是同源时钟,不说同一个时钟呢。其实,相信很多人也都知道,在实际使用中,有可能两个寄存器的工作时钟信号并非同一个。典型的例如一个PLL输出的两个时钟分别作为目的寄存器和源寄存器的时钟,这种情况下看似时钟不同,但是实际上在分析时,起点都是从PLL的时钟输入端开始,而从时钟输入到PLL的两个输出时间会算入时钟路径,因此本质上还是同一个时钟,所以上面说的是要求两个时钟是同源即可。
D触发器基本概念好了,到此为止,我们已经引出了FPGA时序分析的基本模型,接下来,就有必要聊聊,这个模型里面的哪些内容和参数会影响到我们的设计质量。
在正式讲解这个模型之前,我们还是先来回顾一下什么是D触发器,下图为一个D触发器的典型符号图。
D触发器概念:
1. D触发器是一个具有记忆功能的,具有两个稳定状态的信息存储器件,是构成多种时序电路的最基本逻辑单元,也是数字逻辑电路中一种重要的单元电路。
2. D触发器在数字系统和计算机中有着广泛的应用。触发器具有两个稳定状态,即"0"和"1",在一定的外界信号作用下,可以从一个稳定状态翻转到另一个稳定状态。
3. D触发器在CP(时钟脉冲)的前沿(正跳变0→1)发生翻转,触发器的次态取决于CK的脉冲上升沿到来之前D端的状态,即次态=D。因此,它具有置0、置1两种功能。由于在CK=1期间电路具有维持阻塞作用,所以在CK=1期间,D端的数据状态变化,不会影响触发器的输出状态。
在上面的介绍中,我们需要提取出以下几个关键信息:
1、 D触发器具有2个稳定状态“0”和“1”,在时钟(CK)的上升沿,D端的数据被更新到Q端。
2、 在时钟的高电平期间,D端的数据变化。Q端的数据不会跟着变化。
针对第一条信息,我们可以知道D触发器在时钟的上升沿时将D端的数据存起来,所以,要想保证D端的数据能被正确的存起来,需要确保D端的数据在时钟上升沿时刻是稳定的,不能处于变化时期。假如在时钟上升沿的那个点,刚好D端的数据也在变化,那就真的不知道存储起来的究竟是0还是1和。而且,理想的D触发器,我们认为时钟信号从0到1的变化所需时间无限短,那么这个上升沿时间究竟是多长呢?理想的时钟上升沿可以被认为是从0到1这个变化的过程所需的时间是无限短的,但是实际在电路中,这个变化还是需要一定的时间的,不可能无限短。而且D触发器也不是真的就只需要在时钟上升沿的那一个时间点需要D端的数据是稳定即可,从实际的器件工作情况来看,任何一个D触发器要想在时钟的上升沿将D端的数据寄存并输出到Q端,有2个关键的时间参数需要保证。
建立时间,保持时间,输出延迟为了更加直观的说明这个问题,还是先画一张图说明。
对于实际的D触发器来说,为了保证在时钟的上升沿能够正确的将D端的数据寄存并输出到Q端,需要满足以下两点:
1. D端的数据必须在时钟上升沿到来之前的一定时间内就已经保持稳定,该时间被称为D触发器的建立时间(Tsu)
2. D端的数据必须在时钟上升沿到来之后的一定时间内继续保持稳定,该时间被称为D触发器的保持时间(Th)
如果不能同时满足上述两个条件,那么D端的数据就可能无法正确的被寄存并输出至Q端。
同时,对于D触发器来说,D端的数据也不可能会在时钟上升沿出现的那一刻就立即更新到Q端,从时钟的上升沿到D端的数据稳定出现在Q端,也有一个时间,该时间称为寄存器的时钟到输出延迟(Tco)
为了防止有人钻牛角尖问为啥会是这样的情况,这里统一回复:这就是D触发器的实际电路结构决定的,你也可以认为是通过测量手段测量出来的经验值。而且,从更深次的来说,如果D触发器没有这个特性,而是真正理想的特性,那么D触发器将没有存在的意义。
FPGA内数据传输典型时序好了,通过上面的介绍,相信大家已经对D触发器的工作特性有了一个了解了。那么接下来,我们就继续来看,在FPGA中,信号从一个寄存器传到另一个寄存器时,其典型时序是哪样的。
下图就是Altera的手册中FPGA典型的数据从寄存器到寄存器的传输时序图。
按照惯例首先我们还是对该图进行分析,提取出几个我们应该关心的问题。
首先看时钟,上图中可以看到,两个寄存器的时钟脚都是连在一起的,且来自同一个外部Pin,只是,从外部pin到寄存器1(REG1)和寄存器2(REG2)的时钟端口,中间都是有一段路要走的。既然要走一段路,就必然需要花费时间,所以图中也可以看到,从外部pin到寄存器1(REG1)的时间被标记为了Tclk1,同样的,从外部pin到寄存器2(REG2)的时间被标记为了Tclk2,这两个时间都是真实存在的,且并不一定相等。
可能到这里,有些同学就要质疑了,不是说FPGA的时钟信号,如果走全局时钟网络,那么到达每一个寄存器的时间都是几乎一样的吗?其实,这种说法是不严谨的,全局时钟网络也不能保证该时钟到达每个寄存器的时钟脚的延迟都是严格一样的,只能保证到达各个寄存器的延迟都尽量的小,且时钟质量尽量的高。至于到达每个寄存器的延迟,肯定是存在,且没有任何一个地方能够保证是完全相同的,只是说可能差距不大。既然现在是在分析微观的信号传输,所以这些微小的差距也都是需要考虑的。
其次看数据传输路径,一开始,数据存在于REG1的D端口上,当时钟上升沿到达REG1时,经过Tco时间,D端数据才会到达REG1的Q端。
最后,REG1的Q端的数据还需要经过FPGA内部的可编程连线,还有可能需要参与各种逻辑运算,才能到达目标寄存器,也就是REG2的D端,在从REG1的Q端传到REG2的D端过程中经过的各种连线和组合逻辑功能,也都是需要耗费时间的,这些时间在分析时统称为组合逻辑延迟,标记为Tdata。
那么,在这样的传输模型中,这些参数又将怎样影响我们的设计呢?为了不让大家越看越迷糊,这里先按照笔者平常调试工程时候的感觉,使用典型值做一个假设的情形。
假设:
a) CLK信号的频率为200MHz,既周期为5ns
b) REG1的Tco时间为0.5ns
c) REG1的Q端到REG2的D端,组合路径延迟Tdata为6ns
d) REG2的建立时间Tsu为0.8ns
那么这个设计,能够保证REG2正确的接收REG1发出的数据吗?
“不能”,可能马上就会有人脱口喊出这个答案。理由为:
1. 从时钟到达REG1的时钟端口,到REG1的D端数据能够出现在Q端,首先要经过寄存器输出延迟Tco,
2. 然后数据再从REG1的Q端传到REG2的D端需要经过组合逻辑延迟Tdata,
3. 再然后,前面已经说了,要想REG2能够在时钟上升沿时寄存D端口上的数据,需要数据在时钟上升沿到来之前最少Tsu时间就稳定下来,
4. 而根据上述假设,Tco + Tdata + Tsu的时间为7.3ns,已经远远超过了一个时钟周期5ns,也就是说,当时钟上升沿到达REG2的时钟端口时,数据还没有就绪,所以无法被正常接收”。
上述回答有理有据,貌似很正确,不瞒大家说,我在很长一段时间内,也是这样认为的。但是,上述分析却忽略了关键的一点,那就是时钟信号传输也是有延时的。接下来,我们把上述假设完善一下:假设时钟信号从外部pin传输到REG1的时钟端需要1ns,而传输到REG2时钟端需要3.5ns,那么这个时候,这个设计能够保证REG2正确接收REG1发出的数据吗?
答案是肯定的,此种情况下,REG2就能正确接收REG1发出的数据了,因为真实的传输路径中,不仅有数据传输延迟,还有时钟延迟,而时钟延迟,又是大家在分析时候非常容易忽略的一类。毕竟大家在刚开始学习FPGA的时候,一直潜移默化的认为,时钟信号到达所有寄存器的时间都是一样的。所以,在这里,通过这样一种打脸的方式,希望大家能够纠正这种错误的认识,在分析信号传输的时候,不仅要分析数据传输延迟,还要分析时钟传输延迟。
好了,借着强调时钟延迟重要性的便道,又凑了大半页篇幅。接下来,我们终于可以用最有说服力的波形说话了。
上图很好的展示了我们前面分析的模型中各个节点的时序波形。
l CLK认为是时钟输入脚输入的时钟信号。
l REG1.CLK为CLK到达REG1的波形,相对于CLK,有一个延迟,设为Tclk1。
l REG1.Q为REG1的输出端数据值,从REG1.CLK上升沿到来,到其值更新并稳定下来,存在一定的延迟,该延迟值名为Tco。
l REG2.D为REG2的输入端D端口上的数据波形,该信号由REG1.Q经过组合逻辑和内部连线传递后到达,因此REG1.Q到达REG2.D这个时间是数据传输时间,为Tdata。
l RERG2.CLK是CLK到达REG2的波形,相对于CLK,有一个延迟,设为Tclk2。
好了,到此时,相信又有人要问了,嗯,不错,你说的我都明白了,那么,然后呢,你说的这一些,与我的设计和约束有什么关系呢?难道我需要用你这个图来指导我约束?我要约束什么呀?这个嘛,说来话长。欲知后事如何,且听下回扯淡。
作者: 小梅哥., 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-452191.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
用户80 2019-10-9 23:03
elechi_989135129 2019-9-10 14:09
小梅哥. 2019-9-7 20:30
curton 2019-9-5 21:15
dmm8 2019-9-5 08:43