学的内容多了,好多指令和用法都容易遗忘和混淆,出现这种情况就需要勤记笔记,忘记了多翻阅几次,基本上就能完全记住了。

[`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基础知识笔记的更多相关文章

  1. JS基础知识笔记

    2020-04-15 JS基础知识笔记 // new Boolean()传入的值与if判断一样 var test=new Boolean(); console.log(test); // false ...

  2. Java多线程基础知识笔记(持续更新)

    多线程基础知识笔记 一.线程 1.基本概念 程序(program):是为完成特定任务.用某种语言编写的一组指令的集合.即指一段静态的代码,静态对象. 进程(process):是程序的一次执行过程,或是 ...

  3. javascript基础知识笔记-自用

    笔记内容根据个人基础知识不足不明白之处做的记录.主要看的:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript 1.变量,变量的名字又叫标识符 ...

  4. Mysql之基础知识笔记

    Mysql数据库基础知识个人笔记 连接本地数据库: mysql -h localhost -u root -p 回车输入数据库密码 数据库的基础操作: 查看当前所有的数据库:show database ...

  5. java基础知识-笔记整理

    1.查看已安装jdk文件路径 CMD输入java -verbose.   2.java学习提升路线 java学习视屏地址: http://www.icoolxue.com/album/show/38 ...

  6. JavaScript基础知识笔记

    做前端几年了,一直疏于整理归纳,所以这两天把基础看了一遍,加上使用经验,整理了基础知识中关键技术,旨在系统性的学习和备忘.如果发现错误,请留言提示,谢谢! 重要说明:本文只列举基础知识点,中级和高级内 ...

  7. Javascript 基础知识笔记

    标签(空格分隔): 廖老师学习笔记 javascript 基本入门 根据廖雪峰老师官网,自己看后的简单笔记 第一小节 基本知识 <script type="text/javascrip ...

  8. 初学MySQL基础知识笔记--01

    本人初入博客园,第一次写博客,在今后的时间里会一点点的提高自己博客的水平,以及博客的排版等. 在今天,我学习了一下MySQL数据库的基本知识,相信关于MySQL的资料网上会有很多,所以我就不在这里复制 ...

  9. mysql基础知识笔记

    Mysql基础笔记 环境配置 基本概念 mysql命令行 进入 use show 查询 select order by where like 数据过滤regexp concat 文本函数 日期函数 数 ...

随机推荐

  1. Servlet和Tomcat部署

    今天有空写个Servlet来玩一下.用EditPlus写一个简单的Servlet,FirstServlet.java,如下: import java.io.IOException; import ja ...

  2. uva 1400 - "Ray, Pass me the dishes!"

    又是一道线段树区间更新的题: #include<cstdio> #include<algorithm> #include<cstring> #define ll l ...

  3. 【2011 Greater New York Regional 】Problem I :The Golden Ceiling

    一道比较简单但是繁琐的三维计算几何,找错误找的我好心酸,没想到就把一个变量给写错了 = =: 题目的意思是求平面切长方体的截面面积+正方体顶部所遮盖的面积: 找出所有的切点,然后二维凸包一下直接算面积 ...

  4. centos网络安装中的注意点

    转自centos网络安装中的注意点 centos网络安装的教程网上很多,这里仅仅记录一下安装过程中网上别处提及很少的注意点. 1.centos默认会安装selinux,并且默认阻止ftp服务,所以要禁 ...

  5. 虚拟机下ubuntu的minicom使用指南

    整理自ubuntu下的minicom的使用 minicom是linux下串口通信的软件,它的使用完全依靠键盘的操作,虽然没有"超级终端"那么易用,但是使用习惯之后读者将会体会到它的 ...

  6. 如何通过REST获取JENKINS的编译进度?

    第二版功能需要实现, 我看了一下,获取百分比进度不太可能了,,因为JENKINS本身都没有具体的百分比进度.. 那,,只好实现获取实时值,如果完成就显示完成. URL: http://1.2.3.4/ ...

  7. [wikioi]能量项链

    http://wikioi.com/problem/1154/ 这是石子归并的加强版,基本就是分治法的DP.但是有了个环,因为任何一个位置都可开始,所以就建立2*N的数组,然后对可能的区间遍历一次,就 ...

  8. 【HDOJ】2853 Assignment

    最小费用最大流可解最优解.至于dif如何解,可以把w扩大100倍,如果mission编号和排列P相等则对w+1,然后建立网络流.对结果取模100可以得到没有改变mission的company数目,用c ...

  9. Windows Server基础架构云参考架构:硬件之上的设计

    作者 王枫 发布于2014年1月27日 综述 毫无疑问,移动互联网.社交网络.大数据和云计算已经成为IT发展的四个大的趋势.其中云计算又为前三个提供了一个理想的平台.今天不仅互联网公司,很多传统行业的 ...

  10. Unity3D与iOS消息交互方法(1)--iOS接收Unity3D发出的消息

    跨平台这种事情不管多NB, 总要有些与原生系统交互的方法, 比如  Unity3D与iOS消息交互方法. 一: 建立一个空的Unity工程. File -->  New Project 二: 编 ...