synopsys svtb lab2:Sending Packets Through Router

前言

欢迎您,有缘人!文章涉及的代码太多,比较站篇幅,需要代码和文档去代码需要翻看synopsys svtb lab1:SystemVerilog Verification Flow的前言部分获取。


Lab2的学习目标是:

  1. 拓展lab1中的测试平台,从一个输入端向一个输出端发送数据包。
  2. 用新的测试平台来编译和仿真设计文件。

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

Lab Overview

任务1:将lab1的文件复制到lab2下

进入lab2下,使用make copy完成

任务2: 声明程序的全局变量

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

  1. 使用编辑器打开已存在的test.sv文件。
  2. 对这个数据包声明程序全局变量:

bit [3:0] sa; // source address (input port)

bit[3:0] da; // destination address (output port)

logic[7:0] payload[$];

任务3:产生数据包

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

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

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

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

    1. 设置sa(源地址)为3,da(目标地址)为7。
    2. 用2到4范围内的随机字节来填满有效负载序列(payload queue)

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

任务4:创建发送数据包的程序(routine)

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

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

    1. 发送Destination Address(目标地址)
    2. 发送padding bits。
    3. 发送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()任务中,包括如下操作。
    1. 调用send_addrs()
    2. 调用send_pad()
    3. 调用send_payload()
  5. 创建send_addrs()任务。这个Driver的部件将会驱动4位的地址进入Router。
  6. 在send_addrs()中,包括这样的操作。
    1. 驱动frame_n信号作为每一个路由器的配置内容。
    2. 驱动目标地址通过din信号传送。
    3. 把din作为单bit的连续信号。使用一个环结构来驱动din,以每周期一bit的速度循环四个周期。

  1. 创建send_pad()任务。这个device driver可以驱动五个pad bits进入路由器。
  2. 在send_pad()任务中,会驱动frame_n,valid_n和din信号作为每一个路由器的配置(specification)。
  3. 创建send_payload()任务。这个device driver发送payload到路由器中。
  4. 在send_payload()任务的体中,有如下操作:
    1. 写一个可以执行“payload.size()”次的循环。
    2. 这个循环内的payload[$]序列中,每8-bit数据被以一个周期一个bit的速度进行传送。
    3. 记着在每次路由器的配置中驱动valid_n。
    4. 在每次路由器的配置中,在发送到这个数据包的最后一位时,将frame_n信号反转至1’b1。
    5. 当数据包发送完成后,将valid_n信号返回到1’b1。
  5. 保存和关闭test.v文件。

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

lab中有makefile文件,运行make

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

  1. 修改program模块,使用相同的sa=3和da=7,发送21个数据包。
  2. 编译(Compile),仿真(Simulate),查看波形。

哈哈哈不会看看波形,看来后面还要好好补课。


后记

人生短暂,不要中途下车,冲冲冲。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰之行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值