一、顶层代码

(1)  接口Interface代码router_io.sv 与LAB1保持一致。

(2)  顶层代码 router_test_top.sv 与LAB1保持一致。

后篇同理,将不在赘述,快速传送链接 https://blog.csdn.net/ShiAokai/article/details/99639366

二、驱动代码 test.sv

2.1  定义发送参数

  bit[3:0] sa;bit[3:0] da;//定义8位的队列,即一个字节logic[7:0] payload[$];int run_for_n_packets;

2.2  驱动代码

相比LAB1,在reset()之后加入了 gen()、send();前者用来产生数据,后者用来按时序将数据发出。

  initial begin$vcdpluson;reset();run_for_n_packets = 21;repeat(run_for_n_packets) begingen();send();endrepeat(10) @(rtr_io.cb);end

2.2.1  gen() 产生数据

这里产生一个包,为从端口3输入,从输出端口7输出;然后随机往数据队列放入2~4个数据,对应在驱动书需要n*8个周期(因为一个数据8位)。

  task gen();sa = 3;da = 7;payload.delete(); //clear previous datarepeat($urandom_range(4,2))payload.push_back($urandom);endtask: gen

2.2.2 send() 将数据发送

在发送中划分为3个阶段,这3个阶段连续调用,模拟一帧完整发包时序。

  task send();send_addrs();send_pad();send_payload();endtask: send

(1)发送地址

以sa为输入端口号;

将frame_n拉低,将地址da(低位优先),从加载到din[sa]口上;

阻塞赋值表示在clock之后赋值生效,然后至少保持到下一个clock。

  task send_addrs();rtr_io.cb.frame_n[sa] <= 1'b0; //start of packetfor(int i = 0; i<4; i++) beginrtr_io.cb.din[sa] <= da[i];  //i'th bit of da@(rtr_io.cb);endendtask: send_addrs

(2)发送PAD

  task send_pad();rtr_io.cb.frame_n[sa] <= 1'b0;rtr_io.cb.valid_n[sa] <= 1'b1;rtr_io.cb.din[sa] <= 1'b1;repeat(5) @(rtr_io.cb);endtask: send_pad

(3)发送数据

遍历队列payload中所有数据,每个数据分8个周期发送出去(低位优先)。

在最后一个数据,最后一位时,将frame_n也要拉高。

  task send_payload();foreach(payload[index])for(int i=0; i<8; i++) beginrtr_io.cb.din[sa] <= payload[index][i];rtr_io.cb.valid_n[sa] <= 1'b0; //driving a valid bitrtr_io.cb.frame_n[sa] <= ((i == 7) && (index == (payload.size() - 1)));@(rtr_io.cb);endrtr_io.cb.valid_n[sa] <= 1'b1;endtask: send_payload

2.3  传输时序图

SV_LAB学习02篇 LAB2相关推荐

  1. 32位mysql安装包_《MySQL 入门教程》第 02 篇 MySQL 安装

    文章来源:<MySQL 入门教程>第 02 篇 MySQL 安装 原文作者:不剪发的Tony老师 来源平台:CSDN 上一篇我们了解了什么是MySQL数据库. 本文介绍如何在 Window ...

  2. LINUX学习基础篇(十二)痕迹命令

    LINUX学习基础篇(十二)痕迹命令 系统痕迹命令 w命令 who命令 last命令 lastlog命令 lastb命令 系统痕迹命令 系统中有一些重要的痕迹日志文件,如/var/log/wtmp./ ...

  3. 深度学习基础篇【5】从0开始搭建YOLOV5 并进行测试

    深度学习基础篇[5] 从0开始搭建 YOLOV5  并进行测试 如何评价YOLO V5,那就必须拿"上一代"YOLO V4来做对照了.先说结论,YOLO V5 在性能上稍弱于YOL ...

  4. 第 02 篇 在 SQL 的世界里一切都是关系

    <SQL 从入门到精通>专栏目录 第 01 篇 和数据打交道的你,一定要学会 SQL 第 02 篇 在 SQL 的世界里一切都是关系 第 03 篇 使用 SELECT 语句初步探索数据库 ...

  5. Python 学习 02 —— Python如何爬取数据

    文章目录 系列文章 二.Python 爬 虫 1.任务介绍 2.简介 3.基本流程 3.1.准备工作 3.1.1.分析页面 3.1.2.编码规范 3.1.3.导入模块 3.1.4.程序流程 3.2.获 ...

  6. MongoDB学习第一篇 --- Mac下使用HomeBrew安装MongoDB

    2019独角兽企业重金招聘Python工程师标准>>> MongoDB学习第一篇 --- Mac下使用HomeBrew安装MongoDB 0.确保mac已经安装了HomeBrew ( ...

  7. 深度学习实战篇-基于RNN的中文分词探索

    深度学习实战篇-基于RNN的中文分词探索 近年来,深度学习在人工智能的多个领域取得了显著成绩.微软使用的152层深度神经网络在ImageNet的比赛上斩获多项第一,同时在图像识别中超过了人类的识别水平 ...

  8. JNI学习开始篇 基础知识 数据映射及学习资料收集

    JNI学习开始篇 基础知识 数据映射及学习资料收集 JNI介绍 JNI(Java Native Interface) ,Java本地接口. 用Java去调用其他语言编写的程序,比如C或C++. JNI ...

  9. java helloworld代码_java学习应用篇|逃不掉的HelloWorld

    本文知识点 1.表白不是发起进攻的冲锋号,而是吹响胜利的号角 2.除了爱情不讲道理,公理也不讲道理 3.这世界,离了javac,也是可以运行的! 4.Hello,寺水 写程序并不是写代码 看前面啰啰嗦 ...

最新文章

  1. kubeadm源码分析(内含kubernetes离线包,三步安装)
  2. 科大星云诗社动态20210323
  3. jsp oracle 登录页面,Oracle数据库之ORACLE+Myeclipse+jsp实现简单登录功能
  4. git合并指定文件到另一分支
  5. 看“意大利文艺复兴艺术展”(3)
  6. hubbledotnet mysql_HubbleDotNet 简介
  7. Vue封装hbuilder热更新
  8. python语言中的注释符_各种语言中的注释符总结
  9. javascript map 排序_1Keys仅用1 kb的JavaScript制作钢琴
  10. 2020年日历电子版(打印版)_灵感 | 快来康康——2020年的日历设计的这么有创意?...
  11. js常用内建对象之:Date
  12. Android ViewPager+TabHost实现首页导航
  13. win7万能声卡驱动_IT天空出品的万能驱动 7 发布下载
  14. 韩家炜教授的学术报告会
  15. 编程中的c语言32个英文代码,C语言图形编程代码(国外英文资料).doc
  16. 机器视觉的四大类应用
  17. 东北农业大学考研计算机大纲,东北农业大学339农业知识综合一考研大纲
  18. 如何解决word中latex公式出现虚线小方框问题
  19. Corolado软件峰会关于Geronimo的介绍
  20. ECharts画分类甘特图

热门文章

  1. 三字经(英文版)搞笑篇
  2. HttpEntity的使用 .
  3. Python的基础学习(六):函数
  4. 英文文献去哪里查找,8个超强英文文献查找网站建议收藏
  5. 富文本数据只展示文字,前端必知
  6. 个人做vue项目的心得和体会
  7. 6-5 链式表操作集 (20分)
  8. .babyk后缀勒索病毒|勒索病毒解密恢复|数据库中babyk勒索病毒解密|勒索病毒文件恢复工具|数据库恢复
  9. lorenz系统simulink仿真_直驱永磁同步风机并网仿真(二)
  10. 打开金蝶旗舰版图标提示:类型不匹配