关于FPGA(verilog)电平检测模块的易错点分析

来源:本站
导读:目前正在解读《关于FPGA(verilog)电平检测模块的易错点分析》的相关信息,《关于FPGA(verilog)电平检测模块的易错点分析》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《关于FPGA(verilog)电平检测模块的易错点分析》的详细说明。
简介:如果我们写测试文件(产生激励信号)时,不清楚应该个输入赋什么值的时候,这样写就是一个不错的选择。

reg F1,F2; // F2 Previous State,   F1 Current  State    always@(posedge CLK or negedge RSTn)        if(!RSTn)            begin                F1<=1'b0;//(注意复位时F1;F2都是等于0的!)                F2<=1'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<=1'b1;(注意复位时F1;F2都是等于1的!)                F2<=1'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)电平检测模块的易错点分析》最后刷新时间 2024-03-14 01:09:02,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《关于FPGA(verilog)电平检测模块的易错点分析》该内容的真实性请自行鉴别。