首页 » 互联网 » FPGA逻辑部分Verilog实验-按键检测(脉冲边沿检测法)_边缘_脉冲

FPGA逻辑部分Verilog实验-按键检测(脉冲边沿检测法)_边缘_脉冲

神尊大人 2024-12-21 19:52:12 0

扫一扫用手机浏览

文章目录 [+]

内容:回顾FPGA逻辑部分Verilog实验---按键检测(脉冲边沿检测法);

来源:实际得出;

FPGA逻辑部分Verilog实验-按键检测(脉冲边沿检测法)_边缘_脉冲 FPGA逻辑部分Verilog实验-按键检测(脉冲边沿检测法)_边缘_脉冲 互联网

浸染:回顾FPGA逻辑部分Verilog实验--按键检测(脉冲边沿检测法);

FPGA逻辑部分Verilog实验-按键检测(脉冲边沿检测法)_边缘_脉冲 FPGA逻辑部分Verilog实验-按键检测(脉冲边沿检测法)_边缘_脉冲 互联网
(图片来自网络侵删)

仿真环境:Quartus II 11.0;

日期:2019-04-23;

=====================分割线========================

立题详解:

本次回顾FPGA逻辑部分Verilog实验--按键检测(脉冲边沿检测法),利用“FPGA芯片”为“EP4CE6E22C8”,价格约“15.00RMB/PCS”,“LEs数目”约为“6272”;

本次先容为“与非门”,代码实测可用,简介如下:

i)、“开拓环境”:环境为“Quartus II 11.0”;

ii)、FPGA芯片:芯片为“EP4CE6E22C8”,价格约“15.00RMB/PCS”,“LEs数目”约为“6272”;

1、“按键实验”实际先容

对“按键检测”代码而言,有2种方法(FPGA为硬件描述,无直接的延时描述):

i)、“普通检测法”:直接读取“输入按键”的电平状态,很难消抖,误判概率很高;

ii)、“脉冲边沿检测法”:读取“输入按键”的电平状态,并添加“延时消抖剖断”,可有效减少误触发的概率;

本次利用“脉冲边沿检测法”来做;

2、脉冲边沿检测法-代码

对“脉冲边沿检测法”而言,其核心分为“4点”:

i)、“第一次检测”:即“第一次涌现边沿变革”,此时会获取“第一次触发值”;

ii)、“中间消抖”:即从“第一次涌现边沿变革”开始,进行延时,建议时长为“20ms旁边”;

iii)、“第二次检测”:即延时后,检测“边沿变革是否依旧存在”,并所存“键值”,个中的“键值”为“非零值”;

iv)、“电平实行部分”:即“得到键值”后的动作函数;

首先,第一次检测代码:

reg[1:0] key_rst;

reg[1:0] key_rst_r;

wire[1:0] key_an;

always @(posedge clk or negedge rst_n)

begin

if(!rst_n)key_rst <= 2'b11;

else

key_rst <= {key2_n,key1_n};

end

always @(posedge clk or negedge rst_n)

begin

if(!rst_n)key_rst_r <= 2'b11;

else

key_rst_r <= key_rst;

end

assign key_an = key_rst_r & (~key_rst);

然后,延时期码:

reg[20:0] delay_20ms;

always @(posedge clk or negedge rst_n)

begin

if(!rst_n)delay_20ms <= 21'd0;

else if(key_an)

delay_20ms <= 21'd0;

else

delay_20ms <= delay_20ms + 1;

end

然后,所存代码:

reg[1:0] low_sw;

reg[1:0] low_sw_r;

wire[1:0] led_ctrl;

always @(posedge clk or negedge rst_n)

begin

if(!rst_n)low_sw <= 2'b11;

else if(delay_20ms == 21'hffff)

low_sw <= {key2_n,key1_n};

end

always @(posedge clk or negedge rst_n)

begin

if(!rst_n)low_sw_r <= 2'b11;

else

low_sw_r <= low_sw;

end

assign led_ctrl = low_sw_r & (~low_sw);

特殊把稳:“delay_20ms == 21'hffff”的“延时剖断”,如下所示:

末了,动作代码:

reg d1;

reg d2;

always @(posedge clk or negedge rst_n)

if(!rst_n) begin

d1 <= 1'b0;

d2 <= 1'b0;

end

else begin

if(led_ctrl[0]) d1 <= ~d1;

if(led_ctrl[1]) d2 <= ~d2;

end

assign led1 = d1 ? 1'b1:1'b0;

assign led2 = d2 ? 1'b1:1'b0;

把稳:“ d1 <= ~d1”为“取反”;“led1 = d1 ? 1'b1:1'b0”为“掌握输出”;

如下图所示:

3、脉冲边沿检测法-RTL级和引脚分配

RTL级截图如下:

引脚分配如下:

相关文章

PWM之MOS管推动_电路_暗记

PWM MOS管驱动实际是将PWM旗子暗记经由MOS进行功率放大,将PWM旗子暗记变成具备一定功率输出或有一定电流注意灌输能力的P...

互联网 2024-12-23 阅读0 评论0