SV实验三:Self-Checking

  • 一、实验内容及目标

1、实验内容:

  1. 自学《SystemVerilog Testbench Lab Guide》pdf文档,理解掌握相关内容;
  2. 构造一个从路由器输出端进行取样的监视器(Monitor)。
  3. 构造一个可以验证路由器输出的比较器(Checker)。
  4. 运行Driver和Monitor程序,检验Checker能否正确比数。
  5. 编译(Complie)和仿真(Simulate)这个SV程序。

2、实验目标:

  1. 拓展la2中的测试平台。
  2. 用新的测试平台来编译和仿真设计文件。
  3. 理解每行代码的功能。
  4. 通过观察波形验证测试代码的功能是否完整。
  • 二、实验过程或步骤

任务1:将solution/lab2下的文件拷贝到lab3下

任务2:创建顶层测试环境(Top-Level Test Environment)

  1. 编辑已存在的test.sv文件。
  2. 给pkt2cmp_payload[$]序列添加一个全局声明(global-declaration),位宽为8bit(logic[7:0])。

这个序列将会被用来存储来自于DUT的取样数据。

任务3:实现一个监视器(Monitor)

  1. 声明一个recv() 任务task。
  2. 在recv()体中调用get_payload()来获取有效负载。
  3. 声明get_payload()任务。
  4. 在get_payload()中,删除掉pkt2cmp_payload[$]的内容。
  5. 继续在get_payload()之中,等待输出端frame信号的下降沿。
  6. 通过在路由器的输出端口取样来继续完善get_payload()。
    1. 保持循环直到frame信号被检测到。
    2. 在循环中,至少8个时钟周期内聚合起一个字节(8bit)的数据。接着将每一个8位数据存储到pkt2cmp_payload[$]序列中去。
  7. 如果payload没有连成一个byte,就打印错误信息并终止仿真。

任务4:实现比较器(Checker)

这一步是为了发展一个比较器从而去检查路由器的输出。

  1. 创建一个compare()函数,它可以返回一个bit的值并且可以进行数据比较。
  2. 在compare()中,比较payload[$]队列(用来参考的数据)和pkt2cmp_payload[$] 队列取样的数据)中存储的数据来验证接收到的payload是否正确。
    1. 如果payload[$]序列和pkt2cmp_payload[$]队列的长度不匹配的话,设置描述该错误的语句,并返回0值结束该子程序。
    2. 如果在payload[$]队列和pkt2cmp_payload[$]队列的数据不匹配,设置描述该错误的语句,并返回0值和结束该子程序。(你可以用“==”来直接比较两个序列)。
    3. 如果在payload[$]队列和pkt2cmp_payload[$]队列中的数据是完全一致的,设置描述比较成功的语句,并返回1值和结束该子程序。
  3. 创建check()任务。
  4. 在check()体中,声明一个string(字符串)变量和一个计数器。
  5. 在check()体内,调用compare
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值