Assertion

news/发布时间2024/7/27 12:14:31

断言:用来与设计功能和时序作比较的属性描述。
立即断言:

assert (expression) [pass_statement] [else fail_statement]
always @(posedge clk) if (state == REQ)assert(reg1 || reg2)else begint=$time;#5 $error("assert failed at time %0t", t);endassert (myfunc(a,b)) count1 count+1; else -> event1;assert (y==0) else flag == 1;always @(state)assert (state == $onehot) else $fatal;

并行断言

assert property (cont_prop(rst,in1,in2)) pass_stat else fail_stat;property name;
...
endpropertyassert property name else ...;sequence name;endsequence

并行断言只会在时钟边沿激活,变量的值是采样到的值。

sequence、property和assertion

assertion可以直接包含一个property;
assertion可以独立声明property;
在property内部可以有条件地关闭: disable iff ()
property可以直接包含sequence,也可独立声明多个sequence。
sequence是用来表示一个或多个时钟周期内的时序描述;
sequence可以提供形式参数;

sequence s20_1(data, en);(!frame && (data == data_bus)) ##1 (c_be[0:3] == en);
endsequence

|-> :条件满足,在当前周期评估其后算子;
|=> :条件满足,在下一周期评估其后算子;
## :周期延迟,##0指当前周期
##[min:max] : 在一个范围内的时钟周期延迟,从min到max时间窗口中最早的时间来匹配。
$ : 表示无穷大的周期。a ## [1:$]b。
[*n] : 表示重复,重复连续的时钟周期。
[*m:n] : 在一定范围内重复的事件。
[=m] : 重复m次,不需要在连续周期内发生。
[=m:n] : 从最小到最大重复发生的非连续周期次数。
[*0] : 表示没有在任何正数时钟周期内有效。

and : 同一个起始点开始,seq1和seq2均满足,满足时刻发生在较晚序列的满足时刻。
intersect : 同一起点,同一结束点;
or: seq1 和 seq2在同一时刻被触发,结束时间以序列满足的最后一个序列时间为准。
first_match:选择第一次匹配的时刻。
throughout :检查一个信号或者表达式在贯穿一个序列时是否满足。sig1/exp2 throughout seq;在seq成立期间sig1/exp2成立,左边包含右边。
within:一个序列与另一个序列部分周期长度上的重叠。一个序列包含在另一个序列内。seq1 within seq2:seq2的起始点早于q1的起始点,seq2的结束点晚于等于seq1的结束点。
if...else:在sequence中使用if ..else
seq.end :检测序列的终点。
局部变量:

sequence t2;(a##[2:3] b) or (c ##[1:2] d);
endsequence
sequence ts2;first_match(t2);
endsequence
sequence checkBusIdle;(##[2:$] (frame && irdy));
endsequence
property first_match_idle@(posedge clk) first_match(checkBusIdle) |-> (state==busidle);
endproperty
//局部变量
sequence check_reg_wr_data;int local_data;(rd_cache_done, local_data=cache_rd_data) ##2 (reg_wr_data == (local_data+1)
endsequenceproperty checkreadidack;int loc_id;($rose(read),loc_id = readid) |=>not(($rose(read)&&readid==loc_id)[*1:$]) ##0($rose(readack)&&readackid ==loc_id);
endproperty

访问采样方法
访问当前周期采样值,访问上一周期采样值;检测采样值的变化。
$rose:
$fell:
$stabel(expression[,clocking_event]),连续两个周期内表达式的值保持不变
$past(expr[,numble_cycles][,gating_expr][,clocking_event])访问在过去若干采样周期前的数值。

disble iff 给assertion做局部的条件控制。

property name@(posedge clk) disable iff (!rst)...
endproperty

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.jwkm.cn/p/82387230.html

如若内容造成侵权/违法违规/事实不符,请联系宁远站长网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

P2501 [HAOI2006] 数字序列

69682674_p5先来看第一问。 发现直接做要考虑两数中间的数能否变得合法,所以按套路将 \(a_i\) 减去 \(i\),这样就只要变成单调不降,只要两数合法中间的数就一定能变得合法。考虑不改变的那些数,它们一定单调不降,所以答案就是序列总长度减去最长不下降子序列的长度。 接下…

LVS+Keepalived群集

LVS+Keepalived群集 Keepalived是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。 在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP(VIP),主服务器会发送VRRP通告信息给备…

python实现从网站下载文件, 带进度信息

我实现了一个函数, 代码如下: def download_file_from_url(url, save_path=, callback:callable = None):下载文件, 并保存到save_path指定的位置url: 形如http://www.tdx.com.cn/products/data/data/vipdoc/shlday.zip 或者http://www.tdx.com.cn/products/data/data/vipdoc/s…