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

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

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

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

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

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

IC验证培训——实战SV验证学习(lab1)相关推荐

  1. IC验证培训——实战SV验证学习(lab5)

    路科验证官网:路科验证 - 专注于数字芯片验证的系统思想和前沿工程领域 EETOP路科首页: EETOP - 路科验证 - IC验证培训 CSDN路科首页:CSDN - 路科验证 - IC验证培训 分 ...

  2. IC验证培训——实战SV验证学习(lab6)

    路科验证官网:路科验证 - 专注于数字芯片验证的系统思想和前沿工程领域 EETOP路科首页: EETOP - 路科验证 - IC验证培训 CSDN路科首页:CSDN - 路科验证 - IC验证培训 分 ...

  3. IC验证培训——实战SV验证学习(lab3)

    在上一期的Lab2中,我们拓展了测试平台并从一个输入端向一个输出端发送了数据包.今天的Lab3的学习目标是: 1.构造一个从路由器输出端进行取样的监视器(Monitor). 2.构造一个可以验证路由器 ...

  4. 实战SV验证学习(lab4)

    在上一期的Lab3中,我们创建了TB所需的组件,如Monitor和Checker.今天的Lab4的学习目标是: 1.将数据信息封装进入Packet类中 2.利用随机化(randomization)在p ...

  5. Synopsys SV lab guide—lab1

    目录 0.前言 1.Interface代码 1.1声明接口 1.2声明clocking block 1.3声明modport 2.test代码 3.Test Harness 文件 4.波形文件 0.前 ...

  6. IC验证培训——SV Interface 入门指导

    路桑的个人网址:路科验证 -IC验证培训-数字芯片验证 当涉及到验证时,接口可能是SystemVerilog语言中经常用到的部分.接口广泛的应用在静态的被测设计(DUT)和动态的测试平台之间.本文介绍 ...

  7. IC验证培训——SystemVerilog通用程序库(上)

    路桑的个人网址:路科验证 -IC验证培训-数字芯片验证 作为许多验证工程师的首选语言,SystemVerilog其实并不是专门为验证设计的语言,它还是一种硬件描述语言和通用的编程语言.尽管System ...

  8. IC验证培训——SystemVerilog通用程序库(下)

    路桑的个人网址:路科验证 -IC验证培训-数字芯片验证 五.类方法还是包函数? 我们最初的直觉是将svlib作为一组SystemVerilog类呈现给用户. 我们假设由一个类来表示一个正则表达式,另一 ...

  9. IC验证培训——SV通用库共享

    (一)摘要 你已经编程了多少次看门狗定时器,让它在事件没有在限定时间内发生时触发?你曾经是否想过当数据在计分板中不匹配的时候用一个函数来显示多一点的信息,而不仅仅是在出错地方的那一条信息?设计验证工程 ...

最新文章

  1. 代码提示级别设置 inspection
  2. 新东方王强老师的感悟
  3. 使用gulp-connect实现web服务器
  4. dedeCMS会员注册功能,如何开启或关闭?
  5. junit linux命令行运行,如何从命令行在JUnit中运行测试用例?
  6. 通过 ASP.NET 2.0 的数据增强功能来提高负载和减少代码 --作者:Dino Esposito
  7. 为何大数据分析那么重要
  8. windows下安装MinGW、swig 、zlib
  9. java end_Java Matcher end()用法及代码示例
  10. python财务预算分析_从审计转到财务分析是怎样一种体验?
  11. 笨方法学Python3 习题6
  12. 软考网络规划设计师知识点总结--第一章(计算机网络概论)
  13. 智能驾驶全产业链梳理
  14. 程序猿菜鸟打怪升级—一路火花带闪电
  15. 超全MySQL题(104道、含MySQL新特性解法)由浅入深、笔试必备!(第四部分40-52)
  16. 轻微课靠谱吗?轻微课学员的真实评价!!!
  17. 播放音乐 锁屏 状态下,看到歌手图片
  18. Dearpygui制作Linux上SSD测试工具集合
  19. 云计算架构自己的理解
  20. dolphinscheduler海豚调度升级代码改造-UpgradeDolphinScheduler

热门文章

  1. 区块链:Neutral Dollar(NUSD)亚稳态的可视化
  2. 云计算市场价值爆发,两马之战日趋激烈
  3. 王一博VS“虚拟人”?乐华“永不塌房”的偶像计划可行吗?
  4. 设置背景透明 html5,webview的背景如何设置成透明的?
  5. 电子科技大学信息与软件工程学院考研初试时间规划和用书推荐
  6. Hadoop集群+Spark集群搭建基于VMware虚拟机教程+安装运行Docker
  7. WebGL实时视频(6) Unity里面显示视频
  8. html5岗位需求,HTML5培训分享H5的优势和岗位要求
  9. java g1 详解_JAVA垃圾收集算法总结以及CMS、G1算法详解
  10. zhs16gbk java_不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK