task rx_data_task;

input [12:0] RXD;

reg [3:0] i;

begin

for (i=0;i<=13;i=i+1) begin

repeat (2603) @(posedge clk);

rx = RXD[i];

end

end

endtask

1、首先要说的是verilog中task的写法;

第一点:task定义的时候有封号,但是无括号,但是调用的时候有封号且必须有括弧,括弧要放入task的输入,没有则不放入任何值,这样括弧就好记住了。

第二点:for 循环中的变量需用reg申明类型,而不能用int。

第三点:此处的task是uart接收数据的激励,每一位数据持续2603个clk周期。dut中每隔2603个clk默认一位数据。或者没有计数到2603时,相邻数据有变化也认为是一位数据的结束。

所以此tb 中repeat(N),当N小于2603时;若相邻的下一位数据与前一数据不同,则dut 提前检测到数据的变化自动识别一位数据的结束;若相邻的下一位数据与前一位数据相同,则dut通过计数到2603来判定一位数据的结束。分析可知N小于2603时没有什么问题。

但是当N大于2603时;若相邻的下一位数据与前一数据不同,则dut 提前计数到2603,来判定一位数据的结束,计数器清零。不久后面又检测到数据变化,计数器又自动清零,但是,由于还不会产生采样的使能信号,所以不会存在采样值;这样的激励也是OK的。若相邻的下一位数据与前一位数据相同,则dut 提前计数到2603,来判定一位数据的结束,计数器清零。不久后面真正的数据到来时,也不会有任何的变化,数据也接收正确。只不过对下下一位数据有稍微多产生了点延迟,分析可知N大于2603时没有什么问题。

接收13个数据:

for (i=0;i<=13;i=i+1) begin

repeat (2603) @(posedge clk);

rx = RXD[i];

end

这种写法当i=0到i等于1之前,rx的值是未定的所以i<=13才能保证真的是有13个数据要接受。自己当时一直写成:

for (i=0;i<=12;i=i+1) begin

repeat (2603) @(posedge clk);

rx = RXD[i];

end

仿真发现总是差一位,最后才发现!

当然写成如下的就更加好了:

for (i=0;i<=12;i=i+1) begin

rx = RXD[i];

repeat (2603) @(posedge clk);

end

这样子i=0的过程就是对应第一个数据,不会有任何歧义了。

uart启示1_task的写法的更多相关文章

  1. uart启示2_异步操作的bug

    发现代码中的隐藏bug真的是一件令人振奋的事情,当然也会疲倦那么一下午! 这个bug只有在一种在一个2604计数周期的一种情况下发生,所以即使是大量的仿真,未必也会发现的了,只有在以后的设计过程中,遇 ...

  2. obj.style.z-index的正确写法

    obj.style.z-index的正确写法 今天发现obj.style.z-index在js里面报错,后来才知道在js里应该把含"-"的字符写成驼峰式,例如obj.style.z ...

  3. java设计模式之单例模式(几种写法及比较)

    概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...

  4. .NET跨平台之旅:数据库连接字符串写法引发的问题

    最近在一个ASP.NET Core站点中遇到一个奇怪问题.当用dotnet run命令启动站点后,开始的一段时间请求执行速度超慢,有时要超过20秒,有时甚至超过1分钟,日志中会记录这样的错误: Sys ...

  5. [Intel Edison开发板] 05、Edison开发基于MRAA实现IO控制,特别是UART通信

    一.前言 下面是本系列文章的前几篇: [Intel Edison开发板] 01.Edison开发板性能简述 [Intel Edison开发板] 02.Edison开发板入门 [Intel Edison ...

  6. 【兼容写法】HttpServerUtility.Execute 在等待异步操作完成时被阻止。关键词:MVC,分部视图,异步

    异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html MVC6之前的版本,对分部视图的异步支持不是很好 问题: 视图里面有分布视图:@{ ...

  7. 常用原生JS方法总结(兼容性写法)

    经常会用到原生JS来写前端...但是原生JS的一些方法在适应各个浏览器的时候写法有的也不怎么一样的... 今天下班有点累... 就来总结一下简单的东西吧…… 备注:一下的方法都是包裹在一个EventU ...

  8. touchstart,touchmove,touchend事件 写法

    jQuery写法: $('#id').on('touchstart',function(e) { var _touch = e.originalEvent.targetTouches[0]; var ...

  9. 前端导出Excel兼容写法

    今天整理出在Web前端导出Excel的写法,写了一个工具类,对各个浏览器进行了兼容. 首先,导出的数据来源可能有两种: 1. 页面的HTML内容(一般是table) 2. 纯数据 PS:不同的数据源, ...

随机推荐

  1. Java如何解决脆弱基类(基类被冻结)问题

    概述  大多数好的设计者象躲避瘟疫一样来避免使用实现继承(extends 关系).实际上80%的代码应该完全用interfaces写,而不是通过extends.“JAVA设计模式”一书详细阐述了怎样用 ...

  2. 计算机网络(10)-----TCP的拥塞控制

    TCP的拥塞控制 拥塞(congestion) 在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏. 拥塞控制 拥塞控制就是防止过多的数据注入到网络中,这样可以使网 ...

  3. pandas 数据检索

    使用pandas的一些方法: 条件检索 按index取值

  4. is a 、like a、has a

    has a 代表的是对象和它的成员的从属关系.可以分为组合与聚合两种. 组合:表示两个对象是整体与部分的关系为强关系 聚合:表示两个对象是整体与部分的关系为弱关系 is a 它是类继承关系,只是覆盖了 ...

  5. css3旋转

    首先创建一个容器如div,然后设置其相关的3d属性,主要是三个1.perspective 透视,值越小3D感越强,值越大视觉正常.2.perspective-origin,透视点一般居于容器的中心.3 ...

  6. iOS 为移动中的UIView(UIButton )添加点击事件

    高高兴兴迎接新的产品新需求,满心欢喜的开始工作,结果研究了一下午才发现,是自己想的太简单了,是我太单纯呀. 需求是这样的类似下雪的效果,随机产生一些小雪花,然后每个雪花可以点击到下个页面. 接到需求之 ...

  7. iOS开发一个用户登录注册模块需要解决的坑

    最近和另外一位同事负责公司登录和用户中心模块的开发工作,开发周期计划两周,减去和产品和接口的协调时间,再减去由于原型图和接口的问题,导致强迫症纠结症状高发,情绪不稳定耗费的时间,能在两周基本完成也算是 ...

  8. H5的FormData对象完成ajax上传文件multiFile

    最近工作中需要完成,ajax上传图片,可是input file +ajax是无法完成的: 于是寻找了许久,发现了H5 的一个对象FormData 使用方法如下: HTML: <form id=& ...

  9. linux下查看进程状态

    1.查看进程的启动时间和执行时间 使用 ps 命令 :#ps -A -opid,stime,etime,args $ ps -A -opid,stime,etime,args PID STIME EL ...

  10. PYTHON 链接 Oracle

    一.  cx_Oracle Python 连接Oracle 数据库,需要使用cx_Oracle 包. 该包的下载地址:http://cx-Oracle.sourceforge.net/ 下载的时候,注 ...