2016-11-28 376 views
1

爲了解決Verilog中由不同時鐘域引起的亞穩態問題,使用了雙寄存器方法。使用雙寄存器方法解決亞穩態性

但據我所知,亞穩態的最終輸出是不確定的。輸出與輸入無關。

所以,我的問題是如何使用雙寄存器方法,以保證輸出的正確性?

謝謝。

+1

這個問題可能更適合http://electronics.stackexchange.com/ –

+0

好的,謝謝。我可以再次發佈這個問題嗎? –

回答

1

你不能完全確定你是否避免了亞穩態。 正如你所提到的,亞穩觸發器的輸出是不可預測的,所以即使採用「雙寄存器」方法,當你有亞穩態時,你也可能傳播錯誤的值。

這種方法卻從來沒有打算解決亞穩態,但試圖以減少亞值進入你的電路的概率。所謂的here MTBF(平均無故障時間)。爲了減少MTBF,你甚至可以鏈接更多的2個寄存器。

即使這沒有解決的一個值的非預測的煩躁,有趣的是,使用這些雙寄存器,因爲當一個值是亞穩態,它會振盪,直到它穩定爲0或1

該振盪將使您的電路切換,然後使用大量的能量,因爲每個轉換都消耗能量。由於這個原因,使用雙寄存器進行時鐘域交叉非常重要。

爲了確保您的數據是有效的,雖然,你可以使用兩個時鐘域之間的請求 - 應答機制。

快速例如:

  1. 數據集到所述總線(雙寄存器輸入)
  2. 等待1(或更多)個時鐘週期,以確保該數據在另一側
  3. 很好地建立
  4. 發送請求信號(一個雙寄存器的輸入)
  5. 最壞的情況:該請求信號是亞穩態,並在0一旦穩定保持。下一個時鐘週期爲1,因爲在至少1個時鐘週期內它已經設置爲1。最佳案例:下一個週期目的地將接受數據
  6. 數據穩定,請求穩定並且在1→數據可以被消耗。向源發送確認。
  7. 確認到達(在亞穩態下雙寄存器)。如果亞穩,它可能需要更多的時鐘週期才能到達。
  8. 請求下降。
  9. 另一個數據可以經由總線

該協議被稱爲四相協議來發送。您可以在網上找到大量有關它的文檔,因爲它是異步設計的經典協議。

這是很容易理解和實施。請記住,它會產生一個非常重要的開銷。

希望它有幫助。

+0

謝謝Krouitch,但我仍然有些困惑。所以,在第4步之後,我只能保證請求信號穩定在1,但是如何保證數據也是穩定的?謝謝。 –

+0

如果您在發送請求前至少發送了一個時鐘週期的數據,那麼數據必須穩定。如果不是這意味着路徑對於您選擇的時鐘週期來說太長。 這裏是一篇文章,說明我的意思:http://www.eetimes.com/document.asp?doc_id=1276114 – Krouitch