加油站| FPGA时序分析看这篇就够了(大疆逻辑岗)
达尔闻加油站,充分利用你的碎片时间涨知识。
本期加油站解析题目来源大疆逻辑岗,共2道选择题,涉及如何进行时序分析、及Cache-主存-辅存三级存储系统中各级存储器的作用。
4、假设时钟周期为T,寄存器时钟端到数据输出端的延迟为Tcq,时钟到第一级寄存器的时钟端的延迟为Tcd1,时钟到第二级寄存器时钟端的延迟为Tcd2,两级寄存器之间的组合逻辑延迟为Tpd,寄存器的建立时间为Tsetup,Tpd的最大延迟为( )。(大疆FPGA逻辑岗B卷)
A Tpd ≤ T - Tsetup - Tcq -(Tcd2 - Tcd1)
B Tpd ≤ T - Tsetup + Tcq -(Tcd2 - Tcd1)
C Tpd ≤ T - Tsetup + Tcq -(Tcd1 - Tcd2)
D Tpd ≤ T - Tsetup - Tcq -(Tcd1 - Tcd2)
解析:本题目主要考察了时序分析的公式计算
时序分析在FPGA规范的设计中是必要的,在FPGA高速系统的设计中更是必不可少,否则就会出现RTL逻辑仿真完全正确,而在下板验证时就会因为时序不满足要求而使整个系统不能正常工作。在数字IC的设计中时序分析更是非常重要的一环。
时序分析的方法主要有两种,一种是静态时序分析,另一种是动态时序分析。静态时序分析是通过设计好电路中的已知参数,利用EDA工具提供的模型分析出时钟和数据的关系。而动态时序分析是把设计好电路中的所有延时都考虑进来,在EDA仿真工具中把延时参数都加上,然后观察仿真的波形并测量Ts(建立时间:采样时钟的上升沿到达数据起始位置的时间,本题为Tsetup)、Th(保持时间:采样时钟的上升沿到达数据结束位置的时间)是否满足时序的要求,需要电路模拟跑起来。
本题目就是以静态时序分析的模型来设计的,所以我们先从静态时序分析的通用模型讲起。
如图1所示时序分析需要关心的路径有以下几点:
从输入到输出的路径;
从输入到寄存器的路径;
从寄存器到输出的路径;
从寄存器到寄存器的路径;
异步清零信号和时钟存在异步的进入和退出的时序问题。
其中寄存器到寄存器之间的路径分析占整个时序分析的60%以上,也是本题目所要分析的内容。
图1
时序分析问题是如何引入的呢?以寄存器到寄存器之间的路径分析为例,如图2所示,时钟的上升沿在寄存器REG1的时钟端和数据稳定时在寄存器REG1的D端在图中蓝色竖线的位置是同时进行的,但数据要从图中①所示的数据路径传到寄存器REG2的D端,而时钟则从图中③所示的路径到达寄存器REG2的时钟端,也就是说数据和时钟所经过的路径是不同的,这会使数据和时钟到达寄存器REG2的D端和时钟端的相位关系发生变化,在某些情况下会导致刚好如图3(建立时间违例)和图4(保持时间违例)所示的情况,即时钟在数据不稳定的情况下对数据进行了采样,这会导致我们采集到数据是错误的。我们做时序约束的目的就是要解决这种问题,让时钟采集到稳定的数据。
图2
图3
图4
如图5所示,我们用波形的方式来描述这一问题。
图5
图5中的T1为数据路径的延迟,等于图2中①所示的路径,它包括寄存器REG1时钟端到寄存器REG1数据输出端Q的延迟为Tco(本题为Tcq)与两级寄存器之间的组合逻辑与布线延迟Tdata(本题为Tpd)之和。
图5中的△T为时钟偏斜,等于图2中时钟到第二级寄存器时钟端的延迟为T③(本题为Tcd2)与时钟到第一级寄存器的时钟端的延迟T②之差(本题为Tcd1)。注:△T的值可以为正值也可以为负值。
另外图5中的Ts为建立时间,Th为保持时间,T_cycle为时钟周期(本题为T)。
根据波形图所表示的内容可以得出,
建立时间的公式为:Ts = T_cycle – T1 + △T = T_cycle –(Tco + Tdata)+ △T
保持时间的公式为:T1 – △T = (Tco + Tdata)– △T
分析至此本题中所有的参数关系就都知道了,就可以求解了。题目中要求Tpd的最大延迟为,也就是求上面分析得到的建立时间公式中的Tdata,我们讲建立时间的公式移相的:Tdata ≤ T_cycle - Ts - Tco + △T = T_cycle - Ts - Tco +(T③ - T②),然后将公式中的符号全部替换为我们本题中的符号,最后的结果为Tpd ≤ T - Tsetup - Tcq -(Tcd1 - Tcd2),所以本题的答案为D。
本题也是在理想环境下的设定,否则还需要加入T_setup(建立时间的门限,本题没有给出,默认为0)和T_hold(保持时间的门限,本题没有给出,默认为0)这两个参量。
T_setup:时钟沿来到之前数据必须保持稳定的最小时间,芯片选定即决定,和制作工艺有关。T_hold:时钟沿来到之后数据必须保持稳定的最小时间,芯片选定即决定,和制作工艺有关。
然后将这两个参量和上面求得的建立时间和保持时间公式一起求出Sslack(建立时间的余量,由建立时间减去建立时间的门限得出)和Hslack(保持时间的余量,由保持时间减去保持时间的门限得出),要求Sslack和Hslack的值都要大于零。最后的公式为:
Sslack(建立时间的余量)≥ 0
= Ts – T_setup ≥ 0
= [T_cycle –(Tco + Tdata)+ △T] – T_setup ≥ 0
Hslack(保持时间的余量)≥ 0
= Th – T_hold ≥ 0
= [(Tco + Tdata)–△T] – T_hold ≥ 0
在对付笔试、面试题时,使用通用模型来分析是足够的,要学会分析推导上面的公式,并真正的理解原理才能够在符号、参量任意变化的题目中从容应对。
扩展:以上分析的是通用的模型,也是其中一种静态时序的分析方法,有时候大家还会看到另一种静态时序分析的方法,很多学习者会将这两种分析方法搞混,这次我们一起来讲。下面这种模型是Quartus和Vivado中的时序分析工具常用的模型,我们需要新引入一个概念,图6所示:
图6
(1)Launch Edge(发射沿):管脚传进来同步于数据的时钟的沿,也被认为是0时刻。
(2)Latch Edge(锁存沿):目的地寄存器REG2锁存数据的沿,相对于发射沿延后1个时钟周期后的起始位置。
如图7所示,我们引入数据到达寄存器的时间Data Arrival Time,就是说数据从Launch Edge开始到寄存器REG2的D端所用的时间:
(1)建立时间的Data Arrival Time(当前数据开始到达的时间)= launch edge + Tclk1 + Tco + Tdata
(2)保持时间的Data Arrival Time(当前数据结束到达的时间,也是下一个数据开始到达的时间)= next launch edge + Tclk1 + Tco + Tdata
如图8所示,为我们采样时钟到达的时间Clock Arrival Time,就是说时钟从Latch Edge到寄存器REG2的时钟端所用的时间:Clock Arrival Time = latch edge + Tclk2
图8
如图9所示为建立时间数据要求达到的时间Data Required Time,就是说要满足建立时间数据必须要在此之前到达寄存器REG2的D端:Data Required Time = Clock Arrival Time–Tsu
图9
如图10所示为保持时间数据要求达到的时间Data Required Time,就是说要满足保持时间数据必须要在此之后到达寄存器REG2的D端:Data Required Time = Clock Arrival Time + Th
图10
把上面分析得到的公式结合计算出Sslack(建立时间的余量),用数据要求到达的时间减去数据实际到达的时间,公式推导为:
Sslack(建立时间的余量)≥ 0
= Data Required Time–Data Arrival Time ≥ 0
=(Clock Arrival Time–Tsu)–(launch edge + Tclk1 + Tco + Tdata)≥ 0
=(latch edge + Tclk2–Tsu)–(launch edge + Tclk1 + Tco + Tdata)≥ 0
图11
Hslack(保持时间的余量)为数据实际到达的时间减去数据要求到达的时间,公式推导为:
Hslack(保持时间的余量)≥ 0
= Data Arrival Time–Data Required Time ≥ 0
=(next launch edge + Tclk1 + Tco + Tdata)–(Clock Arrival Time + Th)≥ 0
=(next launch edge + Tclk1 + Tco + Tdata)–(latch edge + Tclk2 + Th)≥ 0
图12
我们将时序分析工具中的模型推导的公式进行化简
(1)Sslack(建立时间的余量)≥ 0
= Data Required Time–Data Arrival Time ≥ 0
=(Clock Arrival Time–Tsu)–(launch edge + Tclk1 + Tco + Tdata)≥ 0
=(latch edge + Tclk2–Tsu)–(launch edge + Tclk1 + Tco + Tdata)≥ 0
= latch edge + Tclk2–Tsu–launch edge-Tclk1–Tco–Tdata ≥ 0
=(latch edge–launch edge)–(Tco + Tdata)+(Tclk2–Tclk1)-Tsu ≥ 0
=[T_cycle –(Tco+Tdata)+ △T] – Tsu ≥ 0和通用模型的公式一致
(2)Hslack(保持时间的余量))≥ 0
= Data Arrival Time–Data Required Time ≥ 0
=(next launch edge + Tclk1 + Tco + Tdata)–(Clock Arrival Time + Th)≥ 0
=(next launch edge + Tclk1 + Tco + Tdata)–(latch edge + Tclk2 + Th)≥ 0
= next launch edge + Tclk1 + Tco + Tdata–latch edge-Tclk2-Th ≥ 0
=(next launch edge–latch edge)+(Tco + Tdata)+(Tclk1-Tclk2)-Th ≥ 0
=[(Tco + Tdata)-△T] - Th ≥ 0和通用模型的公式一致
通过时序分析工具中的模型公式化简可以看出建立保持时间是否违例和Tclk1、Tclk2的时间长短无关,而与(Tclk2–Tclk1)的绝对值|△T|的值有关,还和采样时钟的频率、寄存器到寄存器之间的路径延迟有关。
以上的所有关于时序分析的计算在时序分析工具中都会给我们自动算好,其中还会加入时钟的不确定度和时钟的悲观度等参数信息。我们根据公式中参数和计算的结果就可以确定通过什么方式来优化才能使我们的时序达到最优。具体如何优化、工程实操和一些规范我这里不再详细展开介绍。
5、以下是对Cache-主存-辅存三级存储系统中各级存储器的作用,速度,容量的描述,其中完全正确的是( )。(大疆FPGA逻辑岗B卷)
A 主存用于存放CPU正在执行的程序,速度慢,容量极大
B Cache用于存放CPU当前访问频繁的程序和数据,速度快,容量小
C 加大Cache的容量可以使主存储能够存放更多的程序和数据
D 辅存用存放需要联机保存但暂不执行的程序和数据,速度快,容量极大
解析:本题目主要考察了计算机系统中Cache的认识
当前计算机一般都采用高速缓存-主存-辅存三级存储器结构。高速缓存也称为Cache,它是位于CPU与主存之间的一种高速存储器,Cache分为片内Cache和片外Cache,片内Cache速度已接近CPU的速度,Cache由SRAM组成,存储量最小,速度最快,所以B选项正确。
常用有一级缓存(L1)、二级缓存(L2)、三级缓存(L3)。设置 Cache的目的在于将当前程序运行中快速将使用的一组数据或即将执行的一组指令由主存复制到Cache中,使CPU可以从 Cache中快速地获取所需要的指令和数据,当CPU访问存储器时,首先检查 Cache,如果要访问的信息已经在Cache中则CPU可以快速地获取信息,若不在,CPU必须访问主存,同时把包含所访可的信息的数块复制到Cache中更新,即Cache用来改善主存与CPU的速度匹配回题。
所以主存是电脑中主要部件,是CPU能直接寻址的存储空间,计算机中的主存储器主要由存储体、控制线路、地址寄存器、数据寄存器和地址译码电路五部分组成,它与辅助存储器相比有容量小、读写速度快;与Cache相比容量大、读写速度慢,所以总的来说容量适中,速度适中,所以A选项错误。主存一般采用半导体存储单元,包括随机存储器(RAM)、只读存储器(ROM)。
辅存为外部存储器,如硬盘、U盘、光盘等,它不能直接被CPU直接访问,一般用于存放暂时不用或主存放不下的程序和数据。当CPU处理信息时,首先查看所需要的数据是否在内存,若已经在则直接访问,此时称Cache命中。若不在,由辅助软硬件将有关信息从辅存上分段或分页调入内存,再由CPU访问。辅助存储器用于扩大存储空间,所以D选项错误。
使用 Cache-主存-辅存结构的存储器系统,提高了存储器的速度,同时总存储量又相当于辅存容量,有效解决了对存储器高速度,大容量,低成本的矛盾。而C选项中提到的方法与之矛盾,所以C选项也错误。Cache-主存和主存-辅存的相同点:都是在CPU的控制下进行信息交换Cache-主存和主-存辅存的不同点:前者是主机内部进行信息交换;后者是主机与外部设备之间进行信息交换。
下期预告
下期会解析四道选择题,同样来自大疆笔试题(FPGA逻辑岗B卷),大家可以先试着做做哦。6、如果只使用(2选1MUX)完成异或门逻辑,最少需要多少个MUX( )。(大疆FPGA逻辑岗B卷)A 3个 B 4个C 2个 D 1个7、对连续信号进行均匀采样时,采样频率是Ωs,信号最高截止频率为Ωc,折叠频率是( )。(大疆FPGA逻辑岗B卷)A Ωc/2 B 2ΩcC 2Ωs D Ωs/28、逻辑表达式A+BC=( )。(大疆FPGA逻辑岗B卷)A AB B (A+B)(A+C) C B+C D A+C9、某寄存器的地址为addr,现在要求将此寄存器的值取反,下列正确的C语言描述是:( )。(大疆FPGA逻辑岗B卷)A (unsigned int **)(addr)= - (volatile unsigned int *)(addr)B *(volatile unsigned int *)(addr)= - (*(volatile unsigned int *)(addr))C (volatile unsigned int *)(addr)= - (*(volatile unsigned int *)(addr))D (volatile unsigned int *)(addr)= - (volatile unsigned int *)(addr)目前,我们正在通过大疆硬件岗和FPGA逻辑岗的题目,为大家带来笔试题的解析,以及知识的补充。如果有想要解析的题目,可以发给达尔闻安排。同时,欢迎加入达尔闻求职技术交流群,进群方式:添加妮姐微信(459888529),并备注求职,即可邀请进群。
达尔闻求职“加油站”系列: