systemverilog学习 ---- assertion结束

加下来我们讨论assertion的操作符,方便对时序进行建模。

Repetition Operators

property p;
	@(posedge clk) a |-> ##1 b ##1 b ##1 b;
endproperty
a:assert property(p);

再上面这个例子中,如果信号a在一个给定的时钟上升沿为高电平,那么信号b应该在接下来的连续的三个时钟周期为高电平。但是如果表达式出现多个周期,一个一个的通过##写会很繁琐。因此systemverilog提供了重复操作符。

signal [*n] or sequence [*n]
"n" is the number of repetitions.

因此基于重复操作符,上面的例子可以改写为:

property p;
	@(posedge clk) a |-> ##1 b[*3];
endproperty

当然也可以不连续,可以使用go-to-repetition(->n)操作符,这意味着信号不用再连续的时钟周期内出现特定的值。

property p;
	@(posedge clk) a |-> ##1 b[->3] ##1 c;
endproperty

上面例子表明,如果信号a在一个给定的时钟上升沿为高电平。紧接着信号b应该在有三个时钟周期内为高电平,最后紧接着的时钟周期内信号c为高电平。
在如下面的例子所示:

$rose(rdy) ##1 rd_en[->4] ##1 intr_en;

在这里插入图片描述
上图中,绿色表示rdy上升沿,紫色表示rd_en=1,蓝色表示intr_en,语句表示rdy上升沿后要有4个周期的rd_en,满足4个周期后紧跟一个周期intr_en=1。

若可以不连续,便可以贯彻到底使用,如下例子所示,表示不用紧跟出现rd_en=1。
在这里插入图片描述

SVA method

时序定义,除了电平值,还会涉及边沿等情况,接下来讨论SVA的方法。

$rose (boolean expression or signal name)

$rose(布尔表达式或者信号名)。如果这个表达式最低有效位或者信号变为高电平时,会返回true,否则会返回false。

rose

sequence seq_rose;
	@(posedge clk) $rose(a);
endsequence

在上面例子中,序列seq_rose会在每一个时钟的上升沿检查,信号a是否从0变成1,若这个转变没有出现,则认为这次断言失败。

fell

声明如下:

$fell(boolean expression or signal name);

当最低的有效位变为0时返回true,否则返回false。

sequence seq_fall;
	@(posedge clk) $fell(a);
endseqence

序列seq_fell在每一个时钟的上升沿检查信号a是否从1变到0,如果这个转变没有出现,那么则认为此次断言失败。

stable

$stable (boolean expression or signal name)

表示稳定没有变化,则若这个周期和上个周期的值是一样的,即没有变化,就返回true。

sequence seq_stable;
	@(posedge clk) $stable(a);
endsequence

序列seq_stable会在每一个时钟的上升沿检测信号a是否是稳定的,如果由任何的转变出现,那么断言失败。

past

$past(signal_name, number of cloc cycles)

$ stable是参考了前一个时钟周期的值,我们可以通过$ past访问当前时刻前一些周期的值,其中第一个参数制定了信号,第二个参数指定了访问了前几个周期。

property p;
	@(posedge clk) b |-> ($past(a,2)==1);
endproperty
a:assert property(p);

上面例子显示,在每一个时钟周期的上升沿检查b是否高电平,若是的,则在此时的前两个周期信号a是高电平。
我们也可以有条件地访问过去周期的值,第三个参数是门控信号,可以理解为使能信号。

$past(signal_name, number of clock cycles, gating signal)

还有一些跟位有关,见下图,onehot检查信号只有1bit为1,onehot0检查信号只有1bit为1或者全为0,isunknown检查信号的任意bit出现x或者z,countones返回信号所有位中1的个数。
在这里插入图片描述
在这里插入图片描述

disable iff

与约束一样,在一些情况下,我们不需要使能assertion。在systemverilog中,可以使用disable iff实现。在下面的例子中,如果信号a在一个给定的时钟上升沿为高时,那么信号b则要有三个时钟周期的高电平,紧接着的一个时钟周期信号c应该是高电平,但是在整个序列检查的过程中,如果reset的信号为高的话,那么整个检查都会被停止。注意蕴涵操作符,当a=0时,视为空成功,是依然进行检查的。

property p;
	@(posedge clk)
	disable iff(reset) a |-> ##1 b[->3] ##1 c;
endproperty
a:assert prperty(p);

ended

当我们要连接序列时,一个序列的末尾可以用于同步。在下面的例子中,seq_1表示a和b都为1,在下一个时钟周期c为1。seq_2表示d为1时,再经过4-6个时钟周期e=1。在属性p中,通过序列.ended连接了两个序列,可以理解为序列的末尾为1时必然出现完整的序列。

sequence seq_1;
	(a && b) ##1 c;
endsequence

sequence seq_2;
	d ##[4:6] e;
endsequence

property p;
	@(posedge clk) seq_1.ended |-> ##2 seq2_ended;
endproperty
a:assert property(p);

delay

前面我们延时一般都通过常量给定,如##2,但不能定义一个变量如num,##num的语法是错误的。
在这里插入图片描述
可以使用如下的方案:
在这里插入图片描述
在这里插入图片描述

### 回答1: SystemVerilog讲座-PDF教程是一本关于Verilog和SystemVerilog语言的详细介绍和使用手册。该教程适合想要学习Verilog和SystemVerilog语言的初学者和工程师。 该教程覆盖了Verilog和SystemVerilog语言的基础知识,包括数据类型和运算符、模块和端口、决策和循环语句、函数和任务、时序建模、测试和调试等。此外,该教程还介绍了使用SystemVerilog进行OVM/UVM验证和设计模式。 该教程包含了大量的示例程序和练习题,帮助读者深入理解Verilog和SystemVerilog语言的使用和应用。通过学习该教程,读者可以掌握系统级设计和验证流程,并在工作中使用SystemVerilog语言进行设计和验证。 值得注意的是,学习Verilog和SystemVerilog语言需要具备一定的数字电路设计和计算机编程基础。因此,初学者可以先学习电路设计和计算机编程基础,再进一步学习Verilog和SystemVerilog语言。 ### 回答2: SystemVerilog是基于Verilog的扩展语言,它是一种高级硬件描述语言,具有强大的设计与验证功能。SystemVerilog极大地拓展了Verilog的能力,增强了硬件设计的复杂性,使得对于SystemVerilog熟练掌握的工程师来说,能够更快速、更有效地完成硬件的设计与验证工作。 针对学习SystemVerilog的人们,提供了一些SystemVerilog讲座和PDF教程,这些资源非常有用。讲座中的专家们详细介绍了SystemVerilog的特性和用法,通过讲解实例,让学习者深入了解SystemVerilog的基本结构、体系架构、语法等方方面面。而PDF教程则提供了更加系统化、深入的学习材料,非常适合有一定编程基础的学习者使用。 在SystemVerilog讲座和PDF教程的学习中,学习者需要逐步掌握SystemVerilog的语言规则和特性。首先要掌握数据类型、运算符、模块定义、分层设计、控制流等基本概念。通过这些基础的学习和实践,可以逐渐提升自己的编程技能和系统设计能力。 总之,SystemVerilog讲座和PDF教程是学习SystemVerilog的重要资源,对于想要深入了解硬件设计与验证的工程师和学生而言,这些资源将是非常有用的学习资料,也有利于其提升自己的技能和能力,为将来的工作或学习做好准备。 ### 回答3: SystemVerilog讲座-PDF教程是一种与计算机领域相关的教学材料,旨在向学生和专业人士介绍SystemVerilog的基本概念和用法。SystemVerilog是一种现代的硬件描述语言,它在硬件设计领域和系统级开发中得到了广泛应用。 SystemVerilog讲座-PDF教程的内容丰富多样,包括SystemVerilog的基本语法和数据类型、控制流语句、模块化设计、仿真和调试等方面的内容。通过这些学习材料的使用,学生可以掌握SystemVerilog的核心概念,不仅能够编写规范的硬件描述代码,同时也能够使用SystemVerilog实现复杂的硬件系统。 SystemVerilog讲座-PDF教程还提供了大量的实例和案例,帮助学生更好地理解SystemVerilog的各种应用场景。此外,在教程中还提供了大量的练习题,帮助学生巩固自己的学习成果。 总之,SystemVerilog讲座-PDF教程是一种非常实用的教学资源,它为学生和专业人士提供了非常有价值的SystemVerilog学习资料,帮助大家快速掌握这种重要的硬件描述语言。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值