| ||
4.1 将测试平台和设计分开
4.2 接口
接口信号必须使用非阻塞赋值来驱动。总结:将测试平台与设计分开,通过接口将两者连在一起。
连接接口和端口:当不能对设计的代码进行修改时,只需要在顶层中实例化设计时将设计的端口与接口相连接。
在接口中使用modport结构能够将信号分组并指定方向。
并非接口中的每个信号都必须连接。在接口中不能例化模块但是可以例化其他接口。
4.3 激励时序
使用时钟块控制同步信号的时序(在interface中定义clocking)。可以将测试平台中的信号,都放在clocking 中,并指定方向(以测试平台为参考的方向)。
#0与#1的使用需要避免。
注意测试平台-设计间的竞争状态。
程序块不能有任何的层次级别,例如模块的实例、接口或者其他程序。应当总是将程序块声明为automatic类型,这样它的行为会更加接近基于堆栈的语言中的函数。
4.4 接口的驱动和采样
异步信号通过接口时没有任何延时,而时钟块中的信号将得到同步。当从时钟块中读取信号时,是在时钟沿之前得到采样值。
在时钟块中使用modport时,任何同步接口信号都必须加上接口名和时钟块名的前缀。
在时钟块中使用同步驱动,即“<=”操作符来驱动信号。“<=”与“=”的区别。
接口中的双向信号
在程序中不允许使用always块,可以用“initial
forever”来实现相同的功能。
把时钟发生器放在程序块中à引起信号间的竞争,放在模块中可避免竞争状态。
4.5将这些模块都连接起来
4.6顶层作用域
任何module、macromodule、interface、program、package或者primitive边界之外的作用域被称为编译单元作用域($unit)。顶层作用域外可定义变量、参数、数据类型甚至方法。
4.7程序----模块交互
4.8SV断言
立即断言eg:
a1:assert (bus.cb.grant==2’b01); //断言失败会报错
立即断言有可选的then和else分句。
并发断言
4.9 四端口的ATM路由器
4.10
ref端口的方向
一个变量连接到多个ref端口,可能会产生竞争。
4.11
仿真的结束
模块或程序块可以定义一个或多个final块来执行仿真器推出前的代码。在final块中不能调度事件,或含有任何时延信息。
4.12
LC3取址模块的定向测试