用简单语言计算FPGA的时间限制

你好。本文是为FPGA领域的初学者编写的,他们还不知道STA(静态时序分析)是什么。在本文中,我将尝试尽可能简单,清晰地解释在FPGA项目上施加了哪些时序约束。



这篇文章是根据我自己的尝试向我自己,学生培训生和好奇的同事解释这个主题的经验而创建的,以免陷入繁华的学术丛林中,而是尽可能以日常语言简单透明地进行。我学会了使用FPGA进行工作,而无需学习和培训该主题,并且根据我自己的经验,我知道在没有该主题和电路原理的情况下理解某些东西是多么困难。对于有经验的育种者,以上内容是基本知识。但是对于某些四年级学生来说,本文将是有用的,并且将有助于理解所有这些松弛,设置和保持。



在本文中,我将使用术语,并将其英文版本复制在方括号中。这样做是因为尚未建立统一的术语,并且重复进行操作会更容易理解正在讨论的概念,并在必要时在英语来源中找到有关该概念的信息。



介绍



我将用简单概念的语言进行简短介绍。



为了使某些东西能够在FPGA中工作,您需要使用编程器和固件实用程序将固件文件加载(填充,缝制)到其中。固件文件是某些项目的CAD汇编的产品-带有文件的文件夹,每个文件都描述了项目的某些方面。在简单的情况下,用户本人仅描述带有源代码的文件,带有插脚的文件以及具有时间限制的文件。其余文件由CAD悄悄处理。在这个三合会中,只有时间限制文件在形式上可选的。项目的一部分。实际上,如果您的项目不包含高于30-50 MHz的频率,那么没有此文件很可能就能以某种方式工作。此选项适合于轻松创建第一个教育项目。但是,如果您的培训项目已经包含高时钟频率并且没有配备时间限制文件,那么很可能在FPGA内部某个地方,数据处理将被中断,您将无法找出项目中的哪一点。对于工作而不是学习,严格要求完整的限制说明。您有责任验证和验证项目的功能。



编译器将您的项目放置在FPGA芯片上,接收所有物理元素的连接文件。时序分析器使用连接文件来计算向FPGA传输数据的所有持续时间。这些持续时间不应无限长或太短。时间限制文件告诉分析仪这些持续时间应在哪个帧中。使用时间分析的结果,开发人员可以看到项目的哪个部分在时间上有裕度,因此在频率上有裕度,在哪里没有裕度。



同步系统同步中使用同步的时钟信号,这在行话中简称为数据处理工作的时钟从英国时钟... 运算的中间结果存储在寄存器中,这些寄存器能够在时钟信号边沿到达时记住输入状态,并将其保持在输出端直到下一个时钟周期。



因此,同步电路由寄存器间数据传输(RTL,寄存器传输逻辑,r2r传输)组成。时间分析的一个关键方面在于测量Slack松弛)。这个词的字面意思是“时间储备”,“下垂”,但是在俄语环境中,经常使用英语的描图纸-“松弛”。在寄存器间传输中,我们谈论的是预设的松弛Setup)和保持松弛Hold)。



寄存器间转移



通常情况下,寄存器间传输(图1)被认为是由两个顺序连接的寄存器组成的系统,这些寄存器在同步时钟上运行。在简单的情况下,切碎。一个寄存器扮演源(source)的角色,另一个担当数据接收者(目的地)的角色。并且在下一次寄存器间传送中,该接收者寄存器将已经被视为源,等等。在数据路径上的寄存器之间是一些用户定义的任意组合逻辑。它是异步的,因为它没有带有同步信号的存储元件(如寄存器)。这种逻辑就是这种行为,即用户使用其代码描述的那些逻辑操作。寄存器是用户在代码中为其命名并单独操作的那些一比特“变量”,或合并为向量和数组。



图片

数字: 1.从寄存器到寄存器的数据传输方案



与接收寄存器接收数据有两个概念:建立时间和保持时间间隔。它们概述了接收机输入端的信号必须稳定且相关的时间范围。稳定-本质上是指其电压应非常接近两个逻辑状态之一(“ 0”或“ 1”),并且在两个逻辑状态之间不晃来晃去,以免产生混淆。相关-表示此信息位应该与将捕获该信息的时钟的该时钟有意义地相关,而不是与前一个时钟相比的最新信息。



建立时间-预设时间,在时钟前到达之前,数据信号应已设置为稳定状态的最短时间。



保持时间-保持时间,即时钟前到达后,数据信号仍必须保持稳定状态的最短时间。



也就是说,接收器输入端的数据不仅必须在时钟前沿到达时,而且必须在其周围一定的保护时间间隔(图2)内保持稳定并且是最新的,且持续时间至少为Setup_time + Hold_time。如果在此间隔内满足数据稳定条件,则该寄存器肯定能够无误地捕获输入数据,否则,没有人保证不会出现故障。



图片

数字: 2.设置时间和保持时间作为寄存器时钟输入处捕获沿附近的保护间隔



设置时间和保持时间值由FPGA制造商严格定义。它们取决于晶体生产技术,并被认为是用于分析的常数,对于晶体中的每个寄存器而言都是相同的。无论如何,这些值不以任何方式取决于用户;它们的记帐仅是时间分析实用程序的任务。知道它们等于什么对我们来说并不重要,只知道它们存在并且不等于零对我们来说很重要。



时间分析的本质是计算项目中每对寄存器之间的松弛度,数据之间必须进行传输,以保证保护间隔期间数据必须稳定。在项目中有很多这样的r2r对,成千上万,甚至数百万,但是必须对它们中的每一个进行分析,以确保项目能够正常工作。



还有两个松弛部分,分别是“设置松弛”和“保持松弛”(图3)。



Setup Slack表征数据从稳定时刻到设置时间间隔开始的时间裕度。



Hold Slack表征了从保持时间间隔结束到数据失去稳定性所具有的时间裕度。



休闲裤一定是正面的。如果松弛为负,则不满足输入数据的稳定性条件,并且数据将跳动。余量越大-越好,但是您需要了解,在每个寄存器接收器上,其预设和保持余量都有一个共同的时间来表示两个。这意味着一个松弛的增加总是导致另一个松弛的减少。因此,最好的选择是当两个松弛都为正且彼此近似相等时。观察到松弛的平衡。



图片

数字:3.正松弛,满足成功接收数据的条件,但松弛之间没有平衡



松弛计算



现在让我们继续这些松弛的计算方法。让我们从安装松弛开始。

考虑图1中的数据传输方案。 4.



图片

图4.数据传输方案



这里我们介绍诸如触发前沿,捕获前沿,数据到达时间,数据等待时间和时钟到达时间等概念。



发射边的是,来到了源寄存器的输入端,并开始数据传输过程中的时钟的前部。



所述锁闩边缘是时钟前到达在接收寄存器中,迫使其抓取数据输入。数据到达



的时刻(数据到达时间)定义为数据实际到达接收寄存器的时间。



数据所需时间被定义为它的时间花费在数据上的目的地寄存器中的预先设定的时间之前到达目的地。时钟的到达时间



Clock Arrival Time)定义为捕获边沿从整个电路的时钟输入到接收器的时钟输入的通过时间。此外,捕获前沿是指发射前沿之后的下一前沿。发射前端将数据从源发送到接收方,并且在一个时钟周期后,捕获前端会在接收方侧捕获此数据。

整个电路的时钟输入被理解为一个单点,时钟从该点分流到在其上运行的所有寄存器。这通常是全局时钟缓冲器的输出或PLL的输出。在最原始的情况下,这是时钟发生器连接到的FPGA引脚。



根据设计轨迹和晶体温度,时间分析中涉及的术语可能不具有点值,而是一定范围的可能值。因此,分析了最差的松弛。即使在最差的情况下,数据交换仍然是积极的,也被认为是成功的。



数据到达的时刻与触发沿有何关系?



我们认为数据的到达是通过带有触发边沿触发的某个事件的寄存器的链通过。



起始沿出现在系统的时钟输入端,然后到达源寄存器的输入一段时间,然后在一段时间内触发该寄存器并将新数据发送到输出,然后该数据通过组合逻辑电路到达接收寄存器。考虑到数据传递的最差,最慢的变体,因此这些术语带有“ max”前缀。

最高d一种Ť一种一种[R[R一世v一种Ť一世Ë=大号一种üñCHËdGË+最高ŤC大号ķ+ŤCØ+最高Ťd



在此公式中,触发边沿的术语带有事件相对于之产生的参考点的含义,而不是某些以纳秒为单位的值。



术语最高ŤC大号ķ是触发边沿从整个电路的时钟输入到信号源的时钟输入所需的最长时间。通常,分析仪只需将时间范围从“完全不小于”到“完全不大于”,并将上限“绝对不大于”替换为该公式。此值独立于用户。编译器自行决定将寄存器放置在晶体上的位置,并考虑时钟传送到晶体所花费的时间。设计了时钟信号从全局时钟缓冲区传输到寄存器的连接网络,以便时钟信号在几乎相同的时间内到达任何寄存器。因此,实际上,最高ŤC大号ķŤC大号ķ很小,但仍要考虑在内。



术语ŤCØ-这是时钟到输出的时间,寄存器用于在时钟输入上看到前端以更改其输出上的数据。分析仪认为该值对于芯片上的所有寄存器均相等。此值独立于用户。



上学期最高Ťd是事件(数据)通过寄存器之间的组合逻辑的最长时间,该时间由用户定义。此值高度依赖于用户。它表示寄存器之间的组合逻辑量。反过来,组合逻辑的长链通常是用户编码不正确的结果。



切细到达接收者的那一刻更容易计算:

CØCķ一种[R[R一世v一种Ť一世Ë=大号一种ŤCHËdGË+ŤC大号ķ



这是捕获沿到达接收寄存器的时钟输入的最早时间。

术语ŤC大号ķ-这是捕获前沿到达接收者的时钟输入的最短时间,也就是说,类似于前面的公式,该时间“绝对不少于”。在这种情况下,破折号表示我们正在谈论接收方而不是源的时钟输入。



数据等待时间定义为在接收器寄存器上的预设时间之前数据到达接收器所花费的时间:

d一种Ť一种[RËqü一世[RËdŤ一世Ë=CØCķ一种[R[R一世v一种Ť一世Ë--Ť小号ü--C小号ü



术语 Ť小号ü-这是我们已知的设置时间,对于晶体上的每个寄存器来说,设置时间都相同。此时间与用户无关。



术语C小号ü时钟设置不确定性,预设时间不确定性。像CSU的时间分析中的任何其他不确定性一样,这不是物理过程,而是反映抖动在分析中的影响的一种方法,或者仅仅是一种在分析中引入保护时间的方法,以防万一。简而言之,这是考虑到困难过程的时间储备。



现在已经定义了这些术语,我们可以将预设的松弛定义为允许到达目的地的时间与实际花费的时间之间的最小差。

小号ËŤüp小号一种Cķ=d一种Ť一种[RËqü一世[RËdŤ一世Ë--最高d一种Ť一种一种[R[R一世v一种Ť一世Ë



现在让我们扩展这些术语并重新排列一下:

小号ËŤüp小号一种Cķ=大号一种ŤCHËdGË+ŤC大号ķ--Ť小号ü--C小号ü--

--大号一种üñCHËdGË+最高ŤC大号ķ+ŤCØ+最高Ťd

小号ËŤüp小号一种Cķ=大号一种ŤCHËdGË--大号一种üñCHËdGË--最高Ťd--

--C小号ü+ŤC大号ķ--最高ŤC大号ķ--Ť小号ü--ŤCØ

=PË[R一世Ød--最高Ťd--C小号ü+ŤC小号--Ť小号ü--ŤCØ



新术语出现在这里。

周期很清楚,这是时钟频率的周期,即 发射边缘和闩锁边缘之间的时间。

术语ŤC小号-这是时钟偏斜-一个时钟前到达时间从系统的时钟输入到不同同步寄存器的扩展时间的最小值。最小时钟扩展定义为到接收方的最小时钟延迟与到源的最大时钟延迟之间的差。ŤC小号=ŤC大号ķ--最高ŤC大号ķ...对于芯片上的不同寄存器,分析器在估算该时间方面没有任何区别。



这就是我们计算预设松弛度的方式。正边距是好的,负边距是不好的。松弛实际上就是下垂。因此,如果存在松弛,则没有将寄存器间传输配置为“ vnatyag”,条件“线程”会自由下垂。松弛为负-表示传输线程被拉断并断裂。



图5示出如何松弛公式可以图形方式表示:



图片

图5.设置松弛表达式的图形表示



这显示了时钟信号背景中的关系,这是系统时钟输入处的时钟信号,而不是任何寄存器的输入。



现在,以类似的方式计算保留余量



它也可以由其中术语已更改符号的表达式表示:

HØd小号一种Cķ=d一种Ť一种一种[R[R一世v一种Ť一世Ë--最高d一种Ť一种[RËqü一世[RËdŤ一世Ë



现在从另一面考虑这些术语。

d一种Ť一种一种[R[R一世v一种Ť一世Ë=大号一种üñCHËdGË+ŤC大号ķ+ŤCØ+Ťd



现在,此处考虑了最快的数据传递方式,其中“最大”为“最小”。



凝块前端到达的时刻也以不同的方式被查看,这是最新的可能:

最高CØCķ一种[R[R一世v一种Ť一世Ë=大号一种ŤCHËdGË+最高ŤC大号ķ



重要的是要注意,在“保持松弛”的情况下,“发射边缘”和“闩锁边缘”前沿现在是相同的前沿,而不是两个不同的前沿被时钟周期隔开。在这种情况下,接收者寄存器需要有时间在时钟前到达的保持时间内将数据保留在输入中。但是,数据在同一输入端被更改为输入,该输入位于源寄存器的其他位置。因此,在保留松弛分析中,差异为大号一种ŤCHËdGË--大号一种üñCHËdGË等于零,不是周期。



在这种情况下,所需时间定义为以下时间:在该时间段内,不应在接收方的数据输入中更改数据,以免捕获保留时间:

最高d一种Ť一种[RËqü一世[RËdŤ一世Ë=最高CØCķ一种[R[R一世v一种Ť一世Ë+ŤH+CHü



术语 ŤH-我们已经知道了保持时间,保持时间。芯片上的每个寄存器都被认为是相同的,并不取决于用户。

术语CHü时钟保持不确定性,保持时间的不确定性。它通常具有与CSU相同的含义,并且通常被认为与CSU相同。



如果像预设松弛一样,扩展术语并交换它们,则保留松弛表达式可以转换为以下形式:

HØd小号一种Cķ=Ťd--最高ŤC小号+ŤCØ--ŤH--CHü

最高ŤC小号=最高ŤC大号ķ--ŤC大号ķ





再看这个公式



以上,提出了一种计算松弛的方法,这是人类对所发生过程的理解的特征。这里“前台即将来临……”,“数据即将来临……”。如果您有兴趣,作为补充,我将告诉您时间约束分析器如何想象这些计算。



分析器会根据其机器原因对术语进行不同的分组。但最后还是得出了相同的结果。

它使用术语“时钟建立关系”SR)和“时钟保持关系”HR)-可以分别转换为预置和保持的触发沿之间的时间比率。

小号[R=小号ËŤüp大号一种ŤCHËdGË--小号ËŤüp大号一种üñCHËdGË--C小号ü

H[R=HØd大号一种ŤCHËdGË--HØd大号一种üñCHËdGË+CHü



图6示出了如何将这些方面是相关的:



图片

6.在松弛计算中使用的前沿。



您可以立即将结果表达式转换为更易于理解的形式:

小号[R=PË[R一世Ød--C小号ü

H[R=CHü



最长的寄存器间时间(要求最大r2r)是在预设时间间隔开始之前数据可到达目的地的最长时间:

大号一种[RGËsŤ [R2[R [RËqü一世[RËd=小号[R+ŤC小号--ŤCØ--Ť小号ü



最长的寄存器间延迟(最长的r2r延迟)是沿最长路径将数据从源寄存器传输到目标寄存器所花费的时间:

大号ØñGËsŤ [R2[R dË一种ÿ=最高Ťd



现在,我们可以将预设的松弛定义为到达目标寄存器的时间与到达目标寄存器的实际时间之间的差:

小号ËŤüp小号一种Cķ=大号一种[RGËsŤ [R2[R [RËqü一世[RËd--大号ØñGËsŤ [R2[R dË一种ÿ



扩展此公式的术语将使我们熟悉预设的松弛度:

小号ËŤüp小号一种Cķ=PË[R一世Ød--最高Ťd--C小号ü+ŤC小号--Ť小号ü--ŤCØ



现在讨论保留时间的松弛。r2r的最小要求是将数据保留在目标寄存器的输入处所需的时间:

小号一种ËsŤ [R2[R [RËqü一世[RËd=H[R+最高ŤC小号--ŤCØ+ŤH



寄存器间最短延迟:

小号HØ[RŤËsŤ [R2[R dË一种ÿ=Ťd



现在,我们将预设的松弛定义为数据离开接收器输入的最快时间与保持接收器输入所需的时间之间的差:

HØd小号一种Cķ=小号HØ[RŤËsŤ [R2[R dË一种ÿ--小号一种ËsŤ [R2[R [RËqü一世[RËd



扩展术语时,该表达式还采用已经熟悉的形式:

HØd小号一种Cķ=Ťd--最高ŤC小号+ŤCØ--ŤH--CHü



从无聊的公式中可以得出什么结论?



我们已经看到了松弛是如何计算的。如何使用这些知识?

让我们再次看一下松弛表达式:

小号ËŤüp小号一种Cķ=PË[R一世Ød--最高Ťd--C小号ü+ŤC小号--Ť小号ü--ŤCØ

HØd小号一种Cķ=Ťd--最高ŤC小号+ŤCØ--ŤH--CHü



如果项目的某些懈怠变得负面,那么我们可以通过更改其条款来改变它们。也就是说,我们看到了如何解决不良的问题。



我们看到的术语并不取决于用户,而仅取决于晶体技术。Ť小号üŤHŤC小号ŤCØ... 没有办法进行干预。

我们看到了CSU和CHU术语,分析仪通常将其与CU参数相等-时钟不确定度,时钟频率不稳定。一般来说,此参数很小,几十皮秒。它由用户在限制文件中指定。而用户又从时钟发生器的规格中获取了它。可以认为时钟缓冲器或内部FPGA PLL从振荡器接收外部时钟并将其转换为系统时钟输入的内部时钟,从而使CU值与从振荡器接收的CU相同。如果未指定CU,则分析仪会将其设置为某个默认值,例如,Quartus将其设置为20 ps。在一般情况下,该术语告诉我们,最好使用时钟不稳定度很小的高度稳定的振荡器。好的振荡器约为20-60 ps。



周期项表明,应对数据传输错误定向的明显方法是降低时钟频率。这是合理的,但并不总是可以接受的,因为职权范围通常需要一定的系统性能,在此水平以下是不可能的。而性能直接取决于时钟速度。我们还可以看到预设和保持松弛之间的差异-保持松弛与频率无关。



最后,这个词Ťd本质上表征了编写代码的效率。因此,解决松弛问题主要方法是正确重写它。重要时刻Ťd出现在需要太多组合逻辑的过于复杂的硬件设计中。如果您的项目中出现了这种复杂的构造,那么解决问题的经典方法是将一个复杂的r2r传输拆分为几个简单的传输,然后在操作序列中插入另一个1-2个寄存器。在这种情况下,操作的循环延迟将增加,但是操作速度将增加。例如,在一个时钟周期内添加多个向量不是一个好主意。最好将多个向量一一相加,并加上中间和。将一些复杂的结构分解成几个简单的结构可能是不可能的-然后需要以根本不同的某种方式重写这种逻辑。



结论



本文的重点是了解松弛概念的存在以及该松弛在物理上取决于什么。知道了这一点,您就可以独立研究时间约束分析器的报告,得出结论并调试项目的性能。这些公式使您几乎不必进行真正的计算。您甚至不需要记住它们。掌握寄存器间转移中发生的逻辑并了解决定项目速度的因素仅是重要的。



All Articles