平头哥笔试题

  1. Systemverilog 里面有哪些是四值变量?

    Verilog-1995中有两种基本的数据类型:

    变量和线网(net)。所谓四值变量是指他们有四种取值0,1,Z和X。

    reg(单比特或多比特的无符号数)

    wire(线网)

    time(64比特的无符号数)

    interger(32比特的有符号数)

    logic(sv改进的reg)

  2. sv里面动态数组、关联数组、队列各自的优缺点,应用场景。

    特点

    动态数组:可以在仿真时分配空间或者调整宽度,这样仿真中就可以使用最小的存储空间。

    关联数组:用来保存稀疏矩阵的元素,当一个非常大的地址空间进行寻址时,sv只对实际写入的元素分配空间,比定宽数组和动态数组所占用的空间要小得对。

    队列:结合了链表和数组的优点,可以在队列的任意位置增加或者删除元素,这类操作在性能上比动态数组小得多,可以通过索引对任意元素进行访问。

    应用场景

    动态数组:随机事务不确定位宽大小;

    关联数组:需要建立一个超大容量数组,用关联数组来存放稀疏矩阵的元素;

    队列:增加元素或者删除元素方便。

  3. function和task的区别

    函数(function) 任务(task)
    函数能调用另一个函数,但不能调用任务 任务能调用另一个任务,也能调用另一个函数
    函数总是在仿真时刻0就开始执行 任务可以在非零时刻执行
    函数一定不能包含任何延迟、事件或者时序控制声明语句 任务可以包含延迟、事件或者时序控制声明语句
    函数至少有一个输入变量,可以有多个输入变量 任务可以没有或者多个输入(input)、输出(output)和双向(inout)变量
    函数只能返回一个值,函数不能有输出(output)或者双向(inout)变量 任务不返回任何值,任务可以通过输出(output)或者双向(inout)变量传递多个值
  4. 数据类型怎么转换,静态强制类型转换和动态强制转换有什么区别?

    静态转换:转换时指定目标类型,并在需要转换的表达式前加上单引号即可;

    动态转换:使用函数 $cast

    区别:静态类型转换操作不对转换值进行检查,具有一定的危险性;而动态类型转换在运行时将进行检查,如果转换失败会产生运行时错误。

  5. virtual interface作用

    • interface只能在module中声明,在class中要用virtual interface;
    • virtual interface是在仿真运行时才连接到DUT上,如果只是interface,在编译时就必须进行连接,在class中时是automatic,在运行的时候产生;
    • virtual interface主要完成接口的动态分配,只要在top层定义virtual interface,其他层不需要改变,直接通过interface传递参数即可;
    • 消除绝对路径,避免修改的时候改很多东西。
  6. 多态

    • 多态性(polymorphisn)是允许你将父对象设置为和一个或更多的他的子对象相当的技术,赋值之后,父对象就可以根据当前赋值给他的子对象的特性以不同的方式运作。简单的说就是允许将子类类型的指针赋值给父类类型的指针。
    • 多态的作用是为了实现接口重用,为了类在继承和派生的时候,保证使用“家谱”中人一类的示例的某一属性时的正确调用。
    • 多态的实现方法:覆盖和重载;
    • 覆盖:是指子类重新定义父类的虚函数的做法
    • 重载:是指允许存在多个同名的函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或者两者都不同)。
  7. randcase、randsequence

    主要用在验证时财神随机激励;

    randcase和randsequence结构来时间随机的分支选择;

    randcase建模不同的选择分支,randsequence建模状态机

  8. rand、randc

    • rand:

      • 随机变量的值在指定范围内均匀分布;
      • 如果不添加约束,随机变量的值可以是指定范围内的任何值。
    • randc:
      • 其取值按照声明的有效范围周期出现;
      • 数据类型只可以是bit或者enum;
      • 随机变量重复出现范围内的所有值,在一次循环过程中不会出现相同的数值。
  9. assertion

    断言主要用来:

    • 检查特定条件或者事件序列的发生;
    • 提供功能覆盖

    主要存在两种断言:立即断言和并发断言:

    • 立即断言:在当前仿真时间检查条件,类似于if…else语句,单数断言带有控制,立即断言必须放在过程快定义中。
    • 并发断言:可以认为是一个连续运行的模块,在整个仿真过程检查信号,所以需要在并发断言内指定一个采样的时钟。并发断言旨在时钟沿才会执行;可以在过程块、module、interface和program块内定义并发断言。
  10. UVM中uvm_object、uvm_component区别

    1. uvm_component派生自uvm_object;
    2. uvm_component的类可以直接和DUT连接,uvm_object的类不直接和DUT连接;
    3. uvm_component的类在creat是需要指明其parent,uvm_object则没有;
    4. uvm_component的类是static静态类型的,在build时创建,在整个仿真过程中都存在;uvm_object的类是transient动态类型的,需要时创建,任务结束的时候清除;
    5. uvm_component的类有phase机制,uvm_object没有phase机制。
  11. uvm_phase机制

    UVM中的phase,按照其是否消耗仿真时间的特性,可以分成两大类,一类是function phase,如build_phase、connect_phase等,这些phase不消耗仿真时间,通过函数来实现;类外一类是task phase,如run_phase等,他们消耗仿真时间,通过任务来实现。给DUT施加激励、监测DUT的输出都是在这些phase中完成的。

  12. objection的作用、用法

    作用:控制phase的运行。在进入到某个phase时,UVM会收集此phase提出的所有objection,并且实时监测所有objection是否已经被撤销掉了,当发现所有都已经撤销之后,那么就会关闭此phase,开始进入到下一个phase。当所有phase都执行完毕后,就会调用$finish来结束整个验证平台。

    task main_phase(uvm_phase phase);super.main_phase(phase);phase.raise_objection(this);...phase.drop_objection(this);
    endtask
    
  13. constraint、covergroup

    covergroup Covkind;kind:
    coverpoint tr.kind{//用kind为coverpoint命名bins zero={0};//自定义一个名为zero的仓,值为0bins lo={[1:3],5};//自定义一个名为lo的仓,值为[1:3]或5bins hi[]={[8:$]};//自定义$-8个仓,8个值的范围在[8:$]bins misc=default;定义一个default的仓,包含所有剩下不关心的值
    }
    endgroup
    
  14. fork join, fork join_any, fork join_none的用法

    • fork join:当前的所有子线程执行完毕,才会继续执行后面的进程;
    • fork join_any:当前的任一子线程执行完毕后,才会执行后面的进程;
    • fork join_none:当前的子线程并不阻塞后面的进程执行。
  15. 阻塞赋值与非阻塞赋值的区别

    阻塞赋值的操作符号用等号(=)表示,当前语句的赋值阻塞其他语句的赋值;

    非阻塞赋值的操作符号用小于等于号(<=)表示,当前语句赋值不阻塞其他语句的赋值。

  16. callback机制的运行机制

    Callback机制,其实时使用OOP来实现的一种程序开发者向程序使用者提供的模块内部的接口,可以在Test_case的高度改变其他Component的一些行为。

    对于程序的开发者而言:1.派生一个uvm_callback的类,2.typedef定义一个uvm_callbacks pool,3.在对应组件中注册派生的callback类。

    对于程序的使用者而言:1.定义一个新的callback的类派生自程序开发者所定义的类,并重写类的方法,2.在对应的test_case中实例化并添加call_back的类。

  1. clock模块为什么要放在top module中,不放在program中的原因?

    作用:SV介绍program的一个重要部分就是为了将设计和验证的调度区域通过显示的方式来安排,例如设计部分被建议放置在module中,而测试采样部分被建议放置在program中,program中不能使用always,program中的仿真时间与RTL中的是有区别的,SV将同意仿真时刻分为四个区域,相当于在原Verilog的基础上又为program增加了一个执行区间,一个采样区间,所以clk的定义不能放在program中。当program中的initial结束时,SV会调用$finish完成仿真。

    preponed:时上一个时间片进入本时间片的入口。

    postponed:是本时间片的出口,几所有event触发完毕,数据也被赋值完成。

    active:执行所有处于该调度阶段的线程(always、assign、initial)。

    ​ 阻塞赋值有关的操作执行完后,对应线程进入NBA区;

    ​ 带#0延时操作的线程直接进入到inactive区域;

    observed:表示设计部分的线程已经执行完毕,接下来的区域是SV验证一侧所准备的。

    reactive:经历了数据采样后,断言语句进行属性判断,同时,如果该区域再次对设计区域的变量和线网进行赋值,则被激活的线程再次迁移到active区域。

  1. 谈谈对block level,chip level,product level验证的理解?

    soc的系统芯片来说,block level:

    每个模块验证首先考虑的是哪些功能点是可以在模块一级完全验证的,这基于如下考虑:

    • 内部功能如状态机验证
    • 内部数据存储验证
    • 数据打包功能、编解码功能
    • 指令执行
    • 寄存器配置

    同时我们也需要考虑哪些功能无法在模块一级被验证到:

    • 与其他相邻模块的互动信号
    • 与其他子系统的互动信号
    • 与芯片外部的互动信号
    • 与电源开关的验证

    这些部分我们需要在更高的层次验证他们。

    Chip level:

    在芯片系统级,我们验证平台的复用性较高,这主要是因为

    • 外围的验证组件不需要像模块级、子系统的组件数量多且需要经常更新,他们主要侧重与验证芯片的输入输出
    • 芯片内部的子系统之间的交互、协作检查主要交给了处理器和子系统,从寄存器检查和数据检查入手,写直接测试(directed test)用例

    在芯片系统级的验证侧重于不同子系统之间的信号的交互问题,以及实现更贴近实际使用的用例。这里的实际用例并非是在系统软件层面的,而是将系统软件层面的场景进一步拆分为多个模块互动场景,在分类测试的。

    Produce level:

    直接的软件测试激励,可根据示波器等工具观察波形变化,也可以根据SDK软件debug。

  2. 让用sv来验证一块memory的读取1G空间的工程

    对地址空间分区间,平均分为多分,对每份地址采取固定地址读写和随机读写两种策略:连续写,连续读,读紧跟着写;同时注意边界地址的读写操作。

  3. uvm的架构

  1. 请画出时钟门控电路,要求时钟使能信号无效时将时钟输出门控到高(低)电平,门控过程中请注意不产生毛刺。

  1. 请用ROM(带初始值的只读存储器)实现以下verilog代码的对用功能

  2. 设计一个时序电路,输入时2个8bit的无符号数,输出是这两个数的最小公倍数。要求电路尽可能的小。请使用verilog语言实现。

    • 首先可以采用辗转相除法或者相减法求解最大公约数MCD;
    • 然后利用AB=MCDLCM,求解最小公倍数;
    • 其中辗转相减法和相除法运算可采用状态机的方式实现。


IC验证笔试题(平头哥)相关推荐

  1. IC验证笔试题(寒武纪)

    寒武纪笔试题 请简述:定宽数组.动态数组.关联数组和队列四种数据类型的各自特点. 数据类型 物理内存 索引 固定数组 编译时创建,之后不能修改 数字 动态数组 仿真时创建,仿真期间可以改变 数字 队列 ...

  2. ZEKU2021数字IC验证笔试题(解析)

    Zeku2022数字IC验证笔试 2.从综合出电路的电路看第一段代码比第二段代码优化的地方是 第一段代码: always @(posedge ck clk or negedge rst_n) beig ...

  3. 阿里平头哥数字IC验证笔试题

    文章目录 1.sv里面四值变量有哪些? Verilog-1995中有两种基本的数据类型: 变量和线网(net).所谓四值变量是指他们有四种取值: 0,1,Z和X.   reg(单比特或多比特的无符号数 ...

  4. 数字IC设计笔试题汇总(一)

    数字IC设计笔试题汇总(一) 快秋招了,这篇博客记录了一些最近看见的数字IC设计相关的笔试题,仅供参考 1. 用100MHz的时钟A去采样200MHz的时钟B(与A无关)产生的8bit信号是同步采样还 ...

  5. 数字IC设计笔试题汇总(二)

    数字IC设计笔试题汇总(二) 快秋招了,这篇博客记录了一些最近看见的数字IC设计相关的笔试题,仅供参考 1. 在边沿敏感的时序逻辑代码中使用(A)赋值,会导致综合前与综合后仿真结果不一致. A . 阻 ...

  6. IC/FPGA笔试题分析(五)

    下一个笔试题是华为,虽然只有单选和多选,但还是需要准备一下: 这是一个电路中的某一条关键路径,或者是一个单独的设计,都可以去求其最高频率. 考虑到有时钟抖动等许多情况,所以此电路的最小周期应该为: T ...

  7. IC/FPGA笔试题分析(六)用16bit加法器IP核实现8bit乘法运算(文末彩蛋)

    本来突发奇想,想建立一个群来召集各路同行加入,共同讨论数字IC以及FPGA方向的笔试,面试题目,效果比想象中的要好,大家气氛很好,踊跃发言,大胆讨论,解决了很多有意思的问题,这里挑出两个题目来记录一下 ...

  8. 2023 数字IC设计秋招复盘——数十家公司笔试题、面试实录

    最新更新日期:2023.04.02 1 目录/更新记录 1.1 笔试复盘篇 按笔试的时间顺序进行更新.备注:笔试时间可能会与实际时间有偏差. 序号 公司 岗位 链接 笔试时间 发布时间 0 禾赛 FP ...

  9. 华为2022数字芯片笔试题

    单选 1.ASIC开发流程中,如下环节的先后顺序是? A. RTL-> Synthesis->P&R B. Synthesis->P&R->RTL C. Syn ...

  10. 数字IC笔试题,大疆校招16题(仅供参考)

    \\\插播一条: 自己在今年整理一套单片机单片机相关论文800余篇 论文制作思维导图 原理图+源代码+开题报告+正文+外文资料 想要的同学私信找我. 数字IC笔试题,大疆校招16题(仅供参考) 1.异 ...

最新文章

  1. 第8章系统服务(简易音频播放器的实现)
  2. 正在研究d2010的dcu格式
  3. python 函数的定义与调用_Python函数定义和函数调用
  4. 【深入Cocos2d-x】探索Cocos2d-x中的内存管理-引用计数和自动释放池
  5. 单机搭建Android开发环境(五)
  6. UI5 plugin - uploadCollection
  7. 数据中心缩小是因为外包和云计算吗
  8. Linux 命令之 curl -- 文件传输工具/下载工具/网络接口调试
  9. web字体设置成平方字体_探索免费和开放的Web字体
  10. 学计算机没有女朋友绕口令,十句以上绕口令
  11. 延时delay1s程序 c语言,汇编语言软件延时1s的实现方法
  12. Quartz集群配置报错 This scheduler instance (XXXX) is still active but was recovered by another instance...
  13. 路透社:大众与江淮计划在合肥投资50.6亿元建新电动汽车工厂
  14. 如何成为一个Linux内核开发者(经典)
  15. 解决外网与内网或内网之间的通信,NAT穿透
  16. php 获取酷狗音乐真实地址
  17. 数据库高并发解决方案(二)部署优化
  18. 谷歌浏览器打开CSDN老是弹出安卓网页
  19. 在线时间戳格式化转换工具
  20. LVGL-gui_user.c

热门文章

  1. 鼓励别人谈论他们自己
  2. ubuntu16 解决机箱前置耳机无声
  3. 如何进行美国站税务审核
  4. Linux编辑grldr文件,使用syslinux完美引导GRLDR。
  5. linux的重启ip失效,linux配置ip 重启出错解决方法
  6. unity中三种数据存储方式ScriptableObject,Json,Xml和Dictionary的序列化
  7. python实现12306火车票查询
  8. 面对失败计算机科学家,面对巨大挫折,仍毫不畏惧、坚韧不拔的名人事例
  9. 马哥教育42期第二周作业
  10. vim显示缩进对齐线