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. 在集群上运行caffe程序时如何避免Out of Memory

    不少同学抱怨,在集群的GPU节点上运行caffe程序时,经常出现"Out of Memory"的情况.实际上,如果我们在提交caffe程序到某个GPU节点的同时,指定该节点某个比较 ...

  2. OC基础--Property

    编译器指令: 用来告诉编译器要做什么 @property: @property是编译器的指令 告诉编译器在@interface中自动生成setter和getter的声明 @synthesize: @s ...

  3. 3D图形图像处理软件HOOPS介绍及下载

    HOOPS 3D Application Framework(以下简称HOOPS)是建立在OpenGL.Direct3D等图形编程接口之上的更高级别的应用程序框架.不仅为您提供强大的图形功能,还内嵌了 ...

  4. C++虚函数的陷阱

    首先看一段代码: class B { public: ) { std::cout << "base fun called, " << i; }; }; cl ...

  5. javafx之登陆界面的跳转

    界面布局用到的是fxml而非纯java代码,工具是javafx sence builder 账号:account 密码:password 登陆成功: 可以点击退出登陆返回到登陆页面 工程目录: pac ...

  6. android小技巧(二)

    一.如何控制Android  LED等?(设置NotificationManager的一些参数) 代码如下: final int ID_LED=19871103; NotificationManage ...

  7. iOS常用开发资源整理

    在行--专家付费咨询 杂项 App Release Checklist—iOS App发布清单. Hey Focus—帮助你专注于一个任务. Objective Cloud—Objective C A ...

  8. PHP 语法

    不过在 PHP 中,所有变量都对大小写敏感. 在下面的例子中,只有第一条语句会显示 $color 变量的值(这是因为 $color.$COLOR 以及 $coLOR 被视作三个不同的变量): 实例 & ...

  9. mysql免安装版本

    [下载MySQL 5.6.13] 从MySQL官方网站mysql.com找到MySQL Community Server 5.6.13的下载地址为http://dev.mysql.com/downlo ...

  10. vs2013源码编译zlib 1.2.8

    1.从 zlib 官网上下载 zlib最新版 1.28 的源码,解压到 zlib-1.2.8 2.使用vs2013打开vc11目录下的sln工程文件(进行单向升级) 3.修改zlibvc工程属性--& ...