fpga时序相关概念与理解

一、基本概念理解

对于数字系统而言,建立时间(setup time)和保持时间(hold time)是数字电路时序的基础。数字电路系统的稳定性,基本取决于时序是否满足建立时间和保持时间。

建立时间Tsu:触发器的时钟信号触发沿到来以前,数据要维持稳定不变的时间。如果D进入Tsu后仍然变化(如图1),就不满足建立时间,可能出现亚稳态。

保持时间Th:触发器的时钟信号触发沿到来以后,数据要维持稳定不变的时间。如果D进入Th后仍然变化(如图1),就不满足保持时间,可能出现亚稳态。

输出时间Tco:触发器的时钟信号触发沿 到 数据从D稳定输出到Q所需时间。

建立时间裕量setup slack:D数据变化已稳定到Tsu之前。

保持时间裕量hold slack:Th之后到D变化之前。

同步信号:和时钟信号有关,实际上输入信号和时钟信号进行了与运算或与非运算,输入信号和时钟信号的运算结果为有效状态时,器件的状态才会改变。

异步信号:信号和时钟信号无关,输入信号变为有效状态时,器件的状态就会立即改变;

恢复时间(Recovery Time):指异步控制信号在"下个时钟沿"来临之前变无效的最小时间长度。如果保证不了这个最小恢复时间,也就是说这个异步控制信号的解除与"下个时钟沿"离得太近,没有给寄存器留有足够时间来恢复至正常状态,就不能保证"下个时钟沿"能正常作用,也就是说这个"时钟沿"可能会失效。

去除时间( Removal Time : 是指异步控制信号在"有效时钟沿"之后变无效的最小时间长度。 这个时间的意义是,如果保证不了这个去除时间,也就是说这个异步控制信号的解除与"有效时钟沿"离得太近,那么就不能保证这个"有效时钟沿"能正常作用,也就是说这个"有效时钟沿"可能会失效。

FAN-OUT:某信号扇出值,即驱动几个寄存器。

FPGA组成:

①可编程输入/输出单元:可配置不同阻抗特性,电流大小等。

②基本可编程逻辑单元:由查找表(LUT用于组合逻辑)与寄存器(Register用于时序逻辑)。

③嵌入式块RAM:FPGA内嵌的RAM,可配置为单端口/双端口RAM,FIFO等。(FPGA还可外挂ram芯片等)。

④布线资源:全局专用布线资源(全局时钟/全局复位)、长线资源(长度、驱动能力仅次于全局资源,可用于高速信号)、短线资源(用于基本的逻辑单元连线)。

⑤底层嵌入功能单元:不固定。

⑥内嵌专用硬核:

FPGA同源时钟:源寄存器和目的寄存器应用同源时钟驱动,同源指源头是同一个时钟,相位差相同(比如由同个PLL输出的俩时钟)。

阻塞:触发器由时钟触发,在时钟触发沿到来之前,输出值不会因为输入值改变,输入值被阻塞,即电路具有维持阻塞作用。(由此理解阻塞赋值与非阻塞赋值,非阻塞即组合逻辑)使用时序逻辑替代组合逻辑可以提高时序性能。

FPGA实现可编程:通过查找表LUT(由与或非等逻辑组成的特定逻辑表达式(真值表))实现任意组合逻辑;通过D触发器与时钟实现时序逻辑。FPGA架构如下图。

一个LUT里面可以实现各种组合逻辑,与、或、非门等,LUT 里面实际有16个1bit 的基于 SRAM 结构的存储器,能够对应 a、b、c、d 四个输入的逻辑组合的所有可能, Quartus 通过向这16bit的存储器里写入不同的初始值,就能使abcd 四个输入在不同的状态下输出不同的逻辑结果,从而实现使用一个LUT实现各种组合逻辑的功能。

最高运行时钟频率Fmax:在保证设计时序收敛的情况下,将时钟沿提前Tslack(最小建立时序余量)时间后得到的新时钟的周期,即最小时钟周期,对应最高运行时钟频率。即一个系统最高能跑多少兆而不出错(时序报告看)。

Slow 1200mV 85C Model:芯片内核供电电压 1200mV,工作温度85度情况下的慢速传输模型。

Slow 1200mV 0C Model:芯片内核供电电压 1200mV,工作温度0度情况下的慢速传输模型。

Fast 1200mV 0C Model:芯片内核供电电压 1200mV,工作温度0度情况下的快速传输模型。

时序分析的对象是网表模型。网表就是 Quartus 软件经过编译,布局布线后得到的实际适配某一个特定型号芯片的电路信息,该电路信息就是对应下载到芯 片中后实际在芯片中呈现的电路。

二、FPGA内部约束条件公式推导

触发器-触发器 / 外部器件-FPGA 的数据传输,示意图:

Comb为组合逻辑时延,pcb为pcb板走线时延

1.建立时间约束条件:

(即满足建立时间数据是稳定的)

Tco + Tcomb+ Tsu <= Tclk + Tskew(时钟偏移)

即:Tco + Tcomb <= Tclk + Tskew(时钟偏移)- Tsu

由此可知满足建立时间约束条件的Tclk最小值为:

Tclk(min) = Tco + Tcomb + Tsu - Tskew(时钟偏移)

则最高时钟频率为: F(max) = 1 / Tclk(min)

2.保持时间约束条件:

(即满足保持时间数据是稳定的)

Tco + Tcomb >= Th + Tskew(时钟偏移)

3.建立时间约束与保持时间约束联立:

Th + Tskew(时钟偏移)<= Tco + Tcomb <= Tclk + Tskew(时钟偏移)- Tsu

具体电路具体分析,反正就根据给出的时序图和参数,按照建立时间与保持时间的定义来解,保证没有亚稳态。即前一级输出到寄存器的时间 不能进入当前级的建立时间;当前级的保持时间不能超过当前级输出到下一级的时间。

三、题目

总结:求解电路的Tsu和Th,从电路的内部寄存器出发,假设裕量为0,从内层往外层推导。

四、IO延时约束

IO约束确保外部器件输入到FPGA时满足FPGA输入寄存器的建立时间和保持时间;确保FPGA输出到外部器件时满足外部器件的建立时间和保持时间。

1.输入最大最小延时

输入延时: 外部器件发出数据到FPGA输入端口的时间。(定义)

表达式:Tin = Tco + Tpcb -- Tskew(这里Tskew为什么是-,可以从上面的建立时间约束公式理解)

其中,Tco 为外部器件发出数据的时间,Tpcb为PCB板级走线的延时时间,Tskew为两个器件的时钟边沿延时时间。

根据表达式和器件物理特性可以确定:

最大输入延时:Tin(max) = Tco(max) + Tpcb(max) -- Tskew(min)

最小输入延时:Tin(min) = Tco(min) + Tpcb(min) -- Tskew(max)

故需估算Tco、Tpcb、Tskew。

从而对FPGA的IO口进行最大最小延时约束,优化从输入端口到第一级寄存器的路径延迟保证系统时钟可靠采集到从外部来的信号

2.输出最大最小延时

输出延时:FPGA输出数据后到达外部器件的延时时间。(定义)

最大输出时延:Tout max = Tpcb(max) + Tsu -- Tskew(min)

其中,Tpcb为PCB板级走线的延时时间,Tskew为两个器件的时钟边沿延时时间,Tsu为外部器件的建立时间。

最小输出时延:Tout min = Tpcb(min) - Th -- Tskew(max)

其中,Tpcb为PCB板级走线的延时时间,Tskew为两个器件的时钟边沿延时时间,Tsu为外部器件的保持时间。

约束最大输出延时是为了约束IO口输出,防止输出过慢 ,使外部器件的数据建立时间裕量为负;约束最小输出延时,是为了约束IO口输出,使IO口输出一个最小延时值,防止输出过快,破坏了外部器件上一个时钟周期的数据保持时间,导致保持时间裕量为负。

即通知编译器FPGA的Ftco最大最小值,根据这个值去综合。

对于一些参数:

PLL产生时钟信号到源寄存器的时钟延时,即使是走全局时钟网路这一延时虽小但是必然存在。 值不知道,但是TimeQuest Timing Analyzer软件可以知道,EDA软件可以一定程度控制其值大小

Tco,值不知道,但这是一个固有的物理参数,其值TTA,EDA软件也知道

数据从寄存器Q端口产生后,到达IO口,在FPGA内部传输所花费的时间。值不知道,但是TTA软件可以知道,EDA软件可以一定程度控制其值大小

在PCB走线传输花费的时间。(可以计算的,5555mil/ns,看器件)

输出时钟到达FPGA引脚的延时,值不知道,但是TTA软件可以知道,EDA软件可以一定程度控制其值大小

输出时钟到达外部器件的走线延时,(可以计算的,5555mil/ns,看器件)

五、时序约束

作用:

1.提高设计的工作频率;告知EDA软件我们的时序标准。指示布局布线器在诸多路径中选择正确的方式,减少时延,保证编译结果能够尽可能稳定运行在你指定的时钟频率下。

2.作为静态时序分析工具的判断标准,提供正确的时序分析报告。

Clock transfer:跨时钟域传输

在高速系统中,时序约束包括:

1.内部时钟约束

2.IO时序约束

3.时序例外约束

才能实现时序收敛

需要特别指出的一点是:由于时序分析是针对时钟驱动的电路进行的,所以分析的对象一定是"寄存器-寄存器"对。在分析涉及到I/O 的时序关系对时,看似缺少一个寄存器分析对象,构不成"寄存器-寄存器" 对,其实是穿过FPGA 的I/O 引脚,在FPGA 外部虚拟了一个寄存器作为分析对象。

对于源寄存器和目的寄存器中有一个不在 FPGA 内部的情况下,单纯约束 FPGA的时钟是无法让 EDA 软件对这样的路径进行分析。

做时钟约束主要就是告诉EDA软件输入的时钟信号的频率。

IO约束就是通过告知 EDA 软件一些IO传输路径中的已知时间参数,来让 EDA 软件编译并控制 FPGA 内部的各个路径传输延迟,使得总的路径能够满足建立时间余量为正的目的。

1.内部时钟约束

在代码里,时钟信号你写input CLK_50M,你知道这是50Mhz的时钟,但EDA软件如quartus它不知道,只知道这是个时钟端口,它会根据时钟信号进行时序分析后,生成电路网表,不同的时钟信号会生成不同的优化电路网表。如果不进行时钟约束,EDA软件会自动分配一个时钟信号,编译后可以查看Clocks选项看该信号,频率不一定是我们想要的,所以需要进行时钟约束,告诉EDA软件这个时钟信号的频率,指导其布局布线。

时钟约束步骤:使用timing analyzer,依照timiequest timing analyzer文件进行即可。

2.IO时序约束

IO口约束针对最大最小输入时延和最大最小输出时延,可以在constraint-set input delay 以及 set output delay 中设置。

IO时序分析分为系统同步和源同步两种。

系统同步:基于同一时钟源进行系统同步,器件间的传输延时无法确定,不能进行高速数据的传输。

源同步:源同步输出的信号有时钟和数据信号,输出时钟由FPGA产生,有多种输出方式,如:锁相环;ALTDDIO IP核;状态机;驱动数据的时钟。

2.时序例外约束

2.1伪路径例外:伪路径表示该路径实际存在,但该路径的电路功能无须考虑时序约束。通过定义伪路径,通知vivado等FPGA开发软件无需对这些路径进行时序优化布线。这样FPGA开发软件就会自动跳过这部分路径的优化,可以减少综合布线的优化时间。使用伪路径命令可以有效地减少时序分析的复杂度,同时提高系统性能和可靠性。

六、提高Fmax

影响Fmax的是寄存器到寄存器传输路径中延迟最大(对应的建立时间余量最小)的那一条path,保证目的寄存器能够正确接收数据,所能够运行的时钟信号的最大频率。

1.找最坏路径:在综合报告中,Timequest timing analyzer -> slow 1200mv 85c mode->worst-case timing paths,点击Setup:,就能在slack这一列看到建立时间余量的排序。这个余量以你约束的launch clock时钟作为参考。可以根据这个余量来提升你的工作时钟频率从而提高系统性能。正的表示在参考时钟频率下还有建立时间余量,负的表示无余量,系统Fmax达不到你要的频率。

2.点击最坏路径的To node 的一个信号,右键找到locate->locate in design file。找到该信号的设计逻辑起点与终点,分析设计中是否引入了多层组合逻辑,针对优化。

3.优化的方法可以为:插入寄存器大法。在多层组合逻辑中间插入触发器(即时序逻辑),将原本较长的组合逻辑链路路径切割为了两段较短的组合逻辑路径,便可减小传输延迟。这会带来一个时钟周期的延迟。

4.优化后重新编译,可能性能只提升一点点,因为也许之前的关键路径解决了,但是马上又会有新的路径成为关键路径,需要再对新的关键路径进行分析,直到最后满足设计需求或者再也无法优化。

七、芯片版图

由多个逻辑阵列块组成(Logic Array Block,LAB),浅色为未使用资源,深色为已使用资源,黑色区域为一些固定功能的资源或没有资源,用户不可对其进行任意配置。

(1)逻辑阵列块(Logic Array Block,LAB):每个LAB由16个LE(Logic Element)组成。

(2)逻辑单元(Logic Element,LE):每个LE由一个寄存器和一个查找表组成。

内部结构:

由查找表、寄存器、进位链、数据选择器组成。查找表大部分采用SRAM工艺,即存储真值表,实现组合逻辑;寄存器可配置成触发器、锁存器、同步/异步复位等模式;进位链方便加法器实现。

锁相环:PLL 的时钟输入可以是PLL 所在的 Bank 的时钟输入管脚或者其他 PLL 的输出,FPGA 内部产生的信号不能驱动PLL。

时序分析时可以通过在data path页面右击选择locate到chip planner,从而在芯片版图上看路径连线等情况。

相关推荐
电工小王(全国可飞)1 小时前
STM32 HAL库 CAN过滤器配置
stm32·单片机·嵌入式硬件
四夕白告木贞2 小时前
stm32week6
stm32·单片机·嵌入式硬件·学习
zhongvv2 小时前
OTP单片机调试工具之—应广单片机ADC调试案例
嵌入式硬件·应广单片机·adc采样·otp调试·串口数据显示
小雀丝2 小时前
电机控制常见面试问题(六)
嵌入式硬件·电机·电机控制
爱写代码的雨一颗4 小时前
STM32-SPI通信外设
stm32·单片机·嵌入式硬件
Python小老六4 小时前
软件IIC和硬件IIC的主要区别,用标准库举例!
stm32·单片机·嵌入式硬件
honey ball5 小时前
一些优秀的硬件方案及芯片
单片机·嵌入式硬件
DOMINICHZL8 小时前
卡尔曼滤波算法从理论到实践:在STM32中的嵌入式实现
stm32·嵌入式硬件·算法
无际单片机编程8 小时前
单片机OTA升级中Bootloader怎么判断APP有没有问题?
java·stm32·单片机·嵌入式硬件·嵌入式
代码总长两年半8 小时前
STM32---FreeRTOS消息队列
stm32·单片机·嵌入式硬件