- 博客(60)
- 收藏
- 关注
原创 systemverilog的乱序shuffle
在 SystemVerilog 中,shuffle是一个系统函数,用于对动态数组或队列进行随机打乱(洗牌)操作。以下是一些关于shuffle。
2024-08-27 23:02:24 333 1
原创 systemverilog的标准随机函数std::randomize()
systemverilog的标准随机函数std::randomize()
2024-08-10 10:43:29 301
原创 systemverilog非合并数组和关联数组的区别与联系
这里的索引从 0 到 15 是连续的。关联数组是一种索引可以是任意数据类型的数据结构,并且其存储空间是根据实际插入的元素动态分配的。关联数组的索引不一定是连续的整数,甚至可以是字符串等复杂的数据类型。3. 索引范围:非合并数组的索引范围是固定和预定义的;关联数组没有固定的索引范围,可以随时添加新的任意索引的元素。总的来说,非合并数组更适合处理具有固定、连续索引的一组数据,而关联数组更适合处理具有不规则索引的数据或者需要动态添加元素的情况。关联数组的内存是根据实际存储的元素动态分配的。
2024-08-07 23:55:21 369
原创 uvm_config_db 和 uvm_resource_db :
uvm_config_db` 和 `uvm_resource_db` 都是 UVM 中用于管理和共享数据的机制,但它们有一些区别: 1. 用途: - `uvm_config_db` 主要用于在不同层次的组件之间传递配置信息,例如设置一些参数、控制某些行为等。如果在 `uvm_resource_db` 和 `uvm_config_db` 中对同一个变量进行了不同的设置,`uvm_resource_db` 的设置可能会覆盖 `uvm_config_db` 的设置。
2024-08-05 00:48:52 327
原创 uvm_component和uvm_object
和在UVM验证环境中各有其独特的角色和用途。主要用于数据的封装和传递,而则用于构建和组织验证环境的不同部分。它们之间的主要区别在于继承关系、功能和用途、实例化和生命周期以及典型应用等方面。
2024-08-04 23:53:31 350
原创 MSB和LSB
MSB(Most Significant Bit)和LSB(Least Significant Bit)是二进制数中的两个重要概念,它们分别代表了二进制数中的最高有效位和最低有效位。
2024-08-03 23:37:14 1584
原创 systemverilog中权重:= 和 :/
上述代码中[0:99]每个值出现的概率是5/(100*5+95)=5/595,落在[0:99]的概率是500/595,100出现的概率是95/595,上述代码中[0:99]出现的概率是5/100,100出现的概率是95/100,
2024-07-31 10:14:43 132
原创 SystemVerilog 中,fork...join、fork...join_any 和 fork...join_none
【代码】SystemVerilog 中,fork...join、fork...join_any 和 fork...join_none。
2024-07-30 11:25:49 359
原创 uvm_info中的get_full_name,get_type_name,get_name
其返回值的具体表现取决于类的类型。对于uvm_component类(组件类),它会返回当前组件的完整路径,即从 UVM 树的根节点开始到该组件的路径名拼接。路径的开头不是从 UVM 树的根开始,而是根的下一级(根路径对应“top”),路径的结尾是创建对象时传入的名称。而对于uvm_object类(对象基类),它的返回值与get_name()一样,因为uvm_object类不作为 UVM 树的节点,所以路径没有其他层次。
2024-07-21 20:56:08 298
原创 验证环境中uvm_error的使用
基本概念作用:uvm_error用于在验证过程中当发现不符合预期的情况时,生成并输出错误消息,帮助验证工程师快速定位和解决问题。 语法:其基本语法为uvm_error(ID, Message);,其中ID是一个唯一标识符,用于识别错误的来源;Message是一个字符串,用于详细描述错误的具体信息。使用场景错误定位:当验证环境检测到某个条件不满足预期时,如数据错误、时序违例等,可以使用uvm_error宏来输出相应的错误信息,从而帮助验证人员快速定位问题。 调试辅助:在验证的早期阶
2024-07-21 20:48:49 439
原创 systemverilog中include,import,incdir的区别
include关键字用于包含一个预处理文件,这个文件通常包含了各种定义,比如类型定义、常量、宏等。这些定义会直接插入到使用include的地方,就像你手动复制粘贴了一样。include主要用于包含头文件,其中可能包含了一系列的define宏、typedefparameter和localparam等预处理指令。
2024-07-16 00:05:42 451
原创 uvm中使用clone时,为什么要使用$cast
在 UVM 中,使用`$cast`的原因主要是进行类型转换,以确保对象的句柄能够正确地指向具有特定类型的对象。然而,`req.clone()`返回的句柄是`uvm_object`类型(父类),但实际上它指向的是子类对象。通过`$cast(rsp, req.clone())`,可以将克隆得到的父类句柄转换为子类句柄,并将其赋值给子类对象`rsp`。如果不进行`$cast`,直接将`req.clone()`的结果赋值给`rsp`,可能会导致编译错误或运行时的异常。类中定义的,它是所有UVM对象的基类。
2024-07-14 00:47:38 435
原创 systemverilog对象的复制和拷贝
也就是说,原始对象和新对象中的句柄会指向同一个对象,这可能导致新对象中的句柄指向的内容发生变化时,原始对象中的对应内容也会发生变化。深复制则是创建一个新的和原始句柄指向的内容完全相同的对象,新对象和原始对象的句柄指向不同的存储空间,但内容是相同的。这样,新对象中句柄指向的内容发生改变时,不会影响原始对象中句柄指向的内容。例如,如果原始对象中有一个指向其他类对象的句柄成员,浅复制后,新对象中的该句柄将指向与原始对象相同的对象。函数中,需要创建新的嵌套对象,并将原始对象中的成员值复制到新对象的相应成员中。
2024-07-14 00:42:52 482
原创 systemverilog中的对象和句柄
在 SystemVerilog 中,句柄(handle)是用来指向对象的“指针”。通过句柄,可以访问对象的成员变量和成员方法。
2024-07-14 00:14:36 146
原创 initial begin end 和always语句区别
/ while ,repeat ,for 循 环。always @ (<敏感信号表达式>)begin。// task ,function 调用。
2024-05-22 21:21:53 324
原创 systemverilog功能覆盖率
如果只想关注交叉覆盖率,而不想关注单个coverpoint,可以通过设置权重option.weight = 0来将coverpoint的覆盖率忽略。1 iff 如过满足条件则采样,iff可以理解为if。2 coverpoint和bin。
2024-04-20 22:26:57 231
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人