關於fpga的復位

上電自動復位

原理上很簡單,寫一個復位模塊,等待一段穩定時間,將復位信號拉低一段足夠長的時間,再將復位信號拉高。

如下Verilog源碼,外部按鍵復位也將作爲模塊的一個引腳輸入,用於異步的全局復位操作,正常的復位操作要進行,必須要求外部有一個短暫的脈衝作用在rst_n信號上,這可以通過按鍵電路中的RC電路實現。

/**************************************
*  功能:上電覆位模塊
*  輸入參數:
*         clk: 50M 時鐘輸入
*         rst_n:外部按鍵全局復位信號
*  輸出參數:
*         sys_rst_n:系統全局同步復位信號
***************************************/
module    reset
(
    input    clk,
    input    rst_n,
    output   sys_rst_n
);

//------------------------------------------
// Delay 100ms for steady state
reg    [22:0] cnt;
always@(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        cnt <= 0;
    else
        begin
        if(cnt < 23'd50_00000) //100ms
            cnt <= cnt+1'b1;
        else
            cnt <= cnt;
        end
end

//------------------------------------------
//rst_n synchronism
reg    rst_nr0;
reg    rst_nr1;
always@(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        begin
        rst_nr0 <= 0;
        rst_nr1 <= 0;
        end
    else if(cnt == 23'd50_00000)
        begin
        rst_nr0 <= 1;
        rst_nr1 <= rst_nr0;
        end
    else
        begin
        rst_nr0 <= 0;
        rst_nr1 <= 0;
        end
end

assign    sys_rst_n = rst_nr1;

endmodule

按鍵手動復位電路

不使用專用芯片的參考低電平復位電路如下:

reset1

電路中的復位管腳一端連接到FPGA的某個普通通用管腳,這樣電路中的RC電路將產生上面Verilog代碼中的rst_n上電低脈衝,這就是本文開頭說自動上電覆位和硬件按鍵復位相輔相成。

請注意兩個電阻的值,R21要是R22的兩個數量級以上,這樣才能保證按鍵按下後被識別爲低電平。

手動復位過程中爲保證按鍵復位的穩定性,還可以修改上面的Verilog代碼進行按鍵消抖檢測。下面是抓到的按鍵在閉合的時候的波形:

key_bounce

按鍵在幾個us之內就能達到低電平,該期間觸點抖動比較嚴重。

module RMV_BJ (
    BJ_CLK,    //採集時鐘,40Hz
    RESET,     //系統復位信號
    BUTTON_IN, //按鍵輸入信號
    BUTTON_OUT //消抖後的輸出信號
);
input B_CLK;
input RESET;
input BUTTON_IN;
output BUTTON_OUT;
reg BUTTON_IN_Q, BUTTON_IN_2Q, BUTTON_IN_3Q;

always @(posedge BJ_CLK or negedge RESET)
begin
    if(~RESET)
    begin
        BUTTON_IN_Q <= 1'b1;
        BUTTON_IN_2Q <= 1'b1;
        BUTTON_IN_3Q <= 1'b1;
    end
    else
    begin
        BUTTON_IN_Q <= BUTTON_IN;
        BUTTON_IN_2Q <= BUTTON_IN_Q;
        BUTTON_IN_3Q <= BUTTON_IN_2Q;
    end
end

wire BUTTON_OUT = BUTTON_IN_2Q | BUTTON_IN_3Q;

endmodule

除了上面簡單的復位電路,還可使用CAT811/TPS3823-33等專門的復位芯片,可以免去按鍵按鍵消抖的操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章