文章目录

  • 1.常见的EDA仿真工具有哪些?Debug工具有哪些?
  • 2.绘制常见SOC芯片架构图(MCU),并描述芯片的应用场景和数据流。
  • 3.SRAM、FLASH、DRAM、ROM的区别?
  • 4.WDT、Timer、DMA工作流程?
  • 4.数字集成电路的设计流程。
  • 5.数字设计流程中每个阶段主要做哪些工作?最主要的EDA工具有哪些?
  • 6.什么是竞争与冒险现象?如何判断?怎样消除?
  • 7.什么是“线与”?
  • 8.阻塞性赋值与非阻塞性赋值的区别。
  • 9.锁存器(latch)与触发器(DFF)的区别?
  • 10. 用D触发器实现2倍分频的逻辑电路。
  • 11.什么是建立时间和保持时间?如果setup time和hold time violation(违例)了怎么办?如何进行时序分析?最大的工作频率?
  • 12.为什么触发器会存在setup和hold time要求?
  • 13.什么是亚稳态?如何在异步电路设计中解决亚稳态的问题?
  • 14. 同步复位与异步复位的优缺点,异步复位设计在使用时应当注意什么?即异步复位同步释放设计,并要画出异步复位同步释放的电路结构。
  • 15.常用的低功耗方法有哪些?
  • 16.Moore状态机与Mealy状态机的特征区别?
  • 17. 对FIFO的理解,同步FIFO 与异步FIFO异同。
  • 18. 同步FIFO设计的如何判断fifo的空满状态?
  • 19. 对于异步fifo,如何处理判断空满,如何如理空满时的同步问题?计算异步FIFO最小深度。
  • 20. 数组类型、填充数组与非填充数组的区别。队列和数组的区别与用法。
  • 21. task与function有什么区别?
  • 22 .区别值传递(input/output)与引用传递(ref)。
  • 23. OOP的基本思想
  • 24. 并发线程fork...join/join_any/join_none的区别。
  • 25.SV的线程间通信方式,UVM的线程间通信方式。
  • 26.对比UVM的线程通信方式(uvm_event与event比较)。
  • 27.关于uvm_barrier的认识。
  • 28.为什么要使用随机化验证策略?带约束的随机类的语法和使用(权重约束和条件约束等都会考察)
  • 29.采用什么样的策略,使覆盖率达到100%?
  • 30.从流程上,如何保证芯片验证的质量. 验证代码覆盖率与功能覆盖率如何相互保证验证质量?
  • 31.功能覆盖率与代码覆盖率之间的关系?
  • 32. 功能覆盖率与代码覆盖率有哪些?
  • 33. 如何收集RTL代码覆盖率的数据?比如逻辑仿真工具收集覆盖率的编译和仿真的选项是什么?
  • 34. 如何排除不需要统计在内的RTL代码,也就是通过代码覆盖率的分析,很多代码是不需要做覆盖率的统计,比如else分支的缺失,default的full case语句等?

1.常见的EDA仿真工具有哪些?Debug工具有哪些?

常见的仿真工具如下:

  •   Mentor(明导)—>Questasim、Modelsim
  •   Synopsys(新思科技)—>VCS
  •   Cadence(铿腾电子科技)—>Incisive,NC-sim
    此外仿真还会用到脚本如Makefile

补充:综合工具:
  逻辑综合就是把设计实现的RTL代码映射到特定的工艺库(不同的库中门电路的基本标准单元standard cell的面积、时序参数不一样)上,输出成门级网表Netlist

  •   Synopsys(新思科技)—>Design Compiler(DC)
  •   Cadence(铿腾电子科技)—>Genus

代码检查工具:nlint, spyglass,Verdi等

2.绘制常见SOC芯片架构图(MCU),并描述芯片的应用场景和数据流。


知道SOC系统中各个IP的基本功能;

  该芯片是一个SOC芯片,主要功能是实现无线通信和数据存储的功能,主要运用场景在数据相机的存储卡。

无线通信功能通过APB总线上的SPI接口外挂一个WiFi芯片与手机相连,实现无线通信和数据传输功能。

数据存储功能主要通过NandFlash控制器,实现存储功能。但是该芯片采用了替换方案,使用了SD_Host接口,外接SD卡的方式进行数据存储。

典型的应用场景:数码相机拍照时,将照片通过SDC(SD memory Controller)控制器接口,放入SRAM暂存,最后通过SD Host接口,将照片存储到外接的SD卡中。然后,手机或PC端用户可以连接到WiFi上,通过手机下载SD memory存储卡中存放的视屏或照片到手机或者电脑上。

名词解释:MCU、IRQ、USB、BIOS等

  • MCU:MicroController Unit,微控制单元,又称单片微型计算机(Single Chip Microcomputer )或者单片机,是把中央处理器(Central Process Unit;CPU)的频率与规格做适当缩减,并将内存(memory)、计数器(Timer)、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD驱动电路都整合在单一芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制。诸如手机、PC外围、遥控器,汽车电子、工业上的步进马达、机器手臂的控制等,都可见到MCU的身影。
  • IRQ:全称为Interrupt Request,即是"中断请求"的意思,IRQ的作用就是在我们所用的电脑中,执行硬件中断请求的动作,比如我们需要读取硬盘中的一段数据时,当数据读取完毕,硬盘就通过IRQ来通知系统,相应的数据已经写到指定的内存中了
  • USB:是英文Universal Serial Bus(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯,是应用在PC领域的接口技术。USB接口支持设备的即插即用和热插拔功能。USB是在1994年底由英特尔、康柏、IBM、Microsoft等多家公司联合提出的。
  • ​BIOS:Basic Input Output System,“基本输入输出系统”。它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。

3.SRAM、FLASH、DRAM、ROM的区别?

  • SRAM:(Static Random-Access Memory,SRAM)静态随机存储器,容量小、存取速度快、掉电后数据会丢失,制造成本高,通常用作快取(cache)记忆体使用。
  • DRAM:(Dynamic Random Access Memory)动态随机存储器,价格较SRAM便宜,但访问速度较慢,耗电量较大,常做计算机内存使用(密度分布较高,存储数据较多时,所占面积小)。
  • FLASH:闪存,容量大、存取速度慢、掉电后数据不会丢失。是一种非易失性( Non-Volatile )内存,在没有电流供应的条件下也能够长久地保持数据,其存储特性相当于硬盘,,
  • ROM:只读存储器(Read-Only Memory,ROM),只能读出无法写入信息,如计算机启动用的BIOS芯片。信息一旦写入后就固定下来,即使切断电源,信息也不会丢失,所以又称为固定存储器。ROM所存数据通常是装入整机前写入的,整机工作过程中只能读出,所存数据稳定 ,断电后所存数据也不会改变,并且结构较简单,使用方便,因而常用于存储各种固定程序和数据。

4.WDT、Timer、DMA工作流程?

  • WDT:Watchingdog Timer,中文名看门狗,是一个定时器电路,一般有一个输入,俗称喂狗,一个输出到MCU的RST(复位)端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给WDT清零,如果超过规定的时间不喂狗(一般在程序跑飞时),WDT定时超出,就会给出一个RST信号到MCU,使MCU复位,防止MCU死机,看门狗的作用就是防止程序发生死循环,或者说程序跑飞。
      工作原理:在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。所以在使用有看门狗的芯片时要注意清看门狗。

  • DMA:DMA(Direct Memory Access,直接内存存取),一个完整的DMA传输过程必须经过DMA请求、DMA响应、DMA传输、DMA结束4个步骤。
       1)请求:CPU对DMA控制器初始化,并向I/O接口发出操作命令,I/O接口提出DMA请求
       2) 响应:DMA控制器对DMA请求判别优先级及屏蔽,向总线裁决逻辑提出总线请求。总线裁决逻辑输出总线应答,表示DMA已经响应
       3)传输:DMA控制器获得总线控制权后,CPU即刻挂起,由DMA控制器输出读写命令,直接控制RAM与I/O接口进行DMA传输。
       3)结束:当完成规定的成批数据传送后,DMA控制器即释放总线控制权,并向I/O接口发出结束信号。当I/O接口收到结束信号后,一方面停 止I/O设备的工作,另一方面向CPU提出中断请求,使CPU从不介入的状态解脱,并检查本次DMA传输操作正确性。

DMA传输方式无需CPU直接控制传输,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,使CPU的效率大为提高。

Timer:SOC内部的时钟由于温度、电磁以及各种自身因素使得其精度很低,所以不适合做计数使用,使用硬件计数电路Timer计数时间精度更高,一般可达到ns级。

4.数字集成电路的设计流程。

  整个IC设计流程宏观上主要包括四个阶段:

  1. 确定项目需求(市场需求)——制定芯片的具体指标;
      ( 物理指标:制作工艺、裸片面积、封装等;性能指标:功耗、速度等; 功能指标:功能描述、接口定义等)
  2. 系统级设计——使用系统建模语言(C/C++/Matlab)对各个模块进行描述,并给出具体实现架构;
  3. 前端设计——RTL设计—>RTL仿真(EDA验证)—>硬件原型验证(FPGA验证)—>电路综合(Netlist门级网表)
  4. 后端设计——版图设计—>物理验证—>后仿真等
      ( 前端设计会对各个模块进行RTL设计验证(逻辑特性),最后在集成成一个整体,后端设计会将前端设计形成的门级网表Netlist进行物理实现(物理性能)。)

5.数字设计流程中每个阶段主要做哪些工作?最主要的EDA工具有哪些?

前端设计:RTL——>Netlist过程大致如下所示:

后端设计:Netlist——>GDSII过程如下:

参考:https://blog.csdn.net/lovenankai/article/details/5894616

6.什么是竞争与冒险现象?如何判断?怎样消除?

   在组合电路中,某一输入信号经过不同的途径传播后,由于路径延迟不同,使得到达电路中某一个逻辑门会合点的时间有先有后,这种现象叫做竞争;由于由竞争而产生的尖脉冲或者说毛刺就叫做冒险。
   判断方法:1)、代数法:如果布尔表达式中有相反的信号则可能产生竞争和冒险的现象。如果表达式为:F=A+A’,就会产生"1"冒险;F=A*A’,就会产生"0"冒险。
         2)、卡诺图:有两个相切的卡诺圈并且相切处没有被其他卡诺圈包围,就有可能出现竞争冒险;
         3)、 实验法:示波器观察。
   消除方法:1)、接入滤波电容;、消除毛刺影响;
         2)、利用可靠性编码;
         3)、可以在表达式中添加增加冗余项消除逻辑冒险。

7.什么是“线与”?

  • 线与逻辑指两个或多个输出信号直接相并连从而实现逻辑与的功能。在硬件上,需要用到OD门(Open Drain漏极开路门)来实现,为了防止因为电流过大而烧坏OD门,应在OD门输出端接一个上拉电阻。典型漏极开路(OD)与非门的线与如图所示:

8.阻塞性赋值与非阻塞性赋值的区别。

阻塞赋值 非阻塞赋值
符号 = <=
执行顺序 顺序执行 并发执行
应用 组合逻辑块 时序逻辑块

9.锁存器(latch)与触发器(DFF)的区别?

  • latch由电平触发,非同步控制(没有时钟端,不受系统同步时钟的控制,无法实现同步操作)。在使能信号有效时latch相当于通路,在使能信号无效时latch保持输出状态。DFF由时钟沿触发,同步控制。
  • latch容易产生毛刺(glitch),DFF则不易产生毛刺
  • 如果使用门电路来搭建latch和DFF,则latch消耗的门资源比DFF要少,这是latch比DFF优越的地方。所以,在ASIC中使用latch的集成度比DFF高,但在FPGA中正好相反,因为FPGA中没有标准的latch单元,但有DFF单元,一个LATCH需要多个LE才能实现。
  • latch将静态时序分析变得极为复杂,DFF则会是时序分析变得容易。
       latch功能表如下

       触发器flip-flop功能表如下

latch的产生代码方式:
方法1
module top_module (input d, input ena,output q);assign q=(ena)?d:q;
endmodule方法2
module top_module (input d, input ena,output reg q);always @(*)beginq <= (ena) ? d : q;end
endmodule方法3
module top_module (input d, input ena,output reg q);always @(*)beginq = (ena) ? d : q;end
endmodule

10. 用D触发器实现2倍分频的逻辑电路。

11.什么是建立时间和保持时间?如果setup time和hold time violation(违例)了怎么办?如何进行时序分析?最大的工作频率?

   建立时间:触发器(DFF)时钟上升沿到来之前,数据需要保持稳定的最小时间间隙就是建立时间。
  保持时间:触发器(DFF)时钟上升沿到来之后,数据需要保持稳定的最小时间间隙就是保持时间。

12.为什么触发器会存在setup和hold time要求?

  考虑触发器的结构(会画);


当时钟Cp由0跳变到1,C=1,C`=0,使TG1断开,从而切断了D端与主锁存器的联系,同时TG2导通,将反相器G1的输入端与G2的输出端连通,主锁存器会锁存Cp跳变前D端的数据(如果此时D没有保持稳定,则会造成亚稳态)。这是TG3导通,TG4断开,~Q信号进过反相器G3传送到Q端。

13.什么是亚稳态?如何在异步电路设计中解决亚稳态的问题?

提示:异步时钟域信号的跨时钟域同步。包括单比特和多比特,对于单比特自然用两级寄存器同步最为方便。对于多比特,常考察异步FIFO以及握手方法。要理解亚稳态的概念以及避免亚稳态的方法。
参考CDC章节。

  • 单比特信号——两级触发器(DFF)同步;
  • 多比特信号——连续信号——可以采用格雷码
           非连续信号——FIFO,握手方法;

14. 同步复位与异步复位的优缺点,异步复位设计在使用时应当注意什么?即异步复位同步释放设计,并要画出异步复位同步释放的电路结构。

  • 同步复位:当时钟上升沿检测到复位信号,执行复位操作(有效的时钟沿是前提)。always @ ( posedge clk );
      a、有利于仿真器的仿真
      b、可以使所设计的系统成为 100% 的同步时序电路,有利于时序分析
      c,复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。同时还要考虑诸如 clk skew 、组合逻辑路径延时 、复位延时等因素
  • 异步复位:它是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。always @ ( posedge clk or negedge rst_n );
      a、设计相对简单;
      b、异步复位信号识别方便(电路在任何情况下都能复位而不管是否有时钟出现;
      c,最大的问题在于它属于异步逻辑,问题出现在复位释放时,而不是有效时,如果复位释放接近时钟有效沿,则触发器的输出可能进入亚稳态

15.常用的低功耗方法有哪些?

  时钟门控clock gating(画出电路结构图),了解DVFS,多阈值电压技术,多电压技术等。
参考低功耗章节:

  • 时钟门控(clock gating):在数据无效时,将寄存器时钟关闭的技术,能够有效降低功耗, 是低功耗设计的重要方法之一。在寄存器的输入数据无效时,将寄存器的输入时钟置为0,而此时寄存器值保持不变,此时没有时钟翻转,避免了动态功耗

  • DVFS(Dynamic Voltage and Frequency Scaling)动态电压频率调节本质上是一种自适应的电压频率调节技术,目的是根据的芯片当时的实际功耗需要设定工作电压和时钟频率,这样可以保证提供的功率既满足要求又不会性能过剩,从而可以降低功耗。

  • 多阈值电压技术:不同器件阈(yu)值电压Vth对应的器件其漏电流Leakage负相关。低阈值电压标准单元:速度快、泄漏功耗高;高阈值电压标准单元:速度慢、泄漏功耗低。在不同的时序路径上使用不同阈值电压的标准单元来降低漏电流,可以达到降低漏电功耗的目的。

  • 多电压技术:是指将不同逻辑模块处于不同的电源域中,由不同供电电源供电。工作频率要求高的系统或者模块使用高电压,对于工作频率要求不高的相应的低电压也称Normal电压,从而实现低功耗的目的。

16.Moore状态机与Mealy状态机的特征区别?

   Moore状态机的输出只与当前状态有关。
   Mealy状态机的输出不仅与当前状态有关,还与当前输入有关。

17. 对FIFO的理解,同步FIFO 与异步FIFO异同。

  • 同步fifo读写时钟相同,异步fifo读写采用不同的时钟

18. 同步FIFO设计的如何判断fifo的空满状态?

   FIFO 是一种先进先出的数据交互方式,相当于一个RAM存储模块。同步FIFO的写时钟和读时钟为同一个时钟(同一个时钟域),由三大部分组成:FIFO写逻辑控制、 FIFO读逻辑控制、FIFO存储体(如Memory,reg等)。
   FIFO的空满可以通过计数器Counter判断,遵循空不能读、满不能写的原则。

      assign full = (counter == F_DEPTH)?1:0;assign empty = (counter == 'h0)?1:0;

   也可以通过扩展地址最高位判断空满
空:扩展位相同,有效地址位也相同; 满:扩展位不同,有效地址位相同

assign  empty = (w_addr_1==rd_addr_1)?1:0;   //地址判断
assign  full = ((w_addr_1[ADDR]!=rd_addr_1[ADDR]) && (w_addr_1[ADDR-1:0]==rd_addr_1[ADDR-1:0]))?1:0;

19. 对于异步fifo,如何处理判断空满,如何如理空满时的同步问题?计算异步FIFO最小深度。

   异步FIFO读写时钟不相同,异步FIFO除了存储体、读写逻辑控制,还包括了格雷码转换和时钟同步部分。
  异步FIFO采用扩展地址位的方式对FIFO进行读写计数,判断空满。因为格雷码是镜像对称的,若只根据最高位是否相同来区分是读空还是写满是有问题的。实际判断空满:

  • 当最高位和次高位相同,其余位相同认为是读空
  • 当最高位和次高位不同,其余位相同认为是写满
     /*二进制转化为格雷码计数器*/assign gray_rdaddress = (rdaddress >>1) ^ rdaddress;//(({1'b0,rdaddress[9:1]}) ^ rdaddress);        /*二进制转化为格雷码计数器*/assign gray_wraddress = (({1'b0,wraddress[9:1]}) ^ wraddress);assign fifo_empty = (gray_rdaddress == sync_w2r_r2);  //1. 格雷码所有bit位均相同      assign fifo_full = (gray_wraddress == {~sync_r2w_r2[9:8],sync_r2w_r2[7:0]});  //高两位不同,其余位相同

  空满时的同步问题:

解决方法:两级寄存器同步 + 格雷码转换
   (1)将写时钟域的写指针同步到读时钟域,将同步后的写指针与读时钟域的读指针进行比较产生读空信号
  (2)将读时钟域的读指针同步到写时钟域,将同步后的读指针与写时钟域的写指针进行比较产生写满信号

  • 严格的空满判断(同步FIFO): w_ptr==r_ptr且读写回环标志位相同时为空,w_ptr == r_ptr且读写回环标志位不同时为满。这在同步fifo中一般没什么问题,但是在异步fifo中一般要做悲观的空满判断,以免在fifo空时读获fifo满时写。
  • 保守的空满判断(异步FIFO):方向标志与门限。设定了FIFO容量的75%作为上限,设定FIFO容量的25%为下限。当方向标志超过门限便输出满/空标志,其实这时输出空满标志FIFO并不一定真的空/满。

  异步FIFO最小深度计算:(考虑背靠背读写情况进行计算。)

20. 数组类型、填充数组与非填充数组的区别。队列和数组的区别与用法。


  队列的声明采用==[$]符号==,并且队列在声明之后不需要使用new[]函数来进行分配内存空间;队列中可以采用push和pop的方法在队列的头尾添加和删除元素,也可以采用insert()方法在中间插入元素

21. task与function有什么区别?

函数function 任务task
执行与消耗 不消耗仿真时间 消耗仿真时间
仿真控制语句 函数中不能含有控制仿真时间的语句
如时间延迟#100,阻塞语句@(posedge clk)等
任务中可以包含仿真时间控制语句
如延迟#100,时钟周期@(),wait()以及事件event等语句
形参变量 函数中至少包含一个输入变量进行传参 任务中可以没有输入、输出变量
调用方式 函数的调用只能以语句的一部分出现 任务的调用通过一条单独的语句实现

22 .区别值传递(input/output)与引用传递(ref)。

  • 值传递:常见的向任务与函数传递值的方法是复制;需要关键字input、output,这种传递方式实际上是将实参内容复制到形参中,原来的实参与形参存放在不同的内存空间中
  • 引用传递(相当于指针):用到关键字ref(取代了原来的input/output),同时需要将任务和函数声明为automatic型。在通过引用传递的方式将实参传递给形参引用时,引用型的形参变量实际上相当于实参变量的别名,两者具有相同的内存空间。

在仿真过程中,ref型的任务与函数消耗内存资源更少,仿真速度也更快一些。

23. OOP的基本思想

封装、继承、多态

24. 并发线程fork…join/join_any/join_none的区别。

25.SV的线程间通信方式,UVM的线程间通信方式。

  • 事件event——用于线程之间的同步,控制线程序列。
        触发事件操作符:"->”,不会阻塞线程的执行 ;通常触发操作在等待事件操作之后(先等待、后触发
        等待事件操作符:"@“或”wait()",等待操作总是阻塞线程的执行,只有当事件发生变化(被触发)时,线程才会继续执行.
        triggered函数,用于检查一个事件是否被触发过,而不要求事件等待与触发的先后顺序,用法如下:@(event_name.triggered);
  • 旗语semaphore——用于对共享资源进行管理
        semaphore是SV内建的类,在内存中创建semaphore时,类似于创建了一个篮子(bucket),篮中包含一定数量的钥匙(keys),要获取共享的资源,必须从篮子中获取一把或多把钥匙,在获取完资源后必须将钥匙放回到篮子中;
        使用旗语semaphore时,需要先声明句柄(创建旗语),然后通过new( ) - 创建一个包含特定钥匙数的旗语对象;除了new(),函数外semaphore还提供了:get( ) - 从桶中获取一把或多把钥匙;put( ) - 归还一把或多把钥匙到桶中;try_get( ) - 试图获得一把或多把钥匙而不带阻塞;等方法。
  • 邮箱mailbox——数据传输的媒介,mailbox可以实现不同进程之间传递信息。
        Mailbox也是SV内建的类,类似FIFO,可以设置一定的深度,当邮箱中的信息数量达到邮箱的深度时,邮箱为满,此时不能在往邮箱中存放信息。
        使用旗语mailbox时,需要先声明句柄(创建邮箱),然后通过new( ) - 创建一个邮箱对象对象(默认无限深),mailbox也提供了一些内置方法如:put() - 将数据信息存入邮箱;get() - 将数据移出邮箱;num() - 返回邮箱中的数据条目;等方法。此外还有try_get(),try_put()等非阻塞方法。

26.对比UVM的线程通信方式(uvm_event与event比较)。

  SV中用来做线程间同步的几种方法,它们分别是semaphore、event和mailbox。
  UVM中,同步不再只局限于同一个组件中的各个线程,而是还有各个组件之间的同步问题。UVM提供了的类:uvm_event,uvm_event_pool;uvm_barrier, uvm_barrier_pool;

  • 与SV的event事件不同,UVM中的不同的组件可以共享同一个uvm_event,这种共享是通过uvm_event_pool这一全局资源池来实现的。通过唯一的全局资源池对象,在环境中任何一个地方的组件都可以从资源池中获取共同的对象,避免组件之间的互相依赖。
  • 无论有多少个组件,只要它们共同寻求同一个名称的uvm_event,将会共享该uvm_event对象的句柄。各个组件通过uvm_event_name = uvm_event_pool::get_global("e1")来获取同一个名称的uvm_event对象。即便该对象不存在,也会在第一次调用get_global()函数时创建这样一个对象。
  • 相比于传统的event,uvm_event还可以在触发等待事件时,并且通过uvm_event::trigger(uvm_object data = null)来传递给数据对象。而在等待uvm_event一侧的组件,则需要通过uvm_event::wait_trigger_data(output uvm_object data)来获取该对象。
    详细引用参考实例。

27.关于uvm_barrier的认识。

  • UVM还提供了一个新的类uvm_barrier用来对多个组件进行同步协调,同时为了解决组件独立运作的封闭性需要,也定义了新的类uvm_barrier_pool来全局管理这些uvm_barrier对象。
  • uvm_barrier可以通过set_threshold()函数设置一定的等待阈值(threshold),待有不少于该阈值的进程在等待该对象时,才触发该事件同时激活所有正在等待的进程,使得可以继续进行。通过调用wait_for( )函数阻塞线程,直到到达阈值`,释放线程。

28.为什么要使用随机化验证策略?带约束的随机类的语法和使用(权重约束和条件约束等都会考察)

  1)、使用随机化产生激励,可以很容易的在短时间内产生大量的随机激励,对于较大的验证空间,这些随机激励可以达到我们工程师可能会忽略的地方。相对于固定的激励(难以覆盖较大的可激励空间),随机化的激励可以简化代码编写,更能验证出DUT可能隐藏的错误,提高验证的完备性
  2)、对于较大的验证空间,随机化策略可以使验证有条件趋于量化流程,达到以时间换空间的效果

29.采用什么样的策略,使覆盖率达到100%?

  • 新增约束(new constraints);
  • 添加测试用例;
  • 使用不同的种子(seed)运行现有的测试用例(定向用例+随机化用例);
    覆盖率的收集是一个迭代过程,需要不断反复的运行测试用例。

30.从流程上,如何保证芯片验证的质量. 验证代码覆盖率与功能覆盖率如何相互保证验证质量?

  • 从流程上看,要保证验证的独立性、完备性和正确性。还需要采用各类先进的验证方法和策略,比如覆盖率驱动的验证策略、随机化验证策略、基于断言的验证策略。除此之外,为了提高质量和效率,还需要维护regression的流程。
    独立性指的是啥呢?老师。独立性是指验证要和设计独立做,不同的人,不同的方法,不同的策略。
  • 覆盖率包含了功能覆盖率和代码覆盖率,当两者都达到100%时,就可以去流片。其中功能覆盖率为主,需要工程师根据需求和经验,设计功能覆盖率模型,代码覆盖率为辅,可以通过EDA工具获取客观数据。当有一个覆盖率低时,就需要进行分析,比如当功能覆盖率比较高时,但代码覆盖率比较低,原因可能是功能覆盖率不完整

31.功能覆盖率与代码覆盖率之间的关系?

  • 代码覆盖率: 指的是验证过程中,哪些设计代码被执行,从而被覆盖到。它与设计的功能没有关系,它会通过仿真工具自动搜集
  • 功能覆盖率: 主要是衡量设计所实现的各项功能,是否按预想的行为执行,当设计的某些功能被验证到了,我们就说这些功能点被覆盖到。功能覆盖率需要通过人为定义覆盖点,与待测功能点进行映射。
  • 二者无必然的联系,代码覆盖率达到要求并不意味着功能覆盖率也达到要求。为了保证验证的完备性,验证时需要使代码覆盖率和功能覆盖率同时达到要求

32. 功能覆盖率与代码覆盖率有哪些?

  • 行覆盖率(line coverage):指程序的每一行代码是否被执行过。

  • 条件覆盖率(condition coverage):指每个条件中的逻辑操作数被覆盖的情况。

  • 跳转覆盖率(toggle coverage):用来记录某个设计边界信号数据位的0/1跳转情况,如从0到1,或者从1到0的跳转。

  • 决策覆盖率(branch coverage):指在if,case,for,forever,while等语句中各个分支的执行情况。

  • 状态机覆盖率(FSM coverage):用来记录状态机的各种状态被进入的次数以及状态之间的跳转情况。

  • 面向数据的覆盖率(Data-oriented Coverage)-对已进行的数据组合检查.我们可以通过编写覆盖组(coverage groups)、覆盖点(coverage points)和交叉覆盖(cross coverage)获得面向数据的覆盖率.

  • 面向控制的覆盖率(Control-oriented Coverage)-检查行为序列(sequences of
    behaviors)是否已经发生.通过编写SVA来获得断言覆盖率(assertion coverage).

33. 如何收集RTL代码覆盖率的数据?比如逻辑仿真工具收集覆盖率的编译和仿真的选项是什么?

  • 分别在编译comp和仿真run(simulate)阶段添加命令:-cm line+cond+fsm+tgl,即可实现代码覆盖率的收集,此外还可以添加命令:-cm_dir,针对不同的测试用例生成不同的覆盖率.Vdb文件。
  • 如下示例:-cm_dir CovData/vcs/{TC_name}:表示将生成的覆盖率数据文件放到CovData/vcs目录中,若果目录不存在,则自动创建。生成的覆盖率文件以.vdb为后缀,名称要求与用例名相关,如:test_1.vdb

34. 如何排除不需要统计在内的RTL代码,也就是通过代码覆盖率的分析,很多代码是不需要做覆盖率的统计,比如else分支的缺失,default的full case语句等?

  • 在使用DVE软件做覆盖率收集的过程中,对于那些不需要做覆盖率收集的代码,可以通过右键,使用exclude选项,将这些代码排除在覆盖率收集之外。

常见面试问题之Verilog、SV(一)相关推荐

  1. js 计算任意凸多边形内最大矩形_题库 | 计算机视觉常见面试题型介绍及解答 第 7 期...

    - 计算机视觉 -为什么说 Dropout 可以解决过拟合?(1)取平均的作用: 先回到标准的模型即没有 dropout,我们用相同的训练数据去训练 5 个不同的神经网络,一般会得到 5 个不同的结果 ...

  2. Hive常见面试问题(持续更新)

    Hive常见面试问题 目录 Hive 内部表和外部表的区别,以及各自使用于哪种环境?Hive和传统数据库的区别? HiveRc 文件? Hive 分区? Hive 分区过多有何坏处以及分区时的注意事项 ...

  3. 面经——C/C++常见面试知识点总结附面试真题

    参考:C/C++ 面试题 作者:zhaouc 发布时间: 2015-02-15 15:51:00 网址:https://blog.csdn.net/zhaouc/article/details/438 ...

  4. java面试常见面试问题_Java面试准备:15个Java面试问题

    java面试常见面试问题 并非所有的访谈都将重点放在算法和数据结构上-通常,访谈通常只侧重于您声称是专家的语言或技术.在此类访谈中,通常没有任何"陷阱"问题,而是它们要求您利用内存 ...

  5. spring常见面试问题_Spring面试问题

    spring常见面试问题 另外,请查看我们最新的文章69Spring面试问题与解答–最终清单 . 1)什么是春天? 回答: Spring是控件和面向方面的容器框架的轻量级反转. 2)解释春天? 回答: ...

  6. 【C++基础】常见面试问题(二)

    1. 指针和引用的区别 指针保存的是所指对象的地址,引用是所指对象的别名,指针需要通过解引用间接访问,而引用是直接访问 指针可以改变地址,从而改变所指的对象,而引用必须从一而终: 引用在定义的时候必须 ...

  7. Java常见面试知识点:继承、接口、多态、代码块

    问题:Java常见面试知识点:继承.接口.多态.代码块 答案: 1.继承 继承中构造方法的访问特点 子类中所有的构造方法默认都会访问父类中无参的构造方法 为什么? • 子类在初始化的时候,有可能会使用 ...

  8. 视频教程:Java常见面试题目深度解析!

    视频教程:Java常见面试题目深度解析! Java作为目前比较火的计算机语言之一,连续几年蝉联最受程序员欢迎的计算机语言榜首,因此每年新入职Java程序员也数不胜数.很多java程序员在学成之后,会面 ...

  9. Linux底层IIC 总线的理解、调用函数以及常见面试问题

    对 IIC 总线的理解.调用函数以及常见面试问题 一.IIC 总线概述: IIC 即Inter-Integrated Circuit(集成电路总线) I2C总线是PHLIPS公司推出的一种串行总线, ...

最新文章

  1. linux 多线程端口扫描,python 多线程完成linux服务器端口扫描
  2. win7 64位系统oracle客户端访问远程数据库
  3. 远程连接Linux,如何使程序断开连接后继续运行
  4. PHP 如何实现多进程 and mysql查询效率
  5. 算法 --- 快慢指针判断链表是否有环
  6. Hazelcast入门
  7. linux 查看java cpu_Linux查看CPU和内存使用情况
  8. 2016版单词的减法_在2016年最大的电影中,女性只说了27%的单词。
  9. android+1m的大小,android raw读取超过1M文件的方法
  10. 对break和continue的一些个人认知(称不上见解)
  11. TCP UDP 套接字
  12. mysql记录的增删改查、单表查询
  13. ug中模型不见了怎么办_UG双击prt文件却打不开模型是怎么回事?来看看解决方案吧...
  14. hourglass论文_Stacked Hourglass networks
  15. 科大讯飞麦克风阵列AIUI开放平台基本操作初级
  16. Manjaro为包管理器pacman和yaourt\yay 添加多线程下载
  17. 【CISSP备考笔记】第2章:资产安全
  18. ckeditor富文本编辑器的使用和图片上传,复制粘贴图片上传
  19. 如何用 R 绘制交互式社会网络图?
  20. 【Error】解决ubuntu 18.04 dns故障

热门文章

  1. 【笔记-java】java工程师-入门必学
  2. 计算机锁屏打不开,电脑锁屏打不开怎么办没反应
  3. 卡西欧G-SHOCK系列电子表时间调节(电子+指针)
  4. 科技新品 | 卡西欧紧凑型G-SHOCK;三星全新智能手机内存组合;佳能单张纸彩色印刷系统新品...
  5. 2009年具有高等学历教育招生资格普通本科高职院校名单
  6. PC制做gif动图超简单教程
  7. 神的意念高过人的意念
  8. AB 测试中12个常见误区
  9. delta和gamma中性_在期权交易中,Delta、Gamma、Theta、Vega都是什么?
  10. 不知道自己不知道 知道自己不知道 不知道自己知道 知道自己知道