- 博客(537)
- 资源 (6)
- 收藏
- 关注
原创 VC Formal 支持哪些应用模式
VC Formal 的 LEC 更灵活(支持 RTL-to-RTL),但 Formality 在门级网表 LEC 上更成熟。,针对不同的验证需求进行优化,以提高形式验证的效率和覆盖率。是预定义的验证策略,针对特定场景优化引擎配置,使形式验证更高效。:验证两个设计版本(如 RTL 优化前后、RTL vs. 门级网表)的逻辑等价性。:针对算术逻辑(如乘法器、加法器、浮点单元)的自动形式验证。:结合形式验证与仿真,验证复杂场景(如深状态空间问题)。:验证硬件安全属性(如无非法信息泄漏、权限隔离)。
2025-04-18 11:00:42
717
原创 Synopsys 推出的 形式验证工具有哪些及特点
可与 Synopsys 其他工具(如 VCS、Design Compiler、IC Compiler)无缝协作。:基于形式验证的静态签核(Signoff)工具,集成在 SpyGlass 平台中。RTL 早期静态检查(如时钟域交叉 CDC、复位一致性、低功耗验证)。:高级功能形式验证(RTL 级属性验证、数据路径验证、安全验证等)复杂数据路径(如算术逻辑、AI 加速器)的形式验证。不支持属性验证(SVA),仅专注逻辑功能等价性。:针对特定问题的形式验证解决方案(如安全验证)。
2025-04-18 10:55:18
820
原创 #systemverilog# 进程控制问题#(八)关于#0 问题的使用(三)
今天,我们继续研究一下上一节讨论的问题。其实,还有一个小问题,我们来探讨一下。
2025-04-18 09:48:16
198
原创 #systemverilog# 进程控制问题#(七)关于#0 问题的使用(二)
/ 每个线程有自己的 j 变量。其实,上述的文章,并没有做细致拓展,今天我们继续修改源代码,看看有什么遗漏的注意点。在前面的文章中,我们讨论了#0的作用。在之前的例子中用于控制线程调度顺序,而本例没有使用。内部使用时,由于线程调度,所有线程可能会打印。完成 4 次迭代,并创建 4 个。内部使用时可能引发问题,需要使用。又创建了一个并发线程,同样进入。是共享的,所有线程可能读取到。(在当前时间步的最早阶段)。是不确定的,但通常会在。的值正确传递,可以使用。这样,每个线程会正确打印。(循环结束后的值)。
2025-04-16 09:54:07
53
原创 #systemverilog# 进程控制问题#(六)关于#0 问题的使用(一)
"(由于SV的fork-join_none变量捕获问题,可能都是4),然后才打印"this is main thread!今天,我们聊一聊关于#0的问题。大家知道,#0的使用,经常出现在我们的systemverilog的验证平台中。会立即产生多个并发线程(这里是4个display线程),但这些线程会被放入仿真器的"非活跃队列"(inactive queue),不会立即执行。这使得所有fork产生的线程(已经在非活跃队列中)会先于这个#0语句执行。,主线程的display会立即执行,可能先于fork的线程。
2025-04-16 09:42:05
165
原创 #systemverilog# 关于基于systemveriog验证平台的RTL+TB文件编译顺序问题的讨论
细化阶段静态世界组件(模块、接口等)类的静态方法和静态属性运行时阶段常规类实例(动态对象)
2025-04-13 17:25:58
70
原创 #SVA语法滴水穿石# (013)关于 disable iff、matched 、expect 的用法
SystemVerilog 断言(SVA)中 disable iff。常用于测试平台(testbench)中,等待特定条件后继续执行代码。条件生效时,断言立即停止检测,且不会触发失败。常用于多序列组合中需要对齐时序的场景。后 2 周期内)→ 打印成功消息。,通常用于同步多个序列的时序关系。关键字,捕获子序列的结束时间。可以指定超时时间,若超时则触发。)期间忽略断言检查,避免误报。在周期2结束,时序不同步。
2025-04-05 20:39:59
479
原创 #SVA语法滴水穿石# (013)关于内建系统函数
若表达式为多热码(multiple-hot)或全零,返回。若表达式为多热码(multiple-hot),返回。SystemVerilog 断言(SVA)中。:检查表达式在指定时钟沿是否。:检查表达式在指定时钟沿是否。常用于动态检查有效信号的数量。,其他位必须为低电平(0)。若有任意位为 X/Z,返回。
2025-04-05 16:04:31
341
原创 #SVA语法滴水穿石# (012)关于 first_match、throughout、within 的用法
验证子操作在父操作的时间范围内完成(如中断响应必须在事务周期内)。:避免因多个分支同时满足条件导致的重复触发,确保断言逻辑的确定性。:验证信号在特定操作期间保持稳定(如总线保持、电源稳定)。:断言在周期1和周期3均匹配成功,可能触发多次报告。:仅周期1的匹配被选中,周期3的匹配被忽略。若条件在序列的任一周期失效,断言失败。的周期内(0-3)始终保持不变。在周期1-3完成,完全包含在。在周期2变为6,断言失败。,忽略后续可能的匹配。
2025-04-05 15:57:53
805
原创 #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
411
原创 #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
785
原创 #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
881
原创 #SVA语法滴水穿石# (006)关于 `define true 1的用法
SVA 的延时周期数必须在编译时确定(静态),若需运行时动态调整,需结合其他方法(如。(如 define true 1`)或布尔表达式来实现灵活的逻辑控制。在第 2 周期有效(符合 2 周期延时),断言通过。在第 4 周期有效(符合 4 周期延时),断言通过。过度使用宏可能降低代码可读性,建议仅在必要时使用。在第 2 周期有效,但实际在第 3 周期有效。表达式或条件运算符,动态控制断言中的时序逻辑。是实现固定周期延时的标准方式。确保延时周期数为静态值(编译时可确定)。根据配置参数选择延时周期。
2025-04-05 11:22:54
320
原创 #SVA语法滴水穿石# (005)关于 问号表达式(condition ? expr1 : expr2)
的语法和逻辑与 C 语言的三元条件运算符完全一致。通过合理使用问号表达式,可以简化复杂断言逻辑,提高代码可读性和复用性。:在断言中根据条件动态选择逻辑分支,增强断言灵活性。在 SystemVerilog 断言(SVA)中,,常用于动态选择信号、序列或属性。多模式设计(如高/低优先级模式)。可配置时序检查(如不同延迟要求)。:布尔表达式,决定选择的分支。拉高后 1 个周期响应。拉高后 3 个周期响应。为真,则选择此表达式。为假,则选择此表达式。忽略条件的时序变化影响。
2025-04-05 11:02:13
480
原创 #SVA语法滴水穿石# (004)关于 ended 和 triggered 用法
例如,序列 A 的结束时间必须与序列 B 的结束时间一致。的关键字,它表示某个序列(sequence)在特定时间点已经成功匹配(即“结束”)。在第 0 个周期拉高,在第 2 个周期拉低,结束时间为第 2 个周期。,尤其是在多序列组合或属性(property)中需要对齐时序的场景。可以同步不同序列的完成时间点,常用于协议握手或状态机跳转的验证。如果序列在当前时间点之前(即过去的时钟周期)完成匹配,则。的值在每个时钟边沿重新计算,与断言所在的时钟域同步。)后的第 3 个周期,检查。在第 2 个周期结束时,
2025-04-05 10:52:33
806
原创 #SVA语法滴水穿石# (004)关于 not 禁用属性
若需在时间范围内禁止属性(如“永远不”或“在某个条件后不”),可结合时序操作符使用。关键字,我们能够明确禁止系统中不应出现的状态或行为,从而在验证阶段提前发现设计错误。)为真时,断言会失败;反之,如果该属性始终为假,则断言通过。修饰的属性始终为假时(即原属性始终为真),断言通过。修饰的属性为真(即原属性为真),断言失败。为 1 时失败,确保错误状态被检测到。是属性,表示“两个信号同时为真”。修饰后,断言要求这个属性永远为假。在所有时钟周期均为 0,否则失败。同时为 1,属性为真,假设一个通信协议要求。
2025-04-05 08:00:19
203
原创 #SVA语法滴水穿石# (000)断言基本概念和背景
那么断言是如何表现的呢?进行设计时,我们并不能确保设计出来的东西没有功能上的漏洞,因此在设计后我们都会对其进行验证仿真。换句话说,验证的目的是彻底地验证被测设计以确保设计没有功能上的缺陷。协议覆盖是用来衡量一个设计的功能说明书中确定的所有功能是否都测试过;数据检验则是检验正在处理的数据的完整性。随着数字电路规模越来越大、设计越来越复杂,使得对设计的功能验证越来越重要。断言便是一门重要的验证技术,它可以尽早发现设计的缺陷以及提高验证的效率。是一种冗长的语言,随着断言数量的增加,维护代码将变得很困难;
2025-04-05 07:47:41
915
原创 #SVA语法滴水穿石# (003)关于 sequence 和 property 的区别和联系
sequence是描述时序模式的基本构建块,它本身不是完整的断言。property是完整的断言规范,可以包含时序和非时序条件,并能直接用于验证语句。简单的断言可能只需要一个sequence,但复杂的断言需要将多个sequence组合成property。property 可以包含蕴含操作(|->, |=>)和逻辑操作,而sequence主要关注事件的时序关系。
2025-04-04 22:19:38
388
原创 #SVA语法滴水穿石# (002)关于 |-> + ##[min:max] 的联合理解
第一个表达式由于语法错误,其意图不明确,若强行解析可能被某些工具视为无效或非标准实现。两者的核心区别在于语法合法性及对时序延迟的规范方式。第二个表达式是符合SVA标准的正确写法,而第一个表达式因缺少。表示在触发后的第2到第4个时钟周期内任意一个周期检查。工具可能报错或无法正确解析。今天,我们着重理解一些概念。采用非交叠蕴含符号,仿真结果如下:断言成功。采用交叠蕴含符号,仿真结果如下:断言失败。SVA要求时序延迟必须使用。发生时,断言要求在接下来的。第二个表达式明确表示:当。
2025-04-04 20:19:02
255
原创 #SVA语法滴水穿石# (001)关于 |-> 和 |=>
在SystemVerilog Assertions(SVA)中, 和 是两种不同的隐式条件操作符,它们的用法和行为有所不同。定义: 是一个重叠隐式条件操作符,用于检查条件是否在当前周期满足,并在同一个周期内触发后续的序列。行为:如果条件在当前周期为真,则后续的序列会在当前周期开始执行。语法: 解释:如果 在当前周期为真,则 必须在当前周期为真,否则断言失败。定义: 是一个非重叠隐式条件操作符,用于检查条件是否在当前周期满足,并在下一个周期触发后续的序列。行为:如果条件在当前周期为真,则后续
2025-04-04 14:52:58
249
原创 #systemverilog# SystemVerilog 中的类多态和向下转换(Downcasting)之间的关系
无法直接调用子类特有的方法或属性。
2025-03-30 12:01:03
34
原创 #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
120
原创 #C8# UVM中的factory机制 #S8.5# 对factory机制的重载进一步思考(二)
当子类定义了一个与基类同名的方法,即使参数不同,基类的方法也会被隐藏。
2025-03-29 20:10:46
171
原创 #VCS# 关于 +incdir+xxx 编译选项的注意点
前段时间,工作中遇到百思不得其解的坑。按照以往的理解,没有找到任何可能问题点。今天总结下来。是 VCS 编译器中用于指定搜索路径的重要选项,主要用于指定 `include 指令的搜索目录。
2025-03-28 16:45:13
427
原创 #systemverilog# SystemVerilog 中的向上转换(Upcasting)和向下转换(Downcasting)
在 SystemVerilog 中,向上转换和向下转换是面向对象编程中与类继承相关的两种类型转换方式。
2025-03-28 11:16:56
164
原创 #C8# UVM中的factory机制 #S8.4.3# factory机制创建实例接口
factory机制提供了一系列接口来创建实例。来源:UVM源代码来源:UVM源代码来源:UVM源代码有四个参数,第一个参数是字符串类型的类名,第二个参数是父结点的全名,第三个参数是为这个新的component起的名字,第四个参数是父结点的指针。这个函数一般只在一个component的new或者build_phase中使用。如果是在一个object中被调用,则很难确认parent参数;
2025-03-28 09:25:15
24
原创 #C8# UVM中的factory机制 #S8.5# 对factory机制的重载进一步思考(一)
特性Overloading (重载)Polymorphism (多态)绑定时间编译时(静态绑定)运行时(动态绑定,虚函数)作用域同一作用域内跨继承层次实现方式参数列表不同virtual+ 继承目的扩展函数/操作符的适用性实现接口统一,行为差异化。
2025-03-27 22:47:04
498
原创 #C8# UVM中的factory机制 #S8.2.3# 重载 component 哪些情形
通常用于动态替换监测逻辑,例如扩展监测功能、修改协议解析行为或调试特定场景。:无需修改原始 Monitor 代码,符合 UVM 的“开闭原则”(对扩展开放,对修改关闭)。在包含多个 Agent 实例的环境中,仅替换其中一个 Agent 的 Monitor。在调试阶段,临时修改 Monitor 的协议解析逻辑,例如打印更多调试信息。支持不同版本协议(如 PCIe Gen3/Gen4),通过重载切换解析逻辑。在原有 Monitor 基础上增加覆盖率收集或日志记录,无需修改原始代码。:无需修改测试代码。
2025-03-27 07:55:23
39
原创 #C8# UVM中的factory机制 #S8.2.3# 重载sequence哪些情形
在UVM中,是一种动态替换激励生成逻辑的关键技术,常用于灵活配置测试场景。
2025-03-27 07:40:52
225
原创 #C8# UVM中的factory机制 #S8.2.2# factory 机制重载方式
上节介绍了使用set_type_override_by_type函数可以实现两种不同类型之间的重载。类似,但参数类型不同,适用于需要直接使用类型对象(而非类型名字符串)的场景。在复杂测试环境中,验证某个实例路径是否应用了预期的类型覆盖。类型的对象代理,代表工厂根据覆盖规则最终选择的类型。类型的对象代理,表示工厂根据覆盖规则最终选择的类型。,帮助调试或动态确认某个对象在创建时的实际类型。,返回实际会被创建的对象的代理类型(,返回实际会被创建的对象的代理类型(方法前,预判实际实例化的类型。
2025-03-24 17:49:14
54
原创 #C8# UVM中的factory机制 #S8.2.1# factory 机制重载法则
factory机制最伟大的地方在于其具有重载功能。重载并不是factory机制的发明,前面已经介绍过的所有面向对象的语言都支持函数/任务重载,另外,SystemVerilog还额外支持对约束的重载。只是factory机制的重载与这些重载都不一样。
2025-03-24 17:14:38
140
原创 #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
38
原创 #C8# UVM中的factory机制 #S8.1.2# 到底重载?多态?
张强老师书中,在该章节,主要讲述重载一词,反复提到。而通过前面文章的学习,我们知道,VCS 仿真工具对于重载的支持不是很好。那么,我们不禁疑问:书中到底是 重载还是多态呢?
2025-03-22 16:08:25
59
原创 #C8# UVM中的factory机制 #S8.1.1# OOP 语言三大特性 systemverilog的支持(一)
SystemVerilog 作为一门支持面向对象编程(OOP)的硬件描述和验证语言,,但它的实现方式和特性与纯软件面向对象语言(如 C++ 或 Java)有所不同。
2025-03-22 15:46:44
38
【计算机求职笔试】数据结构与算法、操作系统、计算机网络、数据库及编程语言试题解析:涵盖关键知识点与实战代码示例
2025-04-16
【计算机求职】2024最新版面经:涵盖面试流程、技术要点及薪资谈判技巧综述
2025-04-16
高速通信,SSC,展频,余晖
2025-04-13
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关注的人