Test Bench基础知识笔记
学的内容多了,好多指令和用法都容易遗忘和混淆,出现这种情况就需要勤记笔记,忘记了多翻阅几次,基本上就能完全记住了。
[`timescale 1ns/1ps]前一个1ns表示时延时间,后一个1ps表示时延精度。
写的一个Testbench示例
- `timescale ps/ ps
- module SendTest_vlg_tst();
- // constants
- // general purpose registers
- reg eachvec;
- // test vector input registers
- reg [:] RcvWrAddr;
- reg [:] RcvWrData;
- reg RcvWrEn;
- reg Test;
- reg clk;
- reg rst;
- // wires
- wire ARPBit;
- wire [:] AppData;
- wire AppDataFlag;
- wire [:] ClientCMD;
- wire ICMPBit;
- wire [:] RCAckNum;
- wire [:] RCWinSize;
- wire RcvDone;
- wire [:] ReSend;
- wire [:] SSeqNum;
- wire SendBusy;
- wire [:] SendLength;
- wire SendRdClk;
- wire SendStart;
- wire TCPBit;
- wire [:] TCPCount;
- wire [:] TCPState;
- wire [:] TEncoderState;
- wire [:] TRAMDATAIN;
- wire [:] TRAMDATAOUT;
- wire [:] TRcvDecoderStatus;
- wire [:] TTestStatus1;
- wire UDPBit;
- wire [:] Value;
- // assign statements (if any)
- SendTest i1 (
- // port map - connection between master ports and signals/registers
- .ARPBit(ARPBit),
- .AppData(AppData),
- .AppDataFlag(AppDataFlag),
- .ClientCMD(ClientCMD),
- .ICMPBit(ICMPBit),
- .RCAckNum(RCAckNum),
- .RCWinSize(RCWinSize),
- .RcvDone(RcvDone),
- .RcvWrAddr(RcvWrAddr),
- .RcvWrData(RcvWrData),
- .RcvWrEn(RcvWrEn),
- .ReSend(ReSend),
- .SSeqNum(SSeqNum),
- .SendBusy(SendBusy),
- .SendLength(SendLength),
- .SendRdClk(SendRdClk),
- .SendStart(SendStart),
- .TCPBit(TCPBit),
- .TCPCount(TCPCount),
- .TCPState(TCPState),
- .TEncoderState(TEncoderState),
- .TRAMDATAIN(TRAMDATAIN),
- .TRAMDATAOUT(TRAMDATAOUT),
- .TRcvDecoderStatus(TRcvDecoderStatus),
- .TTestStatus1(TTestStatus1),
- .Test(Test),
- .UDPBit(UDPBit),
- .Value(Value),
- .clk(clk),
- .rst(rst)
- );
- parameter CLKTIME=;
- parameter RSTTIME=;
- initial clk=;
- initial forever #(CLKTIME/) clk=~clk;
- initial rst=;
- initial #RSTTIME rst=;
- reg [:] CTCPFLAG;
- reg [:] CSeqNum;
- reg [:] CAckNum;
- reg [:] CWinSize;
- parameter ACK='b010000;
- parameter SYN='b000010;
- parameter FIN='b000001;
- parameter PUSH='b001000;
- task SendTCP;
- begin
- @(negedge clk);//以太网目标MAC地址
- RcvWrEn<='b1;
- RcvWrAddr<='d0;
- RcvWrData<='h00E0;
- @(negedge clk); //
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h3DF4;
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='hDDF7;
- @(negedge clk); //以太网源MAC地址
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='hF0DE;
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='hF1B5;
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h5EF8;
- @(negedge clk);//帧类型IP:0X0800
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h0800;
- @(negedge clk); //IP帧头
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h4500;
- @(negedge clk); //total length
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h40;
- @(negedge clk); //Identification
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h0;
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h0;
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h4006;
- @(negedge clk); //check
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h0;
- @(negedge clk); //以太网源IP
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h3b45;
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h40a9;
- @(negedge clk); //以太网目的IP
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h3b45;
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h4002;
- @(negedge clk); //TCP帧头
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h001E;//src port 30
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h001e;//dest port
- @(negedge clk); //seq
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<=CSeqNum[:];
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<=CSeqNum[:];
- @(negedge clk); //ack
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<=CAckNum[:];
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<=CAckNum[:];
- @(negedge clk); //
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<={'d5,6'd0,CTCPFLAG};
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<=CWinSize;
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='d0;
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='d0;
- @(negedge clk);
- RcvWrEn<='b0;
- RcvWrAddr<='d0;
- RcvWrData<='d0;
- @(negedge RcvDone);
- end
- endtask
- task SendT;
- begin
- //客户机发送'T'//////////////////////////////////////////////////////////////////
- @(negedge clk);//以太网目标MAC地址
- RcvWrEn<='b1;
- RcvWrAddr<='d0;
- RcvWrData<='h00E0;
- @(negedge clk); //
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h3DF4;
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='hDDF7;
- @(negedge clk); //以太网源MAC地址
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='hF0DE;
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='hF1B5;
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h5EF8;
- @(negedge clk);//帧类型IP:0X0800
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h0800;
- @(negedge clk); //IP帧头
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h4500;
- @(negedge clk); //total length
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h29;//16'd41
- @(negedge clk); //Identification
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h0;
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h0;
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h4006;
- @(negedge clk); //check
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h0;
- @(negedge clk); //以太网源IP
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h3b45;
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h40a9;
- @(negedge clk); //以太网目的IP
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h3b45;
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h4002;
- @(negedge clk); //TCP帧头
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h001E;
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h001E;
- @(negedge clk); //seq
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<=CSeqNum[:];
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<=CSeqNum[:];
- @(negedge clk); //ack
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<=CAckNum[:];
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<=CAckNum[:];
- @(negedge clk); //
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<={'d5,6'd0,CTCPFLAG};
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<=CWinSize;
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='d0;
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='d0;
- @(negedge clk);
- RcvWrAddr<=RcvWrAddr+'b1;
- RcvWrData<='h5400;//'T'
- @(negedge clk);
- RcvWrEn<='b0;
- RcvWrAddr<='d0;
- RcvWrData<='d0;
- @(negedge RcvDone);
- end
- endtask
- initial
- begin
- RcvWrEn<='b0;
- RcvWrAddr<='d0;
- RcvWrData<='d0;
- //写SYN请求//////////////////////////////////////////////////////////////////
- repeat()@(negedge clk);
- CSeqNum<='d0;
- CAckNum<='d0;
- CTCPFLAG<=SYN;
- CWinSize<='d65535;
- SendTCP();
- wait(SendBusy==);
- wait(SendBusy==);
- //回应SYN+ACK//////////////////////////////////////////////////////////////////
- repeat()@(negedge clk);
- CSeqNum<='d1;
- CAckNum<='d1;
- CTCPFLAG<=ACK;
- CWinSize<='d65535;
- SendTCP();
- //发送ACK1//////////////////////////////////////////////////////////////////
- repeat()@(negedge clk);
- CSeqNum<='d1;
- CAckNum<='d1;
- CTCPFLAG<=ACK;
- CWinSize<='d65535;
- SendTCP();
- //发送ACK2//////////////////////////////////////////////////////////////////
- repeat()@(negedge clk);
- CSeqNum<='d1;
- CAckNum<='d1;
- CTCPFLAG<=ACK;
- CWinSize<='d65535;
- SendTCP();
- //发送ACK3//////////////////////////////////////////////////////////////////
- repeat()@(negedge clk);
- CSeqNum<='d1;
- CAckNum<='d1;
- CTCPFLAG<=ACK;
- CWinSize<='d65535;
- SendTCP();
- //发送ACK4//////////////////////////////////////////////////////////////////
- repeat()@(negedge clk);
- CSeqNum<='d1;
- CAckNum<='d1;
- CTCPFLAG<=ACK;
- CWinSize<='d65535;
- SendTCP();
- //发送ACK5//////////////////////////////////////////////////////////////////
- repeat()@(negedge clk);
- CSeqNum<='d1;
- CAckNum<='d1;
- CTCPFLAG<=ACK;
- CWinSize<='d65535;
- SendTCP();
- //发送ACK6//////////////////////////////////////////////////////////////////
- repeat()@(negedge clk);
- CSeqNum<='d1;
- CAckNum<='d1;
- CTCPFLAG<=ACK;
- CWinSize<='d65535;
- SendTCP();
- end
- endmodule
Test Bench基础知识笔记的更多相关文章
- JS基础知识笔记
2020-04-15 JS基础知识笔记 // new Boolean()传入的值与if判断一样 var test=new Boolean(); console.log(test); // false ...
- Java多线程基础知识笔记(持续更新)
多线程基础知识笔记 一.线程 1.基本概念 程序(program):是为完成特定任务.用某种语言编写的一组指令的集合.即指一段静态的代码,静态对象. 进程(process):是程序的一次执行过程,或是 ...
- javascript基础知识笔记-自用
笔记内容根据个人基础知识不足不明白之处做的记录.主要看的:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript 1.变量,变量的名字又叫标识符 ...
- Mysql之基础知识笔记
Mysql数据库基础知识个人笔记 连接本地数据库: mysql -h localhost -u root -p 回车输入数据库密码 数据库的基础操作: 查看当前所有的数据库:show database ...
- java基础知识-笔记整理
1.查看已安装jdk文件路径 CMD输入java -verbose. 2.java学习提升路线 java学习视屏地址: http://www.icoolxue.com/album/show/38 ...
- JavaScript基础知识笔记
做前端几年了,一直疏于整理归纳,所以这两天把基础看了一遍,加上使用经验,整理了基础知识中关键技术,旨在系统性的学习和备忘.如果发现错误,请留言提示,谢谢! 重要说明:本文只列举基础知识点,中级和高级内 ...
- Javascript 基础知识笔记
标签(空格分隔): 廖老师学习笔记 javascript 基本入门 根据廖雪峰老师官网,自己看后的简单笔记 第一小节 基本知识 <script type="text/javascrip ...
- 初学MySQL基础知识笔记--01
本人初入博客园,第一次写博客,在今后的时间里会一点点的提高自己博客的水平,以及博客的排版等. 在今天,我学习了一下MySQL数据库的基本知识,相信关于MySQL的资料网上会有很多,所以我就不在这里复制 ...
- mysql基础知识笔记
Mysql基础笔记 环境配置 基本概念 mysql命令行 进入 use show 查询 select order by where like 数据过滤regexp concat 文本函数 日期函数 数 ...
随机推荐
- tomcat https 配置
以前基本上笔者对于安全性考虑的并不多,最近因为saas平台要开始逐渐推广,所以需要开始逐渐加强xss/crsf/https等措施以避免潜在的安全性风险.本文简单的记录下tomcat下https的配置. ...
- hdu 4722
比赛的时候这道题一直都没出来,承启提醒我之后还是一直WA: 其实规律早就找到了```` 其实这题还可以用数位dp来做,不过从来没写过,以后再贴: 代码: #include<iostream> ...
- Jquery IE 缓存问题
jQuery IE缓存问题 解决方法: 1.在AJAX请求的页面后加个随机函数,我们可以使用随机时间函数 在javascript发送的URL后加上t=Math.random() 例如这样:URL+”& ...
- eclipse+maven搭建cxf webservice 完整例子
开发环境是eclipse , maven. 在开发java webservice时,有两个比较流行的框架:axis2和cxf.cxf可以无缝的和spring集成,而axis2需要打包成aar文件,在t ...
- [转贴]JAVA 百度地图SDK地图学习——实现定位功能
之前已经完成了百度地图SDK和百度定位SDK的配置. http://my.oschina.net/u/1051634/blog/180880 实现百度定位的功能,最好仔细看看官方的文档,看了好几次才有 ...
- win10全系列官方MSDN原版系统安装密钥、版本区别、镜像下载地址与激活教程
微软发布win10正式版已经过去几天了,相信很多同学都心情高涨的装上了期待已久的win10系统,但也有很多同学面对win10系统的众多版本感到一脸茫然,的确,微软在win10系统版本上的划分确实有点多 ...
- insert into select * from 锁表
mysql[192.168.11.187] processid[249] root@localhost in db[zjzc] hold transaction time 197 112069858, ...
- wpf 创建动画三种方式
动画类型 : 故事版,CompositionTarget,DispachTime 那么到此,三种动态创建动画的方法都已经详细介绍过了,大家可能会有种感觉,比较钟情于第一种WPF/Silverlight ...
- GDI+编程说明及小结
原文地址:http://blog.csdn.net/byxdaz/article/details/5972759 GDI+(Graphics Device Interface Plus图形设备接口加) ...
- bzoj1034
贪心 尽可能让最强的赢,最弱的赢,都不行则最弱打最强 感性的想,我肯定要尽可能的赢,而且赢的要对等 实在不能赢就拿最小的拼,所谓的田忌赛马策略 由于总分一定,己方最差即己方最好时对方的分数 ..] o ...