systemverilog
文章平均质量分 67
hh199203
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
两个无时钟源信号之间的检测
最近遇到一个问题,需要检测两个无时钟源的信号,条件是如果a信号的上升沿来了后,如果b信号的上升沿在10ns到来,则打印pass,否则打印error。本文主要记录了解决一个问题的过程,从分析问题,到提出方案,再到代码实现。原创 2025-01-02 12:45:28 · 684 阅读 · 0 评论 -
DPI-C多die场景下的scope设置
在IC验证仿真过程中,当SV侧不同scope下有多个相同的task,在C侧如何去指定调用。多die环境下,在SV侧,每个die都有各自独立的die_tb以及VIP,每个die所在的die TB中,都会export相同的名字的function或task,然而在C一侧,在使用SV侧export的function/task时,它不知道是哪个die TB对应的function/task,因此,需要在使用scope的变量指定,C的function中调用的是哪个die TB对应的task/function。原创 2024-10-25 17:39:45 · 622 阅读 · 0 评论 -
DPI-C动态库so的使用
在做IC验证EDA仿真过程中,有时候需要调用C实现的参考模块,我们可以利用DPI-C的功能,实现SV侧调用C侧的函数。在具体实现过程中,我们可以将C代码编译成一个so文件的动态库,然后在SV侧加入这个so文件进行编译和仿真。这样做的好处是,C的具体实现对SV侧不可见,SV侧只需要关心函数接口和参数的传递。本文先介绍方法,然后演示一个demo,记录这个过程。module tb;原创 2024-10-25 16:14:54 · 849 阅读 · 0 评论 -
systemverilog中的DPI-C用例介绍
本文主要基于VCS内置的三个关于DPI-C的使用用例,记录一下DPI-C的使用方法。测试用例的路径为$VCS_HOME/doc/examples/testbench/sv/。测试用例包括:dpi_longint,dpi_packed_array,dpi_structure。本文主要通过VCS自带的三个DPI-C测试用例,记录一下SV中DPI-C的使用方法。原创 2024-09-01 17:30:24 · 2306 阅读 · 0 评论 -
systemverilog中的bind
通常我们需要将设计的代码和验证的代码进行分离,systemverilog中提供bind的方式,能够在不改变设计代码的前提下,在设计的代码的module或者instance下边,例化一些用于存放断言等辅助代码的module/interface/program/checker。本文主要总结和记录一下bind的用法。原创 2024-02-29 15:25:12 · 2894 阅读 · 0 评论 -
合并覆盖率
在验证过程中,我们经常通过覆盖率来判断,我们验证是否趋于收敛,然而,每一个case都会生成自己的覆盖率文件,这个时候就需要将不同的覆盖率文件合并到一起,本文主要记录如何实现覆盖率的合并,以及如何对这个计算过程加速。本文主要记录一下覆盖率合并的方法。原创 2024-02-22 16:44:18 · 1241 阅读 · 0 评论 -
event | semaphores | mailbox
在systemverilog中,我们可以利用event | semaphores | mailbox来实现进程之间的通讯,本文主要介绍这三种数据类型的使用,以及他们之间的区别。原创 2024-02-21 18:00:04 · 1300 阅读 · 0 评论 -
SystemVerilog约束随机(二)
集合操作set membership权重约束weighted constraints队列约束array constranint条件约束order constraints等价约束equivalence constraints顺序约束solver order主要记录一些sv中的约束方法,方便查阅。原创 2024-02-05 17:48:38 · 1123 阅读 · 0 评论 -
如何理解派生类的构造函数
在class中,有的时候有构造函数new,有的时候又没有构造函数new,本文主要记录一下,派生类的构造函数的执行过程,帮助更好的理解class的构造函数。本文主要记录派生类的构造函数执行过程。原创 2024-02-01 14:40:39 · 1068 阅读 · 0 评论 -
如何override已经存在的约束
在验证过程中,我们基本都是基于spec,做正常的约束,当我们测特定corner场景的时候,希望能够用新的约束,去override已经存在的约束。本文主要记录如何override已经存在的约束,当然这里还可以用random with操作,只不过random with约束的范围,必须在base约束的范围内。原创 2024-01-31 16:37:47 · 465 阅读 · 0 评论 -
进程的执行过程
本文主要记录一下进程的执行过程,并通过几个示例,进一步加深对进程的理解。原创 2024-01-30 16:18:25 · 1209 阅读 · 0 评论 -
join | join_any | join_none之间的区别
本文主要记录一下,与fork想匹配的三个选项,join/join_any/join_none之间的区别。原创 2024-01-29 17:48:31 · 1166 阅读 · 0 评论 -
信号的采样与驱动
在UVM验证过程中,有monitor和driver组件,分别用于收集信号和驱动信号,本文记录两个例子,用于理解信号的采样以及驱动的过程。本文主要通过两个例子,帮助理解一下信号的采样和驱动。原创 2024-01-26 16:52:44 · 1081 阅读 · 0 评论 -
记录一些多维数组的方法
验证过程中,我们经常会用到多维数组存储数据,本文主要记录一下,如何去获取我们需要的数据,以及多维数组自带的一些方法。本文主要记录一下使用多维数组的一些方法。原创 2024-01-24 17:35:42 · 439 阅读 · 0 评论 -
流操作:打包/解包
在验证过程中,为了方便数据传输,我们经常需要对不同字段的数据先进行打包,再将打包好后的数据发到对端,对端收到数据后再进行解包,这个过程中,我们可以很方便的运用流操作符来解决。本文主要记录一下流操作符的使用。“>>”是从左往右的流操作符。“原创 2024-01-24 14:31:33 · 667 阅读 · 0 评论 -
记录一些队列中常用的方法
在实际项目中,我们经常会用到队列,本文主要总结一些队列的常用方法。队列自带的方法与find和with结合使用的方法本文主要记录一些队列常用的方法。原创 2024-01-24 10:34:08 · 656 阅读 · 0 评论 -
记录一些随机约束的控制方法
在运用UVM验证过程中,经常会用到大量的随机,这个时候我们需要控制随机约束的打开或者关闭,来实现不同模式的约束。本文主要记录一下,在随机过程中约束控制的方法。内嵌约束控制控制rand变量是否随机选择随机控制的变量控制约束块是否随机约束的嵌套控制本文主要记录一下随机控制的一些方法。原创 2024-01-23 16:02:22 · 811 阅读 · 0 评论 -
在sequence中对变量随机
很多时候,我们在写sequence激励的时候,有一些变量需要做一些简单的随机,但是又不希望引入其他的类,这个时候我们可以利用std::randomize()来处理。总的来说,利用std::randomize()函数可以很方便的在sequence内部对变量进行随机,而不用额外引入类。原创 2023-07-20 10:55:27 · 1260 阅读 · 0 评论 -
SystemVerilog约束随机(一)基本介绍
本节记录SystemVerilog约束随机的基础的知识。更多相关内容参考《IEEE Std 1800™-2012, IEEE Standard for SystemVerilog—Unified Hardware Design, Specification, and Verification Language》。本文主要简单的记录一下,SystemVerilog中的约束随机相关的基础知识。原创 2022-10-11 15:52:18 · 2260 阅读 · 0 评论 -
systemverilog中的输入输出系统函数
在systemverilog中提供了许多输入输出的系统任务和函数,本文主要列出这些系统任务和函数。本文主要列出systemverilog中常用的一些系统函数,方便查阅。原创 2022-08-03 16:43:10 · 1159 阅读 · 0 评论 -
systemverilog中输入输出系统任务和函数(三)——Memory 加载和下载任务
在systemverilog中提供了许多输入输出的系统任务和函数,本文主要介绍Memory 加载和下载任务。本文主要介绍systemverilog中,Memory 加载和下载任务的用法。原创 2022-08-03 15:41:34 · 2027 阅读 · 0 评论 -
systemverilog中输入输出系统任务和函数(二)——文件输入输出相关的任务和函数
在systemverilog中提供了许多输入输出的系统任务和函数,本文主要介绍文件输入输出相关的任务和函数。文件输入输出相关的任务和函数$fseek$rewind$fflush$ftell$feof$ferror本文主要介绍systemverilog中,文件输入输出相关的任务和函数。...原创 2022-08-01 10:28:18 · 7826 阅读 · 0 评论 -
systemverilog中输入输出系统任务和函数(一)——显示相关的任务
在systemverilog中提供了许多输入输出的系统任务和函数,本文主要介绍以下这些显示相关的任务。本文主要介绍systemverilog中,显示相关的任务。原创 2022-08-01 10:21:42 · 1643 阅读 · 0 评论 -
systemverilog 宏定义 `define
本文首先记录了在systemverilog中,标准文档对于宏定义的描述,以及几个特殊符号的使用;其次,着重介绍了带参数的宏的使用,解决了如何将变量作为一个参数传递给宏,并通过一个例子,演示了这样做带来的好处。原创 2022-01-11 11:54:31 · 22783 阅读 · 5 评论 -
SystemVerilog中的Events事件
文章目录前言一、事件(Events)二、@操作符和wait()操作的区别三、wait_order总结前言本文首先介绍SystemVerilog中的Events;其次记录了@操作符和wait()操作的区别;最后介绍了wait_order的用法。一、事件(Events)事件(Events)是进程之间同步的静态对象。事件发挥作用的过程分为两个阶段,即:一个进程触发(trigger )事件,另一个进程等待事件被触发(triggered)。可以使用->操作符触发事件,使用@操作符或者wait(原创 2021-07-26 09:54:41 · 5437 阅读 · 1 评论 -
rand和randc有什么区别
文章目录前言一、rand和randc的区别总结前言在systemverilog中,随机变量可以通过两个关键字来进行修饰,rand和randc,本文大概介绍一下这两个关键字的区别。一、rand和randc的区别简单的说,rand是随机,randc是循环随机。rand相当于样本放回的随机采样,相邻两次可能相同。randc则是拿一个少一个,当每个可能的值都出现一遍后才会重复。例如:rand bit [1:0] a; // 1, 0, 0, 2, 3, 3, …randc bit [1:0]原创 2021-08-11 16:20:12 · 4727 阅读 · 0 评论
分享