發布時間:2023-10-16 作者: 來源: 閱讀量:0
時鐘域,是指在同一系列邏輯,這一系列邏輯中的所有時間同步單元都使用同一個網絡作為時鐘點,跨時鐘域在不同時鐘域之間傳輸信號的問題。在信號跨時鐘域傳輸中會遇到一些因素,例如:
根據技能的不同,問題也不一樣,如果約束較小的建立和保持時間,從統計上來說高速設計技術比低速設計技術更不容易產生故障。同時,其他因素,比如同步器件中設計實現對輸出的緩沖,也會對一個可能的故障產生顯著影響;靜態時序分析工具是基于獨立的時鐘區域來進行時序分析,如果存在兩個異步時鐘域,故障往往與這兩個時鐘沿的相對時序有關。而且只有在特定的方式下根據指定的要求才能進行跨時鐘域的時序分析;跨時鐘域故障難以探測且難以調試。所以所有跨時鐘域界面都必須要在任何功能實現之前被很好地定義和處理。
觸發器在時鐘系統上升定義中開發和維系了一個時間窗口,它的輸寫端口數組如果在這個時間窗口內發生變化,那么它就會發生時序違問題。存在這個時序違規是因為違反了開發和維系時間要求,此刻觸發器它的內部的某一節點可能會在一個標準電壓范圍內上下浮動,沒有辦法穩定在邏輯0或者1狀態,在這個時候晶體管不能處于對應飽和區的高或低電壓,在它穩定之前,一直會徘徊在一個中間電壓的狀態。
如果它里面包含著一個輸出緩沖,那么亞穩態自身就能夠跟隨內部信號的逐漸穩定而在輸出上表現的雜散過渡。輸出保持亞穩態的時間是隨機的,甚至可能在整個時鐘周期內都保持亞穩態。那么,如果這個亞穩態值輸入到組合邏輯,根據邏輯門電路的切換門檻,錯誤的操作就可以發生。從時序收斂的角度來說,兩個觸發器之間的組合邏輯延時都要求要小于最小的時鐘周期,但是這種亞穩態信號保持亞穩態的時間,本身就是變相地增加了邏輯延時。很顯然,一個亞穩態信號會給設計帶來致命的功能故障,而且該信號也將無法在各個時鐘沿上采集到一致的結果。
傳送配置的時鐘頻率無需高過接收端設備,高出反而容易造成溢出,反而較慢的頻率將數據送入FIFO,數據寫入FIFO的時鐘周期數少于接收端將要處理數據的時鐘周期數。如果不采取握手控制,就必須要理解以上描述會產生溢出的最壞的情況。
無論在什么時間段內,如果數據發送FIFO的效率高于接收處理數據的效率,那么就會很輕易地使系統沒有辦法維持。因此在沒有任何存儲設備的情況下,是無法可以存得無限的數據,這種問題需要在系統結構層級才能解決。FIFO在FPGA內是通過封裝一個雙口RAM,表面上標志信號如空和滿指示,原則情況上實現起來會有點困難。其實原因在于輸入控制和輸出是相互依存的,兩者都需要依靠維持來產生。一般來講,突發發送一般是以小周期性或不同周期來發生,從而最大尺寸要大于等于突發的尺寸。
出于兩個時鐘域異步的自然因素,將會出現所在總線有些比特在一個時鐘沿上被采集,然而另外的比特卻可以在下一個時鐘上被收集,取決于第一個時鐘觸發器是不是在有效時間內到達。在二進制地址中有些位變化有些位卻沒有,因此接收邏輯將會得到一個完全無效的地址,這個地址既不是當前地址也不是上一個地址。當地址改變時,只需要改變地址中的一個比特即可,這樣就可以避免上面提到的問題。如果發生變化的那個比特并沒有被下一個時鐘正確采集,地址在線會“同步地”保留舊的地址值。所以格雷碼常用來在異步時鐘域之間傳遞多比特計數值,且多用于FIFO內。
鑒于讀寫地址要在異步時鐘域中間來進行傳遞,那么這個讀寫地址將會晚一個時鐘周期,但是這并不表示錯誤導致了數據溢出狀況。如果在傳送地點到讀寫時鐘域時,讀寫邏輯將會認為數據沒有寫入,且將認為FIFO已空盡管此時FIFO已經被寫入一個數據。這只會對總的吞吐率有一些小影響,但是不會導致下溢狀況發生。同樣地,當地址被傳遞到寫時鐘域時,如果讀地址被延時了,那么寫邏輯會認為FIFO里沒有多余空間,盡管此時FIFO還未滿。這同樣只會對總的數據吞吐率有些微小影響,卻不會造成上溢發生。