• SystemVerilog基本语法总结(下)


    2018年IC设计企业笔试题解析-(验证方向)
    1、请简述:定宽数组,动态数组,关联数组,队列四种数据类型的各自特点
    解析:
    (1)定宽数组:其宽度在声明的时候就指定了,故其宽度在编译时就确定了。
    (2)动态数组:可以在仿真时分配空间或者调整宽度,这样在仿真中就可以使用最小的存储量。在声明时,其下标为空[ ],使用new[ ]操作符来分配空间。
    (3)关联数组:SystemVerilog提供关联数组来保存稀疏矩阵的元素。一般用在对非常大的空间进行寻址,当对一个非常大的地址空间进行寻址时,SystemVerilog只为实际写入的元素分配空间,这样可以节省空间。
    (4)队列:结合了链表和数组的优点。可以在队列中额任何位置增加或者删除元素,这类操作在性能上的损失比动态数组小得多,因为动态数组需要分配新的数组并复制所有元素的值。队列也可以通过索引实现对任何一元素的访问。
    2、简述在TB中使用interface和clocking block的好处
    解析:
    (1)由于在设计当中往往含有几百个端口信号,需要数页来声明信号与端口。所有这些连接都是极易出错的。因为一个信号可能流经过几个设计层次,它必须一遍又一遍的声明和互联,最糟糕的是如果你想添加一个新的信号,它必须在多个文件中定义和连接。而通过interface,便可以解决这些问题,interface包含了连接,同步,甚至是两个或者多个块之间的通信,只要在interface里面声明过的信号与端口,在其它模块都可以共用。
    (2)使用clocking block,可以保证测试平台在正确的时间点与信号交互,而不只是随着一个同步时钟采样与验证,一个时钟块,可以对应一个时钟域。
    3、以下代码中,x取各个值的概率是多少?
    x dist {0:=1,[1:3]:=1};
    解析:
    x取0,1,2,3的概率都为1/4。
    4、SV OOP编程中什么需求下必须使用virtual methods(virtual function/ virtual task)
    解析:
    当你需要对象调用的methods(funtion或者task)可以随着真正的对象的类型去选择method而不是根据句柄的类型去调用methods的时候,你就必须将类里的method声明为Virtual method。
    5、factory 实现包含哪三步?使用factory带来什么好处?
    解析:
    factory的实现包含三步
    (1)注册:当定义一个类的时候,必须要对其类型进行注册。
    (2)实例化对象:在对component或object型对象进行实例化的时候要使用静态方法create(),不能采用new()去实例化。也就是要用如下实例化格式:
    object_name = class_type::type_id::create("object_name",this);
    (3)重载override:在需要override的时候,按照类型或者名称去override原来的对象。
    Factory的好处是便于创建模块化、可复用的测试平台。同时Factory使得类的重载与复用变得更加简单。
    6、analysis port 是否不连或者可以连到多个impport?
    解析:
    都可以
    第一,默认情况下,一个 analysis port( analysis export )可以连接多个 IMP ,也就是说, analysis port( analysis export)与 IMP 之间的通信是一种一对多的通信,而PORT 和 EXPORT 与 IMP 的通信是一种一对一的通信。 analysis port ( analysis export)更像是一个广播。
    第二,作为 PORT 和 EXPORT ,有 put, get, transport 操作,虽然如前面所示,一个 PORT 要么是 put_port,要么是 get_port,要么是 transport_port ,不可能是三者兼有,但是毕竟是有这三种操作。但是对于 analysis port( analysis export)来说,它只有一种操作 write 。 write 的意思就是广播一下,剩下的事情就与他无关了。
    第三,作为 PORT 和 EXPORT,都有阻塞和非阻塞的区分。相应的 put, get,transport 操作也分成了阻塞和非阻塞的。但是对于 analysis port 和 analysis export 来说, 没有阻塞和非阻塞的概念。 因为它本身就是广播, 不必等待与其相连的其它 port的响应。所以不存在阻塞和非阻塞。
    7.请简述一个slave vip的 dataflow
    解析:
    Driver 向sequencer申请发生请求,然后sequencer通过sequence里面的body产生激励信号再发送给Driver,Driver再把激励信号转换为可以驱动DUV的时序信号。
    8.runphase和 mainphase能不能同时存在?为什么?
    解析:
    可以同时存在,
    UVM 把 run_phase 又分割成了 12 个小的 phase, 这 12 个小的 phase各自在执行顺序方面与 run_phase 完全相同,即自下而上的启动,同时运行。
    这 12 个动态运行的 phase 与 run_phase 之间有什么关系。从本小节的图中可以看出,这 12 个动态运行的 phase与 run_phase 之间是并列的关系,这是不是也意味着它们之间的执行也是并列的呢?答案是确定的。
    9.如果一个模块的寄存器接口由APB变为AXILite,在寄存器模型的使用中需要做什么改变?
    解析:
    因为AXI-lite相对于APB而言的数据读写通道是分离的,控制和数据通道分离,就可以不等需要的操作完成,就发出下一个操作,流水线操作,所以要从field字段属性,和register属性和registerfile三个方面修改,要创建对应的RAL适配器;
    要添加如下的信号:
    (1)读地址通道,包含ARVALID, ARADDR, ARREADY信号;
    (2)读数据通道,包含RVALID, RDATA, RREADY, RRESP信号;
    (3)写地址通道,包含AWVALID,AWADDR, AWREADY信号;
    (4)写数据通道,包含WVALID, WDATA,WSTRB, WREADY信号;
    (5)写应答通道,包含BVALID, BRESP, BREADY信号;
    (6)系统通道,包含:ACLK,ARESETN信号。
    10、什么情况使用宏定义,什么情况使用运行时参数?
    解析:
    Verilog
    1)宏
    全局作用范围,且可以用于位段或类型定义。当需要局部常量时,可能引起冲突。
    2)Parameter
    作用范围仅限于单个module
    12:cpu在芯片中的主要作用有什么?
    解析:
    cpu简称中央处理器,它是软硬交互的一个节点,通过写C代码可以控制硬件电路的工作,CPU在这里就是将C代码经过编译器得到的机器码转化为对具体电路的控制和逻辑运算。例如:在C代码里要完成对某soc芯片内部一个寄存器的读写操作,那么在芯片内部中,cpu一般作为总线上的master控制总线,通过对总线的读写操作,进而控制在总线上slave模块的读写控制。
    13:arm中执行的c程序如何和uvm的seq进行交互。
    解析:
    SystemVerilog可以通过DPI,与C/C++语言进行交互。在UVM的Sequence里面通过调用DPI接口,完成交互。arm中的c程序,在硬件里,就是执行一段二进制代码,属于DUV的部分,相当于uvm和duv内部进行交互,获取c程序(实际为2进制程序)执行的中间结果。
  • 相关阅读:
    【 数据结构(C语言)】栈的应用——行编辑程序
    【 数据结构 (C语言)】栈的应用(二)——括号匹配问题
    节点
    页面加载--延迟加载
    雅黑php 探针
    Swiper 触屏滑动切换
    tab 选择悬停展示
    翻牌抽奖功能讲解
    公告信息滚动功能
    织梦提交表单不进行跳转
  • 原文地址:https://www.cnblogs.com/zhangxianhe/p/11797645.html
Copyright © 2020-2023  润新知