- 博客(12)
- 收藏
- 关注
原创 7.8 Associative arrays
摘要:SystemVerilog中的关联数组是一种动态数据结构,适用于大小未知或稀疏的数据集合。它通过查找表实现,索引可以是任意类型(整型、字符串、类等),支持动态分配元素。关联数组具有特定排序规则:数值型按大小排序,字符串按字典序,类索引顺序不确定。访问无效索引时会返回默认值并发出警告,写操作则被忽略。声明语法为data_type array_id[index_type],支持通配符(*)索引。关联数组在元素首次被引用时自动分配,并可按需初始化默认值。
2025-12-17 18:55:19
637
原创 26.SV Packages
本文摘要: SystemVerilog包机制允许在多个模块间共享声明(如类型、任务等)。主要内容包括:1)包声明语法及规则,包可以包含各种声明项;2)引用包数据的两种方式(范围解析运算符::或导入声明);3)包搜索顺序规则;4)包导出机制,控制导入声明的可见性;5)内置std包的特殊性,它被隐式导入到每个编译单元。包机制提供了强大的代码复用和命名空间管理功能,同时保持向后兼容性。
2025-11-03 15:10:21
792
原创 UVM Heartbeat机制
Heartbeats提供了一种让环境轻松确保其子组件处于活跃状态的方法。与特定的 objection 对象相关联。被心跳对象跟踪的组件必须在心跳窗口期间提起(或丢弃)同步的 objection。这个同步的 objection 必须是类型。对象有一个参与对象的列表。可以配置Heartbeat:使得所有组件(UVM_ALL_ACTIVE)、恰好一个组件(UVM_ONE_ACTIVE)或任意组件(UVM_ANY_ACTIVE)必须触发 objection 才能满足心跳条件。new。
2025-10-28 11:14:49
715
原创 19.6.1.2 Cross bin with covergroup expressions
可选的matches子句指定选择策略。plum交叉仓展示了由with覆盖组表达式组成的select_expression:第一个with覆盖组表达式选择包含b.two仓数组中值大于12的仓元组,||运算符随后加入第二个with覆盖组表达式选择的仓元组——即包含a.low仓且满足a值、b值与掩码按位与后非零的仓元组。cherry交叉仓演示了在复杂select_expression中使用with子句:首先选择包含b的0到50值仓的仓元组,然后通过&&运算符从中筛选出同时包含a.low的0到50值仓的仓元组。
2025-04-20 15:04:47
516
原创 UVM环境复位--stop_sequences()
在UVM验证环境中, stop_sequences是一个用于强制终止所有正在运行的 Sequence 的方法,通常用于动态控制激励生成流程。1.通过uvm_config_db传递事件和严格的同步机制,此方案符适用于复杂复位场景和动态测试控制。组件耦合:Driver 和 Sequence 不再直接依赖env,通过标准接口通信。竞争条件:确保 Driver 完成清理后再终止 Sequence。代码健壮性:使用非阻塞操作和事件监听,避免死锁。
2025-04-13 17:33:13
2522
原创 uvm验证环境中tb_top和uvm test
首先,tb_top通常指的是测试平台的顶层模块,在Verilog或VHDL中,这可能是一个顶层的testbench模块。这个模块的作用是实例化DUT(被测设计),以及与DUT相连的接口。此外,tb_top还可能负责生成时钟、复位信号,以及将物理接口连接到UVM环境中的虚拟接口。这部分属于静态结构,通常在仿真开始时就被建立起来。接下来是uvm_test,这是UVM框架中的一个动态创建的组件。UVM测试用例通常继承自uvm_test类,用户会在其中配置环境、设置序列,并启动测试流程。
2025-04-13 16:21:58
1158
原创 uvm_object.clone()为什么必须用$cast()
关键点说明方法返回类型clone()返回uvm_object(基类),需要转换为具体子类。类型安全$cast动态检查类型兼容性,避免运行时错误。多态性支持允许统一接口处理所有uvm_object子类的克隆操作。替代方案的缺陷静态转换不安全,直接赋值会编译失败。$cast 是连接多态性设计(返回基类句柄)和具体类型需求(使用子类句柄)的桥梁。它确保了类型安全,同时支持UVM的灵活性和扩展性。
2025-03-29 17:14:45
1017
原创 uvm_object uvm_component copy() clone()
在UVM中,uvm_object和 uvm_component是两类主要的基类,它们分别用于不同的场景。copy() 和clone()是用于对象复制的方法,但它们在 uvm_object和 uvm_component中的行为有所不同。一、uvm_object 的方法uvm_objectcopy()将对象值复制到另一个已存在的对象(深拷贝)理论上支持,但几乎不可用clone()创建并返回一个新对象的副本(深拷贝)不支持,直接调用会导致编译错误uvm_object。
2025-03-29 16:48:26
1028
原创 UVM TLM FIFO 类
uvm_tlm_analysis_fifo是 UVM(Universal Verification Methodology)中的一个重要组件,用于在验证环境中实现基于 TLM(Transaction Level Modeling)的通信。它是一个 FIFO(First-In-First-Out)缓冲区,可以存储通过 TLM 分析端口(uvm_tlm_analysisi_fifo)发送的事务(transactions),并提供了多种方法来访问和管理这些事务。一、核心方法功能:将事务t写入 FIFO。
2025-03-12 21:11:51
1611
原创 SystemVerilog Soft Constraints
在 SystemVerilog 中,软约束(Soft Constraints)是一种用于随机化测试的约束机制。软约束允许定义一些“偏好”或“默认”的约束条件,但这些条件可以被其他更强的约束(硬约束)覆盖或修改。软约束通常用于提供默认的随机化行为,同时在需要时允许用户或测试场景覆盖这些默认值。一、软约束的特点1.优先级低于硬约束软约束的优先级低于硬约束。如果硬约束和软约束冲突,硬约束会优先生效。2.可被覆盖软约束可以被后续的约束覆盖或修改。3.默认行为。
2025-03-09 16:08:36
2004
原创 SystemVerilog fork...join_none并发启动多个forever线程
在 SystemVerilog 中,你可以使用一个for循环来实现多个forever循环的功能。具体来说,可以通过来并发启动多个线程,每个线程执行一个forever循环。一、fork...join_none并发启动多个forever线程1、原始代码begintask_(1);endend通过使用for循环和,可以将多个。
2025-03-09 15:40:08
676
原创 SystemVerilog Time Step
在 SystemVerilog 验证环境中,时间片(Time Step)是仿真器处理事件的最小时间单位。每个时间片内,仿真器按照预定义的仿真阶段(Regions)顺序执行代码和更新信号值。理解时间片的机制是正确处理信号采样和驱动的关键,尤其是在涉及非阻塞赋值(<=)和时钟块(clocking block)时。#1step是 SystemVerilog 中表示最小仿真时间单位的关键字,通常等于timeunit或的精度。例如:// 时间单位为 1ns// 时间精度为 1ps此时#1step的值为。
2025-03-09 14:50:01
1933
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅