精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

基于fpga的圖像處理

CHANBAEK ? 來源:小小研究生 ? 作者:xxyjs2020 ? 2023-06-23 16:53 ? 次閱讀

設計規劃

開發板上使用的機械按鍵在閉合及斷開的瞬間均伴隨有一連串的抖動,按鍵抖動會引起一次按鍵被誤讀多次,需要進行消抖處理:在按鍵閉合穩定時讀取按鍵的狀態,并且必須判別到按鍵釋放穩定后再作處理 。

如果按鍵個數少,可以用硬件消抖,按鍵多時需要用軟件消抖:檢測出按鍵閉合后執行一個 20ms的延時程序 (抖動的時間為5ms~10ms)再一次檢測鍵的狀態,如果仍保持閉合狀態電平,則確認為真正有鍵按下。硬件消抖需要有額外的電路,軟件消抖沒有這種顧慮。

先用波形圖模擬出按鍵被按下和釋放時抖動的毛刺狀態:

圖片

計數器一節中已經介紹過計數的實現方法,這里20ms的延遲需要一個20ms的計數器cnt_20ms。系統檢測到按鍵輸入為低電平就開始計數,如果20ms(50MHz的晶振需要計數個數為999_999)內檢測出高電平說明是一個抖動,計數器清零。計數器計滿999_999之后,key_flag拉高,一個時鐘周期后變低,因此key_flag是脈沖信號。計數器計滿后的狀態至關重要,如果清零,當輸入是低電平的時間過長就會造成一次按鍵卻有多個key_flag脈沖的情況。

圖片

如果計滿后不清零,到kin_in為高電平時再清零也會有新的問題,就是key_flag維持高電平時間太長,不再是一個脈沖信號。

圖片

此時如果令計數器記到999_998,就可以達到預期的效果。

圖片

編寫代碼

module key_filter
#(
parameter CNT_MAX = 20'd999_999 
)
(
input wire sys_clk ,
input wire sys_rst_n , 
input wire key_in , 
output reg key_flag //key_flag為1時表示消抖后檢測到按鍵被按下
//key_flag為0時表示沒有檢測到按鍵被按下
);


//reg define
reg [19:0] cnt_20ms ; //計數器


//cnt_20ms:如果時鐘的上升沿檢測到外部按鍵輸入的值為低電平時,計數器開始計數
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1'b0)
cnt_20ms <= 20'b0;
else if(key_in == 1'b1)
cnt_20ms <= 20'b0;
else if(cnt_20ms == CNT_MAX && key_in == 1'b0)
cnt_20ms <= cnt_20ms;
else
cnt_20ms <= cnt_20ms + 1'b1;


always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1'b0)
key_flag <= 1'b0;
else if(cnt_20ms == CNT_MAX - 1'b1)
key_flag <= 1'b1;
else
key_flag <= 1'b0;
endmodule

首先定義了參數CNT_MAX是計數器的最大值,然后定義了輸入輸出和計數器。2^19<999999<2^20,因此需要20位的計數器。然后,還是要分析兩個信號的變化,一個是計數器的狀態,一個是標志位的狀態。他們變化的條件都是時鐘上升沿和復位有效(下降沿)。

cnt_20ms的變化是,如果復位有效就清零;如果檢測到輸入為高電平就清零;如果計滿且輸入為低電平就保持;如果沒計滿就+1。

圖片

key_flag的變化是,復位有效就清零,計數到999999-1就拉高,其他時候都為0。

圖片

編寫testbench

`timescale 1ns/1ns
module tb_key_filter();
 parameter CNT_1MS = 20'd19 ,
 CNT_11MS = 21'd69 ,
 CNT_41MS = 22'd149 ,
 CNT_51MS = 22'd199 ,
 CNT_60MS = 22'd249 ;


 wire key_flag ; 
 reg sys_clk ; 
 reg sys_rst_n ; 
 reg key_in ; 
 reg [21:0] tb_cnt ; 


 initial begin
 sys_clk = 1'b1;
 sys_rst_n <= 1'b0;
 key_in <= 1'b0;
 #20
 sys_rst_n <= 1'b1;
 end


 //sys_clk:模擬系統時鐘,每10ns電平翻轉一次,周期為20ns,頻率為50MHz
 always #10 sys_clk = ~sys_clk;


 //tb_cnt:按鍵過程計數器,通過該計數器的計數時間來模擬按鍵的抖動過程
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 tb_cnt <= 22'b0;
 else if(tb_cnt == CNT_60MS)
 tb_cnt <= 22'b0;
 else
 tb_cnt <= tb_cnt + 1'b1;


 //key_in:產生輸入隨機數,模擬按鍵的輸入情況
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 key_in <= 1'b1; //按鍵未按下時的狀態為為高電平
 else if((tb_cnt >= CNT_1MS && tb_cnt <= CNT_11MS)
||(tb_cnt >= CNT_41MS && tb_cnt <= CNT_51MS))
 key_in <= {$random} % 2;  //隨機數模擬抖動
 else if(tb_cnt >= CNT_11MS && tb_cnt <= CNT_41MS)
 key_in <= 1'b0;
 else
 key_in <= 1'b1;


 //------------------------key_filter_inst------------------------
 key_filter
 #(
 .CNT_MAX (20'd24 )
 )
 key_filter_inst
 (
 .sys_clk (sys_clk ), //input sys_clk
 .sys_rst_n (sys_rst_n ), //input sys_rst_n
 .key_in (key_in ), //input key_in
 .key_flag (key_flag ) //output key_flag
 );


 endmodule

1、定義參數,這里和上一節一樣,為了縮短仿真時間,將參數值設置得小一些。

2、定義幾個信號:時鐘、復位、輸入、計數、輸出

3、初始化:時鐘信號為高,復位為低,輸入為低,延遲20ns后,復位為高

4、定義時鐘:每10ns翻轉一次,周期為20ns,頻率為50MHz

5、定義計數器:計數器計數到CNT_60MS,計數0-249。復位變為0,計滿變為0.否則+1。

6、定義輸入:輸入在前后10ms內抖動,因此輸入數在CNT_1MS-11MS和41MS-51MS內取0或1的隨機數來模擬抖動。在11MS-41MS內為低電平,持續時間要超過CNT-MAX(80>24)。0MS-1MS和41MS以上都為高電平。

7、實例化:這里定義了CNT_MAX,要小于11MS-41MS,否則會一直抖動。

對比波形

整體波形圖,達到了預期效果:key_in低電平開始計數到CNT_MAX-1時一旦檢測到輸入高電平就清零,但是沒有檢測到輸入信號為高電平,那么key_flag拉高成為一個脈沖信號。

圖片

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

    關注

    1626

    文章

    21678

    瀏覽量

    602043
  • 計數器
    +關注

    關注

    32

    文章

    2254

    瀏覽量

    94373
  • 時鐘
    +關注

    關注

    10

    文章

    1721

    瀏覽量

    131378
  • 開發板
    +關注

    關注

    25

    文章

    4959

    瀏覽量

    97217
  • 按鍵消抖
    +關注

    關注

    2

    文章

    27

    瀏覽量

    10442
收藏 人收藏

    評論

    相關推薦

    FPGA圖像處理之CLAHE算法

    FPGA圖像處理--CLAHE算法(一)中介紹了為啥要用CLAHE算法來做圖像增強。
    的頭像 發表于 01-04 12:23 ?2417次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>圖像</b><b class='flag-5'>處理</b>之CLAHE算法

    #FPGA #圖像處理 圖像處理(概論)

    fpga圖像處理
    奔跑的小鑫
    發布于 :2023年07月27日 10:15:04

    FPGA圖像處理初學者的迷茫

    哪位大神現在在從事基于FPGA圖像處理的相關工作,我現在在學習,導師給選的方向,自己前一段時間用FPGA實現了中值濾波,sobel邊緣檢測,然后就是一些書本上面簡單算法的實現 ,感覺高
    發表于 06-29 20:38

    FPGA圖像處理論文大全

    本帖最后由 lorlin000 于 2015-3-15 22:53 編輯 FPGA圖像處理論文大全
    發表于 03-15 22:46

    FPGA圖像處理IP核

    有誰知道現在國內外有哪些公司賣FPGA圖像處理相關的IP核?
    發表于 04-28 21:34

    FPGA圖像處理技術,你知道多少?

    最近一段時間一直在研究基于FPGA圖像處理,乘著這個機會和大家交流一下,自己也順便總結一下。主要是為了大家對用FPGA圖像
    發表于 04-21 14:25

    FPGA圖像處理必備!

    圖像細節。FPGA 圖像處理方法1、圖像增強兩大方法:空間域方法和時間域方法(以后再詳述)2、圖像
    發表于 12-26 15:57

    FPGA圖像處理基板的邏輯功能

    1.FPGA功能設計上圖所示的是FPGA圖像處理基板的邏輯功能框圖,圖中左側是背板接頭,FPGA與背板接頭相連的信號主要包括8路3.125G
    發表于 11-10 08:06

    FPGA圖像處理

    FPGA圖像處理
    發表于 12-14 22:29 ?19次下載

    基于FPGA圖像處理及自動調控電路的設計

    設計了一種基于現場可編程門陣列(FPGA)EP3C25F25617 的圖像處理及自動調控電路。該電路主要完成可見光圖像的直方圖均衡、中值濾波、十字叉疊加、快速自動調焦等
    發表于 11-06 15:36 ?9次下載
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>圖像</b><b class='flag-5'>處理</b>及自動調控電路的設計

    略談FPGA圖像處理

    FPGA圖像處理之路,從此開始,接下來,讓我們把時間交給“圖像處理”。一休哥在動筆之前,一直在猶豫,反復思考著一個問題,這個問題一直困擾著我
    發表于 05-09 17:05 ?4147次閱讀

    FPGA圖像處理方法

    圖像細節。 FPGA圖像處理方法 1、圖像增強 兩大方法:空間域方法和時間域方法(以后再詳述) 2、圖像
    的頭像 發表于 12-25 14:15 ?3410次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>圖像</b><b class='flag-5'>處理</b>方法

    FPGA圖像處理應用詳細介紹

    FPGA圖像處理應用詳細介紹
    發表于 02-28 10:29 ?50次下載

    FPGA圖像處理算法有哪些

    早之前的朋友知道我發過一個用chatgpt分析出來的 FPGA圖像處理的知識樹,里面包含了從色域,鏡頭,接口和算法。然后我就發現這個算法部分chatgpt 給我整理的比較亂,查詢了一番,確實發現
    的頭像 發表于 09-12 09:59 ?1020次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>圖像</b><b class='flag-5'>處理</b>算法有哪些

    FPGA圖像處理方法

    圖像細節。 FPGA 圖像處理方法 1、圖像增強 兩大方法:空間域方法和時間域方法(以后再詳述) 2、
    的頭像 發表于 12-02 13:15 ?1079次閱讀