新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > FPGA設計中對輸入信號的處理

        FPGA設計中對輸入信號的處理

        作者: 時間:2017-10-13 來源:網絡 收藏

        1.輸入信號為什么要寄存

        一般來說,在中,如果信號來自同一時鐘域,各模塊的輸入不需要寄存。只要滿足建立時間,保持時間的約束,可以保證在時鐘上升沿到來時,輸入信號已經穩定,可以采樣得到正確的值。但是如果模塊需要使用輸入信號的跳變沿(比如幀同步信號),千萬不要直接這樣哦。

        本文引用地址:http://www.104case.com/article/201710/365631.htm

        always @ (posedge inputs)
        begin
        ...
        end

        2.所有信號都需要寄存兩拍嗎

        如果這個輸入信號來自異步時鐘域(比如芯片外部的輸入),必須寄存兩拍。第一拍將輸入信號同步化,同步化后的輸出可能帶來建立/保持時間的沖突,產生亞穩態。需要再寄存一拍,減少(注意是減少)亞穩態帶來的影響。

        如果這個輸入信號來自于同一時鐘域且需要用到跳變沿,需要寄存一拍。否則時序報告多半會報clock skew > data delay,造成建立/保持時間的沖突。

        總而言之,五條原則:

        1.全局時鐘的跳變沿最可靠。
        2.來自異步時鐘域的輸入需要寄存一次以同步化,再寄存一次以減少亞穩態帶來的影響。
        3.不需要用到跳變沿的來自同一時鐘域的輸入,沒有必要對信號進行寄存。
        4.需要用到跳變沿的來自同一時鐘域的輸入,寄存一次即可。
        5.需要用到跳變沿的來自不同時鐘域的輸入,需要用到3個觸發器,前兩個用以同步,第3個觸發器的輸出和第2個的輸出經過邏輯門來判斷跳變沿。

        給出一個verilog模板:

        always @ (posedge Clk) //不對輸入信號進行寄存
        begin
        if (inputs)
        begin
        ...
        end
        ...
        end

        always @ (posedge Clk) //對輸入信號寄存一拍
        begin
        inputs_reg = inputs;
        if (inputs_reg == 1b0 inputs == 1b1)
        begin
        ...
        end
        ...
        end

        always @ (posedge Clk) //對輸入信號寄存三拍
        begin
        inputs_reg1 = inputs;
        inputs_reg2 = inputs_reg1;
        inputs_reg3 = inputs_reg2;
        if (inputs_reg2 == 1b1 inputs_reg3 == 1b0)
        begin
        ...
        end
        ...
        end



        關鍵詞: FPGA 全同步設計

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 健康| 新蔡县| 甘德县| 石嘴山市| 运城市| 夏邑县| 博乐市| 沅陵县| 米林县| 昌图县| 象山县| 博兴县| 福泉市| 同仁县| 天津市| 乾安县| 门源| 洱源县| 隆德县| 蓬溪县| 定安县| 淮北市| 崇明县| 申扎县| 安远县| 伊通| 政和县| 读书| 孝昌县| 甘谷县| 平利县| 辽阳县| 东明县| 石棉县| 通化市| 岢岚县| 句容市| 常熟市| 东台市| 新泰市| 金湖县|