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. JavaScript 闭包系列一

    一. 闭包的概念 闭包是有权访问另一个函数作用域中的变量的函数. 如下代码:根据变量作用域,函数outer中所有的局部变量对函数inner都是可见的.但是反过来不行,inner内部的局部变量对oute ...

  2. Redis并发锁控制

    为了防止用户在页面上重复点击或者同时发起多次请求,请求处理需要操作redis缓存,这个时候需要对并发边界进行并发锁控制,实现思路: 由于每个页面发起的请求带的token具备唯一性,可以将token作为 ...

  3. SAE使用心得1

    最近准备在新浪云端SAE上挂点自己的小网站,这样自己开发个什么东西别人能用.但是第一次接触SAE,遇到一些问题,记下来给大家看. 1.安装的svn版本不能高于 1.8,否则无法向SAE提交代码. 2. ...

  4. 重写equals方法

    用下面的例子来进行解释. String name; int id; @Override public boolean equals(Object otherObject) { if (this == ...

  5. 杭电ACM1001

    原题:http://acm.hdu.edu.cn/showproblem.php?pid=1001 #include <stdio.h> int main(void) { int i,n, ...

  6. iOS 判断View 是否是第一次显示

    在实现某些需求的时候会有这样的情况,页面第一次加载显示的时候需要某些操作,而以后就不需要重复执行了, 一般这种处理都放在- (void)viewDidLoad或- (id)init因为一般这两个函数除 ...

  7. 用profile分析算法性能

    在命令行输入:profile viewer 会出现如下图所示探查器: 在运行此代码的后面的输入框中输入要运行的程序,然后点击启动探查,就会自动探查. 探查结束之后,会给出每个函数的调用次数.运行时间等 ...

  8. MongoDB学习

    最近在学习,参考一线码农的教程 http://www.cnblogs.com/huangxincheng/category/355399.html

  9. cocos2d-x创建项目

    2.0之后的创建项目方法 第一步,首先 cd cocos2d-x-2.2.1/tools/project-creator/ 第二步, ./create_project.py -project Hell ...

  10. 北大poj-1005

    I Think I Need a Houseboat Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 99271   Acce ...