路科决定给大家介绍更多与验证入门相关的知识,因此准备把Synopsys公司的一个十分适合新手的SV实验介绍给大家。在上一期的先导篇中我们介绍了验证在IC行业中的地位,验证的工作内容和验证平台的大概结构。最后又提到了我们这个实验的待测试的模块:一个16输入,16输出的路由器。不知道大家下去有没有去略微看一下设计代码呢?
我们正式进入这次的Lab,在Lab1中我们应该掌握以下内容:
大概在45分钟后,我们就可以建造起最简单的整个测试平台。想到这里是不是有一点点小激动呢,快一起动起手来吧!!
上图就是我们需要建立的几个文件:顶层(Top)文件:router_test_top.sv ,接口(Interface)文件:router_io.sv ,待测试(DUT)文件:router.v , 测试(Test)文件:test.sv。。
任务一:创建SV接口(interface)文件
1. 创建router_io.sv文件,并用编辑器打开它。
2. 以下是需要连接到DUT的信号。
注意:在这一部分的所有接口都是异步且没有方向的(例如input,output,inout就是有方向)。接口的方向只能在针对同步信号的时钟模块(Clocking block)或是针对异步信号的(modport)中被说明。
在下一步中,我们会去创建同步(synchronous)信号给测试程序(test program)从而可以驱动(drive)和采样(sample)DUT中的信号。
3. 声明一个由时钟上升沿所驱动的时钟模块(Clocking block,以后简称CB)。这个时钟模块将会被测试程序用来实施同步驱动(drive)和采样(sample)。这个CB中的所有信号的方向(direction)必须和DUT中的信号方向一致。
4.如果需要的话,可以对input和output的(skew)添加说明。
(这部分小编也不太懂,因此专门去请教了路桑。大概是这个意思的:input #1ns 指的是采样时间相对时钟上升沿提前1ns,但不在波形上显示。用来模拟真实电路中的建立时间。 output #1ns指的是驱动时间相对时钟上升沿推后1ns,会在波形上显示出来。用来模拟真实电路中的传播延时。)
5.最后创建一个modport TB(),来连接这个测试程序。在它的参数(argument)列表中,应该引用我们之前创建的时钟模块CB和其它所有可能会用到的异步(asynchronous)信号。(路桑的书中对Interface和modport有一个形象的比喻:interface是一整个插排,而modport就是连接各部分的插座。)
6.保存并关闭router_io.sv文件。
任务二:创建SV测试程序文件并重置(reset)路由器。
1.创建测试程序文件test.sv,并用编辑器打开它。
2.在这个文件中,引用接口模块中的modport TB作为参数(argument),来将interface和test program连接在一起。
3.在这个程序(program)模块中,定义一个任务(Task):Reset(),实现重置DUT的功能。
(reset_n既可以是同步信号也可以是异步信号)
4.在初始化模块中(initial begin),使用$vcdpluson来创建一个vcd+dump文件来产生可见波形。
5.紧随其后调用reset()任务来重置DUT。
6.保存和关闭test.sv文件。
任务三:创建SV测试的壳文件(即TOP文件)
1.创建和打开router_test_top.sv文件。
2.输入如下基本结构。
3.给Top文件中添加接口的实例化(instance)
4.实例化这个测试程序。(通过将测试程序在top中的例化t 和接口在top中的例化top_io相联系,将test程序和Top连接在一起)
5.将待测试模块和top_io连在一起,实现DUT与Top的连接。
此时你有没有发现呢?Top文件中经过三次例化成功将DUT文件,test program文件,interface文件包含了起来。
6.添加`timescale和$timefornat到Top中。
7.保存并关闭router_test_top.sv文件。
任务四:编译(compile)和仿真(simulate)
此时,我们一共拥有四个文件:待测试文件:router.v,接口文件:router_io.sv ,测试文件:test.sv , 顶层文件:router_test_top.sv。我们需要在UNIX系统下输入一串指令就可以进行编译和仿真了。
1.使用以下指令来编译所有文件。VCS将编译这些文件并产生一个叫做simv的执行文件。
2.对VCS产生的执行文件进行跑仿真。
输入指令: >simv
3.使用DVE来观察相关波形。
输入指令:>dve&
(注:鉴于并不是每个人都拥有UNIX系统和相关仿真软件,并且我们的主要目的是学习基础的SV语法和验证平台的搭建流程。因此小编以后会将有关编译和仿真的过程略过。以后大家有兴趣的话,可以将这个实验完整的跟着写代码跑仿真进行一遍。)
到这里我们整个验证的最基本框架就建立起来,以后我们会不断向里面填充东西,并将它们标准化,在整个过程结束后我们可以建立起一个完整的验证平台。
至此,Lab1我们就顺利完成了
在下期Lab2中,我们要进行的内容是:
1.拓展Lab1中的测试平台,从一个输入端向另一个输入端发送一个数据包(Packet)。
2.用更新过的测试平台来进行编译和仿真。