【实习】FPGA公司第二天(Cadence绘制原理图、按键去抖FPGA)

文章介绍了使用CADENCE软件绘制STM32F767IGT6芯片的原理图,并探讨了FPGA中的按键消抖问题,提出了基于软件消抖的FPGA设计,通过状态机实现10ms的延时检测,有效避免按键抖动影响系统稳定性。
摘要由CSDN通过智能技术生成

2022.3.15 工作记录 上班第二天

1.用cadence绘制原理图

STM32F767IGT6
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

**原理图绘制方法:**根据对应芯片手册datasheet查找对应的引脚如何接入电路,比如:
ALLDATASHEET.com上有很多手册,例如找SiT9121芯片
在这里插入图片描述

看出SiT9121使用LVDS协议电路图如下,参考这个电路进设计。
Si

2.FPGA按键消抖

按键的消抖,是指按键在闭合或松开的瞬间伴随着一连串的抖动,这样的抖动将直接影响设计系统的稳定性,降低响应灵敏度。因此,必须对抖动进行处理,即消除抖动的影响。实际工程中,有很多消抖方案,如 RS 触发器消抖,电容充放电消抖,软件消抖。本章利用 FPGA 内部来设计消抖,即采取软件消抖。
按键的机械特性,决定着按键的抖动时间,一般抖动时间在 5ms~10ms。消抖,也意味着,每次在按键闭合或松开期间,跳过这段抖动时间,再检测按键的状态。只要通过简单的延时就可实现按键的消抖动。
![在这里插入图片描述](https://img-blog.csdnimg.cn/fa51a941be6c473681dc40893d3af2fe.png

module key #
(
	parameter CLK_FREQ = 100000000
)
(
	input clk_i, 
	input key_i, 
	output key_cap
);
//10ms 
parameter CNT_10MS = (CLK_FREQ/100 - 1'b1);
parameter KEY_S0 = 2'd0;
parameter KEY_S1 = 2'd1;
parameter KEY_S2 = 2'd2;
parameter KEY_S3 = 2'd3; 

reg [24:0] cnt10ms = 25'd0;
(*mark_debug = "true"*) reg [1:0] key_s = 2'b0;
(*mark_debug = "true"*) reg [1:0] key_s_r = 2'b0;
(*mark_debug = "true"*) wire en_10ms ; assign en_10ms = (cnt10ms == CNT_10MS);	
	assign key_cap = (key_s==KEY_S2)&&(key_s_r==KEY_S1); 
always @(posedge clk_i)begin
	if(cnt10ms < CNT_10MS)
		cnt10ms <= cnt10ms + 1'b1; 
	else
		cnt10ms <= 25'd0; 
	end
	
always @(posedge clk_i)begin
	key_s_r <= key_s;
 end
 
always @(posedge clk_i)begin
	if(en_10ms)begin
		case(key_s)
			KEY_S0:begin
				if(!key_i)
					key_s <= KEY_S1;					
			end
			KEY_S1:begin
				if(!key_i)
					key_s <= KEY_S2; 
				else
					key_s <= KEY_S0;
			end
			KEY_S2:begin
				if(key_i)
					key_s <= KEY_S3;
			end
			KEY_S3:begin
				if(key_i)
					key_s <= KEY_S0; 
				else
					key_s <= KEY_S2; 
			end
		endcase
	end
end
endmodule

KEY_S0:判断按键是否按下,如果是,转移到状态 KEY_S1;
KEY_S1:10ms 后再次判断按键是否按下,如果是,转移状态到 KEY_S2,否则继续回到 KEY_S0;
KEY_S2:判断按键是否抬起,如果是,转移状态到 KEY_S3
KEY_S3:10ms 后再次判断按键是否抬起,如果是,转移状态到 KEY_S0,否则继续回到 KEY_S2;
当状态从 KEY_S1 转到 KEY_S2 代表依次按钮按下 key_cap 输出一次高电平。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值