一些数字设计及验证的笔试题汇总,仅供参考。
一、请解释以下概念:
(1)建立时间(setup time)
建立时间(setup time)是触发器的时钟信号上升沿到来以前,数据需要保持稳定的时间。
(2)保持时间(hold time)
保持时间(hold time)是触发器的时钟信号上升沿到来之后,数据需要保持稳定的时间。
(3)恢复时间(recovery time)
恢复时间(recovery time)是指异步控制信号(如寄存器的异步清除和置位控制信号)在“下个时钟沿”来临之前变无效的最小时间长度。
(4)移除时间(removal time)
移除时间(removal time)是指异步控制信号(如寄存器的异步清除和置位控制信号)在“有效时钟沿”之后变无效的最小时间长度。
(5)时钟偏差(clock skew)
时钟偏斜(clock skew)是由于布线长度以及负载不同引起的,导致同一个时钟信号到达相邻两个时序单元的时间不一致。它是相位上的不确定。
(6)时钟抖动(clock jitter)
时钟抖动(clock jitter)指的在某一个给定的点上时钟周期发生短暂性变化,使得时钟周期在不同的周期上可能加长或者缩短。时钟抖动是在时钟发生器内部产生的,和晶振或者PLL内部电路有关,布线对其没有影响;它是频率上的不确定。
二、请简单描述违背建立、保持时间的情况可能有哪些?
主要情况有:
1. 输入信号是异步信号。
2. 时钟偏移/摆动(上升/下降时间)高于容限值。
3. 信号在两个不同频率或者相同频率但是相位和偏移不同的时钟域下跨时钟域工作。
4. 组合延迟使触发器的数据输入在亚稳态窗口内发生变化。
三、建立保持时间不满足,应该如何处理?
1. 建立时间不满足:
建立时间不满足,即Tsetup值要大于实际的Tcycle + Tskew - Tdp - Tck2q。为了满足建立时间:
(1)改进工艺:可以通过改进工艺,采取具有更小的Tsetup值的芯片。
(2)采用反应更快的触发器:采用延迟更低的触发器,降低Tck2q。
(3)降频或者增大时钟偏斜:增大时钟周期Tcycle或者增大时钟偏斜Tskew,但是这样会降低电路的性能。
(4)减少组合逻辑:尽量减小两个触发器之间的组合逻辑电路的使用,从而降低Tck2q。
2. 保持时间不满足:
保持时间不满足,也就是Thold小于Tdp + Tck2q。可以通过:
(1)增加组合逻辑延时:增加Tdp和Tck2q,也就是增加触发器的D端到Q端的延时,以及两级触发器之间的组合逻辑电路部分。
(2)插入buffer:目前大部分芯片的Thold时间都可以做到0ns。所以当保持时间不满足时,通常采用的做法是在传输路径上插入buffer,在不影响逻辑功能前提下,只具有增加延迟的作用。
(3)减少时钟偏斜,降低Tskew。
尤其注意,保持时间Thold和时钟频率之间没有关系!故降低时钟频率不能解决保持时间不满足的问题。很多面试题喜欢在这里挖坑。
四、什么是竞争冒险?如何消除?
竞争冒险是在组合逻辑电路中,同一信号经过不同的路径传输后,到达电路中某一会合点的时间有先有后(存在不同延时),这种现象称为逻辑竞争;而因此产生输出干扰脉冲(毛刺)的现象称为冒险。
消除竞争冒险的常用方法:
1. 加滤波电容,消除毛刺的影响。
2. 加选通信号,避开毛刺。
3. 增加冗余项,消除逻辑冒险。
4. 引入同步机制。
五、请简述流水线设计的作用
流水线设计就是将组合逻辑系统地分割,并在各个部分(分级)之间插入寄存器,并暂存中间数据的方法。目的是将一个大操作分解成若干的小操作,每一步小操作的时间较小,所以能提高频率,各小操作能并行执行,所以能提高数据吞吐率(提高处理速度)。
使用流水线的情况一般是时序比较紧张,对电路工作频率较高的时候。典型情况如下:
(1)功能模块之间的流水线,用乒乓 buffer 来交互数据。代价是增加了 memory 的数量,但是和获得的巨大性能提升相比,可以忽略不计。
(2)I/O 瓶颈,比如某个运算需要输入 8 个数据,而 memroy 只能同时提供 2 个数据,如果通过适当划分运算步骤,使用流水线反而会减少面积。
(3)片内 sram 的读操作,因为 sram 的读操作本身就是两极流水线,除非下一步操作依赖读结果,否则使用流水线是自然而然的事情。
(4)组合逻辑太长,比如(a+b)*c,那么在加法和乘法之间插入寄存器是比较稳妥的做法。
六、请简述流水线设计的优缺点
优点:流水线缩短了在一个时钟周期内信号必须通过的通路长度,增加了数据吞吐量,从而可以提高时钟频率。
缺点:流水线同时也导致了数据的延时,会使得功耗增加,面积增加,硬件复杂度增加。特别对于复杂逻辑如cpu的流水线而言,流水越深,发生需要 hold 流水线或 reset 流水线的情况时的时间损失越大。
总结来说,流水线只是提高系统的吞吐量,并不能改善单个任务的latency。在实际电路中是在组合逻辑中插入register,分割组合逻辑以实现pipeline,而register读写也需要时间,所以单个任务的执行时间反而会增长。
另外在分割组合逻辑时,应使分割后的每段处理时间尽量相同,因为系统时钟是由最慢的那段所决定的。
所以,使用流水线并非完全有利无害,需要权衡考虑。
七、在低功耗设计中,下列无效的方法是?
A. 采用慢速设计
B. 减少信号翻转
C. 采用较慢速的时钟
D. 提高阈值电压
答案:A。
A选项说采用慢速设计并不一定会降低功耗,所以A选项不正确。
B选项减少信号翻转可以降低动态功耗。
C选项采用较慢速时钟也相对的降低了信号的翻转,所以也是降低动态功耗。
D选项即采用高阈值电压的晶体管,阈值电压增加的效果在于降低亚阈值漏电电流,因而降低静态功耗。
八、在RTL设计阶段,降低功耗的常用设计方法是?
A. 门级电路的功耗优化
B. 门控时钟
C. 降低电路漏电流
D. 多阈值电压
答案:B。
这四个选项都是可以降低功耗的常用设计方法,但是有个前提那就是在RTL设计阶段,也就是我们编写代码时可以控制的阶段,可以在代码中加入门控时钟,所以B选项正确。
九、判断:某个状态下,不关心某个寄存器的输出值,那么将其设计为输出0,可以降低功耗
错误。比起设计为输出0,降低功耗更好的做法是保持寄存器原值。因为功耗来自于信号toggle,如果在上一状态寄存器输出为1,下一状态下输出为0,即便0不使用,也产生了0到1的跳变,同样会有功耗,既然不关心,还不如保持输出为1。
十、有关功耗,以下说法不正确的是?
A. 电压越大,工作频率越高,其动态功耗越高。
B. 低功耗设计的目标就是采用各种优化技术和方法,在各个设计目标之间找到最佳的结合点。
C. 设计层次越高,功耗优化所能达到的效果越好。
D. 芯片单位面积的动态功耗和静态功耗随着工艺的发展呈下降趋势。
答案:D。
随着工艺的上升,晶体管阈值降低,漏电流变大,故静态功耗变大。