4.验证面试高频问题整理(附答案)

news2024/9/22 21:21:49

目录

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.如何将类中的方法定义在类外

例如:

class Test;

    int a,b;

    extern display();

endclass

function Test::display();

    $display("the value is %d",a+b);

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^v67^control,201^v3^add_ask,213^v2^t3_control1&spm=1018.2226.3001.4187

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/61225.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Python计算机毕业设计Django人事管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

js对象易混淆知识

js对象易混淆知识 __proto__ vs prototype __proto__和constructor属性是对象所独有的。 __proto__属性的作用就是当访问一个对象的属性时&#xff0c;如果该对象内部不存在这个属性&#xff0c;那么就会去它的__proto__属性所指向的那个对象&#xff08;父对象&#xff09;…

三菱FX5U PLSV指令-可变速度输出

三菱FX5U PLSV指令-可变速度输出,程序如下 该指令用于输出带旋转方向输出的变速脉冲。只支持CPU模块 *1 只能使用Y。 *2 输出模式为CW/CCW时&#xff0c;请指定CCW轴。使用Y时&#xff0c;只能指定本轴的SIGN输出或通用输出。 *3 不能使用T、ST、C 以上是指定FX3操作数得情况…

JVM总结全

虚拟机 HotSpot 默认虚拟机 JRockit HotSpot融合了JRockit jdk8初步融合完成 没有解释器&#xff0c;只有编译器 IBM J9 结构图 类加载子系统Q 1.类加载器 ​ 启动类加载器&#xff08;引导类加载器&#xff09;Bootstrap ClassLoader ​ 加载java 核心类库&#xff0c;…

QT + FFmpeg 5.x + x264 + x265 + SDL2 音视频播放器

QT FFmpeg 5.x x264 x265 SDL2 音视频播放器 使用了QT的QML设计界面,人机交互; 使用了FFmpeg 5.x x264 x265 SDL2 完成了音视频的解析到播放; 阅读了ffplay的源码,用到了ffplay的核心思想. 想熟悉ffmpeg和ffplay的朋友,都可以参考学习. 代码自取: https://github.c…

秒杀实现技巧

需求分析 “秒杀”这个词在电商行业中出现的频率较高&#xff0c;如京东或者淘宝平台的各种“秒杀”活动&#xff0c;最典型的就是“双11抢购”。 “秒杀”是指在有限的时间内对有限的商品数量进行抢购的一种行为&#xff0c;这是商家以“低价量少”的商品来获取用户的一种营…

Golang原理分析:切片(slice)原理及扩容机制

《Go语言精进之路》切片相关章节学习笔记及实验。 1.切片原理 说切片之前&#xff0c;先看看Go语言数组。Go数组是一个固定长度的、容纳同构类型元素的连续序列&#xff0c;因此Go数组类型具有两个属性&#xff1a;长度及类型&#xff1a; var a [1]int var b [2]byte var c …

【Web安全】文件上传漏洞

目录 1. 文件上传漏洞概述 1.1 FCKEditor文件上传漏洞 1.2 绕过文件上传检查功能 2. 功能还是漏洞 2.1 Apache文件解析 2.2 IIS文件解析 2.3 PHP CGI路径解析 2.4 利用上传文件钓鱼 3. 设计安全的文件上传功能 1. 文件上传漏洞概述 文件上传漏洞是指用户上传了一个…

R语言学习笔记——入门篇:第四章-基本数据管理

# R语言R语言学习笔记——入门篇&#xff1a;第四章-基本数据管理 文章目录一、示例二、创建新变量三、变量的重编码四、变量的重命名4.1、交互式编辑器4.2、函数编程五、缺失值5.1、重编码某些值为缺失值5.2、在分析中排除缺失值六、日期值6.1、将日期值转换回字符型变量6.2、…

使用 Learner Lab - 在 Lambda 建立 Pillow 层,进行 S3 的图片镜相操作

使用 Learner Lab - 在 Lambda 建立 Pillow 层&#xff0c;进行 S3 的图片镜相操作 AWS Academy Learner Lab 是提供一个帐号让学生可以自行使用 AWS 的服务&#xff0c;让学生可以在 100 USD的金额下&#xff0c;自行练习所要使用的 AWS 服务&#xff0c;如何进入 Learner La…

[论文阅读] 颜色迁移-Automated Colour Grading

[论文阅读] 颜色迁移-Automated Colour Grading 文章: Automated colour grading using colour distribution transfer, [paper], [matlab代码], [python代码] 1-算法原理 本文算法分为2个大步骤, 首先使用IDT(Iterative Distribution Transfer)方法得到初步的结果, 这个结果…

优雅的springboot参数校验(二)

7. 集合校验 有这样一种场景&#xff0c;前端请求后端接口时&#xff0c;需要传递的是一个数组&#xff0c;数组的元素是一个对象&#xff0c;并且希望后台收到参数后可以对数组集合中的元素元素对象的属性进行校验&#xff0c;如果后台直接以List的来接收参数&#xff0c;约束…

[附源码]计算机毕业设计基于springboot的云网盘设计

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

linux网络编程之tcp

相关函数 int socket(int domain,int type,int protocol);参数&#xff1a; domain&#xff1a; AF_INET AF_INET6 AF_UNIX,AF_LOCAL AF_NETLINK AF_PACKET type&#xff1a; SOCK_STREAM: 流式套接字&#xff0c;唯一对应于TCP SOCK_DGRAM:数据报套接字&#xff0c;唯一对应着…

【第七章 MySQL体系结构、存储引擎、InnoDB、MyISAM、Memory、存储引擎特点及选择】

第七章 MySQL体系结构、存储引擎、InnoDB、MyISAM、Memory、存储引擎特点及选择 1.MySQL体系结构&#xff1a; ①连接层&#xff1a; 最上层是一些客户端和链接服务&#xff0c;包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连…

[Power Query] 日期和时间处理

Power Query查询编辑器为日期和时间数据提供了强大而快捷的处理方式 例1: 从日期中提取年、月份、日、季度、周、天等信息 数据源 步骤1:将数据源导入到Power BI Desktop&#xff0c;单击【转换数据】选项&#xff0c;进入Power Query查询编辑器界面 步骤2:选中"日期&qu…

【概念】数据仓库和数仓建模

数据仓库 数仓主要特征 面向主题&#xff1a;每个需求和表都属于一个主题&#xff0c;可以用主题来对数仓的表分门别类集成性&#xff1a;将异构数据源&#xff0c;比如MySQL和服务器埋点日志&#xff0c;统一转换成结构化的hive表数据存储到ODS层非易失性&#xff1a;对历史…

Flink系列文档-(YY12)-窗口计算

1 窗口基本概念 1.1 概述 窗口&#xff0c;就是把无界的数据流&#xff0c;依据一定规则划分成一段一段的有界数据流来计算&#xff1b; 既然划分成有界数据段&#xff0c;通常都是为了"聚合"&#xff1b; Keyedwindow重要特性&#xff1a;任何一个窗口&#xff0…

游戏开发36课 cocoscreator scrollview优化

在cocoscreator内&#xff0c;ScrollView控件封装的挺完美的了&#xff0c;不过对于一些对性能要求比较高的场景&#xff0c;会存在问题&#xff0c;以top100排行榜排行榜举例子 1、应用卡顿甚至崩溃 按照官方用例使用ScrollView&#xff0c;插入100个玩家的item&#xff0c;理…

离线安装harbor容器镜像仓库(harbor-v2.3.5)

记录&#xff1a;354 场景&#xff1a;在CentOS 7.9操作系统上&#xff0c;离线部署harbor容器镜像仓库集群&#xff0c;使用Redis为外部缓存、使用PostgreSQL为外部数据库、使用Ceph为共享存储、使用nginx为harbor的负载均衡、使用Keepalived为集群高可用、使用docker-ce操作…