【FPGA学习笔记04】获取信号上升沿和下降沿

本文介绍了利用FPGA技术通过信号延迟和逻辑操作检测上升沿和下降沿的方法,以及如何处理亚稳态问题,以触摸按键为例给出了改进的代码实现。
摘要由CSDN通过智能技术生成

具体见正点原子《达芬奇peo之FPGA开发指南v2.1》第十九章

1.主要思想

将信号延迟后获得的延迟信号与原信号做与非操作,即可获取上升沿或下降沿信号。
记原信号为raw_data,延迟信号为raw_data_d0
raw_data & (~raw_data_d0)的值为1时,即为上升沿信号
(~raw_data) & raw_data_d0的值为1时,即为下降沿信号
图解如下图所示:
(1)图示
在这里插入图片描述
上升沿是指信号会由0跳变到1的信号。
由此可知,在第一个节拍获取时,是高电平(1);延迟一个节拍获取后,可以获得它跳变前的状态,即低电平(0)。
将延迟信号取反,得1。
将延迟信号与原信号做与操作(1 & 1),得1,即为上升沿。
由表格可以更好看出:

信号名称信号状态
原信号(raw_data)上升沿(用1表示)
延迟信号(raw_data_d0)0
取反后的延迟信号(~raw_data_d0)1
获得的标志信号(posedge)1

如果获取的不是上升沿,是中间的那段信号(高电平,一直保持1),则对其延迟一拍,它还是1。对延迟信号取反,结果为0。延迟信号与原信号进行与操作(0 & 0),结果为0。

同理,如果获取的是下降沿(由1跳变到0的信号)。
在第一节拍获取的是低电平(0),延迟一个节拍后获取的是跳变前的状态高电平(1)。
将原信号取反,得1。
与原信号做与操作(1 & 1),得1。
如图所示:
在这里插入图片描述
这里是利用不同的公式获取同样的判断标准

2.改进

在采样过程中,会出现亚稳态问题,为解决该问题,需要将原信号延迟两次。
再对第一次延迟的信号和第二次延迟的信号做与非操作。
(1)什么是亚稳态问题
在数字电路中,信号只有0和1两个状态,但模拟信号不单只有这两种状态,将其转化为数字信号时,一般是人为规定区间映射的。
比如,对于物品A,规定它在2-5V时为1,0-1V时为0,则1-2V这未规定的区间就为亚稳态
(2)图示
在这里插入图片描述
(3)参考代码
以触摸按键为例。

//reg define
reg touch_key_d0; //延迟第一次获得的信号
reg raw_data_d1; //延迟第二次获得的信号

//wire define
wire touch_en; //最终判断标志

//判断上升沿
assign touch_en = touch_key_d0 & (~touch_key_d1);

//获取延迟信号
always @(posedge sys_clk or negedge sys_rst_n) begin
	if(!sys_rst_n) begin
		touch_key_d0 <= 1'b0;
		touch_key_d1 <= 1'b0;
	end
	else begin
		touch_key_d0 <= touch_key;
		touch_key_d1 <= touch_key_d0;
	end
end

①时刻记住FPGA并行的思想,判断上升沿和获取延迟信号是在同一节拍进行;
②想判断哪个(上升沿还是下降沿)带公式即可。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值