0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

学会这些System Verilog方法,芯片验证入门没问题

jf_5P3RKFtu 来源:于博士Jacky 作者:于博士Jacky 2022-12-09 15:08 次阅读

1. 验证的主流语言为什么是System Verilog语言?

9922df96-7744-11ed-8abf-dac502259ad0.jpg

一个掌握Verilog语言的工程师初次看SystemVerilog都会有这样的感受,这就是Verilog啊,很容易啊,So easy啊。没错,确实是这样,System Verilog的产生就是因为芯片设计规模不断增长,功能日趋复杂,单纯的用Verilog和VHDL等硬件语言已经无法满足验证的需求,结合C,C++等软件语言,又显得难度太大,不容易掌握,因此产生了SystemVerilog,当然也产生了其他验证语言,比如Vera和e语言,但因为SystemVerilog结合了来自 Verilog、VHDL、C++的概念,还有验证平台语言(OpenVera和e语言)和断言语言(OVA和PSL),使得SystemVerilog在验证界坐稳了第一的宝座。它将硬件描述语言(HDL)与现代的高层级验证语言(HVL)结合了起来。使其对于进行当今高度复杂的设计验证的验证工程师具有相当大的吸引力。这些都使得SystemVerilog在一个更高的抽象层次上提高了设计建模的能力。随着不断地发展,System Verilog拥有芯片设计及验证工程师所需的全部结构,它集成了面向对象编程、动态线程和线程间通信等特性,作为一种工业标准语言,SV全面综合了RTL设计、测试平台、断言和覆盖率,为系统级的设计及验证提供强大的支持作用。另一方面,验证方法学(VMM、OVM、AVM和UVM等)的推动也功不可没,System Verilog能够和芯片验证方法学结合在一起,即作为实现方法学的一种语言工具。使用验证方法学可以大大增强模块复用性、提高芯片开发效率,缩短开发周期。

2.出镜率较高的数据类型

逻辑(logic)类型。

四状态类型:interger,reg,logic,time,wire,tri

双状态数据类型(更好的性能,更低的内存消耗)。

二状态类型:bit,int,byte,shortint,longint

队列,动态和关联数组(自带搜索和分类功能)

队列和数组的操作,常常用在reference model建模或者checker的数据比对过程中。队列的操作包括常用函数:insert,delete,push_back, pop_back, push_front, push_back等;数组的操作(min最小值,max最大值,unique排除重复,find索引相关,sum求和,sort升序,rsort降序,reverse倒序,shuffle乱序等。

关联数组(对于非常大的寻址空间存储建模,我们只需要访问边界值,以及中间个别一些空间进行验证,关联数组提供保存稀疏矩阵的元素)。

993dbe1a-7744-11ed-8abf-dac502259ad0.jpg

枚举类型

类似于宏定义,或者使用参数

typedef enum{WAIT, DECODE, READY}fsmstate_e;

fsmstate_e pstate,nstate;

995dfaf4-7744-11ed-8abf-dac502259ad0.jpg

结构体(支持抽象数据结构)用struct建语句创建数据结构。

typedef struct{bit[7:0] r, g, b} pixel_s;

pixel_s my_pixel;

997ba46e-7744-11ed-8abf-dac502259ad0.jpg

fork...join块可以指定一条或多条语句,每一条语句都应该作为并发进程执行。

选项 描述
join 父进程会阻塞直到这个分支产生的所有进程结束。
join_any 父进程会阻塞直到这个分支产生的任意一个进程结束。
join_none 父进程会继续与这个分支产生的所有进程并发执行。在父线程执行一条阻塞语句之前,产生的进程不会启动执行。

9989ea2e-7744-11ed-8abf-dac502259ad0.png

Function和Task

function执行不消耗时间,带时间的操作如#100ns,@,wait等都不能出现在function。所以一般而言,function是不能调用task的,但是在fork……join_none中例外。函数可以有返回值。

消耗时间的操作用task,比如driver里面对信号的驱动过程,一般来讲是在task中完成,但是具体的算法是由function完成的,所以,task中调用function。task没有返回值。

3. System Verilog的Interface

99a04d46-7744-11ed-8abf-dac502259ad0.jpg

这是一个比较新的概念,Interface封装了连接性:接口可以作为单个项目通过端口传递,从而用单个名称替换一组名称。这减少了建模端口连接所需的代码量,并提高了端口连接的可维护性和可读性。封装功能,与通过接口连接的模块隔离。因此,通信协议的抽象级别和粒度可以完全独立于模块进行细化。

可以包含参数、常量、变量、函数和任务、流程和连续分配,这对于系统级建模和测试应用程序都很有用。

可以帮助构建功能覆盖记录和报告、协议检查和断言等应用程序。

可以用于无端口访问:接口可以作为模块中的静态数据对象直接实例化。因此,可以从设计中的不同点调用用于访问接口内部状态信息的方法来共享信息。

灵活性:接口可以像模块一样参数化。此外,可以使用未指定的接口实例化(称为泛型接口)创建模块头。这个接口可以在稍后实例化模块时指定。

4. System Verilog的面向对象(OOP)

面向对象使用户能够创建复杂的数据类型,并且将它们跟使用这些数据类型的程序紧密的结合在一起。用户可以在更加抽象的平台上建立测试模型,通过调用函数改变信号,而不是直接改变电平信号。

99c7a148-7744-11ed-8abf-dac502259ad0.jpg

从结构体开始:程序设计=数据结构+算法实现

99e90374-7744-11ed-8abf-dac502259ad0.jpg

定义一个类

类将结构体和它相应的函数集合在一起,成为一种新的数据组织形式。在这种新的数据组织形式中,有两种成分,一种是来自结构体的数据变量,在类中被称为成员变量;另外一种来自与结构体相对应的函数,被称为一个类的接口。

9a0a74c8-7744-11ed-8abf-dac502259ad0.jpg

继承一个类

分析所要解决的问题,并找出其中的共性,用这些共性构建一个基类(或者父类);在此基础上,将问题分类,不同的分类具有各自的共性,使用这些分类的共性构建一个派生类(或者子类)。

9a26d172-7744-11ed-8abf-dac502259ad0.jpg

多态:多个程序使用一个共同的名字的现象。

9a4be2e6-7744-11ed-8abf-dac502259ad0.jpg

静态变量和方法

一个类的所有实例都共享变量的一个版本,也就是说所有实例都共享同一个copy,该变量对所有实例都是可见并相同的。使用关键字static产生。

9a6b99e2-7744-11ed-8abf-dac502259ad0.jpg

类的参数化定义

9a84014e-7744-11ed-8abf-dac502259ad0.jpg

9a95d612-7744-11ed-8abf-dac502259ad0.jpg

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Verilog
    +关注

    关注

    28

    文章

    1326

    浏览量

    109302
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72900
  • 芯片验证
    +关注

    关注

    5

    文章

    32

    浏览量

    47057

原文标题:学会这些System Verilog方法,芯片验证入门没问题

文章出处:【微信号:于博士Jacky,微信公众号:于博士Jacky】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何快速入门FPGA

    。 学习如何使用这些工具进行FPGA的功能仿真、代码验证以及配置管脚等操作。 熟悉FPGA硬件平台: 查阅FPGA芯片手册,了解器件特性,包括内部RAM大小、乘法器数量等资源。 了解FPGA
    发表于 04-28 09:06

    如何快速入门FPGA?

    。 学习如何使用这些工具进行FPGA的功能仿真、代码验证以及配置管脚等操作。 熟悉FPGA硬件平台: 查阅FPGA芯片手册,了解器件特性,包括内部RAM大小、乘法器数量等资源。 了解FPGA
    发表于 04-28 08:54

    UVVM(通用 VHDL 验证方法

    UVVM(通用 VHDL 验证方法) 简介 UVVM(通用 VHDL 验证方法)是一种免费的开源方法和库,用于开发非常结构化的基于 VHD
    发表于 01-02 12:59

    讲一讲芯片设计中的verilog是什么

    相信不少人都听过verilog这个词,今天我就想讲一讲我所理解的verilog是什么。
    的头像 发表于 12-04 13:52 510次阅读

    Verilog设计快速入门秘籍

    Verilog设计快速入门秘籍,拿走不谢!
    发表于 11-03 12:00

    芯片设计中逻辑仿真和数字验证介绍

    芯片的设计规格和功能要求。根据这些要求,制定验证计划,并编写测试用例。 逻辑仿真:逻辑仿真是通过软件工具模拟芯片电路的行为,验证电路的功能是
    的头像 发表于 09-14 17:11 776次阅读

    Testcase在芯片验证中的作用

    随着半导体技术的快速发展,集成电路芯片的复杂度日益增加,芯片设计中的验证工作变得越来越重要。验证的目的是确保芯片在各种工况下的功能正确性和性
    的头像 发表于 09-09 09:32 615次阅读

    基于VMM验证方法学的MCU验证环境

    1 简介 随着设计的复杂程度不断增加,要求把更多的资源放到验证上,不但要求验证能够覆盖所有的功能,还希望能够给出大量的异常情况来检查DUT对应异常的处理状态,这在传统测试方法下往往是难以实现
    的头像 发表于 08-25 16:45 628次阅读

    Verilog例程 Verilog HDL程序设计教程

    Verilog大量例程(简单入门到提高)
    发表于 08-16 11:49 0次下载

    System Verilog的概念以及与Verilog的对比

    Verilog模块之间的连接是通过模块端口进行的。 为了给组成设计的各个模块定义端口,我们必须对期望的硬件设计有一个详细的认识。 不幸的是,在设计的早期,我们很难把握设计的细节。 而且,一旦模块
    的头像 发表于 06-12 10:05 786次阅读

    介绍Verilog的2大类时序控制方法

    Verilog 提供了 2 大类时序控制方法:时延控制和事件控制。事件控制主要分为边沿触发事件控制与电平敏感事件控制。
    的头像 发表于 06-02 11:44 675次阅读
    介绍<b class='flag-5'>Verilog</b>的2大类时序控制<b class='flag-5'>方法</b>

    谈谈Verilog/System Verilog和C的几种交互模式

    PLI全称 Program Language Interface,程序员可以通过PLI在verilog中调用C函数,这种访问是双向的。
    的头像 发表于 06-01 17:32 927次阅读
    谈谈<b class='flag-5'>Verilog</b>/<b class='flag-5'>System</b> <b class='flag-5'>Verilog</b>和C的几种交互模式

    谈谈system Verilog 和C的交互

    PLI全称 Program Language Interface,程序员可以通过PLI在verilog中调用C函数,这种访问是双向的。这些用户定义的系统任务和函数的名称必须以美元符号"$" 开头。大家用得比较多的PLI函数有$display,$finish等。
    发表于 05-31 09:59 390次阅读
    谈谈<b class='flag-5'>system</b> <b class='flag-5'>Verilog</b> 和C的交互

    Verilog的设计方法介绍

    Verilog 的设计多采用自上而下的设计方法(top-down)。即先定义顶层模块功能,进而分析要构成顶层模块的必要子模块;
    的头像 发表于 05-29 15:44 1040次阅读
    <b class='flag-5'>Verilog</b>的设计<b class='flag-5'>方法</b>介绍

    浅谈System Verilog的DPI机制

    System Verilog(SV)把其他编程语言统一成为外语,Foreign Programming Language(FPL)。
    的头像 发表于 05-23 15:39 1151次阅读
    浅谈<b class='flag-5'>System</b> <b class='flag-5'>Verilog</b>的DPI机制