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

    文章

    1343

    浏览量

    109918
  • C++
    C++
    +关注

    关注

    21

    文章

    2098

    浏览量

    73452
  • 芯片验证
    +关注

    关注

    5

    文章

    34

    浏览量

    47178

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

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

收藏 人收藏

    评论

    相关推荐

    如何自动生成verilog代码

    介绍几种自动生成verilog代码的方法
    的头像 发表于 11-05 11:45 125次阅读
    如何自动生成<b class='flag-5'>verilog</b>代码

    system verilog语言简介

    ICer需要System Verilog语言得加成,这是ICer深度的表现。
    发表于 11-01 10:44 0次下载

    如何利用Verilog-A开发器件模型

    Verilog-A对紧凑型模型的支持逐步完善,在模型的实现上扮演越来越重要的角色,已经成为紧凑模型开发的新标准。而且Verilog-A能够在抽象级别和应用领域中扩展SPICE建模和仿真功能,因此学会
    的头像 发表于 10-18 14:16 243次阅读
    如何利用<b class='flag-5'>Verilog</b>-A开发器件模型

    【「数字IC设计入门」阅读体验】+ 概观

    ,主要讲述了芯片设计过程中仿真验证方法,用于验证设计是否符合要求、用好这些仿真方法可以提高开发效
    发表于 09-24 10:58

    十天学会单片机可能吗?单片机入门需要多久?

    学习单片机的过程,就像学习任何其他技能一样,不仅在于书本上的知识,更在于实践和应用的能力。许多人可能会问:十天能学会单片机吗?答案是:可以,但这取决于你所定义的“学会”到什么程度。首先,让我们明确
    的头像 发表于 09-05 08:00 699次阅读
    十天<b class='flag-5'>学会</b>单片机可能吗?单片机<b class='flag-5'>入门</b>需要多久?

    名单公布!【书籍评测活动NO.40】数字IC设计入门,多角度透视芯片设计

    的设计和仿真方法,避免了Verilog语法书中简单的语法堆砌及填鸭式的灌输。第4章是在前两章的基础上,通过实例进一步阐述设计方法中的精髓。第5章详细介绍了作为当今数字芯片主流的SoC
    发表于 08-08 15:31

    机器学习中的交叉验证方法

    在机器学习中,交叉验证(Cross-Validation)是一种重要的评估方法,它通过将数据集分割成多个部分来评估模型的性能,从而避免过拟合或欠拟合问题,并帮助选择最优的超参数。本文将详细探讨几种
    的头像 发表于 07-10 16:08 788次阅读

    芯片测试和芯片验证的区别

    这是芯片在设计过程中的一个环节,主要通过EDA(电子设计自动化)工具进行仿真检验。它的主要目的是在芯片生产之前,验证芯片设计是否符合预定的需求规格,是否已经消除了所有的风险,发现并更正
    的头像 发表于 05-08 16:52 1735次阅读

    如何快速入门FPGA

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

    如何快速入门FPGA?

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

    verilog调用模块端口对应方式

    Verilog是一种硬件描述语言(HDL),广泛应用于数字电路设计和硬件验证。在Verilog中,模块是构建电路的基本单元,而模块端口对应方式则用于描述模块之间信号传递的方式。本文将介绍
    的头像 发表于 02-23 10:20 1540次阅读

    Verilog HDL数字集成电路设计方法概述

    电子发烧友网站提供《Verilog HDL数字集成电路设计方法概述.zip》资料免费下载
    发表于 02-03 09:27 2次下载

    UVVM(通用 VHDL 验证方法

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

    开源VHDL验证方法 (OSVVM)

    电子发烧友网站提供《开源VHDL验证方法 (OSVVM).docx》资料免费下载
    发表于 12-26 09:57 0次下载

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

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