IC验证零基础学习-System Verilog-(三、四、七)过程语句和子程序/连接设计和测试平台/线程以及线程间的通信

IC验证零基础学习-System Verilog-(三)过程语句和子程序
1、过程语句
引入新的操作符和语句:“- -”,“+ +”,continue:用于在循环中跳出本轮循环下的语句而直接进入下一轮循环。第二个是break,用于终止并跳出循环。
2、函数,任务及void函数
任务可以消耗时间,而函数不能。从最大的灵活性考虑,所有用于调试的子程序都应该定义为void函数而非任务,以便于被其他任务或函数调用。
3、函数和任务概述–在子程序中去掉begin_end
4、子程序参数
1)C语言风格的子程序参数
2)参数方向-缺省时的类型和方向是“logic 输入”。
3)ref类型,允许不带ref进行数组参数的传递,ref参数只能被用于带自动存储的子程序中。在任务里可以修改变量而且修改结果对调用它的函数随时可见。
4)在调用时不指名参数,则使用缺省值。
5)采用名字进行参数传递
5、子程序返回
1)返回(return)语句–使子程序中的流程控制变得更方便
2)从函数中返回一个数组
(1)定义一个数组类型,然后在函数的声明中使用该类型。
(2)通过引用来进行数组参数的传递,最简单的办法是以ref参数的形式将数组传递到函数里。
6、局部数据存储
1)自动存储–如果要使用自动存储,则必须在程序语句中加入automatic关键词。
2)变量初始化–避免在变量声明中赋予除常数以外的任何值。
7、时间值
1)时间单位和精度–当你编译指示语句’timescale时,在编译文件时就必须按照适当的顺序以确保所有时延都采用适宜的量程和精度。
2)时间参数—“-9”代表纳秒,“-12”代表皮秒。小数点后的数据精度,时间值之后的后缀字符串,以及显示数值的最小宽度。
3)时间和变量

IC验证零基础学习-System Verilog-(四)连接设计和测试平台
1、接口-使用接口为块之间的通信建模。接口不能例化模块,但是可以例化其他接口。
1)接口信号必须使用非阻塞赋值来驱动,
2)在接口中使用modport结构能够将信号分组并指定方向。
3)接口的优点:
(1)接口便于设计重用,当两个块之间有两个以上的信号连接,并且使用特定的协议通信的时候,应当考虑接口。
(2)接口可以用来代替原来需要在模块或程序中反复声明并且位于代码内部的一系列信号,减少了连接错误的可能性。
(3)要增加一个新的信号时,在接口中只需要声明一次,不需要在更高层的模块层声明,这进一步减少错误。
(4)modport允许一个模块很方便地将接口中的一系列信号捆绑到一起,也可以为信号指定方向以便工具自动检查。
接口的劣势:
(1)对于点对点的连接,使用modport的接口描述跟使用信号列表的端口一样冗长。
(2)必须同时使用信号名和接口名,可能会使模块变得更加冗长。
(3)如果要连接的两个模块使用的是一个不会被重用的专用协议,使用接口需要做比端口连线更多的工作。
(4)连接两个不同的接口很困难。
3、激励时序
1)使用时钟块控制同步信号的时序
(1)接口块可以使用时钟块来指定同步信号相对于时钟的时序。时钟块中的任何信号都将同步的驱动或采样,这就保证了测试平台在正确的时间点与信号交互。
(2)一个接口可以包含多个时钟块,因为每一个块中都只有一个时钟表达式,所以每一个对应一个时钟域。可以使用default语句指定一个时钟偏移,默认情况下输入信号仅在设计执行前被采样,并且设计的输出信号在当前时间片又被驱动到当前设计。
(3)一旦你定义了时钟块,测试平台就可以用@arbif.cb表达式等待时钟,而不需要描述确切的时钟信号和边沿。
2)程序块与时序区域
3)仿真结束-program内默认内嵌$finish,所以完成所有语句,仿真就结束了。
4、接口的驱动与采样
5、顶层作用域
6、程序-模块交互
7、System Verilog断言
1)、断言就是一段描述设计期望行为的代码,断言查找期望的特定事件序列,或者说是在特定时钟周期内的事件。断言是声明性代码,它在执行过程和过程代码有很大差异。
2)、对设计的可见度,所谓可见度就是,设计中异常的行为出现后,需要着重注意两点:一是这个错误是否能够被传递到顶层的输出,;二是期望值和实际输出是否能够在比较后发现差异。断言有一个重要的作用就是可以提高对设计的可见度。
3)断言没有办法自我证明,那么只能通过检视(review)和设计仿真过程中的相互验证,也就是在这个调试过程中,可能是设计上的错误,也可能是断言写错了,或许你大部分时间不是在调试设计,而是在调试断言本身。
使用几行断言,可以验证复杂的时序关系;等价的过程代码可能远比这些断言要复杂和冗长。
(1)立即断言(Immediate Assertion)
断言比if语句更加紧凑,但是断言的逻辑条件跟if语句里的比较条件是相反的,设计者应该期望括号内的表达式为真,否则输出错误。
(2)并发断言–是一个连续运行的模块,它为整个仿真过程检查信号值。
(3)定制断言行为

IC验证零基础学习-System Verilog-(七)线程以及线程间的通信
1、线程的使用
线程是独立运行的程序。
begin_end是顺序方式执行,fork_join是并行方式执行。
1)fork-join:父进程将阻塞,直到该语句块中所有进程都完成为止。
2)fork-join_any:父进程将阻塞,直到该语句块中的任何一个进程完成为止。
3)fork-join_none:父进程与该语句块中所有进程同时执行。
2、事件(event)–实现线程的同步
3、旗语(semaphore)–对同一资源的访问控制
4、信箱(mailbox)–解决线程之间的通信

参考书籍《SystemVerilog验证测试平台编写指南》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值