
SVA
文章平均质量分 71
那么菜
仗剑天涯,谁来也不怕。更多知识分享,请见微信公众号:那么菜
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
#SVA语法滴水穿石# (014)关于链式蕴含的陷阱
文章摘要:本文通过实例分析SVA中链式蕴含操作符(|->)与线性时序的误用问题。作者在验证握手协议时发现,错误使用链式蕴含会导致时序关系错位,断言始终显示"incomplete"状态。关键区别在于:链式蕴含每次都会创建新评估上下文,适用于独立条件分支(如指令解码);而线性时序需保持原始时间锚点。正确做法应使用线性序列表达式(##)而非嵌套蕴含。文章还提供了链式蕴含的典型应用场景和特性说明,包括独立评估上下文、条件过滤和并行检查等特点。原创 2025-07-20 23:07:19 · 675 阅读 · 0 评论 -
#SVA语法滴水穿石# (013)关于 disable iff、matched 、expect 的用法
SystemVerilog 断言(SVA)中 disable iff。常用于测试平台(testbench)中,等待特定条件后继续执行代码。条件生效时,断言立即停止检测,且不会触发失败。常用于多序列组合中需要对齐时序的场景。后 2 周期内)→ 打印成功消息。,通常用于同步多个序列的时序关系。关键字,捕获子序列的结束时间。可以指定超时时间,若超时则触发。)期间忽略断言检查,避免误报。在周期2结束,时序不同步。原创 2025-04-05 20:39:59 · 596 阅读 · 0 评论 -
#SVA语法滴水穿石# (013)关于内建系统函数
若表达式为多热码(multiple-hot)或全零,返回。若表达式为多热码(multiple-hot),返回。SystemVerilog 断言(SVA)中。:检查表达式在指定时钟沿是否。:检查表达式在指定时钟沿是否。常用于动态检查有效信号的数量。,其他位必须为低电平(0)。若有任意位为 X/Z,返回。原创 2025-04-05 16:04:31 · 439 阅读 · 0 评论 -
#SVA语法滴水穿石# (012)关于 first_match、throughout、within 的用法
验证子操作在父操作的时间范围内完成(如中断响应必须在事务周期内)。:避免因多个分支同时满足条件导致的重复触发,确保断言逻辑的确定性。:验证信号在特定操作期间保持稳定(如总线保持、电源稳定)。:断言在周期1和周期3均匹配成功,可能触发多次报告。:仅周期1的匹配被选中,周期3的匹配被忽略。若条件在序列的任一周期失效,断言失败。的周期内(0-3)始终保持不变。在周期1-3完成,完全包含在。在周期2变为6,断言失败。,忽略后续可能的匹配。原创 2025-04-05 15:57:53 · 1004 阅读 · 0 评论 -
#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 · 472 阅读 · 0 评论 -
#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 · 838 阅读 · 0 评论 -
#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 · 969 阅读 · 0 评论 -
#SVA语法滴水穿石# (006)关于 `define true 1的用法
SVA 的延时周期数必须在编译时确定(静态),若需运行时动态调整,需结合其他方法(如。(如 define true 1`)或布尔表达式来实现灵活的逻辑控制。在第 2 周期有效(符合 2 周期延时),断言通过。在第 4 周期有效(符合 4 周期延时),断言通过。过度使用宏可能降低代码可读性,建议仅在必要时使用。在第 2 周期有效,但实际在第 3 周期有效。表达式或条件运算符,动态控制断言中的时序逻辑。是实现固定周期延时的标准方式。确保延时周期数为静态值(编译时可确定)。根据配置参数选择延时周期。原创 2025-04-05 11:22:54 · 346 阅读 · 0 评论 -
#SVA语法滴水穿石# (005)关于 问号表达式(condition ? expr1 : expr2)
的语法和逻辑与 C 语言的三元条件运算符完全一致。通过合理使用问号表达式,可以简化复杂断言逻辑,提高代码可读性和复用性。:在断言中根据条件动态选择逻辑分支,增强断言灵活性。在 SystemVerilog 断言(SVA)中,,常用于动态选择信号、序列或属性。多模式设计(如高/低优先级模式)。可配置时序检查(如不同延迟要求)。:布尔表达式,决定选择的分支。拉高后 1 个周期响应。拉高后 3 个周期响应。为真,则选择此表达式。为假,则选择此表达式。忽略条件的时序变化影响。原创 2025-04-05 11:02:13 · 522 阅读 · 0 评论 -
#SVA语法滴水穿石# (004)关于 ended 和 triggered 用法
例如,序列 A 的结束时间必须与序列 B 的结束时间一致。的关键字,它表示某个序列(sequence)在特定时间点已经成功匹配(即“结束”)。在第 0 个周期拉高,在第 2 个周期拉低,结束时间为第 2 个周期。,尤其是在多序列组合或属性(property)中需要对齐时序的场景。可以同步不同序列的完成时间点,常用于协议握手或状态机跳转的验证。如果序列在当前时间点之前(即过去的时钟周期)完成匹配,则。的值在每个时钟边沿重新计算,与断言所在的时钟域同步。)后的第 3 个周期,检查。在第 2 个周期结束时,原创 2025-04-05 10:52:33 · 865 阅读 · 0 评论 -
#SVA语法滴水穿石# (004)关于 not 禁用属性
若需在时间范围内禁止属性(如“永远不”或“在某个条件后不”),可结合时序操作符使用。关键字,我们能够明确禁止系统中不应出现的状态或行为,从而在验证阶段提前发现设计错误。)为真时,断言会失败;反之,如果该属性始终为假,则断言通过。修饰的属性始终为假时(即原属性始终为真),断言通过。修饰的属性为真(即原属性为真),断言失败。为 1 时失败,确保错误状态被检测到。是属性,表示“两个信号同时为真”。修饰后,断言要求这个属性永远为假。在所有时钟周期均为 0,否则失败。同时为 1,属性为真,假设一个通信协议要求。原创 2025-04-05 08:00:19 · 237 阅读 · 0 评论 -
#SVA语法滴水穿石# (000)断言基本概念和背景
那么断言是如何表现的呢?进行设计时,我们并不能确保设计出来的东西没有功能上的漏洞,因此在设计后我们都会对其进行验证仿真。换句话说,验证的目的是彻底地验证被测设计以确保设计没有功能上的缺陷。协议覆盖是用来衡量一个设计的功能说明书中确定的所有功能是否都测试过;数据检验则是检验正在处理的数据的完整性。随着数字电路规模越来越大、设计越来越复杂,使得对设计的功能验证越来越重要。断言便是一门重要的验证技术,它可以尽早发现设计的缺陷以及提高验证的效率。是一种冗长的语言,随着断言数量的增加,维护代码将变得很困难;原创 2025-04-05 07:47:41 · 943 阅读 · 0 评论 -
#SVA语法滴水穿石# (003)关于 sequence 和 property 的区别和联系
sequence是描述时序模式的基本构建块,它本身不是完整的断言。property是完整的断言规范,可以包含时序和非时序条件,并能直接用于验证语句。简单的断言可能只需要一个sequence,但复杂的断言需要将多个sequence组合成property。property 可以包含蕴含操作(|->, |=>)和逻辑操作,而sequence主要关注事件的时序关系。原创 2025-04-04 22:19:38 · 429 阅读 · 0 评论 -
#SVA语法滴水穿石# (002)关于 |-> + ##[min:max] 的联合理解
第一个表达式由于语法错误,其意图不明确,若强行解析可能被某些工具视为无效或非标准实现。两者的核心区别在于语法合法性及对时序延迟的规范方式。第二个表达式是符合SVA标准的正确写法,而第一个表达式因缺少。表示在触发后的第2到第4个时钟周期内任意一个周期检查。工具可能报错或无法正确解析。今天,我们着重理解一些概念。采用非交叠蕴含符号,仿真结果如下:断言成功。采用交叠蕴含符号,仿真结果如下:断言失败。SVA要求时序延迟必须使用。发生时,断言要求在接下来的。第二个表达式明确表示:当。原创 2025-04-04 20:19:02 · 290 阅读 · 0 评论 -
#SVA语法滴水穿石# (001)关于 |-> 和 |=>
在SystemVerilog Assertions(SVA)中, 和 是两种不同的隐式条件操作符,它们的用法和行为有所不同。定义: 是一个重叠隐式条件操作符,用于检查条件是否在当前周期满足,并在同一个周期内触发后续的序列。行为:如果条件在当前周期为真,则后续的序列会在当前周期开始执行。语法: 解释:如果 在当前周期为真,则 必须在当前周期为真,否则断言失败。定义: 是一个非重叠隐式条件操作符,用于检查条件是否在当前周期满足,并在下一个周期触发后续的序列。行为:如果条件在当前周期为真,则后续原创 2025-04-04 14:52:58 · 358 阅读 · 0 评论 -
#SVA语法滴水穿石# 关于$符号
1、SVA中的 $使用:1、无限制的delay2、连续的delay3、request-grant 协议4、multi hreading 导致错误2、前置是条件,后置直接为0原创 2022-03-29 08:34:19 · 458 阅读 · 0 评论