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

[`timescale 1ns/1ps]前一个1ns表示时延时间,后一个1ps表示时延精度。

写的一个Testbench示例

  1. `timescale ps/ ps
  2. module SendTest_vlg_tst();
  3. // constants
  4. // general purpose registers
  5. reg eachvec;
  6. // test vector input registers
  7. reg [:] RcvWrAddr;
  8. reg [:] RcvWrData;
  9. reg RcvWrEn;
  10. reg Test;
  11. reg clk;
  12. reg rst;
  13. // wires
  14. wire ARPBit;
  15. wire [:] AppData;
  16. wire AppDataFlag;
  17. wire [:] ClientCMD;
  18. wire ICMPBit;
  19. wire [:] RCAckNum;
  20. wire [:] RCWinSize;
  21. wire RcvDone;
  22. wire [:] ReSend;
  23. wire [:] SSeqNum;
  24. wire SendBusy;
  25. wire [:] SendLength;
  26. wire SendRdClk;
  27. wire SendStart;
  28. wire TCPBit;
  29. wire [:] TCPCount;
  30. wire [:] TCPState;
  31. wire [:] TEncoderState;
  32. wire [:] TRAMDATAIN;
  33. wire [:] TRAMDATAOUT;
  34. wire [:] TRcvDecoderStatus;
  35. wire [:] TTestStatus1;
  36. wire UDPBit;
  37. wire [:] Value;
  38.  
  39. // assign statements (if any)
  40. SendTest i1 (
  41. // port map - connection between master ports and signals/registers
  42. .ARPBit(ARPBit),
  43. .AppData(AppData),
  44. .AppDataFlag(AppDataFlag),
  45. .ClientCMD(ClientCMD),
  46. .ICMPBit(ICMPBit),
  47. .RCAckNum(RCAckNum),
  48. .RCWinSize(RCWinSize),
  49. .RcvDone(RcvDone),
  50. .RcvWrAddr(RcvWrAddr),
  51. .RcvWrData(RcvWrData),
  52. .RcvWrEn(RcvWrEn),
  53. .ReSend(ReSend),
  54. .SSeqNum(SSeqNum),
  55. .SendBusy(SendBusy),
  56. .SendLength(SendLength),
  57. .SendRdClk(SendRdClk),
  58. .SendStart(SendStart),
  59. .TCPBit(TCPBit),
  60. .TCPCount(TCPCount),
  61. .TCPState(TCPState),
  62. .TEncoderState(TEncoderState),
  63. .TRAMDATAIN(TRAMDATAIN),
  64. .TRAMDATAOUT(TRAMDATAOUT),
  65. .TRcvDecoderStatus(TRcvDecoderStatus),
  66. .TTestStatus1(TTestStatus1),
  67. .Test(Test),
  68. .UDPBit(UDPBit),
  69. .Value(Value),
  70. .clk(clk),
  71. .rst(rst)
  72. );
  73. parameter CLKTIME=;
  74. parameter RSTTIME=;
  75. initial clk=;
  76. initial forever #(CLKTIME/) clk=~clk;
  77. initial rst=;
  78. initial #RSTTIME rst=;
  79.  
  80. reg [:] CTCPFLAG;
  81. reg [:] CSeqNum;
  82. reg [:] CAckNum;
  83. reg [:] CWinSize;
  84. parameter ACK='b010000;
  85. parameter SYN='b000010;
  86. parameter FIN='b000001;
  87. parameter PUSH='b001000;
  88.  
  89. task SendTCP;
  90. begin
  91. @(negedge clk);//以太网目标MAC地址
  92. RcvWrEn<='b1;
  93. RcvWrAddr<='d0;
  94. RcvWrData<='h00E0;
  95. @(negedge clk); //
  96. RcvWrAddr<=RcvWrAddr+'b1;
  97. RcvWrData<='h3DF4;
  98. @(negedge clk);
  99. RcvWrAddr<=RcvWrAddr+'b1;
  100. RcvWrData<='hDDF7;
  101. @(negedge clk); //以太网源MAC地址
  102. RcvWrAddr<=RcvWrAddr+'b1;
  103. RcvWrData<='hF0DE;
  104. @(negedge clk);
  105. RcvWrAddr<=RcvWrAddr+'b1;
  106. RcvWrData<='hF1B5;
  107. @(negedge clk);
  108. RcvWrAddr<=RcvWrAddr+'b1;
  109. RcvWrData<='h5EF8;
  110. @(negedge clk);//帧类型IP:0X0800
  111. RcvWrAddr<=RcvWrAddr+'b1;
  112. RcvWrData<='h0800;
  113. @(negedge clk); //IP帧头
  114. RcvWrAddr<=RcvWrAddr+'b1;
  115. RcvWrData<='h4500;
  116. @(negedge clk); //total length
  117. RcvWrAddr<=RcvWrAddr+'b1;
  118. RcvWrData<='h40;
  119. @(negedge clk); //Identification
  120. RcvWrAddr<=RcvWrAddr+'b1;
  121. RcvWrData<='h0;
  122. @(negedge clk);
  123. RcvWrAddr<=RcvWrAddr+'b1;
  124. RcvWrData<='h0;
  125. @(negedge clk);
  126. RcvWrAddr<=RcvWrAddr+'b1;
  127. RcvWrData<='h4006;
  128. @(negedge clk); //check
  129. RcvWrAddr<=RcvWrAddr+'b1;
  130. RcvWrData<='h0;
  131. @(negedge clk); //以太网源IP
  132. RcvWrAddr<=RcvWrAddr+'b1;
  133. RcvWrData<='h3b45;
  134. @(negedge clk);
  135. RcvWrAddr<=RcvWrAddr+'b1;
  136. RcvWrData<='h40a9;
  137. @(negedge clk); //以太网目的IP
  138. RcvWrAddr<=RcvWrAddr+'b1;
  139. RcvWrData<='h3b45;
  140. @(negedge clk);
  141. RcvWrAddr<=RcvWrAddr+'b1;
  142. RcvWrData<='h4002;
  143. @(negedge clk); //TCP帧头
  144. RcvWrAddr<=RcvWrAddr+'b1;
  145. RcvWrData<='h001E;//src port 30
  146. @(negedge clk);
  147. RcvWrAddr<=RcvWrAddr+'b1;
  148. RcvWrData<='h001e;//dest port
  149. @(negedge clk); //seq
  150. RcvWrAddr<=RcvWrAddr+'b1;
  151. RcvWrData<=CSeqNum[:];
  152. @(negedge clk);
  153. RcvWrAddr<=RcvWrAddr+'b1;
  154. RcvWrData<=CSeqNum[:];
  155. @(negedge clk); //ack
  156. RcvWrAddr<=RcvWrAddr+'b1;
  157. RcvWrData<=CAckNum[:];
  158. @(negedge clk);
  159. RcvWrAddr<=RcvWrAddr+'b1;
  160. RcvWrData<=CAckNum[:];
  161. @(negedge clk); //
  162. RcvWrAddr<=RcvWrAddr+'b1;
  163. RcvWrData<={'d5,6'd0,CTCPFLAG};
  164. @(negedge clk);
  165. RcvWrAddr<=RcvWrAddr+'b1;
  166. RcvWrData<=CWinSize;
  167. @(negedge clk);
  168. RcvWrAddr<=RcvWrAddr+'b1;
  169. RcvWrData<='d0;
  170. @(negedge clk);
  171. RcvWrAddr<=RcvWrAddr+'b1;
  172. RcvWrData<='d0;
  173. @(negedge clk);
  174. RcvWrEn<='b0;
  175. RcvWrAddr<='d0;
  176. RcvWrData<='d0;
  177. @(negedge RcvDone);
  178. end
  179. endtask
  180.  
  181. task SendT;
  182. begin
  183. //客户机发送'T'//////////////////////////////////////////////////////////////////
  184. @(negedge clk);//以太网目标MAC地址
  185. RcvWrEn<='b1;
  186. RcvWrAddr<='d0;
  187. RcvWrData<='h00E0;
  188. @(negedge clk); //
  189. RcvWrAddr<=RcvWrAddr+'b1;
  190. RcvWrData<='h3DF4;
  191. @(negedge clk);
  192. RcvWrAddr<=RcvWrAddr+'b1;
  193. RcvWrData<='hDDF7;
  194. @(negedge clk); //以太网源MAC地址
  195. RcvWrAddr<=RcvWrAddr+'b1;
  196. RcvWrData<='hF0DE;
  197. @(negedge clk);
  198. RcvWrAddr<=RcvWrAddr+'b1;
  199. RcvWrData<='hF1B5;
  200. @(negedge clk);
  201. RcvWrAddr<=RcvWrAddr+'b1;
  202. RcvWrData<='h5EF8;
  203. @(negedge clk);//帧类型IP:0X0800
  204. RcvWrAddr<=RcvWrAddr+'b1;
  205. RcvWrData<='h0800;
  206. @(negedge clk); //IP帧头
  207. RcvWrAddr<=RcvWrAddr+'b1;
  208. RcvWrData<='h4500;
  209. @(negedge clk); //total length
  210. RcvWrAddr<=RcvWrAddr+'b1;
  211. RcvWrData<='h29;//16'd41
  212. @(negedge clk); //Identification
  213. RcvWrAddr<=RcvWrAddr+'b1;
  214. RcvWrData<='h0;
  215. @(negedge clk);
  216. RcvWrAddr<=RcvWrAddr+'b1;
  217. RcvWrData<='h0;
  218. @(negedge clk);
  219. RcvWrAddr<=RcvWrAddr+'b1;
  220. RcvWrData<='h4006;
  221. @(negedge clk); //check
  222. RcvWrAddr<=RcvWrAddr+'b1;
  223. RcvWrData<='h0;
  224. @(negedge clk); //以太网源IP
  225. RcvWrAddr<=RcvWrAddr+'b1;
  226. RcvWrData<='h3b45;
  227. @(negedge clk);
  228. RcvWrAddr<=RcvWrAddr+'b1;
  229. RcvWrData<='h40a9;
  230. @(negedge clk); //以太网目的IP
  231. RcvWrAddr<=RcvWrAddr+'b1;
  232. RcvWrData<='h3b45;
  233. @(negedge clk);
  234. RcvWrAddr<=RcvWrAddr+'b1;
  235. RcvWrData<='h4002;
  236. @(negedge clk); //TCP帧头
  237. RcvWrAddr<=RcvWrAddr+'b1;
  238. RcvWrData<='h001E;
  239. @(negedge clk);
  240. RcvWrAddr<=RcvWrAddr+'b1;
  241. RcvWrData<='h001E;
  242. @(negedge clk); //seq
  243. RcvWrAddr<=RcvWrAddr+'b1;
  244. RcvWrData<=CSeqNum[:];
  245. @(negedge clk);
  246. RcvWrAddr<=RcvWrAddr+'b1;
  247. RcvWrData<=CSeqNum[:];
  248. @(negedge clk); //ack
  249. RcvWrAddr<=RcvWrAddr+'b1;
  250. RcvWrData<=CAckNum[:];
  251. @(negedge clk);
  252. RcvWrAddr<=RcvWrAddr+'b1;
  253. RcvWrData<=CAckNum[:];
  254. @(negedge clk); //
  255. RcvWrAddr<=RcvWrAddr+'b1;
  256. RcvWrData<={'d5,6'd0,CTCPFLAG};
  257. @(negedge clk);
  258. RcvWrAddr<=RcvWrAddr+'b1;
  259. RcvWrData<=CWinSize;
  260. @(negedge clk);
  261. RcvWrAddr<=RcvWrAddr+'b1;
  262. RcvWrData<='d0;
  263. @(negedge clk);
  264. RcvWrAddr<=RcvWrAddr+'b1;
  265. RcvWrData<='d0;
  266. @(negedge clk);
  267. RcvWrAddr<=RcvWrAddr+'b1;
  268. RcvWrData<='h5400;//'T'
  269. @(negedge clk);
  270. RcvWrEn<='b0;
  271. RcvWrAddr<='d0;
  272. RcvWrData<='d0;
  273. @(negedge RcvDone);
  274. end
  275. endtask
  276.  
  277. initial
  278. begin
  279. RcvWrEn<='b0;
  280. RcvWrAddr<='d0;
  281. RcvWrData<='d0;
  282. //写SYN请求//////////////////////////////////////////////////////////////////
  283. repeat()@(negedge clk);
  284. CSeqNum<='d0;
  285. CAckNum<='d0;
  286. CTCPFLAG<=SYN;
  287. CWinSize<='d65535;
  288. SendTCP();
  289. wait(SendBusy==);
  290. wait(SendBusy==);
  291. //回应SYN+ACK//////////////////////////////////////////////////////////////////
  292. repeat()@(negedge clk);
  293. CSeqNum<='d1;
  294. CAckNum<='d1;
  295. CTCPFLAG<=ACK;
  296. CWinSize<='d65535;
  297. SendTCP();
  298. //发送ACK1//////////////////////////////////////////////////////////////////
  299. repeat()@(negedge clk);
  300. CSeqNum<='d1;
  301. CAckNum<='d1;
  302. CTCPFLAG<=ACK;
  303. CWinSize<='d65535;
  304. SendTCP();
  305. //发送ACK2//////////////////////////////////////////////////////////////////
  306. repeat()@(negedge clk);
  307. CSeqNum<='d1;
  308. CAckNum<='d1;
  309. CTCPFLAG<=ACK;
  310. CWinSize<='d65535;
  311. SendTCP();
  312. //发送ACK3//////////////////////////////////////////////////////////////////
  313. repeat()@(negedge clk);
  314. CSeqNum<='d1;
  315. CAckNum<='d1;
  316. CTCPFLAG<=ACK;
  317. CWinSize<='d65535;
  318. SendTCP();
  319. //发送ACK4//////////////////////////////////////////////////////////////////
  320. repeat()@(negedge clk);
  321. CSeqNum<='d1;
  322. CAckNum<='d1;
  323. CTCPFLAG<=ACK;
  324. CWinSize<='d65535;
  325. SendTCP();
  326. //发送ACK5//////////////////////////////////////////////////////////////////
  327. repeat()@(negedge clk);
  328. CSeqNum<='d1;
  329. CAckNum<='d1;
  330. CTCPFLAG<=ACK;
  331. CWinSize<='d65535;
  332. SendTCP();
  333. //发送ACK6//////////////////////////////////////////////////////////////////
  334. repeat()@(negedge clk);
  335. CSeqNum<='d1;
  336. CAckNum<='d1;
  337. CTCPFLAG<=ACK;
  338. CWinSize<='d65535;
  339. SendTCP();
  340. end
  341.  
  342. 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. tomcat https 配置

    以前基本上笔者对于安全性考虑的并不多,最近因为saas平台要开始逐渐推广,所以需要开始逐渐加强xss/crsf/https等措施以避免潜在的安全性风险.本文简单的记录下tomcat下https的配置. ...

  2. hdu 4722

    比赛的时候这道题一直都没出来,承启提醒我之后还是一直WA: 其实规律早就找到了```` 其实这题还可以用数位dp来做,不过从来没写过,以后再贴: 代码: #include<iostream> ...

  3. Jquery IE 缓存问题

    jQuery IE缓存问题 解决方法: 1.在AJAX请求的页面后加个随机函数,我们可以使用随机时间函数 在javascript发送的URL后加上t=Math.random() 例如这样:URL+”& ...

  4. eclipse+maven搭建cxf webservice 完整例子

    开发环境是eclipse , maven. 在开发java webservice时,有两个比较流行的框架:axis2和cxf.cxf可以无缝的和spring集成,而axis2需要打包成aar文件,在t ...

  5. [转贴]JAVA 百度地图SDK地图学习——实现定位功能

    之前已经完成了百度地图SDK和百度定位SDK的配置. http://my.oschina.net/u/1051634/blog/180880 实现百度定位的功能,最好仔细看看官方的文档,看了好几次才有 ...

  6. win10全系列官方MSDN原版系统安装密钥、版本区别、镜像下载地址与激活教程

    微软发布win10正式版已经过去几天了,相信很多同学都心情高涨的装上了期待已久的win10系统,但也有很多同学面对win10系统的众多版本感到一脸茫然,的确,微软在win10系统版本上的划分确实有点多 ...

  7. insert into select * from 锁表

    mysql[192.168.11.187] processid[249] root@localhost in db[zjzc] hold transaction time 197 112069858, ...

  8. wpf 创建动画三种方式

    动画类型 : 故事版,CompositionTarget,DispachTime 那么到此,三种动态创建动画的方法都已经详细介绍过了,大家可能会有种感觉,比较钟情于第一种WPF/Silverlight ...

  9. GDI+编程说明及小结

    原文地址:http://blog.csdn.net/byxdaz/article/details/5972759 GDI+(Graphics Device Interface Plus图形设备接口加) ...

  10. bzoj1034

    贪心 尽可能让最强的赢,最弱的赢,都不行则最弱打最强 感性的想,我肯定要尽可能的赢,而且赢的要对等 实在不能赢就拿最小的拼,所谓的田忌赛马策略 由于总分一定,己方最差即己方最好时对方的分数 ..] o ...