在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SDRAM控制器設計之按鍵的處理

友晶FPGA ? 來源:友晶FPGA ? 2025-03-19 11:47 ? 次閱讀

按鍵邊沿檢測

邊沿檢測經常用于按鍵輸入檢測電路中,按鍵按下時輸入信號 key 變為低電平,按鍵抬起變為高電平。當輸入的信號為理想的高低電平時(不考慮毛刺和抖動),邊沿檢測就發揮了很重要的作用。

由于輸入的信號為一個連續值,我們需要通過時鐘進行采樣。根據采樣定理,采樣時鐘的頻率需要至少為被采信號頻率的 2 倍。

設計的邊沿檢測電路的功能為:檢測到 1 個下降沿或上升沿時,對應的下降沿輸出信號 edge_pos、edge_neg 分別輸出 1 個脈沖(即一個時鐘周期的高電平)。下面以下降沿進行分析。

分析:在邊沿檢測的過程中,通過 1 個寄存器來寄存上一個時鐘沿的輸入值 D ,當寄存器輸出 Q 與輸入 D 的值分別為1、0時,證明檢測到下降沿。

92e78796-039a-11f0-9310-92fbcf53809c.png

如上圖所示,在第 2 個時鐘周期的低電平期間,D 由高變低,在第 3 個時鐘周期的上升沿,Q由高變低。在 D 由高變低的時刻,Q 為 1 ,D 為 0 ,證明檢測到下降沿。

按鍵邊沿捕獲模塊:

92fbae42-039a-11f0-9310-92fbcf53809c.png

測試驗證模塊:

930c92d4-039a-11f0-9310-92fbcf53809c.png

按一次按鍵,對應的LED燈就會亮。LED亮代表檢測到了下降沿。

Signaltap 波形圖:

931cc1b8-039a-11f0-9310-92fbcf53809c.png

按鍵硬件消抖電路

友晶科技很多板子的按鍵(都是按下為低電平)其實是已經有硬件消抖電路的, 這樣的板子的按鍵的值 直接input 進來后 直接用就可以。

比如DE2-115 DE1-SOC DE10-Standard 等等。這里都用74HC245芯片來消抖:

93512aa2-039a-11f0-9310-92fbcf53809c.png

9366a328-039a-11f0-9310-92fbcf53809c.png

按鍵Verilog消抖電路

如果沒有硬件上的消抖,我們可以手寫Verilog代碼替代消抖電路。

模板一

模板一的Verilog消抖的原理主要為按鍵按下或松開后延時 1ms—20ms 采樣(這個時間是根據按鍵的機械特性自行決定)。

假設時鐘是50M,按鍵消抖的思路是檢測到按下時延時 50000個時鐘周期,再檢測,如果狀態仍為按下,則確認是按下的;如果狀態為彈起的,則確認是干擾,無按鍵按下。

按鍵消抖的Verilog實現的模板一如下:

module key_debounce        //按鍵消抖模塊
(  input clk,          //系統時鐘
  input rst_n,        //系統復位
  input key[0],          //按鍵輸入
  output reg key_value,  //有效的按鍵值
);


  reg [31:0]cnt;//計數器
  reg value;//中間寄存器


  always@(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
      cnt <= 0; ? ? ? ? ? ? ? ?//初始狀態下寄存器清零
 ? ? ? ? ? ?key_value <= 0; ? ? ? ?//有效按鍵值清零 ? ? ? ?
 ? ? ? ? ? ?value <= 0; ? ? ? ? ? ? ? ?//中間寄存器清零 ? ? ? ? ? ?
 ? ? ? ?end ? ?
 ? ? ? ?else begin
 ? ? ? ? ? ?if(cnt == 50000) begin
 ? ? ? ? ? ? ? ?cnt <= 0;//每隔0.001秒檢測一次 將key的值寄存到value寄存器當中(如果系統時鐘是50MHz)
 ? ? ? ? ? ? ? ?value <= key[0];
 ? ? ? ? ? ? ? ? ? ?
 ? ? ? ? ? ? ? ?if(value == 1 && key[0] == 0) //按鍵按下為0,平時為1
 ? ? ? ? ? ? ? ? ? ?key_value <= 1;


 ? ? ? ? ? ?end ? ? ? ? ? ? ? ? ? ? ? ?
 ? ? ? ? ? ?else begin
 ? ? ? ? ? ? ? ?cnt <= cnt + 1;
 ? ? ? ? ? ? ? ?key_value <= 0;
 ? ? ? ? ? ?end
 ? ? ? ?end ? ?
 ? ?end ? ? ? ? ? ? ? ?
endmodule

模板二

模板二的檢測原理是只有按鍵按下的狀態持續50000個周期(這個時間可以自己再定義)以上,才認定是按鍵被按下了一次,否則算作是干擾被忽略掉。

模板二實現的是多個按鍵的去抖。

按鍵消抖的Verilog實現的模板二如下:

module debounce (
 clk,
 reset_n,
 data_in,
 data_out
);


 parameter WIDTH = 32;      // set to be the width of the bus being debounced
 parameter POLARITY = "HIGH";  // set to be "HIGH" for active high debounce or "LOW" for active low debounce
 parameter TIMEOUT = 50000;   // number of input clock cycles the input signal needs to be in the active state
 parameter TIMEOUT_WIDTH = 16;  // set to be ceil(log2(TIMEOUT))
 
 input wire clk;
 input wire reset_n;
 
 input wire [WIDTH-1:0] data_in;
 output wire [WIDTH-1:0] data_out;
 
 reg [TIMEOUT_WIDTH-1:0] counter [0:WIDTH-1];
 wire counter_reset [0:WIDTH-1];
 wire counter_enable [0:WIDTH-1];
 
 // need one counter per input to debounce
 genvar i;
 generate for (i = 0; i < WIDTH; i = i+1)
 ?begin: ?debounce_counter_loop
 ? ?always @ (posedge clk or negedge reset_n)
 ? ?begin
 ? ? ?if (reset_n == 0)
 ? ? ?begin
 ? ? ? ?counter[i] <= 0;
 ? ? ?end
 ? ? ?else
 ? ? ?begin
 ? ? ? ?if (counter_reset[i] == 1) ?// resetting the counter needs to win
 ? ? ? ?begin
 ? ? ? ? ?counter[i] <= 0;
 ? ? ? ?end
 ? ? ? ?else if (counter_enable[i] == 1)
 ? ? ? ?begin
 ? ? ? ? ?counter[i] <= counter[i] + 1'b1;
 ? ? ? ?end
 ? ? ?end
 ? ?end
 
 ? ?if (POLARITY == "HIGH")
 ? ?begin
 ? ? ?assign counter_reset[i] = (data_in[i] == 0);
 ? ? ?assign counter_enable[i] = (data_in[i] == 1) & (counter[i] < TIMEOUT);
 ? ? ?assign data_out[i] = (counter[i] == TIMEOUT) ? 1'b1 : 1'b0;
 ? ?end
 ? ?else
 ? ?begin
 ? ? ?assign counter_reset[i] = (data_in[i] == 1);
 ? ? ?assign counter_enable[i] = (data_in[i] == 0) & (counter[i] < TIMEOUT);
 ? ? ?assign data_out[i] = (counter[i] == TIMEOUT) ? 1'b0 : 1'b1; ? ?
 ? ?end
 ? ?
 ?end ?
 ?endgenerate
 ?
endmodule

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5394

    瀏覽量

    122030
  • Verilog
    +關注

    關注

    28

    文章

    1357

    瀏覽量

    110945
  • 邊沿檢測
    +關注

    關注

    0

    文章

    6

    瀏覽量

    7862
  • 消抖電路
    +關注

    關注

    0

    文章

    7

    瀏覽量

    8635
  • 按鍵消抖
    +關注

    關注

    2

    文章

    28

    瀏覽量

    10536

原文標題:09-SDRAM控制器的設計——按鍵的處理(邊沿捕獲電路、硬件消抖、Verilog消抖電路)

文章出處:【微信號:友晶FPGA,微信公眾號:友晶FPGA】歡迎添加關注!文章轉載請注明出處。

收藏 0人收藏

    評論

    相關推薦

    SDRAM控制器的設計——Sdram_Control.v代碼解析(異步FIFO讀寫模塊、讀寫SDRAM過程)

    前言 SDRAM控制器里面包含5個主要的模塊,分別是PLL模塊,異步FIFO 寫模塊,異步FIFO讀模塊,SDRAM接口控制模塊,SDRAM
    的頭像 發表于 03-04 10:49 ?874次閱讀
    <b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>的設計——<b class='flag-5'>Sdram</b>_Control.v代碼解析(異步FIFO讀寫模塊、讀寫<b class='flag-5'>SDRAM</b>過程)

    使用Verilog實現基于FPGA的SDRAM控制器

    摘 要:介紹了SDRAM的特點和工作原理,提出了一種基于FPGA的SDRAM控制器的設計方法,使用該方法實現的控制器可非常方便地對SDRAM
    發表于 06-20 13:04 ?2284次閱讀

    PDMA在測試SDRAM控制器中的應用

    我們設計了一個PDMA(Programmable Direct Mem o ry Access)用于測試SDRAM控制器的性能。在SoC中,SDRAM控制器往往跟多個IP模塊(圖形
    發表于 07-02 18:31 ?1787次閱讀
    PDMA在測試<b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>中的應用

    SDRAM控制器簡易化設計

    SDRAM存儲芯片擁有快速讀寫的性能,可以應用以回波模擬系統作為數據高速緩存SDRAM芯片是由SDRAM控制器
    發表于 10-24 15:08 ?0次下載
    <b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>簡易化設計

    基于EPM1240的SDRAM控制器的設計

    通過設計基于CPLD 的SDRAM 控制器接口,可以在STM系列、ARM系列、STC系列等單片機和DSP等微處理器的外部連接SDRAM,增加系統的存儲空間。
    發表于 02-16 17:06 ?45次下載
    基于EPM1240的<b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>的設計

    DDR SDRAM控制器參考設計VHDL代碼

    Xilinx FPGA工程例子源碼:DDR SDRAM控制器參考設計VHDL代碼
    發表于 06-07 11:44 ?19次下載

    DDR SDRAM控制器verilog代碼

    Xilinx FPGA工程例子源碼:DDR SDRAM控制器verilog代碼
    發表于 06-07 14:13 ?38次下載

    基于VHDL的SDRAM控制器的實現

    基于VHDL的SDRAM控制器的實現
    發表于 01-22 13:43 ?12次下載

    EPM1240的SDRAM控制器的設計

    EPM1240的SDRAM控制器的設計
    發表于 10-31 08:24 ?21次下載
    EPM1240的<b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>的設計

    SDRAM控制器的設計

    邏輯復雜,接口方式與普通的存儲差異很大。為了解決這個矛盾,需要設計專用的SDRAM控制器,使用戶像使用SRAM -樣方便的使用SDRAM。考慮到
    發表于 11-28 19:51 ?5次下載
    <b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>的設計

    FPGA讀寫SDRAM的實例和SDRAM的相關文章及一些SDRAM控制器設計論文

    本文檔的主要內容詳細介紹的是FPGA讀寫SDRAM的實例和SDRAM的相關文章及一些SDRAM控制器設計論文主要包括了:FPGA讀寫SDRAM
    發表于 12-25 08:00 ?56次下載
    FPGA讀寫<b class='flag-5'>SDRAM</b>的實例和<b class='flag-5'>SDRAM</b>的相關文章及一些<b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>設計論文

    如何使用FPGA設計SDRAM控制器

    針對SDRAM 操作繁瑣的問題,在對SDRAM 存儲和全頁突發式操作進行研究的基礎上,提出一種簡易SDRAM 控制器的設計方法。該設計方法
    發表于 12-18 16:13 ?6次下載
    如何使用FPGA設計<b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>

    DDR SDRAM控制器的設計與實現

    本文首先分析了DDR SDRAM的基本特征,并提出了相應的解決方案詳細介紹了基于J EDEC DDR SDRAM規范的DDR SDRAM控制器設計方案。該
    發表于 03-28 10:57 ?19次下載

    基于SDRAM控制器軟核的Verilog設計

    SDRAM控制邏輯復雜,使用很不方便。 為了解決這個矛盾,需要設計專用的SDRAM控制器,使系統用戶象使用SRAM一樣方便的使用SDRAM
    的頭像 發表于 06-30 09:16 ?2817次閱讀
    基于<b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>軟核的Verilog設計

    PIC32系列參考手冊DDR SDRAM控制器

    電子發燒友網站提供《PIC32系列參考手冊DDR SDRAM控制器.pdf》資料免費下載
    發表于 09-25 11:39 ?0次下載
    PIC32系列參考手冊<b class='flag-5'>之</b>DDR <b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>
    主站蜘蛛池模板: 午夜免费观看福利片一区二区三区 | 亚洲精品久久婷婷爱久久婷婷 | 国产无限资源 | 婷婷爱五月 | 大又大粗又爽又黄少妇毛片 | 亚洲成人综合网站 | 日本特黄特色大片免费播放视频 | 美女网站色在线观看 | 日本一区二区在线视频 | 欧美大胆一级视频 | 男女透逼视频 | 国产午夜在线观看视频播放 | 国产成人优优影院 | 欧美黄色三级视频 | 让她爽的喷水叫爽乱 | xx性欧美高清 | 日日操免费视频 | 伊人网址 | 欧美黄页网| 中国一级特黄aa毛片大片 | 国产精品青草久久久久福利99 | 小说区v天堂网 | 一级片观看 | 最新国产精品视频免费看 | 国产精品免费看久久久 | 国产亚洲欧美成人久久片 | 亚洲一区二区三区中文字幕5566 | 欧美深夜 | 国产欧美日韩在线人成aaaa | 99久久国产免费 - 99久久国产免费 | 天天谢天天干 | 人人干日日操 | 欧美一级片在线视频 | 国产免费播放一区二区三区 | 久久夜色tv网站 | 你懂得在线网址 | 欧美性a欧美在线 | 欧美一级免费观看 | 国产一级特黄aa大片在线 | 黄视频网站在线看 | 手机在线观看毛片 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品