我是靠谱客的博主 坚强身影,最近开发中收集的这篇文章主要介绍FPGA(九)---异步信号亚稳态处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、基本原理

在这里插入图片描述

1、时钟信号只在上升沿起作用,异步信号输入时会有个亚稳态(抖动)的过程。
2、时钟信号采样会出现两种情况:异步信号1和异步信号2。对于异步信号1,时钟能够采样到稳定信号,没有任何影响;但是,我们不能确定每次都是刚好采样到稳定时候,例如异步信号2。
3、因此要对异步信号进行处理,通常的做法是:将异步信号连接2级寄存器q和q1,进行两个周期的时延,以获得稳定信号。
4、2级寄存器的输出是个稳定的值(可能是0或1)。

二、对FPGA(八)中key_in进行优化。

与(八)中的边沿检测,代码相同,意义不同。
//通过2级寄存器,消除异步信号的亚稳态
always@(posedge Clk or negedge Rst_n)
if(!Rst_n)begin
key_in_a0 <= 1’b0;
key_in_a1 <= 1’b0;
end
else begin
key_in_a0 <= key_in;
key_in_a1 <= key_in_a0;
end
注意:
1、由于用key_in_a0 和key_in_a1 进行表示,因此在RTL viewer中不能明显看出2级寄存器。改成key_in_sa和key_in_sb就能看到。
2、由于2级寄存器进行亚稳态处理,2级寄存器进行边沿检测,也就是输入的信号经过四个时钟周期之后才输出,对于按键来说没什么影响。但如果系统时钟是100Mhz(周期10ns),输入信号小于25Mhz(周期40ns)那么就会出现:当输入信号是第1个时钟(第0ns)的值时,经过4个系统时钟延时,来到了第40ns,这时下一个输入信号来临,同时第一个信号进行输出。结果我们看到的就是下一时刻的输入对应上一时刻的输出。如何解决?
3、除了提到的寄存器时延造成这种问题之外,当输入信号的时钟大于系统时钟的时候:比如一个系统时钟内,有2个信号周期的来临,但是就只能采样到一个。

三、控制led

在这里插入图片描述
**实验现象:**每次按下按键0,4个led灯以二进制格式加1,每次按下按键1,4个led灯以二进制格式减1。

最后

以上就是坚强身影为你收集整理的FPGA(九)---异步信号亚稳态处理的全部内容,希望文章能够帮你解决FPGA(九)---异步信号亚稳态处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部