查看原文
其他

求职攻略| IO的时序约束该如何设置

相量子 达尔闻说 2022-04-25

求职攻略是为求职者准备的知识库,目的不仅在于解题,而是通过题目解析,以覆盖更多的知识点。


本期求职笔试题目来源大疆硬件逻辑岗,共3道选择题,涉及知识点包含:时序分析中从输入到寄存器的路径,测试验证中的代码覆盖率问题,以及SRAM的理解。

20、如下图所示,当CLK1100MHz时,约束set_input_delay -clocks CLK1 -max 5sig_a,如果CLK1变成50MHz,需要保证的约束效果不变,此时input_delay应该设置为多少?(  )(大疆FPGA逻辑岗B卷)


A 15ns       B 20ns

C 5ns         D 10ns

解析:本题目主要考察了时序分析中从输入到寄存器的路径

题目中的一串英文让大家摸不着头脑,如果对时序约束了解的同学大概是可以看出这是用于时序约束的Tcl命令,此命令需要写入到SDC或XDC约束文件中用于对设计的系统产生相应约束。类似的约束命令还有很多,最简单最常用的约束是IO管脚的位置约束和电平约束。

我们要想明白题意就要明白这句约束的意思,set_input_delay是设置输入延迟用的命令,同样的set_output_delay就是设置输出延迟的命令;-clocks(约束语句中一般用-clock)后面紧跟的是时钟源的名字,可以来自时钟输入管脚,也可以是用户创建的虚拟时钟,题目图中给出的是CLK1;-max描述了用于建立时间分析的包含有板级走线和外部器件的延时(如果是-min则描述了用于hold分析的包含有板级走线和外部器件的延时,两者同时存在,往往分别设置),这里设置的值为5ns(输入约束的时延值可以理解为有效数据沿相对于时钟的偏移,如果时延值为正说明数据相对于时钟向后偏移,时延为负说明数据相对于时钟向前偏移);最后是输入信号的名字,题目图中给出的是sig_a。这句话完整的解读是:设置输入延迟,输入信号sig_a相对于输入时钟CLK1的最大延迟为5ns。这个约束命令不是从内部延时的角度来约束端口时序,而是从系统角度来约束的。是告诉时序分析工具输入信号和输入时钟之间的延迟关系,不是调节输入信号的延迟。

为什么要设置这条命令呢?我们在“FPGA时序分析看这篇就够了中讨论过寄存器到寄存器之间的路径约束,就是为了满足数据的建立保持时间,同样接收外部信号的时候也要满足数据的建立保持时间才行,因为综合工具不知道外围设计(外部芯片的延时和PCB布线的延迟)的时序条件,特别在高速系统中,你要告知当前设计的系统这些时序条件,才能够正确的接收到数据。

题目中给出的条件是当CLK1为100MHz(周期为10ns)时,设置的set_input_delay -clocks CLK1 -max 5 sig_a,也就是数据相对于时钟滞后5ns,刚好在数据的中间位置。题目中把CLK1改成50MHz(周期为20ns)后还要保证约束的效果不变,最容易让人想到的意思是也在数据的中间位置,这样设置input_delay为10即可,所以答案选D最佳,当然也有其他选项理解,但作为单选题,根据理解我们选择的是没问题的。

本题目所包含的相关知识我们给大家拓展一下,稍做补充:两个系统之间通信的时序模型(下图均为简化模型,内部细节未给出)有三种,分别是:

源同步模型:由源端(外部器件)提供同步时钟和同步数据,即用于产生数据的时钟和输出的时钟是同源的。

系统同步模型:整个系统由一个晶振源给不同的子系统提供时钟。


自同步模型:特指高速串行接口之间的通信模式,外部器件产生的数据流同时包括数据和时钟信息(因为模型细节未给出,所以看起来像串口,其实和串口内部实现方式区别很大)。

因为系统同步模式不利于传送高速数据,所以系统同步模式在我们实际的应用过程中已经很少了。而采用自同步模式的都是高速串行通信,其时序和接口是相当复杂的,往往不作为从输入到寄存器之间路径的时序分析模型。源同步的方式改进系统同步接口中时钟频率受限的弊端,大大提升了总线的速度,应用广泛,所以我们以源同步模型来进行分析。源同步模式数据和时钟的从外部器件发出的关系又分为两种,一种是时钟和数据边沿对齐模式,另一种是数据和时钟中心对齐的模式。

在理论上源同步模式信号的传送可以不受传输延迟的影响,所以源同步接口也经常应用 DDR(Double Data Rate)的方式,在相同时钟频率下提供双倍于SDR(Single Data Rate)接口的数据带宽。

在外部器件的内部会有寄存器所产生的Tco路径延迟,这个延时会造成源时钟和数据的相位差,这个相位差会一直传递到FPGA端,即使忽略源时钟和数据的PCB板级布线影响这个差值仍然存在。

对于中心对齐的源同步接口,时钟转换与数据有效窗口的中心对齐。相同的时钟沿用于启动和捕获数据。源同步接口中数据和时钟的PCB板级布线延迟基本相等,可以忽略不记。所以公式为(公式推导过程这里不再给出):

Input max delay = CLK1 - Tcomax(①数据在时钟上升沿之前有效)

Input min delay = Tcomin(②数据在时钟上升沿之后有效)

对于边沿对齐的源同步接口,时钟转换与数据转换同时发生。在此情况下时钟与数据结尾对齐。同理源数据和时钟的PCB板级布线延迟基本相等,也忽略不记。所以公式为(公式推导过程这里不再给出):

Input max delay = Tcomax(②时钟上升沿后数据无效)

Input min delay = -Tcomin(①时钟上升沿之前数据无效)

我们根据计算得出的Input max delay和Input min delay就可以使用Tcl命令set_input_delay进行约束了。

关于IO时序分析的详细内容请参考UG949、《Vivado使用误区与进阶》、Vivado开发工具的Language Templates以及网上的相关资料。

另外补充一点,我们所有给出的笔试题目都是原题,未经过任何修饰改动,包括选项的顺序。长期关注过我们的同学会发现虽然是大公司的笔试题,但仍会存在一些错误,无论是笔误还是选项问题,这是不可避免的,所以遇到问题要不要一味的怀疑自己,有可能你的想法就是对的。当然这种题目只是少数,如果发现很多种这样的情况,那说明你还需要补充更多知识,毕竟只有你学习的内容更多了才更有自信。

21、下列关于代码覆盖率描述错误的是(   )。(大疆FPGA逻辑岗B卷)

A 代码覆盖率包括条件覆盖率                           

B 代码覆盖率达到百分之一百仍然可能有bug

C 代码覆盖率包括功能覆盖率                           

D 代码覆盖率包括语句覆盖率

解析:本题目主要考察了测试验证中的代码覆盖率问题

这些都是在测试验证中使用到的概念,在软件测试、IC验证中都有涉及。

代码覆盖率:衡量验证进展的最简易的方式是使用代码覆盖率。这种方式衡量的是多少行代码已经被执行过。代码覆盖率衡量的是测试对于设计规范的实现究竟测试得有多彻底,而非针对验证计划。IC验证中的代码覆盖率包括行覆盖率、条件覆盖率、状态机覆盖率和翻转覆盖率。

语句覆盖率:也称为行覆盖率,段覆盖率,基本块覆盖率,这也是最常见的一种覆盖率,就是度量被测代码中每个可执行语句是否被执行到了。

条件覆盖率:它度量判定中的每个子表达式结果True和False是否被测试到了。

功能覆盖率:验证的目的就是确保设计在实际环境中的行为正确。设计规范里详细说明了设备应该如何运行,而验证计划里则列出了相应的功能应该如何激励、验证和测量。功能覆盖率反映开发出来的需要覆盖的功能点覆盖的比例和设计意图紧密相连的,有时也称为规范覆盖率,而代码覆盖率则是衡量设计的实现情况。所以代码覆盖率不包括功能覆盖率,所以C选项错误。

覆盖率是衡量设计验证完成程度的指标,并不是验证的目的。任何覆盖率达到100%并不代表BUG已消除。

22、以下哪些手段可以降低SRAM的动态功耗(  )。(大疆FPGA逻辑岗B卷)(多选)

A 不访问SRAM时,关闭时钟

B 不访问SRAM时,地址线不翻转

C 不访问SRAM时,写数据线不翻转

D 不访问SRAM时,将其Power down

解析:本题目主要考察了对SRAM的理解和低功耗技术

这个题目有两个点需要大家关系的,一个是SRAM的特点,另一个是动态功耗。我们先来说说SRAM。静态随机存取存储器(Static Random-Access Memory,SRAM)是随机存取存储器的一种。所谓的“静态”是指这种存储器只要保持通电,里面储存的数据就可以恒常保持。相对之下,动态随机存取存储器(DRAM)里面所储存的数据就需要周期性地更新。然而,当电力供应停止时,SRAM储存的数据还是会消失(被称为Volatile Memory),这与在断电(Power down)后还能储存资料的ROM或闪存是不同的。所以D选项不能作为降低SRAM的动态功耗的手段,断电(Power down)会导致数据的丢失。

接下来我们再来说说功耗问题。

CMOS管功耗 = 动态功耗 + 静态功耗

静态功耗:是时钟不工作的状态下所需的功耗。数字和模拟逻辑都消耗静态功耗,在模拟系统中,静态功耗主要包括由其接口模拟电路的静态电流决定的功耗。

动态功耗:是在器件工作时所增加的功耗,它由切换信号及容性负载的充放电引起。影响动态功耗的主要变量是电容充电、工作电压和时钟频率。所以在SRAM不工作的时候关闭控制SRAM时钟,而SDRAM中的数据并不会丢失。

动态功耗 =  负载功耗  +  内部功耗

负载功耗:指CMOS管在翻转过程中对负载电容进行充放电消耗的功耗。

内部功耗:指CMOS管在翻转过程中,对内部结点电容进行充放电消耗的功耗及短路电流消耗的功耗。

而B选项和C选项就是要SRAM在不工作的时候减少其地址线和写数据线的翻转,也就是相当于减少CMOS管的翻转,所以是可以降低动态功耗的。

下期预告

3道选择题,同样来自大疆笔试题(FPGA逻辑岗)。

23、判断电路中是否存在竞争冒险的方法有哪些?(多选题)

A 观察法        B 实验法 

C 代数法        D 卡诺图法


24、以下哪些是典型FPGA器件内部的常用资源:(多选题)

A DRAM         B LUT

C 时钟网络    D 寄存器


25、以下关于Latch与Flip-Flop特性描述正确的是:(多选)

A Latch与Flip-Flop都属于时序辑

B Latch无时钟输入

C Filp-Flop只会在时钟触发沿采样当前输入产生输出 

D Latch输出可能产生毛刺


END

目前,我们正在通过大疆硬件岗和FPGA逻辑岗的题目,为大家带来笔试题的解析,以及知识的补充。如果有想要解析的题目,可以发给达尔闻安排。同时,欢迎加入达尔闻求职技术交流群,进群方式:添加妮姐微信(459888529),并备注求职,即可邀请进群

达尔闻求职系列:

磁珠的用法、PCB布线3W规则

单比特信号跨时钟域问题详解

如何搞定状态机问题
电容击穿表现为短路?MOS管导通损耗和什么有关?

毛刺滤除的代码应该如何写

资深工程师总结减小串扰的7种方法

二进制数11.101对应的十进制数是多少

FGPA时序分析看这篇就够了
逻辑电路24种表达式

芯片工艺28nm的28是指什么

FPGA设计中的时序收敛准则
华为硬件逻辑岗(FPGA)
紫光展锐数字IC岗(编程题)
从无人机爱好者到获得DJI大疆Offer
offer拿到手软,最后选华为!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存