uart启示1_task的写法
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的写法的更多相关文章
- uart启示2_异步操作的bug
发现代码中的隐藏bug真的是一件令人振奋的事情,当然也会疲倦那么一下午! 这个bug只有在一种在一个2604计数周期的一种情况下发生,所以即使是大量的仿真,未必也会发现的了,只有在以后的设计过程中,遇 ...
- obj.style.z-index的正确写法
obj.style.z-index的正确写法 今天发现obj.style.z-index在js里面报错,后来才知道在js里应该把含"-"的字符写成驼峰式,例如obj.style.z ...
- java设计模式之单例模式(几种写法及比较)
概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...
- .NET跨平台之旅:数据库连接字符串写法引发的问题
最近在一个ASP.NET Core站点中遇到一个奇怪问题.当用dotnet run命令启动站点后,开始的一段时间请求执行速度超慢,有时要超过20秒,有时甚至超过1分钟,日志中会记录这样的错误: Sys ...
- [Intel Edison开发板] 05、Edison开发基于MRAA实现IO控制,特别是UART通信
一.前言 下面是本系列文章的前几篇: [Intel Edison开发板] 01.Edison开发板性能简述 [Intel Edison开发板] 02.Edison开发板入门 [Intel Edison ...
- 【兼容写法】HttpServerUtility.Execute 在等待异步操作完成时被阻止。关键词:MVC,分部视图,异步
异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html MVC6之前的版本,对分部视图的异步支持不是很好 问题: 视图里面有分布视图:@{ ...
- 常用原生JS方法总结(兼容性写法)
经常会用到原生JS来写前端...但是原生JS的一些方法在适应各个浏览器的时候写法有的也不怎么一样的... 今天下班有点累... 就来总结一下简单的东西吧…… 备注:一下的方法都是包裹在一个EventU ...
- touchstart,touchmove,touchend事件 写法
jQuery写法: $('#id').on('touchstart',function(e) { var _touch = e.originalEvent.targetTouches[0]; var ...
- 前端导出Excel兼容写法
今天整理出在Web前端导出Excel的写法,写了一个工具类,对各个浏览器进行了兼容. 首先,导出的数据来源可能有两种: 1. 页面的HTML内容(一般是table) 2. 纯数据 PS:不同的数据源, ...
随机推荐
- Scipy学习笔记 矩阵计算
Scipy学习笔记 非本人原创 原链接 http://blog.sina.com.cn/s/blog_70586e000100moen.html 1.逆矩阵的求解 >>>impor ...
- NET出现频率非常高的笔试题
又到了金三银四的跳槽季,许多朋友又开始跳槽了,这里我简单整理了一些出现频率比较高的.NET笔试题,希望对广大求职者有所帮助. 一..net基础 1. a=10,b=15,请在不使用第三方变量的情况下 ...
- EasyUI之加载js文件顺序
在使用EasyUI时,需要引用EasyUI框架的js文件,要注意加载的顺序,jquery.min.js一定要第一个被加载.
- JDK动态代理与CGLib动态代理
1.JDK动态代理 JDK1.3以后java提供了动态代理技术,允许开发者在运行期创建接口的代理实例,动态代理是实现AOP的绝好底层技术. JDK的动态代理主要涉及到java.lang.reflect ...
- JSTL标签库的使用
首先是四大标签库 核心 标签库 <%@ taglib uri="http://java.sun.com/jsp/jstl/core"%> 格式标签库 <%@ ta ...
- js对象的深度克隆
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SQL Server 在数据库中查找字符串(不知道表名的情况下 查找字符串)
declare @key varchar(30)set @key = '广州' --替换为要查找的字符串DECLARE @tabName VARCHAR(40),@colName VARCHAR(40 ...
- html页面3秒后自动跳转的方法有哪些
在进行web前端开发实战练习时,我们常常遇到一种问题就是,web前端开发应该如何实现页面N秒之后自动跳转呢?通过查找相关html教程,总结了3个方法: 方法1: 最简单的一种:直接在前面<hea ...
- 【zz】matlab 直方图匹配
原文地址:http://www.cnblogs.com/tiandsp/archive/2012/12/19/2825418.html 直方图匹配或叫做直方图规定化都可以,是把原图像的直方图按照给定的 ...
- 如何布局包含Image和Title的UIButton
UIButton中的titleEdgeInsets和imageEdgeInsets可以管理button中image和title的布局.如果对其理解不够深入,用纯数字进行布局管理,经过不断的调试,还是能 ...