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进制程序)执行的中间结果。

原文地址:https://www.cnblogs.com/zhangxianhe/p/11797645.html

时间: 2024-10-17 04:31:35

SystemVerilog基本语法总结(下)的相关文章

SystemVerilog基本语法总结(中)

Systemverilog 语法总结(中) 上一个博客分享了SV基本的概念,这一博客继续分享,等下一个博客分享一个公司的验证的笔试题目. l 事件 背景: Verilog中当一个线程在一个事件上发生阻塞的同时,正好另一个线程触发了这个事件,则竞争就出现了.如果触发线程先于阻塞线程,则触发无效(触发是一个零宽度的脉冲). 解决方法: Systemverilog 引入了triggered()函数,用于检测某个事件是否已被触发过,包括正在触发.线程可以等待这个结果,而不用在@操作符上阻塞. 例子: e

javaScript基础语法(下)

4.逻辑控制语句 4.1条件结构 条件结构分为if结构和switch结构. 通常在写代码时,您总是需要为不同的决定来执行不同的动作.您可以在代码中使用条件语句来完成该任务. 在 JavaScript 中,我们可使用以下条件语句: if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码. if...else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码. if...else if....else 语句- 使用该语句来选择多个代码块之一来执行. swi

ECMAScript 5.0 基础语法(下)“稍微重点一点点”

接上篇 七.常用内置对象(复杂数据类型)(重点) (1)数组Array 创建:例  var colors = ['red','blue','green']       #推荐这样,因为简单粗暴 或:var colors = new Array(); color[0] = 'red'; color[1] = 'blue'; color[2] = 'green';           #很繁琐,忘了它吧 数组的常用方法: 1 //数组的合并concat() 2 var north = ['北京','

03_JAVASE_语法基础下.ppt_练习2

练习2: 通过键盘输入一个数字,判断该数字是否为质数 质数:只能被1和自己整除的数字 本来的答案是: public class TestScanner { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("请输入一个整数:"); int i = scan.nextInt(); for (int j = 2; j < i; j++)

03_JAVASE_语法基础下.ppt_练习1

练习1: 通过键盘输入一个数字,打印其所有因子并对所有因子求和(因子不包含自己) 因子就是能被这个数整除的数字 例如:10的因子有 12 5 public class TestScanner { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("请输入一个整数:"); int i = scan.nextInt();//i就是从键盘上输入的

Verilog与SystemVerilog编程陷阱:如何避免101个常犯的编码错误

这篇是计算机类的优质预售推荐>>>><Verilog与SystemVerilog编程陷阱:如何避免101个常犯的编码错误> 编辑推荐 纠错式学习,从"陷阱"中学习编程,加深对语言本身的理解. 逆向式学习,从错误中学习避免错误的方法,让读者写出更好的代码. 案例式学习,将101个"陷阱"分类汇编,以针对性案例引导读者掌握编程要点. 译者序 译者序 随着电子设计自动化(Electronic Design Automation,EDA)

转:阮一峰Flex 布局教程:语法篇

作者: 阮一峰 日期: 2015年7月10日 网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现. 2009年,W3C提出了一种新的方案----Flex布局,可以简便.完整.响应式地实现各种页面布局.目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能. Flex布局将成为未来布局的首选方案.本文介绍它的语法,下一

用C++/CLI搭建C++和C#之间的桥梁(二)—— 基本语法

托管对象的创建和引用 在前文中我们已经演示过创建一个托管对象,对于如下C#代码: System.Object x = new System.Object(); 其在C++/CLI中的等价代码如下: System::Object^ x = gcnew System::Object(); 和传统的C++创建的语法比较下, P* x = new P(); 我们不难发现,对于托管对象,主要引入了如下两个语法: 用gcnew代替new实现托管对象的创建 用^代替*实现托管对象的指针 这种方式创建的对象是可

Flex 布局教程:语法篇(转自阮一峰的网络日志)

作者:阮一峰(转自阮一峰的网络日志,如有侵权,立即删除) 网页布局(layout)是 CSS 的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现. 2009年,W3C 提出了一种新的方案----Flex 布局,可以简便.完整.响应式地实现各种页面布局.目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能. Flex 布局将成为未来布局的首选方案