女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取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

    文章

    5407

    瀏覽量

    123012
  • Verilog
    +關注

    關注

    28

    文章

    1365

    瀏覽量

    111623
  • 邊沿檢測
    +關注

    關注

    0

    文章

    6

    瀏覽量

    7884
  • 消抖電路
    +關注

    關注

    0

    文章

    7

    瀏覽量

    8658
  • 按鍵消抖
    +關注

    關注

    2

    文章

    28

    瀏覽量

    10605

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

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

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

    前言 SDRAM控制器里面包含5個主要的模塊,分別是PLL模塊,異步FIFO 寫模塊,異步FIFO讀模塊,SDRAM接口控制模塊,SDRAM
    的頭像 發表于 03-04 10:49 ?1222次閱讀
    <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>過程)

    FPGASDRAM控制器設計(二)精選資料分享

    FPGASDRAM控制器設計(二):刷新這次要來解決上次留下來的刷新問題,在100us后首先要經過兩次刷新才進行模式寄存設置。這顆SDRAM
    發表于 07-30 07:48

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

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

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

    我們設計了一個PDMA(Programmable Direct Mem o ry Access)用于測試SDRAM控制器的性能。在SoC中,SDRAM控制器往往跟多個IP模塊(圖形
    發表于 07-02 18:31 ?1826次閱讀
    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次下載

    基于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 ?57次下載
    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 ?2889次閱讀
    基于<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>