教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 建筑文档 >

systemverilog验证学习笔记

来源:网络收集 时间:2026-03-29
导读: =阻塞串行 1)时序逻辑----使用非阻塞赋值 2)锁存器----使用非阻塞赋值 3)用always块生成的组合逻辑----用阻塞赋值 4)在同一个always块中既有时序逻辑又有组合逻辑--- 用非阻塞赋值 5)在同一个always块中不要既用阻塞赋值又用非阻塞赋值 6)不要在一个以

=阻塞串行

<=非阻塞并行

1)时序逻辑----使用非阻塞赋值 2)锁存器----使用非阻塞赋值

3)用always块生成的组合逻辑----用阻塞赋值 4)在同一个always块中既有时序逻辑又有组合逻辑--- 用非阻塞赋值

5)在同一个always块中不要既用阻塞赋值又用非阻塞赋值 6)不要在一个以上的always块中对同一个变量赋值 7)用$strobe显示用非阻塞赋值指定的变量值

8)不要用 #0 过程性赋值Modport将信号分组并指明方向

函数不能消耗时间,不能有#100@(posedge clk)wait之类的阻塞语句

Interface arb_if(input bit clk); Logic [1:0] a,b; Logic rst;

Modport test(output a,rst, Input b,clk); Endinterface

Module arb(arb_if.test arbif); ………… Endmodule

数组定位

Int tq[$],d[]=’{9,1,8,3,4,4};

Tq=d.find_index(x) with (item>3); //{0,2,4,5}得到的是脚标 Tq=d.find with (item>3); //{9,8,4,4} 数组求和 Int count,total;

Count=d.sum with(item>7); //2:{9,8} 返回结果为元素与7比较表达式返回1为真或者零这里面返回 ,{1,0,1,0,0,0}求和得2 Total=d.sum with ((item>7)*item) ; //{1,0,1,0,0,0}和对应元素相乘求和得17=9加8 数组排序

d.reverse(); //逆序 d.sort(); //从小到大 d.rsotr(); //从大到小 d.shuffle();

时钟块

指定同步信号相对于时钟的时序

Interface arb_if(input bit clk); Logic [1:0] a,b; Logic rst;

Clocking cb @(posedge clk); Output a; Input b;

Modport test(output rst, Clocking cb); Endinterface

Module arb(arb_if.test arbif); Initial begin Arbif.cb.a<=0; @arbif.cb; $dispiay(………..) Endmodule

断言

A1:assert(bus.cb.a==2’b01)

Else $error(“grant not asserted”);

四种有输出消息的函数可在断言内部使用 $info $waring $error $fatal

要验证这样一个属性:“当信号a在某一个时钟周期为高电平时,那么在接下来的2~4个时钟周期内,信号b应该为高电平”。用Verilog语言描述这样一个属性需要一大段代码,而用SVA描述就只需要几行代码。下面的代码为SVA。 例1:

property a2b_p; @(posedge sclk) $rose(a) |-> [2:4] $rose(b); endproperty

a2b_a: assert property(a2b_p); a2b_c: cover property(a2b_p);

并发断言

并发断言的计算基于时钟周期,在时钟边沿根据变量的采样值计算表达式。它可以放在过程块(procedural block)、模块(module)、接口(interface)或一个程序块(program)的定义中。并发断言可以在静态(形式化)验证工具和动态(仿真)验证工具中使用。上面的例子就是并发断言

SVA提供了3个内嵌函数,用于检查信号的边沿变化。 $rose(布尔表达式或信号名)

当信号/表达式的最低位由0或x变为1时返回真值。 $fell(布尔表达式或信号名)

当信号/表达式的最低位由1变为0或x时返回真值。 $stable(布尔表达式或信号名)

当信号/表达式的最低位不发生变化时返回真值。 断言的建立过程

“编写布尔表达式 —> 编写序列(sequence)-> 编写属性(property)—> 编写断言(assert property)和覆盖语句(cover property)”

唯一性和优先级决定语句

在Verilog中,如果没有遵循严格的编码风格,它的if-else和case语句会在RTL仿真和RTL综合间具有不一致的结果。如果没有正确使用full_case和parallel_case综合指令还会引起一些其它的错误。 SystemVerilog能够显式地指明什么时候一条决定语句的分支是唯一的,或者什么时候需要计算优先级。我们可以在if或case关键字之前使用unique或requires关键字。这些关键字可以向仿真器、综合编译器、以及其它工具指示我们期望的硬件类型。工具使用这些信息来检查if或case语句是否正确建模了期望的逻辑。例如,如果使用unique限定了一个决定语句,那么在不希望的case值出现的时候仿

…… 此处隐藏:319字,全部文档内容请下载后查看。喜欢就下载吧 ……
systemverilog验证学习笔记.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/438758.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)