(十二)SV的断言

这篇具有很好参考价值的文章主要介绍了(十二)SV的断言。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、断言(SV Assertions)

1、定义

断言又被称为监视器或者检验器,在设计验证流程中被广泛使用,用于描述设计的属(property),可以完美地描述时序相关的状况,用于描述设计期望的行为,从而检验设计实际行为是否与设计意图相符,如果允许的设计属性不符合我们的期望,则断言失败;如果被禁止的设计属性发生,则断言失败。

用途:

(1)检查特定条件或事件序列的发生;

(2)提供功能覆盖(functional coverage),使用 cover 关键字 ;

2、分类

断言分为立即断言和并发断言,两者的主要区别在于断言析构时在同一个时间槽中处理的阶段不同

1、立即断言

立即断言检查当前仿真时间的条件,是非时序的,立即断言需要在过程块中定义的,测试表达式的计算跟Verilog HDL过程块中的行为一样,即一旦事件发生变化则表达式立刻被求值,其行为一般不依赖于具体的时钟,当断言判断表达式中的任何信号发生变化,该检查都会被立即执行,可以理解该断言为不需要耗费时间的断言。

语法

label: assert(expression) action_block;
  •  label:断言的的标签,便于编译器打印信息
  • expression:断言的表达式,一般为布尔表达式
  • action_block:执行块, pass_statement; else fail_statement;
  • $fatal :a run-time fatal.
  • $error :a run-time error,默认情况下,断言失败的严重程度是一个error.
  • $warning :a run-time warning.
  • $info :    information.

示例1:

module test;
bit clk,a,b;
always #5 clk = ~clk; //clock generation
initial begin
		a=1;
		b=1;
	#15 b=0;
	#10 b=1;
		a=0;
	#20 a=1;

	#2  b=0;
	#5  b=1;

	#20;
	$finish;
end
//立即断言放在时序逻辑块中
always @(posedge clk) check1_a_and_b:assert(a&&b); 
//立即断言放在组合逻辑块中
always_comb check2_a_and_b:assert(a&&b);
//assign c = assert(a&&b);//非法的,立即断言不能定义于连续赋值语句中

endmodule

打印结果:
test.check2_a_and_b: started at 15ps failed at 15ps
	Offending '(a && b)'
test.check1_a_and_b: started at 15ps failed at 15ps
	Offending '(a && b)'
test.check2_a_and_b: started at 25ps failed at 25ps
	Offending '(a && b)'
test.check1_a_and_b: started at 25ps failed at 25ps
	Offending '(a && b)'
test.check1_a_and_b: started at 35ps failed at 35ps
	Offending '(a && b)'
test.check2_a_and_b: started at 47ps failed at 47ps
	Offending '(a && b)'

sv 断言,SV学习,fpga开发

 说明:文章来源地址https://www.toymoban.com/news/detail-703485.html

  • 上示代码没有写action_block,系统自动打印
  • 在时序逻辑块中的立即断言,在每个时钟的上升沿都会去执行断言,但立即断言的采样与赋值并不是采的时钟上升沿前的a、b值,而是当前仿真时间的值,立即断言与时钟无关的,这与并行断言不同,主要原因在于立即断言的采样赋值时间与并行断言不同,这与SV的激励时序,

到了这里,关于(十二)SV的断言的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • sv,verilog

    在 Verilog 中,敏感列表(Sensitive List)指的是在 always 语句块中使用时钟信号的列表。敏感列表用于指定 always 块所监控的输入信号,在这些信号状态发生变化时, always 块会被触发执行。 在 Verilog 中, always 块有两种敏感列表: 电平敏感列表(Level-Sensitive List):较早的 Ver

    2024年02月04日
    浏览(36)
  • SV重要知识点

    1、#、wait、@三者的区别: 1)关于‘#’ a. 后面可以添加单位时间的耗时语句 b. 后面添加()可以传递参数 2)wait跟@的区别是: @是边沿敏感触发,而wait是电平敏感触发 wait只等待一次,@每时每刻都在等待(不在always限制下) 如何打印各种类型的变量? 结构体指针:%p 八、

    2023年04月12日
    浏览(41)
  • SV芯片验证之验证环境

    声明:本内容来自于学习路科验证发布在B站上的免费视频课程后的笔记 它是整个验证系统的总称,包括: 1、验证结构中的各个组件、组件之间的连接关系、测试平台的配置和控制; 2、编译仿真的流程、结果分析报告和覆盖率检查; 我们主要关注验证平台的结构和组件部分

    2024年02月16日
    浏览(39)
  • SV中的clocking时钟块

    采样时发生竞争 (delta cycle的存在),会导致采样数据错误。为了避免在RTL仿真中发生信号竞争的问题,建议通过非阻塞赋值或者特定的信号延迟来解决同步问题。这里我们介绍使用 clocking时钟块 来决定信号的驱动和采样的方式。 在RTL仿真时,由于无法确定具体电路的延迟

    2024年02月15日
    浏览(38)
  • SV-298XT IP网络广播板 SV-298XT-共公广播音频模块IP网络广播板

    SV-298XT IP网络广播板 SV-298XT-共公广播音频模块IP网络广播板 SV-298XT网络广播模块是一款全数字网络型广播模组,核心部分采用了成熟的私有协议解决方案,性能稳定可靠。支持TCP、UDP、组播协议能针对当前服务器中不同的广播任务设置不同的广播传输方式。以太网传输可实现

    2024年01月15日
    浏览(39)
  • SV芯片验证之数据类型(一)

    四值(四态)逻辑: 可以表示0(低电平)、1(高电平)、X(未知值、不定态)和Z(高阻值)四种值。有 logic、reg、integer、time、net-type(wire、tri) 。 注: 真实电路中并无X,它只是用来表示不确定的状态,即不确定它到底是0还是1,但它要么是0要么就是1,不存在所谓的“中间态”。 高阻态

    2024年02月09日
    浏览(35)
  • Soem配置汇川SV660N

    本文已参与「开源摘星计划」,欢迎正在阅读的你加入。活动链接:https://github.com/weopenprojects/WeOpen-Star​​​​​​​ 目录 1. ETherCAT 状态机 2. SOEM配置过程 2.1 IP初始态转预运行 2.2 预运行转安全运行 2.3 安全运行转运行 2.4 运行状态 EtherCAT 设备必须支持4 种状态,负责协调主

    2024年02月04日
    浏览(42)
  • (三)SV结构体、枚举类型、字符串

    1、SV结构体与C语言中结构体对应 说明: student:结构体类型名,可以忽略不写的 student1, student2:结构体变量名 内部的变量:成员变量名   但常常用typedef来新定义类型,就是对其他类型取别名,方便定义变量 ,例如:  typedef struct {bit [7:0] r, g, b;} pixel_s1;//pixel_s就是对struct {bit

    2024年02月15日
    浏览(41)
  • (八)SV虚接口及包的使用

    interface 简化了模块之间的连接,但是无法很好地适用于基于OOP的测试平台,无法在program  、class 中进行实例化,所以引入了虚接口, virtual interface的本质是指针,是指向interface的指针 ,即virtual interface是可以在class中实例化的数据类型,interface将测试平台与DUT分开, virtual i

    2024年02月13日
    浏览(33)
  • SV芯片验证之动态数组、队列、关联数组

    声明:本内容来自于学习路科验证发布在B站上的免费视频课程后的笔记 可以重新确定大小。 1、声明时需要用 [ ] ,表示 不会在编译时为其指定大小,而是在仿真运行时来确定大小 。 它在一开始如果没有做初始化或者赋值,那么就为空,需要使用 new[ ] 来给它分配空间。 

    2024年02月16日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包