路科验证的个人空间 https://blog.eetop.cn/1561828 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

把大象装进冰箱要几步?我不清楚,但我知道学会SV验证只要6步!

已有 2870 次阅读| 2018-1-28 13:58 |个人分类:验证前沿资讯|系统分类:芯片设计

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

     

(其实估计没几个同学会去看它,路桑也说了你们都是磨人的小(/大/老)妖精。)




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

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

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

  3. 编译(Compile)和仿真(Simulate)这个SV程序。

(注:此次Lab中用到的所有代码,在文章左下角点击阅读全文即可查看



大概在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.用更新过的测试平台来进行编译和仿真。



点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 253

    粉丝
  • 25

    好友
  • 33

    获赞
  • 45

    评论
  • 访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-8 19:48 , Processed in 0.020428 second(s), 12 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部