FPGA实战篇(按键控制LDE实验)

1.按键简介
按键开关是一种电子开关,属于电子元器件类。我们的开发板上有两种按键开关:第一种是本实验所使用的轻触式按键开关,简称轻触开关。使用时以向开关的操作方向施加压力使内部电路闭合接通,当撤销压力时开关断开,其内部结构是靠金属弹片受力后发生形变来实现通断的;第二种是自锁按键 ,自锁按键第一次按下后保持接通,即自锁,第二次按下后,开关断开,同时开关按钮 弹出来,开发板上的电源键就是这种开关。

2.实验任务
本节实验任务是使用底板上的 PL_KEY0 和 PL_KEY1 按键来控制底板上的 PL_LED0 和 PL_LED1 两个LED 的闪烁方式。没有按键按下时,两个 LED 保持常亮;如果按键 0 按下,则两个 LED 交替闪烁;如果按键 1 按下,则两个 LED 同时闪烁。
3. 硬件设计
底板上按键的原理图如下图所示:

PL 端的按键没有按下时,对应的 IO 端口为高电平;当按键按下时,对应的 IO 端口变为低电平。
本实验的管脚分配如下表所示:


4.程序设计
按键控制 LED 系统框图如下图所示:

计数器对 50MHz 时钟进行计数,从而达到计时的目的。计数器在每次计时到 0.5 秒的时候,就改变 LED 的显示状态,然后清零并重新开始计数。
然后根据两个按键(KEY0 和 KEY1 )的状态,在不同的 LED 状态下,分别设置 LED 的显示模式(是同时闪烁,或者交替闪烁)。
顶层模块代码如下:

python 复制代码
1 module key_led(
2 input sys_clk ,
3 input sys_rst_n ,
4 
5 input [1:0] key ,
6 output reg [1:0] led
7 );
8 
9 //reg define
10 reg [24:0] cnt;
11 reg led_ctrl;
12 
13 //*****************************************************
14 //** main code
15 //*****************************************************
16 
17 //计数器
18 always @ (posedge sys_clk or negedge sys_rst_n) begin
19 if(!sys_rst_n)
20 cnt <= 25'd0;
21 else if(cnt < 25'd2500_0000) //计数 500ms
22 cnt <= cnt + 1'b1;
23 else
24 cnt <= 25'd0;
25 end
26 
27 //每隔 500ms 就更改 LED 的闪烁状态
28 always @ (posedge sys_clk or negedge sys_rst_n) begin
29 if(!sys_rst_n)
30 led_ctrl <= 1'b0;
31 else if(cnt == 25'd2500_0000)
32 led_ctrl <= ~led_ctrl;
33 end
34 
35 //根据按键的状态以及 LED 的闪烁状态来赋值 LED
36 always @ (posedge sys_clk or negedge sys_rst_n) begin
37 if(!sys_rst_n)
38 led <= 2'b11;
39 else case(key)
40 2'b10 : //如果按键 0 按下,则两个 LED 交替闪烁
41 if(led_ctrl == 1'b0)
42 led <= 2'b01;
43 else
44 led <= 2'b10;
45 2'b01 : //如果按键 1 按下,则两个 LED 同时闪烁
46 if(led_ctrl == 1'b0)
47 led <= 2'b11;
48 else
49 led <= 2'b00;
50 2'b11 : //如果两个按键都未按下,则两个 LED 都保持点亮
51 led <= 2'b11;
52 default: ;
53 endcase
54 end
55 
56 endmodule

代码的第 18 行的 always 块用于产生计数器,计时 500ms 。代码的第 28 行的 always 块功能是每隔 500ms就给出 led 的闪烁状态控制信号。代码第 36 行的 always 块使用了一个 case 语句,来根据当前按键的输入值和 led 闪烁状态控制信号,来进行两个 led 的赋值。如果按键 1 按下,则两个 LED 交替闪烁;如果按键 0按下,则两个 LED 同时亮灭交替;如果两个按键都未按下,则两个 LED 都保持点亮。
5.下载验证
连接开发板的电源和下载器,并打开电源开关。在工程编译之后,将生成的 bit 文件下载到开发板中。 下载完成之后,底板上两个 PL LED 处于点亮状态。然后按下 PL_KEY0 ,可以看到两个 PL LED 交替闪烁; 按下 PL_KEY1 ,可以看到两个 PL 的 LED 同时闪烁。如下图所示:

由于上篇文章已经详细的给出了创建工程的步骤,本文章不再重复概述。
注意:
1.代码中,led之所以定义为reg变量,是因为要在时序逻辑中赋值,不然就只能用assign来赋值,比较麻烦
2.指定管脚既可以用图形化界面,如上篇文章,也可以直接编写文件。在该处右键,选择增加新文件,再选择约束文件。创建完文件后,打开该文件,在文件中编写约束代码。

相关推荐
北京青翼科技10 小时前
青翼基于PCIe总线架构的4路HD-SDI/3G-SDI视频图像模拟源丨图像处理
fpga开发·图像模拟源·fpga开发板·pcie板卡
涛tao讲道14 小时前
星载FPGA选型与抗辐射设计手册
fpga开发·抗单粒子翻转·涛tao悟道·涛的天道观·seu
艾芯微科技14 小时前
钰泰 ETA6973PQ3Y|QFN3×3 2A 同步降压 Buck,I2C 可配置多档输出,动态调压 PMIC
网络·单片机·嵌入式硬件·fpga开发·集成测试·51单片机
NamoAmitabha12814 小时前
lwIP 问答---deepseek
fpga开发
吉他英雄一里14 小时前
时钟IP核(MMCM PLL)
fpga开发
星夜离尘5615 小时前
FPGA实现CRC-8/SMBUS:从参数和位序核对到1041次自检
fpga开发·verilog·fpga·crc
匠行科技1 天前
6U‑VPX 高密度异构处理板硬件方案实践
fpga开发·硬件工程
努力搬砖的小H1 天前
FPGA应用技巧之AXI4-FULL-uiFDMA IP仿真验证
经验分享·fpga开发·axi
hexiaoyan8272 天前
高速图像采集卡处理板卡设计原理图:10-基于TMS320C6678+XC7K325T的6U CPCI Full Camera Link图像处理平台
fpga开发·高速图像采集·图像采集卡·c6678板卡
szxinmai主板定制专家2 天前
储能EMS + 协调控制器实战:RK3568/3576/3588+FPGA+AI 故障录波与诊断
人工智能·深度学习·机器学习·fpga开发·rk3588·rk3576·协调控制器