在上一期的Lab3中,我们创建了TB所需的组件,如Monitor和Checker。今天的Lab4的学习目标是:

1.将数据信息封装进入Packet类中

2.利用随机化(randomization)在packet类中随机产生源地址,目标地址和payload。

3.创建两个packet对象(object),一个包用来在DUT输入端输入,另一个包用来和DUT输出的数据相参照。

4.将compare()方法嵌入packet类,用来验证DUT工作的正确性。

在这一次的实验中你将会把数据包的相关信息封装到一个类的结构中去。你将会在Generator中产生随机的Packet对象然后发送,接收,最后核对DUT使用这些Packet对象使用的正确性。

加入Packet object的测试平台结构如下图

任务一.:创建一个数据包类(class)文件(用packet类来封装数据包的信息)

1.用编辑器打开Packet.sv文件。

2.用下面的方式声明一个类的定义:

3.通过在类语句(statement)的前面和后面使用宏作为标记来防止多次编译。

4.在Packet类的体中,创建如下的属性:

(不同的数据包对象将会被gen()程序产生,我们需要区分这些不同的数据包对象,因此我们引入string name。)

任务二:定义数据包的属性约束

1.在属性声明之后,添加一个约束模块来限制sa和da在0至15之内,和payload.size()在2至4之内。

任务三:定义数据包类方法的雏形

1.在数据包类的体中,添加以下的方法声明:

任务四:定义数据包类new()结构体

new()被用来初始化对象并为它开辟空间。对于这个Packet对象来说,大部分性质将会调用randomize()来进行设置,但是name这一性质需要在结构体(constructor)中初始化。

1.在Class()体的外部,创建new()方法的结构体。确定通过::这一接口,可以使这个结构体回到开始的那个类中。

2.在结构体内部

这个机制能让这个string到达packet class的所有其他方法中去。

任务五.定义Packet的方法compare()

为了自我验证,经常会去比较两个数据对象的内容。在数据对象中建立compare方法是一个很好的主意。

  1. 从test.v中剪切和粘贴compare()到Packet类中。

  2. 参考上面用::标记的的方式,完成compare()方法。

  3. 修改argument列表来包含一个Packethandle:

4.在compare()方法内部,参照这个类的性质来改写pkt2cmp_payload。

任务六.定义数据包的方法display()

能打印出一个数据包的内容,在debug过程中十分有用。为了让这一方式简化,一个display的方法应该被定义在这个Packet类中。这样就可以在控制台上打印出Packet对象的内容。

1.在类外,创建display()方法.

2.在方法内,打印你想输出的内容。

3.保存并关闭packet.sv文件。

任务七:修改test.sv来使用Packet类

这个packet类现在封装了路由器数据包的信息。

你将会产生随机Packet对象,接着会在这些随机数据包对象的基础上通过路由器发送和接受数据包。

  1. 用编辑器打开test.sv。

  2. 在program块内部,添加一个include语句,从而将Packet class包含进来。

  3. 创建和构造两个program全局数据包对象,pkt2send和pkt2cmp。

任务八:修改gen()任务去产生数据包对象

  1. 在gen()任务内,删掉所有已存在的代码。

  2. 声明一个静态int变量能够记录Generator产生了多少个数据包。

  3. 将pkt2send的name设置为一个唯一的字符串变量。

  4. 随机化数据包对象pkt2send。如果随机化失败,打印一条错误信息后停止程序并终止仿真。

  5. 更新所有program全局变量。

这一步让pkt2send对象的内容对所有部件(component)是可见的。这些program的全局变量是一个暂时的解决方案。在下一个lab中,我们将删除这些变量,并将它们移植到testbench中不同部件的内部。

当你完成这些时,你的代码应该如下所示:

任务九:修改recv()任务

在recv()任务中,我们从路由器输出端取样payload时,需要将它们集合到一个数据包类中(pkt2cmp)。这个数据包对象将会被用来检查pkt2send对象。

在recv()任务中:

在调用get_payload任务前要做以下的事情:
1.创建一个静态int型变量pkt_cnt来记录接收到的数据包的数量。

在调用get_payload之后要做的事情:

2.连接pkt2cmp.da和程序全局变量da。

3.连接pkt2cmp.payload和pkt2cmp_payload。

4.为pkt2cmp对象设置一个唯一的name。

当完成上面的操作后,这个recv()任务应该是像这样的:

任务十:修改check()任务

在check()任务中,你将把compare()放入Packet对象中去验证发送和接收到的内容是否正确。为了debug,你应该在这个packet对象中使用display()方法。

1.将compare()方法放入packet对象中,从而取代以前的compare()。

(你想比较的两个对象是全局变量pkt2send和pkt2cmp。)

2.当探查到错误时,使用display()方法。

当完成操作后,这个check()的程序应该如下所示:

任务十一:检查和保存文件

  1. 确保你已经删除掉了test.sv文件中的compare()程序。

  2. 保存和关闭test.v文件。

任务十二:编译和仿真(略)

至此,Lab4已经完成啦。点击左下角的阅读原文,即可查看这次Lab所用到的全部代码。下周四Lab5的内容是:

1.创建一个Generator transactor 的类。

2.创建一个Driver的类。

3.创建一个Receiver的类。

4.拓展这个测试平台的Drive和Monitor,使其同时连接到所有输入端和输出端。

实战SV验证学习(lab4)相关推荐

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

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

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

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

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

    路科决定给大家介绍更多与验证入门相关的知识,因此准备把Synopsys公司的一个十分适合新手的SV实验介绍给大家.在上一期的先导篇中我们介绍了验证在IC行业中的地位,验证的工作内容和验证平台的大概结构 ...

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

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

  5. 1.5 Hello, world! 解剖 -JSF实战 -hxzon -jsf学习笔记

    为什么80%的码农都做不了架构师?>>>    1.5 Hello, world! 解剖 -JSF实战 -hxzon -jsf学习笔记 既然已经对JSF能够解决什么问题有了初步理解, ...

  6. TensorFlow:实战Google深度学习框架(五)图像识别与卷积神经网络

    第6章 图像识别与卷积神经网络 6.1 图像识别问题简介及经典数据集 6.2 卷积神经网络简介 6.3 卷积神经网络常用结构 6.3.1 卷积层 6.3.2 池化层 6.4 经典卷积神经网络模型 6. ...

  7. TensorFlow:实战Google深度学习框架(四)MNIST数据集识别问题

    第5章 MNIST数字识别问题 5.1 MNIST数据处理 5.2 神经网络的训练以及不同模型结果的对比 5.2.1 TensorFlow训练神经网络 5.2.2 使用验证数据集判断模型的效果 5.2 ...

  8. 【实战】深度学习构建人脸面部表情识别系统

    实战:深度学习构建人脸面部表情识别系统 一.表情数据集 数据集采用了kaggle面部表情识竞赛的人脸表情识别数据集. https://www.kaggle.com/c/challenges-in-re ...

  9. 06.图像识别与卷积神经网络------《Tensorflow实战Google深度学习框架》笔记

    一.图像识别问题简介及经典数据集 图像识别问题希望借助计算机程序来处理.分析和理解图片中的内容,使得计算机可以从图片中自动识别各种不同模式的目标和对象.图像识别问题作为人工智能的一个重要领域,在最近几 ...

最新文章

  1. 苹果发布首款 Mac 自研芯片 M1,贯通生态快人一步!
  2. DL之CNN:自定义SimpleConvNet【3层,im2col优化】利用mnist数据集实现手写数字识别多分类训练来评估模型
  3. 十八、Apriori算法介绍
  4. spring batch @EnableBatchProcessing作用
  5. Ubuntu16.04(64位)下安装和破解source insight4
  6. 【LeetCode】剑指 Offer 36. 二叉搜索树与双向链表
  7. ffmpeg rtmp 推流错误WriteN, RTMP send error 10053 10038
  8. JSR-303校验-转载
  9. netty冲突 play sbt_播放Cassandra Netty Server空指针异常-问答-阿里云开发者社区-阿里云...
  10. Android中使用Fragment实现标题栏(不可滑动)
  11. Java-Spring Boot集成银联在线网关支付及回调处理(银联扫码等方式支付)
  12. java 图片深度_图像的色彩值称为图像的颜色深度,黑白图像的颜色深度为( )位。...
  13. 【历史上的今天】3 月 4 日:美团网正式上线;Dropbox 的创始人出生;PS2 游戏机问世
  14. VMware安装苹果系统
  15. 000898先生的留言
  16. Flutter事件分发
  17. 产品读书《必然:理解将塑造你的12种技术力量》KK
  18. rok 万国觉醒 资源分析 地图资源
  19. i春秋“网络内生安全试验场”CTF答题夺旗赛(第四季)部分题目WP
  20. DRIVER_POWER_STATE_FAILURE蓝屏分析

热门文章

  1. mysql的_Mysql
  2. 企业微信自建应用(JS-SDK):聊天工具栏分享消息到会话
  3. 比我们优秀的人比我们还努力,你有什么资格不去奋斗
  4. 新科技革命的主要特点
  5. 红米ac2100有ipv6吗_红米AC2100刷padavan
  6. Kettle 学习笔记 — 资源库
  7. 气象统计方法短期气候预测代码汇总
  8. linux双屏原理,Linux下双屏显示设置
  9. 亲历华为手机丢失通过定位找回
  10. LeetCode-39 - 组合总和