SV_LAB学习02篇 LAB2
一、顶层代码
(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相关推荐
- 32位mysql安装包_《MySQL 入门教程》第 02 篇 MySQL 安装
文章来源:<MySQL 入门教程>第 02 篇 MySQL 安装 原文作者:不剪发的Tony老师 来源平台:CSDN 上一篇我们了解了什么是MySQL数据库. 本文介绍如何在 Window ...
- LINUX学习基础篇(十二)痕迹命令
LINUX学习基础篇(十二)痕迹命令 系统痕迹命令 w命令 who命令 last命令 lastlog命令 lastb命令 系统痕迹命令 系统中有一些重要的痕迹日志文件,如/var/log/wtmp./ ...
- 深度学习基础篇【5】从0开始搭建YOLOV5 并进行测试
深度学习基础篇[5] 从0开始搭建 YOLOV5 并进行测试 如何评价YOLO V5,那就必须拿"上一代"YOLO V4来做对照了.先说结论,YOLO V5 在性能上稍弱于YOL ...
- 第 02 篇 在 SQL 的世界里一切都是关系
<SQL 从入门到精通>专栏目录 第 01 篇 和数据打交道的你,一定要学会 SQL 第 02 篇 在 SQL 的世界里一切都是关系 第 03 篇 使用 SELECT 语句初步探索数据库 ...
- Python 学习 02 —— Python如何爬取数据
文章目录 系列文章 二.Python 爬 虫 1.任务介绍 2.简介 3.基本流程 3.1.准备工作 3.1.1.分析页面 3.1.2.编码规范 3.1.3.导入模块 3.1.4.程序流程 3.2.获 ...
- MongoDB学习第一篇 --- Mac下使用HomeBrew安装MongoDB
2019独角兽企业重金招聘Python工程师标准>>> MongoDB学习第一篇 --- Mac下使用HomeBrew安装MongoDB 0.确保mac已经安装了HomeBrew ( ...
- 深度学习实战篇-基于RNN的中文分词探索
深度学习实战篇-基于RNN的中文分词探索 近年来,深度学习在人工智能的多个领域取得了显著成绩.微软使用的152层深度神经网络在ImageNet的比赛上斩获多项第一,同时在图像识别中超过了人类的识别水平 ...
- JNI学习开始篇 基础知识 数据映射及学习资料收集
JNI学习开始篇 基础知识 数据映射及学习资料收集 JNI介绍 JNI(Java Native Interface) ,Java本地接口. 用Java去调用其他语言编写的程序,比如C或C++. JNI ...
- java helloworld代码_java学习应用篇|逃不掉的HelloWorld
本文知识点 1.表白不是发起进攻的冲锋号,而是吹响胜利的号角 2.除了爱情不讲道理,公理也不讲道理 3.这世界,离了javac,也是可以运行的! 4.Hello,寺水 写程序并不是写代码 看前面啰啰嗦 ...
最新文章
- kubeadm源码分析(内含kubernetes离线包,三步安装)
- 科大星云诗社动态20210323
- jsp oracle 登录页面,Oracle数据库之ORACLE+Myeclipse+jsp实现简单登录功能
- git合并指定文件到另一分支
- 看“意大利文艺复兴艺术展”(3)
- hubbledotnet mysql_HubbleDotNet 简介
- Vue封装hbuilder热更新
- python语言中的注释符_各种语言中的注释符总结
- javascript map 排序_1Keys仅用1 kb的JavaScript制作钢琴
- 2020年日历电子版(打印版)_灵感 | 快来康康——2020年的日历设计的这么有创意?...
- js常用内建对象之:Date
- Android ViewPager+TabHost实现首页导航
- win7万能声卡驱动_IT天空出品的万能驱动 7 发布下载
- 韩家炜教授的学术报告会
- 编程中的c语言32个英文代码,C语言图形编程代码(国外英文资料).doc
- 机器视觉的四大类应用
- 东北农业大学考研计算机大纲,东北农业大学339农业知识综合一考研大纲
- 如何解决word中latex公式出现虚线小方框问题
- Corolado软件峰会关于Geronimo的介绍
- ECharts画分类甘特图