reg F1,F2; // F2 Previous State,   F1 Current  State
always@(posedge CLK or negedge RSTn)
if(!RSTn)
begin
F1<='b0;//(注意复位时F1;F2都是等于0的!)
F2<='b0;
end
else
begin
F1<= A;
F2<= F1;
end wire Aup = F1 & !F2;
wire Adown = F2 & !F1;

这个模块可以用来检测A输入口的“上跳变”以及“下跳变”
现在,开始分析:
1、假设:A的默认值,也就是初始值为0;
     第一个时钟来临时,F1=0;F2=0;所以Aup = 0 & 1 = 0;Adown = 0 & 1 =0;的这完全没有问题。

2、假设:A的默认值,也就是初始值为1;
     第一个时钟来临时,F1=1;F2=0;所以Aup = 1 & 1 = 1;Adown = 0 & 0 =0;
这个时候就有问题了,本来在第一个时钟A是没有发生变化的,但是Aup却等于1,被认为有一个上跳变。
这就是,检测模块要注意的问题。这种问题会导致,你发现计数时问什么会“无缘无故”多一个。问题就在这里。

这个问题如何预防呢?首先我们必须搞清楚,我们所检测的这个引脚是默认0还是1.如果是1的话我们应该这么写。

 reg F1,F2; // F2 Previous State,   F1 Current  State
always@(posedge CLK or negedge RSTn)
if(!RSTn)
begin
F1<='b1;(注意复位时F1;F2都是等于1的!)
F2<='b1;
end
else
begin
F1<= A;
F2<= F1;
end wire Aup = F1 & !F2;
wire Adown = F2 & !F1;

第一个时钟来临时,F1=1;F2=1;所以Aup = 1 & 0 = 0;Adown = 1 & 0 =0;的这样就没有问题了。

总结:这个检测模块容易出问题的地方就是在第一个时钟的时候,但是如果搞清楚检测引脚的初始状态,我们根据这个状态来选择这个模块的写法就不会出问题。
      当然如果这个检测引脚既不是高电平也不是低电平,也就是高组态。那么两种写法都可以
咯。因此,我们反方思维一下,如果我们写测试文件(产生激励信号)时,不清楚应该个输入赋什么值的时候,
这样写就是一个不错的选择——A <= 1'bz;(将输入设为不确定状态)。

关于FPGA(verilog)电平检测模块的易错点分析的更多相关文章

  1. [课堂实践与项目]NavigationController与TabBarController的综合使用及易错点分析(包含消息提醒,app更新)

    陈述:我们在使用tabbarController的时候,我们总会和NavagationController联合起来.但是不联合的时候又是什么样的一种pool的情况呢?我们就单单的 TabBarCont ...

  2. Java易错知识点(1) - 关于ArrayList移除元素后剩下的元素会立即重排

    帮一个网友解答问题时,发现这样一个易错知识点,现总结如下: 1.易错点: ArrayList移除元素后,剩下的元素会立即重排,他的 size() 也会立即减小,在循环过程中容易出错.(拓展:延伸到所有 ...

  3. 关于Verilog HDL的一些技巧、易错、易忘点(不定期更新)

    本文记录一些关于Verilog HDL的一些技巧.易错.易忘点等(主要是语法上),一方面是方便自己忘记语法时进行查阅翻看,另一方面是分享给大家,如果有错的话,希望大家能够评论指出. 关键词: ·技巧篇 ...

  4. 基于FPGA的VGA可移植模块终极设计【转】

    本文转载自:http://www.cnblogs.com/lueguo/p/3373643.html 略过天涯   基于FPGA的VGA可移植模块终极设计 一.VGA的诱惑 首先,VGA的驱动,这事, ...

  5. [FPGA]Verilog 60s秒表计时器(最大可计时间长达9min)

    [FPGA]Verilog 60s秒表计时器 1.引述 这次的实验来自于本人本科课程数电结课时的自选题目.由于这次上传是后知后觉,学校已将小脚丫板子回收,所以在这篇文章中没法贴出代码结果的效果图了,但 ...

  6. STC8H开发(六): SPI驱动ADXL345三轴加速度检测模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  7. FPGA Verilog HDL 系列实例--------步进电机驱动控制

    [连载] FPGA Verilog HDL 系列实例 Verilog HDL 之 步进电机驱动控制 步进电机的用途还是非常广泛的,目前打印机,绘图仪,机器人等等设备都以步进电机为动力核心.那么,下面我 ...

  8. Nginx 反向代理、后端检测模块

    简介: Nginx 反向代理模块:ngx_http_proxy_module.ngx_http_upstream_module 后端检测模块:nginx_http_upstream_check_mod ...

  9. 一个基于深度学习回环检测模块的简单双目 SLAM 系统

    转载请注明出处,谢谢 原创作者:Mingrui 原创链接:https://www.cnblogs.com/MingruiYu/p/12634631.html 写在前面 最近在搞本科毕设,关于基于深度学 ...

随机推荐

  1. UVa532 Dungeon Master 三维迷宫

        学习点: scanf可以自动过滤空行 搜索时要先判断是否越界(L R C),再判断其他条件是否满足 bfs搜索时可以在入口处(push时)判断是否达到目标,也可以在出口处(pop时)   #i ...

  2. 2015南阳CCPC L - Huatuo's Medicine 水题

    L - Huatuo's Medicine Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description Huatuo was a famous ...

  3. 怎样在osg中动态的设置drawable的最近最远裁剪面

    // draw callback that will tweak the far clipping plane just    // before rendering a drawable.    s ...

  4. C语言面试题大汇总

    static有什么用途?(请至少说明两种)1.限制变量的作用域2.设置变量的存储域7. 引用与指针有什么差别?1) 引用必须被初始化,指针不必.2) 引用初始化以后不能被改变,指针能够改变所指的对象. ...

  5. oc-10-函数与方法的区别

    .函数和对象方法的区别 以-开头的方法就是对象方法(即必须实例化对象才能使用的方法) 如: -(void)Run; 区别: ()语法区别,并且对象方法都以-号开头,函数直接以返回值开头 ()对象方法的 ...

  6. MYSQL分页limit速度太慢优化方法

    http://www.fienda.com/archives/110 在mysql中limit可以实现快速分页,但是如果数据到了几百万时我们的limit必须优化才能有效的合理的实现分页了,否则可能卡死 ...

  7. 高级进程间通信之基于STREAMS的管道

    基于STREAMS的管道(简称STREAMS管道,STREAMS pipe)是一个双向(全双工)管道.单个STREAMS管道就能向父.子进程提供双向的数据流. 将http://www.cnblogs. ...

  8. Qt Quick实现的疯狂算数游戏

    使用 Qt Quick 写了个小游戏:疯狂算数.支持 Windows 和 Android 两个平台. 游戏简单,但牵涉到下面你的 Qt Quick 主题: 自己实现一个按钮 自适应分辨率 国际化 QM ...

  9. Python_爬虫4

    Python爬虫入门(8):Beautiful Soup的用法 上一节我们介绍了正则表达式,它的内容其实还是蛮多的,如果一个正则匹配稍有差池,那可能程序就处在永久的循环之中,而且有的小伙伴们也对写正则 ...

  10. 小白日记43:kali渗透测试之Web渗透-SqlMap自动注入(一)-sqlmap参数详解TARGET

    SqlMap自动注入(一) sqlmap是一款非常强大的开源sql自动化注入工具,可以用来检测和利用sql注入漏洞[动态页面中get/post参数.cookie.HTTP头].它由Python语言开发 ...