赞
踩
准备暑期实习之前看了看要准备的东西在这里记录一下,大多数是网上搜集的资料。
首先是中英文的自我介绍(毕竟还是想去外企的,都准备一下)
手撕题目
时序设计的本质就是满足每一个触发器的建立/保持时间。
SystemVerilog:由Verilog发展而来的硬体描述、硬件验证统一语言,前一部分基本上是2005年版Verilog的扩展,而后一部分功能验证特性则是一门面向对象程序设计语言。面向对象特性很好地弥补了传统Verilog在芯片验证领域的缺陷,改善了代码可重用性,同时可以让验证工程师在比寄存器传输级更高的抽象级别,以事务而非单个信号作为监测对象,这些都大大提高了验证平台搭建的效率。[1]
逻辑型变量 logic 可以代替reg和wire,如果某个变量有多个驱动源,那只能使用wire定义。
多维压缩数组
枚举型变量,使用一系列有实际字面意义的名称来代表若干变量:过去用parameter来描述有限状态机。在SystemVerilog中,使用枚举更加方便。
新增数据类型(byte 8位)、(shortint 16位)、(int 32位)、(longint 64位)、(bit,1位)
结构体和联合体
条件、选择语句的唯一性和优先性(unique,priority)
过程代码(组合逻辑:always_comb、时序逻辑:always_ff、锁存器:always_latch),防止综合处不符合预期的硬件模型。
接口,引入interface,减少大量需要声明的端口名称。
专门针对验证的特性:新的数据类型(string),提供了动态数组、关联数组和队列(queues)。
类
含约束的随机化:可以对定义在类或者其他语句块中的整数型变量进行随机化。
断言:由sequences,properties组成。自动检查定义的属性是否得到满足,如果违背则会给出警告。
功能覆盖:在硬件验证中,功能覆盖是指验证过程中对人工定义信号事件的数据采样和收集过程。功能覆盖率在某种程度上反映了被测设计在所给输入激励下,其内部功能正确与否被检测到的百分比。功能覆盖率越高,一般代表测试越完备。
除了上述特性,SystermVerilog还在以下方面对传统Verilog进行了增强:
过程赋值操作符(包括阻塞和非阻塞)能够直接对数组进行操作
端口(输入、输出、双向)可以支持更多的数据类型,包括结构体、枚举、实数等
For循环内部可以自动定义变量,并为它添加了continue
和break
功能
在原有的while
循环基础上添加了do-while
循环
可以使用关键字const
来声明常量
可以对整个数组进行初始化
预处理器的字符串宏的功能得到增强
除了原有的并发过程语句块fork/join
结构,还提供join_none
和join_any
两种代码块结尾方式
任务的端口能够被声明为引用类型(ref
),这使得任务能够直接获取任务参数自身(引用传递),而不是一个临时复制的数值(值传递)。因此,对输入方向的形式参数的操作会直接改变对应的实际参数。
函数能够被声明为空类型void
,即不返回任何数值
参数(parameters
)可以被声明为任何类型,包括用户使用typedef
定义的新类型
提供SystemVerilog DPI(即SystemVerilog直接编程接口)来连接以C语言、C++编写的模块
UVM
UVM验证方法学是基于systemverilog语言形成的一个高效的验证方法。它的主要特点是提高了代码的复用性,使得验证人员能通过代码移植复用修改快速搭建验证平台,从而将主要精力放在具体测试用例的编写上。另一方面,UVM封装了很多好用的方法,这使得验证人员不必过多关注底层实现,而且减少了验证平台的调试时间。
验证用于找出DUT(device under test)中的bug,这个过程通常是把DUT放入一个验证平台中来实现的。一个验证平台要实现如下基本功能:
一个简单的验证平台框图如图2-1所示。在UVM
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。