用户工具

站点工具


gpio输入实验_识别按键输入

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
gpio输入实验_识别按键输入 [2020/07/02 11:22]
zgf [四、 代码讲解]
gpio输入实验_识别按键输入 [2022/03/22 10:27] (当前版本)
sean
行 1: 行 1:
 +
 +|  **银杏科技有限公司旗下技术文档发布平台** ​ ||||
 +|技术支持电话|**0379-69926675-801**|||
 +|技术支持邮件|Gingko@vip.163.com|||
 +^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^
 +|  V1.0  |  2020-07-01 ​ |  gingko ​ |  初次建立 ​ | 
 +
 +
 ===== 实验二:GPIO输入实验——识别按键输入 ===== ===== 实验二:GPIO输入实验——识别按键输入 =====
 ==== 一、 实验目的与意义 ==== ==== 一、 实验目的与意义 ====
行 8: 行 16:
 ==== 二、 实验设备及平台 ==== ==== 二、 实验设备及平台 ====
  
-  - iCore4 双核心板。 +  - iCore4 双核心板[[https://​item.taobao.com/​item.htm?​spm=a1z10.1-c-s.w4004-22598974120.15.5923532fsFrHiE&​id=551864196684|点击购买]]。 
-  - Blaster(或相同功能)仿真器。+  - Blaster(或相同功能)仿真器[[https://​item.taobao.com/​item.htm?​id=554869837940|点击购买]]
   - Micro USB线缆。   - Micro USB线缆。
   - QuartusII开发平台。   - QuartusII开发平台。
行 15: 行 23:
 ==== 三、 实验原理 ==== ==== 三、 实验原理 ====
   * FPGA的所有I/​O控制块允许每个I/​O引脚单独配置为输入口,不过这种配置是系统自动完成的。当I/​O口被设置为输入口使用时,该I/​O将直接使三态缓冲区的控制端接地,使得该I/​O对外呈高阻态,这样该I/​O引脚即可作为输入引脚使用。正确分配并锁定引脚后,一旦按键有变化,即可在检测到按键输入的情况下切换LED的状态。驱动示意图如下:   * FPGA的所有I/​O控制块允许每个I/​O引脚单独配置为输入口,不过这种配置是系统自动完成的。当I/​O口被设置为输入口使用时,该I/​O将直接使三态缓冲区的控制端接地,使得该I/​O对外呈高阻态,这样该I/​O引脚即可作为输入引脚使用。正确分配并锁定引脚后,一旦按键有变化,即可在检测到按键输入的情况下切换LED的状态。驱动示意图如下:
- +{{ :​icore4:​icore4_fpga_2_1.png?​direct |图2-1}}
-  +
-图2-1 +
 ==== 四、 代码讲解 ==== ==== 四、 代码讲解 ====
  
行 26: 行 31:
     - 按键控制模块:实现按键切换led的功能。     - 按键控制模块:实现按键切换led的功能。
   * 如图2-2所示为本例程三个模块在QuartusII界面中所处的位置。双击即可打开对应的模块。   * 如图2-2所示为本例程三个模块在QuartusII界面中所处的位置。双击即可打开对应的模块。
- +{{ :​icore4:​icore4_fpga_2_2.png?​direct |图2-2}}
-  +
-图2-2 +
 1、顶层模块代码讲解: 1、顶层模块代码讲解:
 <code verilog> <code verilog>
行 74: 行 76:
 always@(posedge clk_25m) always@(posedge clk_25m)
  if(cnt_rst == 4'd15)  if(cnt_rst == 4'd15)
- begin+     ​begin
  cnt_rst <= 4'd15;  cnt_rst <= 4'd15;
  rst_r <= 1'd1;  rst_r <= 1'd1;
- end+     ​end
  else cnt_rst <= cnt_rst + 1'd1;  else cnt_rst <= cnt_rst + 1'd1;
  
行 89: 行 91:
 always @(posedge clk_25m or negedge rst_n)  always @(posedge clk_25m or negedge rst_n)
  if (!rst_n)  if (!rst_n)
- begin +     ​begin 
- key_r <= 1'​d0;​ + key_r <= 1'​d0;​ 
- low_cnt <= 18'​d0;​ + low_cnt <= 18'​d0;​ 
- hig_cnt <= 18'​d0;​ + hig_cnt <= 18'​d0;​ 
- end+     ​end
 //​----------检测按键状态为高时,延时10ms,把按键状态提取出来 ------// //​----------检测按键状态为高时,延时10ms,把按键状态提取出来 ------//
  else if(key)   else if(key)
  begin  begin
- low_cnt <= 18'​d0;​ +     ​low_cnt <= 18'​d0;​ 
- if (hig_cnt == ms_10) +     ​if (hig_cnt == ms_10) 
- begin + begin 
- key_r <= key; +     ​key_r <= key; 
- hig_cnt <= hig_cnt; +     ​hig_cnt <= hig_cnt; 
- end + end 
- else hig_cnt <= hig_cnt + 1'd1;+     ​else hig_cnt <= hig_cnt + 1'd1;
  end  end
  
行 111: 行 113:
 always@(negedge key_state or negedge rst_n)  always@(negedge key_state or negedge rst_n)
  if (!rst_n)  if (!rst_n)
- begin +     ​begin 
- led_cnt <= 2'​d0;​ + led_cnt <= 2'​d0;​ 
- end+     ​end
  else if (led_cnt == 2'd2)  else if (led_cnt == 2'd2)
  begin  begin
- led_cnt <= 2'd0;+     ​led_cnt <= 2'd0;
  end  end
  else led_cnt <= led_cnt + 1'd1;  else led_cnt <= led_cnt + 1'd1;
行 124: 行 126:
 //----- led_cnt=0,红灯亮,led_cnt=1,绿灯亮led_cnt=2,蓝灯亮----//​ //----- led_cnt=0,红灯亮,led_cnt=1,绿灯亮led_cnt=2,蓝灯亮----//​
  else case(led_cnt) ​              else case(led_cnt) ​            
- 2'​d0:​  +         ​2'​d0:​  
- begin +     ​begin 
- ledr <= 1'​d0;​ +         ​ledr <= 1'​d0;​ 
- ledg <= 1'​d1;​ +         ​ledg <= 1'​d1;​ 
- ledb <= 1'​d1;​ +         ​ledb <= 1'​d1;​ 
- end +     ​end 
- 2'​d1:​  + 2'​d1:​  
- begin +     ​begin 
- ledr <= 1'​d1;​ +         ​ledr <= 1'​d1;​ 
- ledg <= 1'​d0;​ +         ​ledg <= 1'​d0;​ 
- ledb <= 1'​d1;​ +         ​ledb <= 1'​d1;​ 
- end +     ​end 
- 2'​d2:​  + 2'​d2:​  
- begin +     ​begin 
- ledr <= 1'​d1;​ +         ​ledr <= 1'​d1;​ 
- ledg <= 1'​d1;​ +         ​ledg <= 1'​d1;​ 
- ledb <= 1'​d0;​ +         ​ledb <= 1'​d0;​ 
- end+     ​end
 </​code>​ </​code>​
 ==== 五、 实验验证 ==== ==== 五、 实验验证 ====
- +{{ :​icore4:​icore4_fpga_2_3.png?​direct |图2-3}}
-图2-3+
   - 双击打开例程里的QuartusII工程文件,如图2-3所示。   - 双击打开例程里的QuartusII工程文件,如图2-3所示。
   - 按照前面实验指导书所讲,对该工程文件进行相关配置,编译及引脚锁定后(例程里已经配置好),将配置文件下载至icore4双核心工控板观察实验现象。   - 按照前面实验指导书所讲,对该工程文件进行相关配置,编译及引脚锁定后(例程里已经配置好),将配置文件下载至icore4双核心工控板观察实验现象。
gpio输入实验_识别按键输入.1593660178.txt.gz · 最后更改: 2020/07/02 11:22 由 zgf