验证类
1、下列关于代码覆盖率描述错误的是:(AB)
A.代码覆盖率达到百分之一百说明代码bug已消除
B.代码覆盖率包括功能覆盖率
C.代码覆盖率包括条件覆盖率
D.代码覆盖率包括语句覆盖率
解析:
覆盖率是衡量设计验证完成程度的指标,并不是验证的目的。任何覆盖率达到100%并不代表芯片bug已消除。代码覆盖率包括行覆盖率、条件覆盖率、状态机覆盖率和翻转覆盖率。功能覆盖率反映开发出来的需要覆盖的功能点覆盖的比例。断言覆盖率测量断言被触发的频繁程度。涉及知识点:SystemVerilog验证,推荐书本《SystemVerilog验证测试平台编写指南》
2、在UVM和SystemVerilog基础知识描述错误的是:(B)
A. bulid_phase用于创建component而且是top down执行的。
B. 当仿真命令行中出现+UVM_VERBOSITY=MEDIUM`uvm_info(“Exam”,“DJI2019”,UVM_LOW)对应的message不会打印出来。
C. sequence中定义了dmac变量,此sequence的`uvm_do_with(tr,{tr.dmac==dmac;})语句中的约束不起作用。
D. 如果某个操作消耗仿真时间,那这个操作不能直接定义在function中
解析:
UVM通过冗余度级别的设置提高了仿真日志的可读性。在打印信息之前,UVM会比较要显示信息的冗余度级别与默认的冗余度阈值,如果小于等于阈值,就会显示,否则不会显示。默认的冗余度阈值是UVM_MEDIUM,所有低于等于UVM_MEDIUM(如UVM_LOW)的信息都会被打印出来,冗余度UVM_HIGH则不打印出来。选项C中使用`uvm_do_with宏,目的是对底层sequence的随机化变量进行约束。若上层sequence和下层sequence变量的名字一样,这个约束是无法起作用的,下层的tr.dmac该怎么random还是怎么random,即使上层sequence将dmac设定为某个固定值也没用。
有两种解决方法:
(1)上层sequence使用不同的变量名,`uvm_do_with(tr,{tr.dmac ==tmp_dmac}), 这样做就不太方便,如果sequence嵌套太多,变量名就一大堆。
(2)使用this,`uvm_do_with(tr, {tr.dmac ==this.dmac}),this指定作用域,如下
————————————————
class top_seq extends...
...
top_seq my_seq;
function new()
my_seq = this ==> this指定的作用域为上层sequence
endfunction
————————————————
选项D中function不允许耗时的操作,task则允许。但嵌套在function的task也不允许耗时。涉及知识点:UVM,推荐书本《UVM实战》
1、关于“线与”逻辑描述错误的是:(D)
A.“线与”逻辑是两个输出信号相连可以实现“与”的功能
B.可以用OD门来实现“线与”
C.可以用OC门来实现“线与”
D.“线与”逻辑必须在输出端加一个下拉电阻
解析:OD:open-drain,源级开漏输出(开漏),OC:open-collector,集电极开路。OD是对mos管而言,OC是对双极型管而言,两者实现线与需外加上拉电阻
2、如果只使用(2选1MUX)完成异或门逻辑,最少需要(2)个MUX 。
解析:F = A'B +AB',即:A=0时,F = B;A=1时,F = B' 。电路如下图:
3、关于异步处理,以下说法正确的是:(BD)
A.异步FIFO采用格雷码的原因是为了提高电路速度。
B.异步处理需要考虑发送和接受时钟之间的频率关系
C.单比特信号打两拍后可以避免亚稳态的发生
D.静态配置信号可以不做异步处理
解析:
选项A中:格雷码相邻两个数值只有1bit变化,异步FIFO的地址编码采用格雷码,即使指针出现非法状态,其结果也不外乎两种:递增前原指针和递增后新指针。显然递增后新指针是最新情况的反映,如果抽样到这个指针,那么和我们的设计预期是一致的,如果抽样到递增前的原指针,会有什么结果呢?假设现在抽样读指针,那么最坏的情况就是把“不满”判断成了“满”,使得本来被允许的写操作被禁止了,但是这并不会对逻辑产生影响,只是带来了写操作的延迟。同样的,如果现在抽样写指针,那么最坏的情况就是把“不空”判断成了“空”,使得本来被允许的读操作被禁止了,但是这也不会对逻辑产生影响,只是带来了读操作的延迟。
显然每次只变化1bit的编码方案可以即使在亚稳态进行读写指针抽样也能进行正确的空满状态判断。
这里需要注意格雷码只是在相邻两次跳变之间才会出现只有1bit不一致的情形,超过两个周期则不一定,所有地址总线的skew一定不能超过一个周期,否则可能出现格雷码多位数据跳变的情况,这个时候格雷码就失去了作用,因为这时候同步后的地址已经不能保证只有1bit跳变了。选项C中亚稳态无法避免,但可以降低它发生的概率,触发器进入亚稳态的时间可以用参数 MTBF(Mean Time BetweenFailures,平均故障间隔时间)来描述,MTBF 即触发器采样失败的时间间隔,其计算公式为:
减少亚稳态的发送概率,就应使MTBF 尽可能地大。对于单bit电平信号而言,一种方法就是打两拍:即在新时钟域用两级DFF做同步器,第二拍的MTBF增大为:
随着设计主频与工艺节点的提升,打两拍也并不能保证亚稳态发生概率降到可置信以下,就需要打三拍以上或采取亚稳态增强型的触发器进行同步。
4、关于电路亚稳态描述不正确的是(BC)
A.亚稳态不能被消除,只能减小发生概率;
B.可以正常工作的数字电路芯片中一定不存在亚稳态;
C.亚稳态不存在于实际电路中,只是仿真的一种现象
D.增加同步拍数可以降低亚稳态发生的概率
5、判断电路中是否存在冒险竞争的方法有哪些(AC)
A.卡诺图法。
B.实验法
C.代数法
D.观察法
6、时序检查中对于异步复位电路的时序分析分别叫做(恢复时间检查)和(移除时间检查)。
解析:
(1)recovery time:恢复时间撤销复位时,恢复到解复位状态的电平必须在时钟有效沿来临之前的一段时间到来,才能保证时钟能有效恢复到解复位状态,此段时间为recovery time。类似于同步时钟的setup time。如下图所示,rst_n为1’b0表示复位,clk上升沿触发,rst_n从1’b0到1’b1的上升沿与时钟上升沿必须不小于recovery time才能保证寄存器恢复到正常状态。
(2)removal time :移除时间复位时,在时钟有效沿来临之后复位信号还需要保持的时间为移除时间removal time。类似同步时钟hold time。如下图所示,rst_n为1’b0表示复位有效,clk为上升沿触发,rst_n保持为1’b0经过clk上升沿后仍需要保持一段时间,才能保证寄存器有效复位,防止亚稳态。
7、关于DFT(designfor test)的描述错误的是:(D)
A. DFT的主要目的是发现芯片在生产过程中出现的缺陷
B. 寄存器扫描链是一种常用的DFT技术
C. DFT测试过程通常会消耗大量的动态功耗
D. DFT测试不能覆盖电路的时序问题
解析:DFT的at-speed test会采用芯片PLL高速时钟进行寄存器的setup和hold测试
8、关于网表仿真描述正确的是(C)
A.网表仿真不能发现实现约束的问题
B.仿真速度比RTL仿真速度更快
C.网表仿真可以发现电路设计中的异步问题
D.为了保证芯片正常工作,即使在时间和资源紧张情况下,也需要将所有的RTL仿真用例都进行网表仿真并且确保通过
解析:网表仿真通过网表反标sdf进行仿真,仿真速度较RTL仿真慢,由于sdf通过sdc约束和单元逻辑延时和线网延时而来,可以发现约束问题。设计大的话,网表仿真太耗时,常用采用形式验证手段来保证门级网表在功能上与RTL设计保持一致,配合静态时序分析工具保证门级网表的时序。门级仍真可以发现异步问题。
9、芯片制造中,工艺节点28nm,12nm,7nm。其中28,12,7含义:(D)
A.沟道深度
B.走线间距
C.器件宽带
D.栅极宽度
10、以下哪些电路可以设置false_path:(A)
A.异步电路
B.模拟和数字电路接口
C.不同频率之间电路
D.异步复位
解析:false_path用于设置异步路径,不同频率电路可以是同步电路。异步复位需要检查recovery time和removal time
11、随着IC电路设计工艺的进步,漏电功耗占比越来越大,不考虑温漂影响,以下哪些技术能够用于降低漏电功耗?(BC)
A.clock gating
B.DVFS(动态电压频率调整)
C.power gating(电源门控)
D.DFS(动态频率调整)
解析:漏电功耗属于静态功耗。A、D为减少逻辑翻转,降低动态功耗。C降低静态功耗,B可降低静态功耗和动态功耗。
12、哪些手段可以降低SRAM的动态功耗(BCD)
A. 不访问SRAM时,将其Power down
B. 不访问SRAM时关闭时钟
C. 不访问SRAM时地址线不翻转
D. 不访问SRAM时写数据线不翻转
13、以下哪些是典型FPGA器件内部常用资源(ACD)A. 时钟网络B.DRAMC. 寄存器D. LUT
解析:FPGA内有BRAM和DRAM两种存储资源,DRAM(Distributed RAM)指的是分布式RAM,为内部LUT拼成。BRAM(BlockRAM)是固定在FPGA内部的ram资源,无论使用与否都存在于那里,有较大的存储空间。两者使用区别如下:
(1)BRAM的输出需要时钟,DRAM在给出地址后既可输出数据。
(2)DRAM使用更灵活方便些
(3)较大的存储应用,建议用BRAM;零星的小ram,一般就用DRAM。但这只是个一般原则,具体的使用得看整个设计中资源的冗余度和性能要求
(4)DRAM可以是纯组合逻辑,即给出地址马上出数据,也可以加上register变成有时钟的ram。而BRAM一定是有时钟的。
(5)如果要产生大的FIFO或timing要求较高,就用BRAM。否则,就可以用DRAM。
14、关于latch与Flip-Flop特性描述正确的是(ABC)A.都属于时序逻辑B.latch输出可能产生毛刺C.Flip-Flop只会在时钟触发沿采样当前输入,产生输出D.latch无时钟输入
解析:latch信号不论是在latch based design还是clock gating cell中都是有时钟输入的
15、在不增加pipeline的情况下,如何解决一条critical path的setup时序不满足的问题?(ABC)A.将部分组合逻辑电路搬移到前级path上B.降低时钟频率C.使用更先进工艺的工艺库D.在这条path上插入寄存器
解析:A为综合工具DC常用方法,B可加大时钟周期,C可减小传播延时和组合逻辑延时和建立时间,D实际上就是pipeline
16、时钟周期T,寄存器的时钟端到数据输出端的延迟为Tcq,时钟到第一级寄存器时钟端的延迟为Tcd1,时钟到第二级寄存器时钟端的延迟为Tcd2,两级寄存器之间组合逻辑延迟为Tpd,寄存器的建立时间为Tsetup。Tpd的最大延迟为(T-Tcq-Tsetup-(Tcd1- Tcd2))。
解析:reg2reg的STA setup分析:Tlaunch+Tc2q+Tcomb<=Tcycle-Tsetup+Tcapture
问答题1、Signal_a是clka(300M)时钟域的一个单时钟脉冲信号,如何将其同步到其同步时钟域clkb(100M)中,并产生出Signal_b同步脉冲信号。请用Verilog代码描述,并画出对应的时序波形说明图。
解析:两个时钟域知道具体的时钟频率关系,相位不同步,在clka时钟域将singal_a脉冲展宽为3个周期,再在clkb时钟域进行边沿检测,同步,电路设计如下,代码略
问答题2、设计一个电路,使用时序逻辑对一个单bit信号进行毛刺滤除操作,高电平或者低电平宽带小于4个时钟周期的为毛刺。用Verilog或VHDL写代码。
解析:低电平滤除毛刺电路设计如下图,代码略
高电平滤除毛刺电路设计如下图,代码略
今天就到这里,欢迎大家继续关注我们后续文章。
本文作者 | 奋斗者Y