IC验证培训——实战SV验证学习(lab1)

路科决定给大家介绍更多与验证入门相关的知识,因此准备把Synopsys公司的一个十分适合新手的SV实验介绍给大家。在上一期的先导篇中我们介绍了验证在IC行业中的地位,验证的工作内容和验证平台的大概结构。最后又提到了我们这个实验的待测试的模块:一个16输入,16输出的路由器。不知道大家下去有没有去略微看一下设计代码呢?

我们正式进入这次的Lab,在Lab1中我们应该掌握以下内容:

  1. 用SV给待测试模块(DUT)搭建最简单的测试平台(Testbench)。

  2. 用SV写一个任务(Task)来重置(Reset)DUT。

  3. 编译(Compile)和仿真(Simulate)这个SV程序。IC验证培训——实战SV验证学习(lab1)_第1张图片

大概在45分钟后,我们就可以建造起最简单的整个测试平台。想到这里是不是有一点点小激动呢,快一起动起手来吧!!

IC验证培训——实战SV验证学习(lab1)_第2张图片

上图就是我们需要建立的几个文件:顶层(Top)文件:router_test_top.sv ,接口(Interface)文件:router_io.sv ,待测试(DUT)文件:router.v , 测试(Test)文件:test.sv。。

 

 

任务一:创建SV接口(interface)文件

  1. 创建router_io.sv文件,并用编辑器打开它。

  2. 以下是需要连接到DUT的信号。

IC验证培训——实战SV验证学习(lab1)_第3张图片

注意:在这一部分的所有接口都是异步且没有方向的(例如input,output,inout就是有方向)。接口的方向只能在针对同步信号的时钟模块(Clocking block)或是针对异步信号的(modport)中被说明。

 

在下一步中,我们会去创建同步(synchronous)信号给测试程序(test program)从而可以驱动(drive)和采样(sample)DUT中的信号。

 

3. 声明一个由时钟上升沿所驱动的时钟模块(Clocking block,以后简称CB)。这个时钟模块将会被测试程序用来实施同步驱动(drive)和采样(sample)。这个CB中的所有信号的方向(direction)必须和DUT中的信号方向一致。

    

IC验证培训——实战SV验证学习(lab1)_第4张图片

    

4.如果需要的话,可以对input和output的(skew)添加说明。

IC验证培训——实战SV验证学习(lab1)_第5张图片

 

(这部分小编也不太懂,因此专门去请教了路桑。大概是这个意思的:input  #1ns 指的是采样时间相对时钟上升沿提前1ns,但不在波形上显示。用来模拟真实电路中的建立时间。  output #1ns指的是驱动时间相对时钟上升沿推后1ns,会在波形上显示出来。用来模拟真实电路中的传播延时。

5.最后创建一个modport TB(),来连接这个测试程序。在它的参数(argument)列表中,应该引用我们之前创建的时钟模块CB和其它所有可能会用到的异步(asynchronous)信号。(路桑的书中对Interface和modport有一个形象的比喻:interface是一整个插排,而modport就是连接各部分的插座。

IC验证培训——实战SV验证学习(lab1)_第6张图片

 

6.保存并关闭router_io.sv文件。

 

 

任务二:创建SV测试程序文件并重置(reset)路由器。

1.创建测试程序文件test.sv,并用编辑器打开它。

2.在这个文件中,引用接口模块中的modport TB作为参数(argument),来将interface和test program连接在一起。

IC验证培训——实战SV验证学习(lab1)_第7张图片

3.在这个程序(program)模块中,定义一个任务(Task):Reset(),实现重置DUT的功能。

IC验证培训——实战SV验证学习(lab1)_第8张图片

reset_n既可以是同步信号也可以是异步信号

4.在初始化模块中(initial begin),使用$vcdpluson来创建一个vcd+dump文件来产生可见波形。

5.紧随其后调用reset()任务来重置DUT。

IC验证培训——实战SV验证学习(lab1)_第9张图片

 

6.保存和关闭test.sv文件。

 

 

 

任务三:创建SV测试的壳文件(即TOP文件)

1.创建和打开router_test_top.sv文件。

2.输入如下基本结构。

IC验证培训——实战SV验证学习(lab1)_第10张图片

3.给Top文件中添加接口的实例化(instance)

IC验证培训——实战SV验证学习(lab1)_第11张图片

 

4.实例化这个测试程序。(通过将测试程序在top中的例化t 和接口在top中的例化top_io相联系,将test程序和Top连接在一起)

IC验证培训——实战SV验证学习(lab1)_第12张图片

5.将待测试模块和top_io连在一起,实现DUT与Top的连接。

IC验证培训——实战SV验证学习(lab1)_第13张图片

此时你有没有发现呢?Top文件中经过三次例化成功将DUT文件,test program文件,interface文件包含了起来。

6.添加`timescale和$timefornat到Top中。

IC验证培训——实战SV验证学习(lab1)_第14张图片

7.保存并关闭router_test_top.sv文件。

 

 

 

任务四:编译(compile)和仿真(simulate)

此时,我们一共拥有四个文件:待测试文件:router.v,接口文件:router_io.sv ,测试文件:test.sv , 顶层文件:router_test_top.sv。我们需要在UNIX系统下输入一串指令就可以进行编译和仿真了。

 

1.使用以下指令来编译所有文件。VCS将编译这些文件并产生一个叫做simv的执行文件。

IC验证培训——实战SV验证学习(lab1)_第15张图片

2.对VCS产生的执行文件进行跑仿真。

 输入指令: >simv

3.使用DVE来观察相关波形。

输入指令:>dve&

 

(注:鉴于并不是每个人都拥有UNIX系统和相关仿真软件,并且我们的主要目的是学习基础的SV语法和验证平台的搭建流程。因此小编以后会将有关编译和仿真的过程略过。以后大家有兴趣的话,可以将这个实验完整的跟着写代码跑仿真进行一遍。)

 

 

到这里我们整个验证的最基本框架就建立起来,以后我们会不断向里面填充东西,并将它们标准化,在整个过程结束后我们可以建立起一个完整的验证平台。

 

至此,Lab1我们就顺利完成了

 

 

在下期Lab2中,我们要进行的内容是:

1.拓展Lab1中的测试平台,从一个输入端向另一个输入端发送一个数据包(Packet)。

2.用更新过的测试平台来进行编译和仿真。

 

 

IC验证培训——实战SV验证学习(lab1)_第16张图片

你可能感兴趣的:(SV语言与UVM应用)