- 博客(531)
- 资源 (6)
- 收藏
- 关注
原创 #SVA语法滴水穿石# (013)关于 disable iff、matched 、expect 的用法
SystemVerilog 断言(SVA)中 disable iff。常用于测试平台(testbench)中,等待特定条件后继续执行代码。条件生效时,断言立即停止检测,且不会触发失败。常用于多序列组合中需要对齐时序的场景。后 2 周期内)→ 打印成功消息。,通常用于同步多个序列的时序关系。关键字,捕获子序列的结束时间。可以指定超时时间,若超时则触发。)期间忽略断言检查,避免误报。在周期2结束,时序不同步。
2025-04-05 20:39:59
326
原创 #SVA语法滴水穿石# (013)关于内建系统函数
若表达式为多热码(multiple-hot)或全零,返回。若表达式为多热码(multiple-hot),返回。SystemVerilog 断言(SVA)中。:检查表达式在指定时钟沿是否。:检查表达式在指定时钟沿是否。常用于动态检查有效信号的数量。,其他位必须为低电平(0)。若有任意位为 X/Z,返回。
2025-04-05 16:04:31
203
原创 #SVA语法滴水穿石# (012)关于 first_match、throughout、within 的用法
验证子操作在父操作的时间范围内完成(如中断响应必须在事务周期内)。:避免因多个分支同时满足条件导致的重复触发,确保断言逻辑的确定性。:验证信号在特定操作期间保持稳定(如总线保持、电源稳定)。:断言在周期1和周期3均匹配成功,可能触发多次报告。:仅周期1的匹配被选中,周期3的匹配被忽略。若条件在序列的任一周期失效,断言失败。的周期内(0-3)始终保持不变。在周期1-3完成,完全包含在。在周期2变为6,断言失败。,忽略后续可能的匹配。
2025-04-05 15:57:53
116
原创 #SVA语法滴水穿石# (010)关于 and、intersect 、or 的用法
两个序列同时开始,结束时间不同(周期 2 和 3),但。:周期 2 开始,周期 4 结束(但波形中。:系统支持两种通信模式,任意一种成功即可。允许这种差异,最终匹配时间为周期 3。:周期 0 开始,周期 2 结束(假设。:两个序列完全对齐(周期 0-2),且。同时开始,且在 3 个周期后同时结束。:在周期 0 开始,周期 2 结束。:在周期 0 开始,周期 3 结束。:周期 0 开始,周期 1 结束。:周期 0 开始,周期 2 结束。序列的周期 2 结束时间不匹配。在周期 3 为高,未完成)。
2025-04-05 12:26:50
172
原创 #SVA语法滴水穿石# (009)关于 [*n]、[->n] 和 [=n] 的用法
通过合理使用重复运算符,可以精确描述设计中的复杂时序逻辑,捕捉协议握手、状态跳转等关键错误。在周期 0、2、4 出现 3 次,但最后一次出现(周期 4)后紧跟。的多次出现之间未保持非连续(如连续出现 3 次仍可通过)。在中间任一周期拉低(如周期 2 为 0),断言失败。在周期 1、3、5 出现 3 次(非连续)。出现 2 次(非连续)后,处理器必须响应。在周期 1、2、3 连续高电平 3 次。的非连续出现次数,最后一次后必须紧跟。信号出现 5 次(非连续)后触发报警。非连续出现 2 次,最后一次后紧跟。
2025-04-05 12:05:42
466
原创 #SVA语法滴水穿石# (007)关于 $past 的用法
/ 若 enable=1 的周期少于 2 次,$past(req, 2, enable) 无效。的周期(周期 3 和 4 是第 1 次和第 2 次)。检查信号的历史值,确保设计行为在时间维度上的正确性。// 错误:仿真开始时,无法获取 3 周期前的值。(门控条件):仅当条件为真时,才记录历史值。同时为高时,检查 3 个周期前(且在。是否等于 2 周期前(周期 0)的。是否等于 2 周期前(周期 1)的。:回溯的时钟周期数(默认为 1)。,检查 3 周期前(周期 1)的。:复位信号(复位时忽略历史值)。
2025-04-05 11:55:15
575
原创 #SVA语法滴水穿石# (006)关于 `define true 1的用法
SVA 的延时周期数必须在编译时确定(静态),若需运行时动态调整,需结合其他方法(如。(如 define true 1`)或布尔表达式来实现灵活的逻辑控制。在第 2 周期有效(符合 2 周期延时),断言通过。在第 4 周期有效(符合 4 周期延时),断言通过。过度使用宏可能降低代码可读性,建议仅在必要时使用。在第 2 周期有效,但实际在第 3 周期有效。表达式或条件运算符,动态控制断言中的时序逻辑。是实现固定周期延时的标准方式。确保延时周期数为静态值(编译时可确定)。根据配置参数选择延时周期。
2025-04-05 11:22:54
229
原创 #SVA语法滴水穿石# (005)关于 问号表达式(condition ? expr1 : expr2)
的语法和逻辑与 C 语言的三元条件运算符完全一致。通过合理使用问号表达式,可以简化复杂断言逻辑,提高代码可读性和复用性。:在断言中根据条件动态选择逻辑分支,增强断言灵活性。在 SystemVerilog 断言(SVA)中,,常用于动态选择信号、序列或属性。多模式设计(如高/低优先级模式)。可配置时序检查(如不同延迟要求)。:布尔表达式,决定选择的分支。拉高后 1 个周期响应。拉高后 3 个周期响应。为真,则选择此表达式。为假,则选择此表达式。忽略条件的时序变化影响。
2025-04-05 11:02:13
209
原创 #SVA语法滴水穿石# (004)关于 ended 和 triggered 用法
例如,序列 A 的结束时间必须与序列 B 的结束时间一致。的关键字,它表示某个序列(sequence)在特定时间点已经成功匹配(即“结束”)。在第 0 个周期拉高,在第 2 个周期拉低,结束时间为第 2 个周期。,尤其是在多序列组合或属性(property)中需要对齐时序的场景。可以同步不同序列的完成时间点,常用于协议握手或状态机跳转的验证。如果序列在当前时间点之前(即过去的时钟周期)完成匹配,则。的值在每个时钟边沿重新计算,与断言所在的时钟域同步。)后的第 3 个周期,检查。在第 2 个周期结束时,
2025-04-05 10:52:33
509
原创 #SVA语法滴水穿石# (004)关于 not 禁用属性
若需在时间范围内禁止属性(如“永远不”或“在某个条件后不”),可结合时序操作符使用。关键字,我们能够明确禁止系统中不应出现的状态或行为,从而在验证阶段提前发现设计错误。)为真时,断言会失败;反之,如果该属性始终为假,则断言通过。修饰的属性始终为假时(即原属性始终为真),断言通过。修饰的属性为真(即原属性为真),断言失败。为 1 时失败,确保错误状态被检测到。是属性,表示“两个信号同时为真”。修饰后,断言要求这个属性永远为假。在所有时钟周期均为 0,否则失败。同时为 1,属性为真,假设一个通信协议要求。
2025-04-05 08:00:19
94
原创 #SVA语法滴水穿石# (000)断言基本概念和背景
那么断言是如何表现的呢?进行设计时,我们并不能确保设计出来的东西没有功能上的漏洞,因此在设计后我们都会对其进行验证仿真。换句话说,验证的目的是彻底地验证被测设计以确保设计没有功能上的缺陷。协议覆盖是用来衡量一个设计的功能说明书中确定的所有功能是否都测试过;数据检验则是检验正在处理的数据的完整性。随着数字电路规模越来越大、设计越来越复杂,使得对设计的功能验证越来越重要。断言便是一门重要的验证技术,它可以尽早发现设计的缺陷以及提高验证的效率。是一种冗长的语言,随着断言数量的增加,维护代码将变得很困难;
2025-04-05 07:47:41
466
原创 #SVA语法滴水穿石# (003)关于 sequence 和 property 的区别和联系
sequence是描述时序模式的基本构建块,它本身不是完整的断言。property是完整的断言规范,可以包含时序和非时序条件,并能直接用于验证语句。简单的断言可能只需要一个sequence,但复杂的断言需要将多个sequence组合成property。property 可以包含蕴含操作(|->, |=>)和逻辑操作,而sequence主要关注事件的时序关系。
2025-04-04 22:19:38
213
原创 #SVA语法滴水穿石# (002)关于 |-> + ##[min:max] 的联合理解
第一个表达式由于语法错误,其意图不明确,若强行解析可能被某些工具视为无效或非标准实现。两者的核心区别在于语法合法性及对时序延迟的规范方式。第二个表达式是符合SVA标准的正确写法,而第一个表达式因缺少。表示在触发后的第2到第4个时钟周期内任意一个周期检查。工具可能报错或无法正确解析。今天,我们着重理解一些概念。采用非交叠蕴含符号,仿真结果如下:断言成功。采用交叠蕴含符号,仿真结果如下:断言失败。SVA要求时序延迟必须使用。发生时,断言要求在接下来的。第二个表达式明确表示:当。
2025-04-04 20:19:02
103
原创 #SVA语法滴水穿石# (001)关于 |-> 和 |=>
在SystemVerilog Assertions(SVA)中, 和 是两种不同的隐式条件操作符,它们的用法和行为有所不同。定义: 是一个重叠隐式条件操作符,用于检查条件是否在当前周期满足,并在同一个周期内触发后续的序列。行为:如果条件在当前周期为真,则后续的序列会在当前周期开始执行。语法: 解释:如果 在当前周期为真,则 必须在当前周期为真,否则断言失败。定义: 是一个非重叠隐式条件操作符,用于检查条件是否在当前周期满足,并在下一个周期触发后续的序列。行为:如果条件在当前周期为真,则后续
2025-04-04 14:52:58
165
原创 #systemverilog# SystemVerilog 中的类多态和向下转换(Downcasting)之间的关系
无法直接调用子类特有的方法或属性。
2025-03-30 12:01:03
15
原创 #CX# UVM中的virtual sequence 和 virtual sequencer 的用途
例如:先配置寄存器(通过APB接口),再触发数据流(通过AXI接口),最后检查中断(通过GPIO接口)。将复杂测试场景封装为独立的Virtual Sequence,方便在不同测试用例中复用,无需重复编写底层Sequence组合逻辑。通过Virtual Sequence,UVM能够高效管理多接口、多组件的复杂验证场景,显著提升验证环境的灵活性和场景复用能力。时,Virtual Sequence作为顶层控制器,统一调度不同Sequencer上的子Sequence。:Virtual Sequence按顺序启动。
2025-03-29 21:21:03
86
原创 #C8# UVM中的factory机制 #S8.5# 对factory机制的重载进一步思考(二)
当子类定义了一个与基类同名的方法,即使参数不同,基类的方法也会被隐藏。
2025-03-29 20:10:46
156
原创 #VCS# 关于 +incdir+xxx 编译选项的注意点
前段时间,工作中遇到百思不得其解的坑。按照以往的理解,没有找到任何可能问题点。今天总结下来。是 VCS 编译器中用于指定搜索路径的重要选项,主要用于指定 `include 指令的搜索目录。
2025-03-28 16:45:13
364
原创 #systemverilog# SystemVerilog 中的向上转换(Upcasting)和向下转换(Downcasting)
在 SystemVerilog 中,向上转换和向下转换是面向对象编程中与类继承相关的两种类型转换方式。
2025-03-28 11:16:56
131
原创 #C8# UVM中的factory机制 #S8.4.3# factory机制创建实例接口
factory机制提供了一系列接口来创建实例。来源:UVM源代码来源:UVM源代码来源:UVM源代码有四个参数,第一个参数是字符串类型的类名,第二个参数是父结点的全名,第三个参数是为这个新的component起的名字,第四个参数是父结点的指针。这个函数一般只在一个component的new或者build_phase中使用。如果是在一个object中被调用,则很难确认parent参数;
2025-03-28 09:25:15
14
原创 #C8# UVM中的factory机制 #S8.5# 对factory机制的重载进一步思考(一)
特性Overloading (重载)Polymorphism (多态)绑定时间编译时(静态绑定)运行时(动态绑定,虚函数)作用域同一作用域内跨继承层次实现方式参数列表不同virtual+ 继承目的扩展函数/操作符的适用性实现接口统一,行为差异化。
2025-03-27 22:47:04
482
原创 #C8# UVM中的factory机制 #S8.2.3# 重载 component 哪些情形
通常用于动态替换监测逻辑,例如扩展监测功能、修改协议解析行为或调试特定场景。:无需修改原始 Monitor 代码,符合 UVM 的“开闭原则”(对扩展开放,对修改关闭)。在包含多个 Agent 实例的环境中,仅替换其中一个 Agent 的 Monitor。在调试阶段,临时修改 Monitor 的协议解析逻辑,例如打印更多调试信息。支持不同版本协议(如 PCIe Gen3/Gen4),通过重载切换解析逻辑。在原有 Monitor 基础上增加覆盖率收集或日志记录,无需修改原始代码。:无需修改测试代码。
2025-03-27 07:55:23
23
原创 #C8# UVM中的factory机制 #S8.2.3# 重载sequence哪些情形
在UVM中,是一种动态替换激励生成逻辑的关键技术,常用于灵活配置测试场景。
2025-03-27 07:40:52
201
原创 #C8# UVM中的factory机制 #S8.2.2# factory 机制重载方式
上节介绍了使用set_type_override_by_type函数可以实现两种不同类型之间的重载。类似,但参数类型不同,适用于需要直接使用类型对象(而非类型名字符串)的场景。在复杂测试环境中,验证某个实例路径是否应用了预期的类型覆盖。类型的对象代理,代表工厂根据覆盖规则最终选择的类型。类型的对象代理,表示工厂根据覆盖规则最终选择的类型。,帮助调试或动态确认某个对象在创建时的实际类型。,返回实际会被创建的对象的代理类型(,返回实际会被创建的对象的代理类型(方法前,预判实际实例化的类型。
2025-03-24 17:49:14
37
原创 #C8# UVM中的factory机制 #S8.2.1# factory 机制重载法则
factory机制最伟大的地方在于其具有重载功能。重载并不是factory机制的发明,前面已经介绍过的所有面向对象的语言都支持函数/任务重载,另外,SystemVerilog还额外支持对约束的重载。只是factory机制的重载与这些重载都不一样。
2025-03-24 17:14:38
127
原创 #C8# UVM中的factory机制 #S8.1.3# UVM实战代码再剖析
前面文章,实际还没有完全剖析完整代码。今天我们自己捋一遍。完整代码如下:而代码第74行,因为实参 bird_inst, 与 参数形参 bird b_ptr 属于同一类型,不需要做转换。而第75行代码,因为实参为parrot_inst , 与 参数形参 bird b_ptr 不属于同一类型,需要做转换。那么具体是向上转换,还是向下转换呢?(自动完成,安全)向上转换后,只能访问父类的属性和方法(color),无法访问子类独有的内容(size(需显式$cast$cast会检查类型是否兼容。
2025-03-22 21:42:15
24
原创 #C8# UVM中的factory机制 #S8.1.2# 到底重载?多态?
张强老师书中,在该章节,主要讲述重载一词,反复提到。而通过前面文章的学习,我们知道,VCS 仿真工具对于重载的支持不是很好。那么,我们不禁疑问:书中到底是 重载还是多态呢?
2025-03-22 16:08:25
40
原创 #C8# UVM中的factory机制 #S8.1.1# OOP 语言三大特性 systemverilog的支持(一)
SystemVerilog 作为一门支持面向对象编程(OOP)的硬件描述和验证语言,,但它的实现方式和特性与纯软件面向对象语言(如 C++ 或 Java)有所不同。
2025-03-22 15:46:44
21
原创 #UVM# 关于UVM打印信息控制必须知道的“坑”
UVM 会输出类似以下警告,表明命令行参数错误:UVM_WARNING: Invalid verbosity level 'UVM_HIGHH' ignored.设置 Verbosity 时,如果输入格式错误或参数不合法,UVM 会忽略该设置,Verbosity 将回退到其他有效设置的层级。实际工作中,可能遇到各种问题,各种低级的错误,都不可避免。在 UVM 中,当通过命令行参数 +uvm_set_verbosity。通过日志中消息的显示情况,反推实际 Verbosity 层级。路径匹配失败,设置不生效。
2025-03-10 22:30:35
393
原创 #UVM# 关于 config_db 机制中的直线非直线设置和获取讲解
在 UVM 验证环境中,是一种强大的机制,用于在不同组件之间传递配置参数。根据你的描述,我们可以结合UVM 树结构来解释直线和非直线的设置与获取。
2025-03-08 21:46:43
345
原创 #UVM# 关于 config_db 机制中省略 get 语句的条件
今天,我们了解一下 ,config_db 机制中的 get 语句是可以省略的用法。
2025-03-08 21:05:56
276
1
原创 #UVM# 关于 config_db 机制中的set和get函数
config_db机制用于在UVM验证平台间传递参数。它们通常都是成对出现的。set函数是寄信,而get函数是收信。
2025-03-08 20:09:16
323
原创 #VCS# 关于VCS 工具如何 dump library 信号来调试问题
在使用 VCS 进行仿真时,如果需要将库单元(library cells)的信号dump到波形文件(如FSDB或VPD)中,可以通过以下方法实现。一般,我们经常提到的库,包括两种:(1)-v/-y 指定的 library(2) 代码中 使用 `celldefine ...... `endcelldefine 定义的库。
2025-03-08 16:12:36
239
原创 #VCS# 关于VCS 工具进行 code coverage merge 遇到mapfile的问题
在使用 VCS 工具进行代码覆盖率合并时,mapfile是一个重要的配置文件,用于定义如何将不同模块或实例的覆盖率数据映射到目标模块上。以下是关于mapfile。
2025-03-08 15:44:52
178
FPGA/ASIC+SSC扩频三角波调制+90度相位差+600pp随机抖动+Verilog模型
2024-03-12
FPGA/ASIC+SSC扩频三角波调制+180度相位差+600pp随机抖动+Verilog模型
2024-03-12
FPGA/ASIC+SSC扩频三角波调制+270度相位差+600pp随机抖动+Verilog模型
2024-03-12
单例模式+UVM验证平台+force/release/probe信号
2024-03-10
FPGA/ASIC+SSC扩频正弦波调制+270度相位差+Verilog模型
2024-03-09
FPGA/ASIC+SSC扩频正弦波调制+180度相位差+Verilog模型
2024-03-09
FPGA/ASIC+SSC扩频正弦波调制+90度相位差+Verilog模型
2024-03-09
FPGA/ASIC+SSC扩频三角波调制+270度相位差+Verilog模型
2024-03-08
FPGA/ASIC+SSC扩频三角波调制+180度相位差+Verilog模型
2024-03-08
FPGA/ASIC+SSC扩频三角波调制+90度相位差+Verilog模型
2024-03-08
systemverilog_ssc_clk_generated.sv
2021-12-24
基于PCIe2.0协议的PCS层弹性缓冲器设计
2020-11-28
从PCIe探索弹性缓冲器真义(陈乃塘)
2020-11-28
stm32F107VC+SPI1+LWIP
2016-01-04
systemverilog 编程 randomize 的疑惑
2024-11-09
systemverilog中的$random%5/1000疑问
2024-03-13
#systemverilog# wait fork 等待子进程问题疑问?
2023-07-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人