<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                https://zhuanlan.zhihu.com/p/365826531 **同步釋放就是讓復位信號的釋放過程與時鐘同步,從而確保所有 FF 在同一時刻有效。** 在 FPGA 復位的設計中,常常聽到一個詞,叫“異步復位,同步釋放”。異步復位相對的是同步復位,很好理解。那么什么是同步釋放?為什么要用同步釋放? 本文主要包含以下三點內容: * **異步復位異步釋放會有什么問題?** * **同步釋放** * **異步復位同步釋放的時序約束** ## 異步復位有什么問題? 一般來說,復位信號有效后會保持比較長一段時間,確保 register 被復位完成。但是復位信號釋放時,因為其和時鐘是異步的關系,我們不知道它會在什么時刻被釋放。 首先看圖1,考慮復位信號在兩個時鐘沿之間被釋放的情況。Reset 信號從 Device Pin 到 Flip-Flop 的延遲最大不能超過“Max Time Available”,如果延遲超過了這個限制,那么復位信號的釋放會進入 Setup Time 要求的區間,導致 Flip-Flop 進入亞穩態。當時鐘頻率變高,時鐘周期變短,不難發現,要滿足這個要求是越來越難的。 ![](https://img.kancloud.cn/ac/aa/acaac1ed6c5f23b7d64d00c6a7ef75ac_786x387.png) 前面我們提到過,因為是異步信號,我們無法確保信號的釋放在一個確定的區間。如圖2所示,對于 Flip-Flop 來說,異步信號的釋放可能在A區間,也可能在B或者C區間。假設現在我們的設計中包含三個 Flip-Flop,分別為FF1,FF2 和 FF3。FF1 的復位釋放落在A區間,所以 FF1 會在復位信號釋放后的第一個時鐘沿有效,FF3 的復位釋放落在C區間,那么 FF3 會在復位信號釋放后的第二個時鐘沿有效,而 FF2 的復位釋放落在B區間,所以 FF2 可能會進入亞穩態。 ![](https://img.kancloud.cn/7e/0b/7e0b02828eca718de6337b838cfe11cd_788x323.png) 不同的 FF 因為復位信號釋放的位置不同而在不同的時刻有效,這會對設計造成影響嗎? 假如我們的設計是如圖3所示的情況,是不會對設計的功能造成影響的。在復位釋放之后,任何有問題的數據會被Pipeline排出去,經過4個cycle之后,這個pipeline便會恢復到正常的工作狀態。 ![](https://img.kancloud.cn/f4/41/f441c2c24de73ca11007a4772e32051a_730x130.png) 但如果我們的設計是如圖4所示。被復位的FF是狀態機的狀態,那么復位釋放后很有可能狀態機會被復位到一個無效的狀態,影響正常的功能。 ![](https://img.kancloud.cn/97/91/9791c99944760f15ab8a036845066e17_803x220.png) ## 同步釋放 從上一部分的內容我們發現,異步信號的異步釋放會導致 FF 在不同的時刻有效,甚至進入亞穩態,從而影響設計的功能運行。如何避免這個問題呢?考慮同步釋放。顧名思義,同步釋放就是讓復位信號的釋放過程與時鐘同步,從而確保所有 FF 在同一時刻有效。 如圖5所示,是異步復位同步釋放的電路設計。FDP的個數決定復位信號保持的長度,最少要有兩個。當復位信號釋放后,FDP chain 會將接地的0逐級pipe到最后一個FDP輸出,因為該FDP的輸出是和Clock同步的,所以FDR的復位釋放便是和Clock 同步的。 ![](https://img.kancloud.cn/18/93/18937d949009369d200fe815935c35a3_710x215.png) 最后一個FDP不是仍然是異步復位異步釋放么,會不會這個FDP因為異步釋放進入亞穩態,那么其輸出的復位信號也不確定從而導致復位失敗? 答案是不會。FDP會進入亞穩態的條件是什么?一是異步釋放非常貼近時鐘沿,二是 FDP 輸入D在時鐘沿附近發生跳變。根據這個電路設計,FDP的輸入D時不會在異步釋放時發生跳變的,所以FDP不會進入亞穩態。 ## 異步復位同步釋放的時序約束 異步復位同步釋放的電路我們已經設計好了,如何進行時序約束呢? 對于 FDR,我們可以不用考慮的。因為工具會分析 復位信號的 Recovery Time 和 Removal Time 來確保時序收斂。如果發現 Recovey Time 或者 Removal Time 的違反,我們可能需要看一下 reset tree 或者 clock skew。一般都是 Recovey Time的違反,類似于 Setup Time,可能是由于 reset path的延遲太長導致。 對于 FDP,D端是同步電路,而CLR輸入端是異步信號,通過電路的設計我們已經避免的異步信號帶來的問題,所以為了避免 false timing violation,我們可以對 FDP 的 CLR 端設置 false path。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看