路科验证(Rocker IC)专注于验证系统思想和前沿工程资讯,拥有一支活跃的技术原创团队,为高校微电子相关专业学生与IC从业人员提供技术食粮。 您可以在手机移动端同步关注微信订阅号“路科验证”。如果您需要联系我们,请发送邮件至 rocker.ic@vip.163.com 或者 bin.rocker.liu@intel.com 。

把大象装进冰箱要几步?不清楚,但是学会SV验证可能还需5步!

上一篇 / 下一篇  2018-01-28 14:05:04 / 个人分类:验证前沿资讯

在上一期的Lab1中,我们给设计文件搭建了最简单的验证平台并编译和仿真过了这个SV程序。今天的Lab2的学习目标是:

1.拓展lab1中的测试平台,从一个输入端向一个输出端发送数据包。

2.用新的测试平台来编译和仿真设计文件。


在这次Lab中,你将继续去搭建测试平台上的相关组件(component):激励产生器(Stimulus Generator),驱动器(Driver)等。你会使用一些的子程序(routine)去把一个数据包从输入端口3发送到输出端口7,并观察到这个数据包的有效负载(payload)。


任务1. 声明程序的全局变量

根据路由器的需求说明(包括使用哪个输入端口和哪个输出端口,以及发送什么样的数据),来发送一个数据包。为了让这些变量更容易被参考到,你将会把它们声明为程序的全局变量(program globals)。

1.使用编辑器打开已存在的test.v文件。

2.对这个数据包声明程序全局变量:


任务2.产生数据包

在lab1中,你通过调用reset()子程序来配置(Configure)待测试模块。接着你创建一个Task:  gen()来继续发展这个测试平台。(gen()是一个可以产生测试激励的子程序)

1.在程序的initial块中的reset()后面,调用gen()任务。

2.在任务reset()代码块后面,声明gen()任务。

3.在gen()任务的体(body)中

a)设置sa(源地址)为3,da(目标地址)为7。

b)用2到4范围内的随机字节来填满有效负载序列(payload queue)。

当一切完成后,你的代码将是下面的样子:


任务3.创建发送数据包的程序(routine)

在数据包的信息产生后,你准备好创建Transactor和Driver来发送数据包。

把一个数据包发送通过路由器的行为,可以通过以下三个进程来完成:

a)发送Destination Address(目标地址)

b)发送padding bits。

c)发送payload。

其中每一个进程将发展成为driver routine中的一个独立部分(device)。Driver中各部件和Transactor的区别是:当Transactor调用 device driver时,device driver和硬件信号是直接相互作用的。

 

这些抽象的分层可以使testbench的子程序(routine)更容易管理,更好复用,更加可靠。

以下的步骤可以帮助你构建这些子程序


1.在initial块中,在gen()后面立即调用send()任务来发送数据包。

2.在调用send()后仿真10个时钟周期。

3.在program中添加一个对任务send()的声明。

4.在send()任务中,包括如下操作。

.a)调用send_addrs()

.b)调用send_pad()

.c)调用send_payload()

5.创建send_addrs()任务。这个Driver的部件将会驱动4位的地址进入Router。

6.在send_addrs()中,包括这样的操作。

.a)驱动frame_n信号作为每一个路由器的配置内容。

.b)驱动目标地址通过din信号传送。

 c)把din作为单bit的连续信号。使用一个环结构来驱动din,以每周期一bit的速度循环四个周期。

7.创建send_pad()任务。这个device driver可以驱动五个pad bits进入路由器。

8.在send_pad()任务中,会驱动frame_n,valid_n和din信号作为每一个路由器的配置(specification)。

9.创建send_payload()任务。这个device driver发送payload到路由器中。

10.在pay_load()任务的体中,有如下操作:

a)写一个可以执行“payload.size()”次的循环。

b)这个循环内的payload[$]序列中,每8-bit数据被以一个周期一个bit的速度进行传送。

c)记着在每次路由器的配置中驱动valid_n。

d).在每次路由器的配置中,在发送到这个数据包的最后一位时,将frame_n信号反转至1’b1。

e).当数据包发送完成后,将valid_n信号返回到1’b1。

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


任务5:对program进行编译和纠错(Debug)(略)



任务6:拓展program到可以发送21个数据包(略)

1.修改program模块,使用相同的sa=3和da=7,发送21个数据包。

2..编译(Compile),仿真(Simulate),DVE。





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

1)构造一个从路由器输出端进行取样的监视器(monitor)。

2)构造一个可以去验证路由器输出的核对器(checker)。

3)运行驱动器(driver)和监视器(monitor)程序


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

路科验证

路科验证

路科验证(Rocker IC)专注于验证系统思想和前沿工程资讯,拥有一支活跃的技术原创团队,为高校微电子相关专业学生与IC从业人员提供技术食粮。 您可以在手机移动端同步关注微信订阅号“路科验证”。如果您需要联系我们,请发送邮件至 rocker.ic@vip.163.com 或者 bin.rocker.liu@intel.com 。

日历

« 2018-02-20  
    123
45678910
11121314151617
18192021222324
25262728   

数据统计

  • 访问量: 75084
  • 日志数: 177
  • 建立时间: 2016-06-25
  • 更新时间: 2018-02-04

RSS订阅

Open Toolbar
博聚网