![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SystemVerilog for Verification
文章平均质量分 76
如筏喻者
这个作者很懒,什么都没留下…
展开
-
[转]怎样在systemverilog DPI中调用SV,C与C++(二)
有的时候需要交互struct,union数据类型,下面举个简单例子。在SV里定义这个一个结构体:typedef struct { int id; string name;} xaction; 同样的,在C里定义同样的结构体,结构体名可以不一致:typedef struct { int id; char* name; } c_xaction;下面把这个结构体传递给C,让C打印出来,SV中做好接口:import "DPI-C" functi转载 2022-04-25 20:25:03 · 1062 阅读 · 0 评论 -
DPI-C SV与C语言数据类型映射
1、是什么??DPI(Direct Programming Interface),全称直接编程接口,是SV与其它语言(C/C++)交互的接口,基本上是唯一接口了。2、为什么??说完是什么,那么我们可以考虑一下了,为什么需要这个接口呢?或者说为什么SV/UVM需要与其它语言产生交互呢?其实就是SV和C之间的一种转换关系。这就涉及到了一些应用场景,我们可以说几个看看。(1)我们知道,在模块级乃至子系统级的验证,使用SV就完全够用了,而在更上面的层级,例如系统级,多采用大量的C代码组成。那么为了完成.转载 2022-03-10 15:05:55 · 4041 阅读 · 0 评论 -
如何通过DPI-C连接Verilog/SystemVerilog和C/C++
1. 在Verilog中调用C函数首先:准备好纯C/C++代码。比如:#include int helloFromCpp(int a) { // 0 is 0 // 1 is 1 // 2 is Z // 3 is X int a_int = a; cout << "(C++) a is " << a_int << endl; return 0; }其次:在verilog调用C函数module automatic test;转载 2022-03-10 14:58:06 · 1156 阅读 · 0 评论 -
SystemVerilog与C語言的接口(SystemVerilog DPI C++)
SystemVerilog DPI C++SystemVerilog DPI (Direct Programming Interface) is an interface which can be used to interface SystemVerilog with foreign languages. These Foreign languages can be C, C++, SystemC as well as others.DPI allows the user to easily call转载 2022-03-10 14:41:34 · 639 阅读 · 0 评论 -
Systemverilog、C、Verilog与SystemC之间的相互调用方法
这些不同变成语言之间的调用主要包括以下几种方式:1、verilog和c之间的相互调用;2、systemverilog和c之间的相互调用;3、systemverilog中调用systmc;4、通过CPU执行c代码,从而实现Verilog和c的交互第一种,verilog中调用c函数verilog通过PLI(Program Language Interface)调用c函数。这些用户定义的系统任务和函数的名称必须以美元符号""开头。大家用得比较多的PLI函数有" 开头。大家用得比较多的PLI函数有"开头转载 2022-03-10 14:35:04 · 3148 阅读 · 0 评论 -
[转]Systemverilog中的iff事件控制
使用systemverilog已经有一段时间了,主要是其中的部分新特性能够简化代码的编写,比如interface、支持多维端口等。为了进一步深入学习systemverilog,最近抽空更广泛的学习了一些systemverilog的内容。本文记录一下Systemverilog中的事件控制和sequence控制相关内容的学习情况。Systemverilog在@事件控制中添加了iff修饰词,只有当iff后的条件为真时,@事件才会触发。注意,iff可以在always和always_ff下使用,但是不能在alway转载 2021-12-29 19:41:15 · 743 阅读 · 0 评论 -
[转]《SystemVerilog验证测试平台编写指南》学习笔记——抽象类和纯虚方法
抽象类和纯虚方法抽象类:即可以被扩展但是 不能被直接实例化的类,它使用“ virtual”关键字进行定义。纯虚方法:这是一种没有实体的方法原型。一个由抽象类扩展而得来的类只有在所有虚方法都有实体的时候才能被例化。关键词“pure”表明一个方法声明是原型定义,而不仅仅是空的虚方法。纯虚方法只能在抽象类中定义,但是抽象类中也可以定义非纯方法。使用纯虚方法的抽象类/*可以声明BaseTr类型的句柄,但是却不能创建该类型的对象,需要首先扩展该类并对所有的纯虚方法提供具体实现。*/virtu转载 2021-12-09 19:53:41 · 158 阅读 · 0 评论 -
[转]《SystemVerilog验证测试平台编写指南》学习笔记——参数化的类
参数化的类——可以用来处理多种数据类型,类似于“模板”一、一个简单的堆栈使用整数的堆栈class IntStack; local int stack[100]; //保存数据值 local int top; function void push(input int i); //从顶端压栈 stack[++top] = i; endfunction : push function int pop(); //从顶端出栈 return stack[top--]; endfunc转载 2021-12-09 19:52:35 · 260 阅读 · 0 评论 -
[转]《SystemVerilog验证测试平台编写指南》学习笔记——回调
一、回调如何创建一个可以不做任何更改就能在所有测试中使用的验证环境?要做到这一点的关键就是测试平台必须提供一个“钩子”,以便测试程序在不修改原始类的情况下注入新的代码。驱动器的作用:注入错误放弃事务延迟事务将本事务跟其他事务同步将事务放进记分板收集功能覆盖数据与其试图预测所有可能的错误、延迟或者事务流程中的干扰,不如使用回调的方法,这时驱动器仅需要回调一个在顶层测试中定义的子程序。这种回调子程序可以在每个测试中做不同的定义,这样测试就可以使用回调来为驱动器增加新的功能而不用编辑Dri转载 2021-12-09 19:51:33 · 259 阅读 · 0 评论 -
[转]《SystemVerilog验证测试平台编写指南》学习笔记——功能覆盖率(三)
文章目录一、交叉覆盖率1、基本的交叉覆盖率的例子2、对交叉覆盖仓进行标号3、排除掉部分交叉覆盖仓4、从总体覆盖率的度量中排除掉部分覆盖率5、从多个值域中合并数据6、交叉覆盖的替代方式二、通用的覆盖组1、通过数值传递覆盖组参数2、通过引用传递覆盖组参数三、覆盖选项1、单个实例的覆盖率2、覆盖组的注释3、覆盖阈值4、打印空仓5、覆盖率目标四、覆盖率数据的分析五、在仿真过程中进行覆盖率统计一、交叉覆盖率覆盖点记录的是单个变量或者表达式的观测值,而转载 2021-12-08 21:00:10 · 519 阅读 · 0 评论 -
[转]《SystemVerilog验证测试平台编写指南》学习笔记——功能覆盖率(二)
文章目录一、覆盖组详解1、在类里定义覆盖组二、覆盖组的触发1、使用回调函数进行采样2、使用事件触发的覆盖组3、使用SV断言进行触发三、数据采样1、个体仓和总体覆盖率2、自动创建仓3、限制自动创建仓的数目4、对表达式进行采样5、使用用户自定义的仓发现漏洞6、命名覆盖点的仓7、条件覆盖率8、为枚举类型创建仓9、翻转覆盖率10、在状态和翻转中使用通配符11、忽略数值12、不合法的仓13、状态机的覆盖率一、覆盖组详解覆盖组与类相似,一次定义后转载 2021-12-08 20:59:14 · 452 阅读 · 0 评论 -
[转]《SystemVerilog验证测试平台编写指南》学习笔记——功能覆盖率(一)
功能覆盖率一、覆盖率的类型1、代码覆盖率2、功能覆盖率3、漏洞率4、断言覆盖率二、功能覆盖策略1、收集信息而非数据2、只测量将会使用到的内容3、测量的完备性三、功能覆盖率的简单例子功能覆盖率是用来衡量哪些设计特征已经被测试程序测试过的一个指标。可以使用一个反馈环路来分析覆盖的结果,并决定采取哪种行动来达到100%的覆盖率。首要的选择式使用更多的种子来运行现有的测试程序,其次是建立新的约束。只有在确实需要的时候才会创建定向测试。覆盖率收敛:显式的覆盖率是在测试环转载 2021-12-08 20:58:03 · 571 阅读 · 0 评论 -
[转]《SystemVerilog验证测试平台编写指南》学习笔记——线程以及线程间的通信(二)
一、线程间的通信二、事件1、在事件的边沿阻塞2、等待事件的触发3、在循环中使用事件4、传递事件5、等待多个事件一、线程间的通信测试平台中的所有线程都需要同步并交换数据。多个线程可能会同时访问同一资源。在最高的层面上,线程需要彼此交换数据,例如从发生器传递给代理的事务对象。所有这些数据交换和控制的同步被称为线程间通信(IPC),在SV中可以使用事件、旗语和信箱来完成。二、事件Verilog事件可以实现线程的同步,一个线程总是要等待一个带@操作符的事件。这个操..转载 2021-12-07 15:07:24 · 245 阅读 · 0 评论 -
[转]《SystemVerilog验证测试平台编写指南》学习笔记——线程以及线程间的通信(一)
在实际硬件中,时序逻辑通过时钟沿来激活,组合逻辑的输出则是随着输入的变化而变化。所有这些并发的活动在Verilog的寄存器传输级上是通过initial和always块语句、实例化和连续赋值语句来模拟的。为了模拟和检验这些语句块,测试平台使用许多并发执行的线程。在测试平台的环境里,大多数语句块被模拟成事务处理器,并运行在各自的线程里。一、线程的使用1、使用fork…join和begin…end2、使用fork…join_none来产生线程3、使用fork…join_any实现线程同步4、动转载 2021-12-07 15:06:29 · 153 阅读 · 0 评论