一些数字设计及验证的笔试题汇总,仅供参考。
目录
1、以下哪种验证的目的是关注单元模块的集成、功能组合、模块间的接口及时序,以及sub-chip本身的设计功能和规格正确性?
3、在system verilog中,进程之间的同步,不可以采用下面哪种方法?
6、判断:测试用例是用来覆盖测试点的,一个用例只能覆盖一个测试点
8、以下哪种验证手段可以判断两个设计是否等价,从而判断一个设计在修改前和修改后的功能是否保持一致?
9、判断:时序收敛的PLL 3分频器的输入时钟与分频后的输入时钟关系是异步时钟
10、使用相同时钟沿的同步数字电路,以下因素和最高工作频率无关的是
12、判断:形式验证(formalverification)不存在验证覆盖率的问题,其目的是为了比较两个design的功能,并确认他们的功能是否100%相等。
14、假设输入信号X位宽为12bit,InA位宽为6bit,InB位宽为17bit,实现Y=X*InA+InB的功能,并要求不损失精度,那么输出信号Y的位宽应不小于?
15、判断:为保证充分性,随机验证的输入不能带有约束条件,必须使用全随机进行验证
1、以下哪种验证的目的是关注单元模块的集成、功能组合、模块间的接口及时序,以及sub-chip本身的设计功能和规格正确性?
A. 系统验证(ST)
B. FPGA原型验证
C. 集成验证(IT)
D. 单元验证(UT)
答案:C
UT(unit test)是模块级别的验证。IT(Integration test)如果集成对象是功能模块,那么属于IP级别的验证;如果集成对象是IP,那么属于子系统级别的验证。ST(Systemtest)则是整个SOC级别的验证。
UT侧重单个功能模块及内部RTL实现细节,各个小feature的测试。
IT侧重模块集成,接口信号时序,功能组合的验证,主要运行IP、子系统的一些典型场景用例,debug等用例,来测试sub-chip本身的设计功能和规格正确性。
ST侧重于系统总线,协议、各子系统集成以及功能组合,真实业务场景的测试。
层次从低到高:UT<IT<ST。一般而言UT测过的feature到IT不会再重复测试,UT无法覆盖的才会交给更上一层的IT进行覆盖。ST也是同样道理。如果一个IP里的单元模块出了问题,到IT甚至ST运行更大用例的时候被发现了,那基本上属于很严重的事故,说明前面的测试把关不严,有很大风险!并且由于验证层次的提高,debug难度也增加了。
FPGA原型验证因为FPGA资源有限制,一般来说也是跑一个IP或者是一个小的子系统这个级别的测试,其目的主要是排查一些EDA仿真难以捕获的风险点,并行提高仿真效率,并且可以配合软件的开发,当然也可以发现集成,功能组合的错误,但因为debug困难,需要用chipscope等工具进行信号捕获,信号也不全,因此并不是检查模块功能组合接口时序的主要手段。所以C是正确的。
2、判断:状态机有冗余状态时,必须有default状态。
正确。状态机复位之后每个时刻都会处于某个状态。如果one-hot或者binary状态没用满,甚至就算用满了,也需要有一个default状态,用来保证预期之外的错误状态转移(比如亚稳态,glitch)时,能够回到一个稳定的已知状态,减小该预期之外的事件对数据通路造成影响的概率。
3、在system verilog中,进程之间的同步,不可以采用下面哪种方法?
A. Semaphore
B. Event
C. Mailbox
D. Fork/join
答案:A。Semaphore旗语是一种sv中的线程仲裁结构,并不用于内部事件同步。
4、有符号数右移需要使用哪种操作符?
A. >>
B. >>>
答案:B。两个箭头表示逻辑右移,右移后结果高位补0。三个箭头表示算数右移,右移后结果根据符号位进行拓展。对于无符号数两种表示结果一致。对于有符号数,要用算术右移。
5、下列降功耗措施哪个可以降低峰值功耗?
A. Power gating
B. 静态模块级clock gating
C. 提高HVT比例
D. Memory shut down
答案:C。
首先峰值功耗是属于动态功耗中的短路功耗,即NMOS和PMOS同时导通所引起的峰值电流,最终带来的功耗。这个功耗和电源电压,时钟翻转率,以及峰值电流有关。
A选项是电源门控技术,即模块不工作的时候关闭电源,模块进入睡眠,工作时候再启动电源,是降低静态功耗。
B选项是使用静态门控时钟,所以不正确。
C选项即采用高阈值电压的晶体管,阈值电压增加的效果在于降低亚阈值漏电电流,短路功耗公式为:Pshort = TAshortVdd =TAβ(Vdd-Vth)3,只跟Vth有关,而D选项中大幅提高HVT(High Voltage Value)代入短路功耗公式中会使短路功耗变小,从而降低动态功耗中的峰值功耗。所以C选项正确。
D选项存储关闭,即不被访问的时候关闭存储器,因而也是降低静态功耗。
峰值功耗(peak power)指的是功耗测试用例运行过程中的最大瞬态功耗。也就是说这个时刻的瞬态电流最大。提高HVT比例可以降低工作电流,从而降低峰值功耗。其他三个选项影响的主要是多种场景测试下的平均功耗。
6、判断:测试用例是用来覆盖测试点的,一个用例只能覆盖一个测试点
错误。用例和测试点不是一一对应的。一个用例可以用来覆盖多个测试点。一个测试点有时候也需要多个用例来覆盖。比如测试FIFO的两个测试点:1. 空信号生成;2. 满信号生成,使用一个测试用例,在复位之后发出FIFO深度相同数量的写数据,不进行读操作。一个用例就能同时检测到空信号和满信号覆盖两个测试点。
7、Verilog 语言的层次从低到高依次是什么?
门级,寄存器传输级,行为级,功能级,系统级。
8、以下哪种验证手段可以判断两个设计是否等价,从而判断一个设计在修改前和修改后的功能是否保持一致?
A. 随机验证
B. 形式验证(formal verification)
C. 网表仿真验证
D. RTL仿真验证
答案:B。形式验证formality主要应用在:
1. RTL与综合网表的比对。因为主要的测试用例都是基于RTL,RTL修改简单,迭代速度快,是一切功能的源头。保证了RTL仿真的正确性加上RTL与网表的形式验证,基本可以保证RTL测试过的测试点在网表阶段没有问题。
2. 网表与网表比对:物理实现各阶段网表功能一致性(综合->时钟树->布局布线->TIMING/DRC ECO)。如果有功能ECO,保证ECO之后的网表功能与ECO之前的网表一致也是必不可少的,因为基于网表的修改风险较大,也更不可控,人为确认不够稳。
9、判断:时序收敛的PLL 3分频器的输入时钟与分频后的输入时钟关系是异步时钟
错误。来自同一个时钟源,并且时序收敛(环路稳定),PLL输入和输出时钟有确定的相位关系(锁相),所以是同步时钟。
异步时钟:频率和相位都不同。
10、使用相同时钟沿的同步数字电路,以下因素和最高工作频率无关的是
A. 逻辑块间互联布线长度
B. 时钟低电平持续时间
C. 触发器之间的最长组合逻辑
D. 触发器的建立保持时间
答案:B。对于同步数字电路的最高频率,主要取决于关键路径是否能够收敛,那么就和A,C,D有关系。时钟的低电平持续时间主要影响到时钟信号的有效性。需要做clock pulse width检测,保证该时钟沿能正确地被寄存器采集。如果不满足,则逻辑功能有问题,和最高工作频率无关。
11、使用2选1的mux实现异或逻辑,最少需要几个mux?
2个。这个题目用真值表比较不好做,可以直接写出异或逻辑的表达式:o=a&~b |~a&b,把a用在mux的sel端,b和非b分别接在mux的2输入则可以实现逻辑。但是考虑到不能用反相器,那么需要用mux再实现一个反向器,将b用在mux的sel端,mux的两个输入分别接1和接0即可。
第一个mux:给b取反。
第二个mux:a非*b+a*b非,由a来选择。如图所示。
12、判断:形式验证(formalverification)不存在验证覆盖率的问题,其目的是为了比较两个design的功能,并确认他们的功能是否100%相等。
正确。形式验证的基本流程是通过切割电路,划分出一系列的比较点。在划分出比较点之后,工具会对两个design的所有比较点进行match,有match不上的点则无法进行比较。然后再进行两个design的比较。有比不过的点,则比较失败。因此如果将所有的比较点比较通过作为验证成功的标志,那么需要保证所有的比较点都能match上,并且进行了比较。Formal要求match的比例达到100%,但这里并不存在覆盖率这一说。
13、下面不属于时钟的基本要素是
A. skew
B. clock jitter
C. clock tree
D. clock period
答案:C。
A选项,skew是时钟偏斜,即同一时钟源到达不同cell的时间差。时钟偏斜(偏移)的出现是因为布线长度和负载不同,导致同一时钟上升沿到不同触发器的时间不同。产生的这一时间差,即为时钟偏移。
B选项,clock jitter为时钟抖动,是指同一时钟相邻周期间时间不一致的现象。这一误差来源于时钟自身(例如:晶振、PLL电路的偏差),与噪声、干扰以及电源变化有关。时钟抖动还可能出现在同一周期间,表现为占空比的改变,称为半周期抖动。总结来说,可以认为时钟抖动是时钟信号本身在传输过程中的一些偶然和不定的变化产生的总和。
C选项,clock tree即时钟树。在介绍时钟树之前,要先介绍一个时钟域的概念:时钟域指的是在同步电路中,被相同时钟信号驱动的寄存器共同组成一个时钟区域。在一个复杂的ASIC中,往往存在多个时钟域,由前面我们也可以知道跨时钟域之间需要通过set false path 或者clock group将这些跨时钟域的路径忽略,跨时钟域在之前的文章中有过讨论同时也给出了Verilog设计代码,这里就不再做过多的详细介绍。
在理想的同步电路中,我们认为同时钟域中的所有寄存器的时钟边沿同时同时到达。但是在实际的电路中,这是不可能实现的,因此就需要对时钟域中的时钟信号进行管理,也就是采用时钟树。时钟树可以保证时钟域中的寄存器的时钟边沿偏最小,从而保证良好的时序特性。
D选项,时钟周期,没什么好说的。
综上,skew和jitter反应在时钟上属于是clock uncertainty。Clock period周期也是时钟的必要要素。以上三者加上setup/hold建立保持时间,可以决定一条时序路径的约束。只有C选项,时钟树是对时钟信号进行管理,不属于时钟的基本要素。
14、假设输入信号X位宽为12bit,InA位宽为6bit,InB位宽为17bit,实现Y=X*InA+InB的功能,并要求不损失精度,那么输出信号Y的位宽应不小于?
A. 29bit
B. 24bit
C. 19bit
D. 18bit
答案:C。
X*InA,因为都是输入信号,并且没有类型转换,这里应该默认是无符号数。所以X*InA是12+5+1 = 18bit。InB只有17bit,无符号加法高位补0与表达式最高bit的操作数对齐,考虑加法1bit溢出,因此输出信号至少是19bit,这里选C。
15、判断:为保证充分性,随机验证的输入不能带有约束条件,必须使用全随机进行验证
错误。如果进行全随机,会大量消耗验证机器资源。正确的做法是通过约束条件使随机值落在验证测试点感兴趣的区域,来减少无谓的机器资源消耗。
16、下列哪些手段能够降低功耗?
A. 操作数隔离
B. 降低频繁开关转换信号的逻辑深度
C. 采降低高翻转信号的负载
D. 减少电路中的glitch
答案:ABCD。
这道题所有的手段都可以降低功耗。
A选项,操作数隔离通过减少不必要的操作数计算,来降低动态功耗。
B选项,降低频繁开关转换信号的逻辑深度,实际上也是降低信号toggle的传播,也可以降低动态功耗。
C选项,通过降低高翻转信号的负载,减少动态翻转产生的电流,依次降低动态功耗。
D选项,glitch是无意义的翻转,减少了glitch自然能降低动态功耗。
17、关于FIFO,下列描述正确的是?
A. 异步FIFO的读写地址通常使用格雷码
B. 同步FIFO的读写地址通常使用格雷码
C. 设计FIFO的重点问题是如何产生读写地址和空满标志
D.FIFO电路主要分为两种,同步FIFO和异步FIFO
答案:ACD。
A选项,异步FIFO通常使用格雷码,正确。但是注意只有使用n位格雷码表示2^n个数据才会仅一位跳变,所以FIFO深度必须是2的整数幂。一些特殊情况则需要向上取整到2的整次幂,或者选择别的编码方式。
B选项,同步FIFO因为在一个时钟域下比较简单,格雷码并不是必须的。
对于异步FIFO来说,二进制的读写指针处于不同的时钟域,想要两者进行比较,就要将指针同步到对方时钟域,这个同步的过程是通过增加两级触发器,指针的每一位经过触发器同步后到达目标时钟域实现的。而同步的过程中,在两级触发器之间有可能会产生亚稳态,二进制指针的跳变位都有可能出现错误值,甚至多位同时跳变,出现错误的、不可控的中间值,从而产生错误的空满信号。而使用格雷码可以解决这个问题,格雷码每次从一个值变化到相邻的一个值时,有且仅有一位发生变化。由于格雷码的这种特性,我们就可以将多bit指针同步问题转化为单bit指针同步问题,通过简单的双触发器进行同步操作,而不用担心由于发生亚稳态而出现数据错误中间值的情形。
相比于异步FIFO,同步FIFO就不涉及跨时钟域的操作,所以普通的二进制编码即可。
C选项,正确。
D选项,正确。