0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FPGA零基礎(chǔ)學(xué)習(xí)之Vivado-按鍵使用教程

FPGA技術(shù)江湖 ? 來(lái)源:FPGA技術(shù)江湖 ? 2023-04-28 14:01 ? 次閱讀

大俠好,歡迎來(lái)到FPGA技術(shù)江湖。本系列將帶來(lái)FPGA的系統(tǒng)性學(xué)習(xí),從最基本的數(shù)字電路基礎(chǔ)開(kāi)始,最詳細(xì)操作步驟,最直白的言語(yǔ)描述,手把手的“傻瓜式”講解,讓電子、信息、通信類(lèi)專(zhuān)業(yè)學(xué)生、初入職場(chǎng)小白及打算進(jìn)階提升的職業(yè)開(kāi)發(fā)者都可以有系統(tǒng)性學(xué)習(xí)的機(jī)會(huì)。

系統(tǒng)性的掌握技術(shù)開(kāi)發(fā)以及相關(guān)要求,對(duì)個(gè)人就業(yè)以及職業(yè)發(fā)展都有著潛在的幫助,希望對(duì)大家有所幫助。本次帶來(lái)Vivado系列,按鍵的使用教程。話不多說(shuō),上貨。

按鍵的使用教程

作者:李西銳校對(duì):陸輝

按鍵是我們使用比較多的器件之一,其結(jié)構(gòu)簡(jiǎn)單,使用方便。在玩具、家電等方面有廣泛的應(yīng)用。

按鍵是一種應(yīng)用比較多的一種電子開(kāi)關(guān),在我們開(kāi)發(fā)板上有兩種按鍵開(kāi)關(guān):第一種是本章節(jié)需要講解的輕觸開(kāi)關(guān),第二種是自鎖按鍵,按鍵按下后保持自鎖狀態(tài),整個(gè)按鍵處于一直連通狀態(tài),再次按下,開(kāi)關(guān)斷開(kāi),同時(shí)開(kāi)關(guān)按鈕彈出。

本次我們實(shí)驗(yàn)任務(wù),將使用按鍵控制LED燈點(diǎn)亮,當(dāng)按鍵按下時(shí),LED燈亮,松開(kāi)熄滅。

我們的按鍵是共陰極設(shè)計(jì),電路圖如下:

9ee6e1d2-e582-11ed-ab56-dac502259ad0.png

分析電路可知,當(dāng)我們的按鍵沒(méi)有按下時(shí),F(xiàn)PGA管腳為高電平,按鍵按下,F(xiàn)PGA管腳被短路,電平為低電平。所以我們的按鍵按下為低松開(kāi)為高。那么在我們?cè)O(shè)計(jì)實(shí)驗(yàn)邏輯時(shí),可以用按鍵的低電平控制LED燈點(diǎn)亮。

9efc9b9e-e582-11ed-ab56-dac502259ad0.png

對(duì)應(yīng)的XDC約束語(yǔ)句如下:

9f06a300-e582-11ed-ab56-dac502259ad0.png

我們按鍵信號(hào)作為控制信號(hào)來(lái)使用,但是我們不能直接去使用,因?yàn)檩p觸按鍵在按下或者松開(kāi)時(shí),信號(hào)非常不穩(wěn)定,會(huì)導(dǎo)致在按鍵沒(méi)有完全按下或者松開(kāi)時(shí),信號(hào)出現(xiàn)很多的毛刺,這樣的信號(hào)不能作為我們的控制信號(hào),所以我們?cè)趯?xiě)控制邏輯之前,我們首先需要對(duì)按鍵做一下消抖處理,實(shí)現(xiàn)信號(hào)穩(wěn)定。我們處理的原理是,當(dāng)信號(hào)一直處于低電平或者高電平一段時(shí)間后,我們默認(rèn)信號(hào)處于穩(wěn)定狀態(tài),這個(gè)時(shí)間我們暫定為10ms。

接下來(lái)我們先進(jìn)行新建工程,首先點(diǎn)擊create project。

9f151f98-e582-11ed-ab56-dac502259ad0.png

然后在打開(kāi)的界面修改工程名字為key_led。

9f2d2be2-e582-11ed-ab56-dac502259ad0.png

保存位置確定后,點(diǎn)擊next。

9f3ddeec-e582-11ed-ab56-dac502259ad0.png

我們選擇RTL Project,點(diǎn)擊next。

9f47f3aa-e582-11ed-ab56-dac502259ad0.png

我們?cè)谒阉鞔翱谒阉魑覀儼遄拥?a href="http://www.ttokpm.com/v/tag/137/" target="_blank">芯片型號(hào),確定好之后點(diǎn)擊next。

9f57c852-e582-11ed-ab56-dac502259ad0.png

點(diǎn)擊Finish完成新建工程。新建完成之后,我們開(kāi)始根據(jù)前面我們所講的理論開(kāi)始寫(xiě)代碼。

9f649b72-e582-11ed-ab56-dac502259ad0.png

點(diǎn)擊上圖紅色方框的加號(hào)開(kāi)始新建代碼文件。

9f71bd52-e582-11ed-ab56-dac502259ad0.png

點(diǎn)擊next。選擇創(chuàng)建文件。

9f7fcac8-e582-11ed-ab56-dac502259ad0.png

比如我們新建頂層文件,名字為key_led。

9f8e1344-e582-11ed-ab56-dac502259ad0.png

點(diǎn)擊OK之后開(kāi)始寫(xiě)代碼,代碼內(nèi)容如下:

01  module jitter(
02      
03      input   wire        clk,
04      input   wire        rst_n,
05      input   wire        key,
06      
07      output  reg         flag
08  );
09
10      parameter t = 500_000;
11      
12      reg         [18:0]          cnt;
13      reg                         state;
14
15      always @ (posedge clk, negedge rst_n)
16      begin
17          if(rst_n == 1'b0)
18              begin
19                  cnt <= 19'd0;
20                  state <= 1'd0;
21                  flag <= 1'd1;
22              end
23          else
24              case(state)
25                  1'd0    :   begin
26                                  if(key == 1'b0)
27                                      begin
28                                          if(cnt == t - 1)
29                                              begin
30                                                  cnt <= 19'd0;
31                                                  state <= 1'd1;
32                                                  flag <= 1'b0;
33                                              end
34                                          else
35                                              begin
36                                                  cnt <= cnt + 1'b1;
37                                                  state <= 1'd0;
38                                                  flag <= 1'b1;
39                                              end
40                                      end
41                                  else
42                                      begin
43                                          cnt <= 19'd0;
44                                          state <= 1'd0;
45                                          flag <= 1'b1;
46                                      end
47                              end
48                  1'd1    :   begin
49                                  if(key == 1'b1)
50                                      begin
51                                          if(cnt == t - 1)
52                                              begin
53                                                  cnt <= 19'd0;
54                                                  state <= 1'd0;
55                                                  flag <= 1'b1;
56                                              end
57                                          else
58                                              begin
59                                                  cnt <= cnt + 1'b1;
60                                                  state <= 1'b1;
61                                                  flag <= 1'b0;
62                                              end
63                                      end
64                                  else
65                                      begin
66                                          cnt <= 19'd0;
67                                          state <= 1'b1;
68                                          flag <= 1'b0;
69                                      end
70                              end
71              endcase
72      end 
73  endmodule
74

接下來(lái)是按鍵控制LED的邏輯,當(dāng)按鍵為低電平時(shí),LED燈點(diǎn)亮。代碼如下:

01  module key_ctrl(
02      
03      input   wire            clk,
04      input   wire            rst_n,
05      input   wire            flag,
06      
07      output  reg             led
08  );
09
10      always @ (posedge clk, negedge rst_n)
11      begin
12          if(rst_n == 1'b0)
13              led <= 1'b0;
14          else if(flag == 1'b0)
15              led <= 1'b1;
16          else
17              led <= 1'b0;
18      end
19  endmodule

兩個(gè)模塊做好之后,我們?cè)陧攲游募欣幽K:

01  module key_led(
02      
03      input   wire            clk,
04      input   wire            rst_n,
05      input   wire            key,
06      
07      output  wire            led
08  );
09      
10      wire            flag;
11      
12      jitter jitter_inst(
13      
14      .clk                (clk),
15      .rst_n              (rst_n),
16      .key                (key),
17      
18      .flag               (flag)
19  );
20
21      key_ctrl key_ctrl_inst(
22      
23      .clk                (clk),
24      .rst_n              (rst_n),
25      .flag               (flag),
26      
27      .led                (led)
28  );
29      
30  endmodule

邏輯控制寫(xiě)好之后,我們做一下仿真,在仿真中,我們?yōu)榱丝焖倏吹浆F(xiàn)象,我們將參數(shù)修改的小一些。代碼如下:

01  `timescale 1ns / 1ps
02
03  module key_led_tb;
04
05      reg             clk;
06      reg             rst_n;
07      reg             key;
08      
09      wire            led;
10      
11      defparam key_led_inst.jitter_inst.t = 100;
12      
13      initial begin
14          clk = 0;
15          rst_n = 0;
16          key = 1;
17          #105;
18          rst_n = 1;
19          #1000;
20          
21          //模擬按鍵按下時(shí)的抖動(dòng)
22          key = 0;
23          #20;
24          key = 1;
25          #30;
26          key = 0;
27          #30;
28          key = 1;
29          #10;
30          key = 0;
31          
32          #5000;
33          
34          //模擬按鍵松開(kāi)時(shí)的抖動(dòng)
35          key = 1;
36          #30;
37          key = 0;
38          #30;
39          key = 1;
40          #10;
41          key = 0;
42          #50;
43          key = 1;
44          
45          #1000;
46          $stop;
47      end
48      
49      always #10 clk = ~clk;
50      
51      key_led key_led_inst(
52      
53      .clk            (clk    ),
54      .rst_n          (rst_n  ),
55      .key            (key    ),
56
57      .led            (led    )
58  );
59
60  endmodule

仿真波形:

9f993bb6-e582-11ed-ab56-dac502259ad0.png

Flag信號(hào)等效按鍵,flag拉低時(shí),LED燈為高電平,此時(shí)燈亮。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1620

    文章

    21510

    瀏覽量

    598967
  • led
    led
    +關(guān)注

    關(guān)注

    240

    文章

    22907

    瀏覽量

    650145
  • 電路圖
    +關(guān)注

    關(guān)注

    10289

    文章

    10707

    瀏覽量

    523915
  • 按鍵
    +關(guān)注

    關(guān)注

    4

    文章

    222

    瀏覽量

    57492
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    797

    瀏覽量

    65855

原文標(biāo)題:FPGA零基礎(chǔ)學(xué)習(xí)之Vivado-按鍵使用教程

文章出處:【微信號(hào):HXSLH1010101010,微信公眾號(hào):FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【ZYNQ Ultrascale+ MPSOC FPGA教程】第九章Vivado按鍵實(shí)驗(yàn)

    按鍵FPGA設(shè)計(jì)當(dāng)中最常用也是最簡(jiǎn)單的外設(shè),本章通過(guò)按鍵檢測(cè)實(shí)驗(yàn),檢測(cè)開(kāi)發(fā)板的按鍵功能是否正常,并了解硬件描述語(yǔ)言和FPGA的具體關(guān)系,
    的頭像 發(fā)表于 01-22 09:46 ?2307次閱讀
    【ZYNQ Ultrascale+ MPSOC <b class='flag-5'>FPGA</b>教程】第九章<b class='flag-5'>Vivado</b>下<b class='flag-5'>按鍵</b>實(shí)驗(yàn)

    零基礎(chǔ)入門(mén)FPGA,如何學(xué)習(xí)?精選資料分享

    問(wèn):本人零基礎(chǔ),想學(xué)FPGA,求有經(jīng)驗(yàn)的人說(shuō)說(shuō),我應(yīng)該從哪入手,應(yīng)該看什么教程,應(yīng)該用什么學(xué)習(xí)板和開(kāi)發(fā)板,看什么書(shū)等,希望有經(jīng)驗(yàn)的好心人能夠給我一些引導(dǎo)。如果想速成,那就上網(wǎng)看視頻吧,這...
    發(fā)表于 07-20 07:28

    FPGA零基礎(chǔ)學(xué)習(xí)Vivado-LED流水燈實(shí)驗(yàn)

    及打算進(jìn)階提升的職業(yè)開(kāi)發(fā)者都可以有系統(tǒng)性學(xué)習(xí)的機(jī)會(huì)。系統(tǒng)性的掌握技術(shù)開(kāi)發(fā)以及相關(guān)要求,對(duì)個(gè)人就業(yè)以及職業(yè)發(fā)展都有著潛在的幫助,希望對(duì)大家有所幫助。本次帶來(lái)Vivado系列,本篇為FPGA零基
    發(fā)表于 04-18 21:12

    FPGA零基礎(chǔ)學(xué)習(xí)Vivado-數(shù)碼管驅(qū)動(dòng)設(shè)計(jì)實(shí)驗(yàn)

    不多說(shuō),上貨。FPGA零基礎(chǔ)學(xué)習(xí)Vivado-數(shù)碼管驅(qū)動(dòng)設(shè)計(jì)實(shí)驗(yàn)數(shù)碼管作為SANXIN-B04的顯示裝置,具有易控制,顯示方便的特點(diǎn)。那么
    發(fā)表于 04-19 19:21

    FPGA零基礎(chǔ)學(xué)習(xí)Vivado-按鍵使用教程

    及打算進(jìn)階提升的職業(yè)開(kāi)發(fā)者都可以有系統(tǒng)性學(xué)習(xí)的機(jī)會(huì)。 系統(tǒng)性的掌握技術(shù)開(kāi)發(fā)以及相關(guān)要求,對(duì)個(gè)人就業(yè)以及職業(yè)發(fā)展都有著潛在的幫助,希望對(duì)大家有所幫助。本次帶來(lái)Vivado系列,按鍵的使用教程。話不多
    發(fā)表于 06-13 18:33

    FPGA零基礎(chǔ)學(xué)習(xí)Vivado-鎖相環(huán)使用教程

    大俠好,歡迎來(lái)到FPGA技術(shù)江湖。本系列將帶來(lái)FPGA的系統(tǒng)性學(xué)習(xí),從最基本的數(shù)字電路基礎(chǔ)開(kāi)始,最詳細(xì)操作步驟,最直白的言語(yǔ)描述,手把手的“傻瓜式”講解,讓電子、信息、通信類(lèi)專(zhuān)業(yè)學(xué)生、初入職場(chǎng)小白
    發(fā)表于 06-14 18:09

    零基礎(chǔ)學(xué)習(xí)LEBVIEW】06 IO接口

    零基礎(chǔ)學(xué)習(xí)LEBVIEW】06 IO接口,感興趣的朋友一定要學(xué)習(xí)
    發(fā)表于 12-31 10:28 ?0次下載

    零基礎(chǔ)學(xué)習(xí)LEBVIEW】08 智能儀器

    零基礎(chǔ)學(xué)習(xí)LEBVIEW】08 智能儀器,感興趣的朋友一定要學(xué)習(xí)
    發(fā)表于 12-31 10:28 ?0次下載

    FPGA零基礎(chǔ)入門(mén)教程

    本文檔的主要內(nèi)容詳細(xì)介紹的是FPGA零基礎(chǔ)入門(mén)教程免費(fèi)下載。
    發(fā)表于 01-18 16:47 ?55次下載
    <b class='flag-5'>FPGA</b>的<b class='flag-5'>零基</b>礎(chǔ)入門(mén)教程

    【ZYNQ Ultrascale+ MPSOC FPGA教程】第九章Vivado按鍵實(shí)驗(yàn)

    按鍵FPGA設(shè)計(jì)當(dāng)中最常用也是最簡(jiǎn)單的外設(shè),本章通過(guò)按鍵檢測(cè)實(shí)驗(yàn),檢測(cè)開(kāi)發(fā)板的按鍵功能是否正常,并了解硬件描述語(yǔ)言和FPGA的具體關(guān)系,
    發(fā)表于 01-25 08:27 ?5次下載
    【ZYNQ Ultrascale+ MPSOC <b class='flag-5'>FPGA</b>教程】第九章<b class='flag-5'>Vivado</b>下<b class='flag-5'>按鍵</b>實(shí)驗(yàn)

    【四】零基礎(chǔ)上手HAL庫(kù)—GPIO按鍵

    【四】零基礎(chǔ)上手HAL庫(kù)—GPIO按鍵3.1前言我們?cè)谏弦还?jié)已經(jīng)知道了點(diǎn)燈操作,相當(dāng)于是學(xué)會(huì)了GPIO輸出的配置,接下來(lái)是GPIO輸入完成按鍵掃描的操作。前期準(zhǔn)備STM32各類(lèi)型的板
    發(fā)表于 12-05 13:51 ?0次下載
    【四】<b class='flag-5'>零基</b>礎(chǔ)上手HAL庫(kù)<b class='flag-5'>之</b>—GPIO<b class='flag-5'>按鍵</b>

    FPGA零基礎(chǔ)學(xué)習(xí)Vivado-數(shù)碼管驅(qū)動(dòng)設(shè)計(jì)實(shí)驗(yàn)

    系統(tǒng)性的掌握技術(shù)開(kāi)發(fā)以及相關(guān)要求,對(duì)個(gè)人就業(yè)以及職業(yè)發(fā)展都有著潛在的幫助,希望對(duì)大家有所幫助。本次帶來(lái)Vivado系列,本篇為數(shù)碼管驅(qū)動(dòng)設(shè)計(jì)實(shí)驗(yàn)。話不多說(shuō),上貨。
    的頭像 發(fā)表于 04-09 09:20 ?1648次閱讀

    FPGA零基礎(chǔ)學(xué)習(xí)Vivado-鎖相環(huán)使用教程

    PLL鎖相環(huán)由以下幾部分組成:前置分頻計(jì)數(shù)器、相位頻率檢測(cè)器電路、電荷泵、環(huán)路濾波器、壓控振蕩器、反饋乘法器計(jì)數(shù)器和后置分頻計(jì)數(shù)器。在工作室,相位頻率檢測(cè)器檢測(cè)其參考頻率和反饋信號(hào)之間的相位差和頻率差,控制電荷泵和環(huán)路濾波器將相位差轉(zhuǎn)換為控制電壓
    的頭像 發(fā)表于 05-31 17:42 ?2065次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>之</b><b class='flag-5'>Vivado-</b>鎖相環(huán)使用教程

    FPGA零基礎(chǔ)學(xué)習(xí)Vivado-ROM使用教程

    系統(tǒng)性的掌握技術(shù)開(kāi)發(fā)以及相關(guān)要求,對(duì)個(gè)人就業(yè)以及職業(yè)發(fā)展都有著潛在的幫助,希望對(duì)大家有所幫助。本次帶來(lái)Vivado系列,ROM使用教程。話不多說(shuō),上貨。
    的頭像 發(fā)表于 06-07 12:27 ?1078次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>之</b><b class='flag-5'>Vivado</b>-ROM使用教程

    【教程分享】 FPGA零基礎(chǔ)學(xué)習(xí)按鍵控制LED

    系統(tǒng)性學(xué)習(xí)的機(jī)會(huì)。 系統(tǒng)性的掌握技術(shù)開(kāi)發(fā)以及相關(guān)要求,對(duì)個(gè)人就業(yè)以及職業(yè)發(fā)展都有著潛在的幫助,希望對(duì)大家有所幫助。后續(xù)會(huì)陸續(xù)更新 Xilinx 的 Vivado、ISE 及相關(guān)操作軟件的開(kāi)發(fā)的相關(guān)內(nèi)容,學(xué)習(xí)
    的頭像 發(fā)表于 06-13 08:05 ?1340次閱讀