码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 4.验证面试高频问题整理(附答案)


    目录

    Q76.package如何使用

    Q77.如何在子类中调用父类中的方法

    Q78.bit[7:0]和byte有什么区别

    Q79.类中的方法和类外的方法有什么区别

    Q80.如何将类中的方法定义在类外

    Q81.modport的用途是什么

    Q82.struct和union的异同

    Q83.$rose和posedge区别

    Q84.如何在fork...join结构中kill进程

    Q85.什么是覆盖率驱动的验证

    Q86.如何检查句柄是否指向有效对象

    Q87.semaphore用处是什么

    Q88.为什么要使用断言

    Q89.如何在clocking block中声明异步信号

    Q90.代码覆盖率和功能覆盖率的关系

    Q91.什么是验证计划,应该包含哪些部分

    Q92.类中的静态方法使用注意事项有哪些

    Q93.initial和final的区别

    Q94.建模存储器,使用什么类型的数组

    Q95.如何避免测试平台和dut之间的竞争冒险

    Q96.logic、bit、wire区别

    Q97.什么是抽象类

    Q98.always@*与always_comb区别

    Q99.简述验证结构

    Q100.parameter、define和typedef之间区别


    Q76.package如何使用

    package用于将软件进行包装,以此来与全局的命名空间进行隔离。可以通过import对package进行引用,使package在该空间中可见,切记只是引用,而非定义,如果该空间也被定义为package,在下一个空间中引用,则第一次的package将不在可见,但是可以通过export进行重新引用,可见。

    Q77.如何在子类中调用父类中的方法

    子类可以通过使用super来调用父类的方法。

    Q78.bit[7:0]和byte有什么区别

    bit[7:0]表示8位二进制数;

    byte表示一个字节,1byte=8bit;

    Q79.类中的方法和类外的方法有什么区别

    为了保证类的良好可读性,经常搭配extern使用,将类中的一些方法定在在类的外部;从功能实现的角度来看,类内和类外的方法没有明显区别。

    Q80.如何将类中的方法定义在类外

    例如:

    1. class Test;
    2. int a,b;
    3. extern display();
    4. endclass
    5. function Test::display();
    6. $display("the value is %d",a+b);
    7. endfunction

    Q81.modport的用途是什么

    modport应用于interface中,用于将接口信号分类,其相当于一个小型的接口模块,以方便相同类型的信号接口在进行连接时使用,可指定信号的输入输出类型。

    Q82.struct和union的异同

    union ( 共用体):构造数据类型,也叫联合体 
     用途:使几个不同类型的变量共占一段内存(相互覆盖)

     struct ( 结构体 ):是一种构造类型
     用途: 把不同的数据组合成一个整体——自定义数据类型
    主要区别:
    1. struct和union都是由多个不同的数据类型成员组成, 但在任何同一时刻, union中只存放了一个被选中的成员; 而struct的所有成员都存在。在struct中,各成员都占有自己的内存空间,它们是同时存在的,一个struct变量的总长度等于所有成员长度之和,遵从字节对其原则; 在Union中,所有成员不能同时占用它的内存空间,它们不能同时存在 , Union变量的长度等于最长的成员的长度。

    2. 对于union的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了,所以,共同体变量中起作用的成员是最后一次存放的成员; 而对于struct的不同成员赋值是互不影响的。

    Q83.$rose和posedge区别

    $rose和posedge都是用来捕捉边沿,但定义有所不同:

    posedge

    Define : 数值由0->1的时刻

    $rose

    Define :在仿真中$rose并不是单纯的判断信号的跳边沿,而是判断时钟采样信号前后是否存 在0->1/x->1/z->1的变化。

    Q84.如何在fork...join结构中kill进程

    disable fork会kill disable fork 所在的当前线程以及所有子线程;

    更多细节参考:[SystemVerilog] fork join_none_lbt_dvshare的博客-CSDN博客SV中用的比较多的是fork…join_none,以及disable fork,wait fork; 其中,wait_fork会阻止当前线程,直到所有子线程完成; disable fork会kill disable fork 所在的当前线程以及所有子线程; The parent process continues to execute concurrently with all the...https://blog.csdn.net/lbt_dvshare/article/details/81236313?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167013489416782395375327%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=167013489416782395375327&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-10-81236313-null-null.142%5Ev67%5Econtrol,201%5Ev3%5Eadd_ask,213%5Ev2%5Et3_control1&utm_term=%E5%A6%82%E4%BD%95%E5%9C%A8fork...join%E7%BB%93%E6%9E%84%E4%B8%ADkill%E8%BF%9B%E7%A8%8B&spm=1018.2226.3001.4187

    Q85.什么是覆盖率驱动的验证

    覆盖率驱动(CDV)验证是指通过覆盖率的收集去衡量验证进度,换句话说,就是我们验证了半天,究竟验证到什么地步,通过验证率来衡量。首先要保证验证的完备性,要求我们能识别的点都要验证到,需要说明,并不是验证率达到要求,就可以说验证ok了,只能说我们的风险变小了,不能说一点风险没有。

    Q86.如何检查句柄是否指向有效对象

    句柄相当于时指针,也就是地址指向,判断其是否指向有效对象可以理解为判断该地址索引下的空间是否有值,有值即认为是有效的。

    Q87.semaphore用处是什么

    当多个线程访问同一资源的时候,而这个资源只允许一个线程访问的时候,就可以用旗语来进行控制;如果把资源比作为一个仓库的话,旗语就相当于一把钥匙,每个线程需要拿到钥匙后才能对资源进行访问。当然也可以有多把钥匙,对应同一资源可以同时被访问的最大数量。

    旗语有如下几个操作函数:

    new(); //对“钥匙”进行实例化

    get(); //线程获取钥匙,阻塞

    put(); //线程将钥匙放回,阻塞

    try_get(); //非阻塞

    参考文章:SV学习笔记—线程之间的通信(事件event、信箱mailbox、旗语semaphore)_Verification_White的博客-CSDN博客_sv event0.前言若多个线程之间想要进行数据交换或者知道彼此的状态以决定执行什么线程,SV中通过event、mailbox、semaphore来进行线程通信。其中event是2个线程之间的通信,semaphore是≥2个线程之间的通信。1.事件event当我们需要一个进程在另一个进程触发事件的时候运行该怎么办?SV中引入了event来解决这个问题。其语法如下:触发:-> (非阻塞)(类比于接电话)等待:@ or wait(阻塞)(类比于打电话)注意:若用->和@搭配,一定要先@再-https://blog.csdn.net/qq_41337361/article/details/122723681?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167013695416782395369816%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167013695416782395369816&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-122723681-null-null.142%5Ev67%5Econtrol,201%5Ev3%5Eadd_ask,213%5Ev2%5Et3_control1&utm_term=SV%20semaphore&spm=1018.2226.3001.4187

    Q88.为什么要使用断言

    1. 使用断言可以缩短研制周期;
    2. 使用断言可以使设计中存在的各种问题更容易被动态监测观察;
    3. 使用断言内嵌的覆盖率统计功能(cover)可以更加容易的获得对于功能的覆盖性;
    4. 断言的可读性较一般描述语言更容易理解;
    5. 通过全局控制实现设计中断言的开关;
    6. 断言可以加速形式验证,提高形式验证的效率;

    Q89.如何在clocking block中声明异步信号

    Q90.代码覆盖率和功能覆盖率的关系

    代码覆盖率和功能覆盖率,二者无必然的联系。而为了保证验证的完备性,在收集覆盖率时,要求代码覆盖率和功能覆盖率同时达到要求。

    如果你收集的代码覆盖率很高但是功能覆盖率却很低,这个可能是:

    1. design没有完全按照功能spec文档规格实现所有功能,设计不完善;
    2. 验证平台monitor监视器存在漏洞,设计代码实现了功能但没有覆盖到他们;
    3. 功能正确,但是发送的激励不对,对应功能的覆盖率无法收集。

    如果你收集的功能覆盖率很高但是代码覆盖率却很低,这可能是:

    1. 设计代码没有按照spec实现功能,在design中是无效代码,
    2. 用户定义的功能覆盖率收集存在错误,没有完全定比覆盖率收集的边界,测试计划未捕获所有设计功能/场景/边界,或者缺少功能覆盖率监视器。
    3. 代码覆盖率中未覆盖的设计代码可能会映射到这些功能上。
    4. 在实现功能覆盖率监视器时可能存在潜在的错误,导致它们收集了错误的覆盖率。因此,在验证项目中,对用户定义的功能覆盖率指标及其实现进行适当的检查很重要。

    Q91.什么是验证计划,应该包含哪些部分

    一般的验证计划会从技术和项目角度去制定:

    1. 从技术角度而言,我们需要考虑的有验证的功能点,验证的层次,测试用例,验证方法和覆盖率要求;
    2. 从项目部分来看,我们也需要考虑使用的工具,人力安排,进度安排和风险评估。

    Q92.类中的静态方法使用注意事项有哪些

    • 静态方法只能访问类的静态属性,而访问非静态属性是非法的,会导致编译错误。
    • 静态方法不能是虚拟的(virtual)

    Q93.initial和final的区别

    initial过程语句在仿真开始的时候启用,一个initial过程语句只执行一次,当语句执行完后,它的活动就停止了。
    final过程在仿真结束时启用,并且只执行一次,final过程类似于initial过程,它定义了一个语句过程块,不同的是它发生在仿真时间的末尾,并且执行时没有延迟。finial通常用于显示有关仿真的统计信息。

    Q94.建模存储器,使用什么类型的数组

    存储器属于寄存器数组类型,一般利用二位数组进行建模。

    Q95.如何避免测试平台和dut之间的竞争冒险

    • Module中的initial语句块调度在active region, Program中的initial语句块调度在reactive region。
    • 在program中使用非阻塞赋值来驱动设计信号,在re-NBA区域对其进行更新。
    • 通过带有 #0 input skews的clocking blocks。

    Q96.logic、bit、wire区别

    Wire:用于连接不同的元件,不存储值,被连续赋值(assign)或端口(port)驱动。
    Reg:并不意味实际的存储器,代表verilog/sv 中的数据存储元素,保存值,直到被下一次赋值(阻塞或非阻塞),可被综合为触发器,锁存器或组合电路。过程赋值
    Logic:不能被多驱动,改进reg数据类型,可以被连续赋值, 过程赋值

    Q97.什么是抽象类

    抽象类又称为虚类,如virtual class bus;

    抽象类可以被继承,拥有类的封装功能但是不可以被直接例化使用。

    Q98.always@*与always_comb区别

    always是循环执行语句,与原始的always块不一样的是,三个新的always块是专门针对可综合性RTL逻辑建模而定义的,而原始always块则是万金油。事实上,always_ff, always_comb, always_latch能实现的,always都能够实现。 

    [always_comb]

            always_comb用于可综合组合逻辑的建模,不需要明确地定义敏感列表。缺省地,所有出现在always_comb中所有input信号(从always_comb的外部获得赋值,出现在块内赋值语句的右边,或者条件判断语句中出现的信号,等等)都被推断属于它的敏感列表。但是内部定义的用阻塞方式进行赋值的临时变量不属于敏感列表。

    always_comb与always @(*)在表达组合逻辑时几乎是等价的,但是仍然存在细微的区别。

    [always_ff]

            always_ff用于可综合时序逻辑的建模。

            必须带由posedge或者negedge所定义的敏感列表。通常就是”@(posedge clock, negedge resetN”.

            在always_ff块中只能使用非阻塞赋值。

    [always_latch]

            由于在一般的同步设计中是不允许(或至少不推荐)使用latch式设计,所以这里不作说明。在一般的设计中不用它就是了。

    Q99.简述验证结构

    1. 测试平台(testbench)是整个验证系统的总称,它包括验证结构中的各个组件、组件之间的连接关系、测试平台的配置和控制。从更系统的意义来讲,它还包括编译仿真的流程、结果分析报告和覆盖率检查等。
    2. 从狭义上讲,我们主要关注验证平台的结构和组件部分,他们可以产生设计所需要的各种输入,也会在此基础上进行设计功能的检查。

    Q100.parameter、define和typedef之间区别

    define:作用 -> 常用于定义常量可以跨模块、跨文件; 
    范围 -> 整个工程; 
    parameter: 作用 -> 常用于模块间参数传递; 
    范围 -> 本module内有效的定义; 

    typedef:作用-> 用来创建新的数据类型;

    范围 -> 本module内有效的定义;

    参考文献:Systemverilog 语法相关_Holden_Liu的博客-CSDN博客简化数据define RTL 层级路径`define TB_TOP top`define RTL_WRAPPER `TB_TOP.ip_core`define IP_ENGINE_TOP `RTL_WRAPPER.u_ips_engine_top// Register// generate// for(i=0;i<4;i...https://blog.csdn.net/Holden_Liu/article/details/104961039?ops_request_misc=&request_id=&biz_id=102&utm_term=SV%20parameter%E3%80%81define%E5%92%8Ctypedef%E4%B9%8B%E9%97%B4%E5%8C%BA&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-5-104961039.142%5Ev67%5Econtrol,201%5Ev3%5Eadd_ask,213%5Ev2%5Et3_control1&spm=1018.2226.3001.4187

  • 相关阅读:
    落地护眼阅读灯哪个牌子好?落地灯品牌排行榜
    c语言实现简单数据【对称加密】
    C语言源代码系列-管理系统之学生信息管理系统
    FineReport -问题学习图表设计图表类型-单元格扩展父子格-报表预览
    Docker-04:Docker制作镜像
    【编程题】【Scratch四级】2021.09 计算并联电阻的值
    VR模拟鸡胚培养接种实验,打造沉浸式的学习环境
    CUDA与Direct3D 一致性
    智云谷再获AR HUD新项目定点,打开HUD出口海外新通道
    前端webpack项目如何删除文件中的无用文件
  • 原文地址:https://blog.csdn.net/weixin_45680021/article/details/127601617
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号