題:
FPGA設計可以是大部分(或完全)異步嗎?
Roman Starkov
2010-12-07 18:57:22 UTC
view on stackexchange narkive permalink

5年前,我們在大學裡修讀了非常短的FPGA / Verilog課程,並且我們始終在各處使用時鐘。

我現在又開始以FPGA為業餘愛好,並且我可以幫忙,但想知道那些時鐘。它們是絕對必需的,還是基於FPGA的設計可以完全異步?我能構建出一堆複雜的邏輯並儘快使東西產生漣漪嗎?

我意識到這樣做有很多陷阱,就像知道信號何時傳播到各個部分一樣的電路和輸出已穩定。那不是重點。並不是我要真正構建一個完全異步的設計,而只是為了增進我對功能的理解。

對於我的初學者來說,似乎唯一需要時鐘的結構是 reg ,據我了解,典型的FPGA(例如Cyclone II)將其觸發器預先連接到特定的時鐘信號。它是否正確?是否還有其他類似的隱式時鐘,它們通常可以由設計手動驅動嗎?

我知道劍橋大學的Simon Moore對異步設計進行了大量研究,包括製造測試芯片。它需要一套全新的設計工具,並且具有奇怪的副作用:例如,執行速度與溫度成反比。
九 答案:
Andrey
2010-12-07 19:31:47 UTC
view on stackexchange narkive permalink

一個簡短的答案是:是的;一個更長的答案是:這不值得花時間。

FPGA本身可以運行完全異步的設計,這沒有問題。您得到的結果就是問題,因為通過任何FPGA進行時序不是很可預測的。更大的問題是,在不同的位置和路線會話之間,您的時間安排和最終設計幾乎肯定會有所不同。您可以對單個異步路徑設置約束,以確保它們不會花費太長時間,但是我不太確定可以指定最小延遲。

最後,這意味著您的設計將即使是很小的設計更改,也無法預測並且可能完全可變。每次更改任何內容時,您都必須仔細閱讀整個時序報告,以確保它仍然可以工作。另一方面,如果設計是同步的,則只需要在佈局和佈線的末尾查找通過或失敗的情況(假設您的約束設置正確,就不會花費很長時間)。

在實踐中,人們的目標是完全同步的設計,但是如果您只需要緩衝或反轉信號,則只要適當地限制它就不需要經過觸發器。

希望這可以清除起來。

我必須將某些設備用於異步FPGA設計。他們很難合作。請至少使用時間限制
確實可以用FPGA實現異步設計,但是大多數FPGA都是為支持特定的同步設計而構建的。它們具有大量資源(PLL,時鐘分配電路和大量的觸發器),這些資源將在異步設計中被浪費掉。
這個答案沒有提供特別好的建議。您可以創建一個無時鐘的FPGA,它實際上簡化了佈局和佈線,消除了許多有關時序要求的問題,並且由於細粒度的流水線可以具有相當高的吞吐量。 當您嘗試將時鐘電路映射到無時鐘FPGA時,真正的問題就來了,因為它們具有非常不同的時序特性。可以做到,只需要更多的前端處理就可以完成轉換。 http://vlsi.cornell.edu/~rajit/ps/rc_overview.pdf
您可以進行對延遲不敏感的設計。我設計了一個小電路,用於在觸發器中存儲一個位,並在檢測到該位已存儲時發出信號。它還檢測該位是否已被實際接收(而不是由於延遲發送1而顯示為零),並且不受干擾。電路必須通過握手進行通信,並使用這些類型的組件進行交互。電路本身只是等待輸出完成,然後進行所有通信。沒有鐘
davidcary
2011-01-16 03:38:21 UTC
view on stackexchange narkive permalink

“可以構建一個複雜的邏輯堆,並使其產生最快的波動嗎?”是的。已經構建了完全異步的整個CPU,至少其中一個是世界上最快的CPU。 。 http://en.wikipedia.org/wiki/Asynchronous_circuit#Asynchronous_CPU

讓人感到討厭的是,儘管從理論上講它們比同步設計具有多個優勢,但人們拒絕了異步設計技術。技術,僅僅是因為(如其他人所說的)異步設計不受可用工具的支持。

對我來說,這就像建議所有橋樑都由木頭製成,因為更多的人有木工

幸運的是,可以通過使用全局異步本地同步(GALS)獲得異步設計的一些優勢,同時仍然使用大多數同步設計技術。設計。

我對[將PCB在方形網格上佈線]的現代趨勢感到完全相同(http://electronics.stackexchange.com/questions/7913/why-is-there-such-a-strong-preference-for- 45度角度的PCB佈線),儘管遷移帶來的好處遠沒有那麼明顯。
@romkyns-這更多地歸因於編寫使用非直線網格的PCB軟件“很難”的事實。
我只是偶然發現了您對先前問題的回答。 GALS似乎是採用多個同步塊並將它們互連的設計的術語,即使它們彼此異步。是否有針對由具有已知時序關係的不同時鐘作為時鐘源的設備的術語(例如,時鐘X(X +)的上升沿將不遲於Y(Y +)的上升沿,並且將顯著出現在Y的下降沿之前(Y-); X +可用於為由Y +計時的數據導出數據,反之亦然; Y-為從X +導出的數據計時。
@supercat:我懷疑您是在暗示[四階段邏輯](http://en.wikipedia.org/wiki/four-phase_logic)。這是似乎已被忘記的多相[時鐘信號](http://en.wikipedia.org/wiki/Clock_signal)之一。
我沒有想到動態邏輯。我只是在思考如何確保與可能略有偏斜的時鐘信號建立適當的因果關係。如果時鐘#2的上升沿是通過將時鐘#1與某些其他邏輯組合而得出的,則它將在時鐘#1的上升沿之後發生,使用時鐘#1的上升沿來鎖存在時鐘#1上改變的信號。時鐘2的上升沿將產生競爭條件。相反,使用時鐘#2的下降沿應該是安全的。
@supercat:對。也許您正在考慮使用[兩相時鐘](http://en.wikipedia.org/wiki/Clock_signal#Two-phase_clock)或其他一些多相時鐘系統的系統。如果您找到這些系統的更好用語,請告訴我。
@davidcary:的一種,除了一根導線上的兩個“相”以外-一相受上升沿控制,一相受下降沿控制。基本上,我將鎖存時鐘分為四類:乾淨上升,乾淨下降,遲到上升,遲到下降。由(L / CB)時鐘鎖存的上升沿或下降沿可以從任何上升沿或下降沿獲取數據。 L / CB的上升沿可以在任何下降沿從L / CB乾淨的上升沿獲取數據。 L / CB的下降沿後期可能會從L / CB乾淨下降或任何上升中獲取數據。
@davidcary:假定任何鎖存器的最快傳播時間超過最長的保持時間,並提供從時鐘沿通過時鐘門控邏輯和該邊沿觸發的“遲”鎖存器到隨後沿邊沿觸發的任何鎖存器的最長信號路徑如果不超過時鐘沿之間的最短時間,我認為這樣的設計應該是完全可靠的,並且在傳播延遲的任何組合下都不會產生內部產生的亞穩定性。
@supercat-有趣的是,我最近設計了一種使用這種方法的處理器:我有一個時鐘輸入,按順序運行多個階段(1)使用僅具有一個輸入端口的寄存器文件設計時,每個週期允許多個寄存器更新(2)具有從指令讀取到寄存器寫回的兩階段流水線,週期為1.5個週期,因此流水線危害僅持續單個指令長度。這裡有一個概述(此處)(https://hackaday.io/project/159003-c61),這裡有一個更詳細的文章[此論壇主題](https://hackaday.io/project/159003-c61)。
當我發現時間時,我正在為它進行PCB佈局(到目前為止,它只是模擬的),但我使用的逆變器的輸出端增加了電容,以便按順序在寄存器文件寫入時鐘上提供一些延遲以便有時間在實際寫入結果之前完成所有其他操作。在仿真中,一切看起來都很好……我們將看到有一塊實際的電路板會發生什麼。:)
@Jules:謝謝。CPU設計看起來很迷人。
supercat
2011-03-01 04:32:17 UTC
view on stackexchange narkive permalink

尚未提及的一個因素是亞穩性。如果鎖存電路被一系列輸入/轉換擊中,使得結果狀態將取決於傳播延遲或其他不可預測的因素,則不能保證結果狀態將是乾淨的“高”或“低”。例如,考慮一個沿邊沿觸發的觸發器,該觸發器當前正在輸出“低”電平,並且其輸入變化幾乎在時鐘沿到達的同時從低變為高。如果時鐘沿在輸入改變之前發生足夠長的時間,則輸出將一直處於低電平,直到下一個時鐘沿。如果時鐘沿在輸入更改後發生足夠長的時間,則輸出將快速從低到高切換一次,並保持在那裡直到下一個時鐘沿。如果這些條件均不適用,則輸出可以執行任何操作 i>。它可能會保持低電平,或快速切換一次並保持高電平,但可能會保持低電平一會兒,然後切換,或者先切換再切換一段時間,再來回切換幾次,等等。

如果設計是完全同步的,並且所有輸入都是雙同步的,那麼定時脈衝很難擊中同步器的第一個鎖存器,從而導致其在理想的時間切換到混淆第二個閂鎖。通常,將此類事情視為“將不會發生”是安全的。但是,在異步設計中,通常很難對此類事情進行推理。如果違反了鎖存電路的時序約束(不僅是觸發器,還違反了將用作鎖存器的邏輯的任何組合),那麼直到下一次出現有效的輸入條件迫使鎖存器時,才知道輸出將做什麼。到已知狀態。延遲的輸出很可能會導致違反下游輸入的時序約束,從而導致意外情況,尤其是如果使用一個輸出來計算兩個或更多輸入(某些可能被計算為鎖存器為高電平,而另一些則被視為鎖存器為高電平)

對異步電路建模的最安全方法是,幾乎每一個輸出電路在“ 0”和“ 1”之間切換時都會產生一小段“ X”輸出。不幸的是,即使在實際上幾乎可以肯定會導致穩定行為的情況下,這種方法也經常導致幾乎所有節點都顯示“ X”。如果系統在仿真時可以正常工作,因為輸入更改後所有輸出立即變為“ X”,並保持“ X”直到輸入穩定,這是電路可以工作的好兆頭,但是要使異步電路在這樣的約束下工作通常很困難。

mikeselectricstuff
2010-12-07 20:05:33 UTC
view on stackexchange narkive permalink

當然,如果您的設計要求足夠慢,以至於許多內部延遲仍然比您關心的時間長幾個數量級,那麼這不是問題,您可以查看時序報告以關注這,但是在沒有內部狀態信息的情況下可以有效執行的操作受到限制。如果您只想製作一個100輸入多路復用器之類的東西,那就好了,請記住每個輸入都有不同的傳播延遲。實際上,由於大量不可預測的延遲振盪反饋迴路,您可能會得到一些有趣且混亂的效果-也許基於完全異步FPGA的合成器可能是下一個“模擬”。

Martin Thompson
2010-12-07 22:01:43 UTC
view on stackexchange narkive permalink

是的,可以。您可以完全忽略觸發器,並完全由LUT構建。和/或您可以將大多數Xilinx FPGA的狀態元素用作(電平觸發)鎖存器,而不是(沿邊沿觸發)觸發器。

這樣做的危險在於,除非限制邏輯編譯器,否則它可能會產生某些門的傳播時間為“負”的邏輯。例如,如果指定“ X =(someComplexFormula)”和“ Y = X&D”,並且編譯器用該公式替換X並確定“ X&D”等於“ A&D”,則編譯器可以用A和D代替X來代替計算Y,而不是用X代替,因此允許Y的計算比X更快。這種替換對於組合邏輯是有效的,但對異步順序邏輯造成了嚴重破壞。
@supercat-我從未使用過Xilinx的工具,但是當我使用Altera FPGA時,您始終可以選擇將任何關鍵路徑指定為連接的門模塊,而不是RTL,此時將禁用任何此類優化。
@Jules:我所有的可編程邏輯設計都使用了Abel,這是一種有點愚蠢的語言,但是可以用某些CPLD可以實現的方式指定事物,但是這可能給VHDL或Verilog綜合工具帶來困難。例如,在我的一個項目中,我利用Xilinx部件具有時鐘,異步設置和異步復位的事實來實現可異步加載的移位寄存器。如果我需要在從未使用過Verilog或VHDL的FPGA中做這些事情,那麼我應該如何學習呢?順便說一句,如果有記憶,我用T觸發器做移位器,然後...
...這樣的時序使得異步寫入只能在T輸入為低電平時發生,假設如果在寫脈衝的開始附近出現了一個nop時鐘,那麼異步寫入將遠遠超出它。為了確保穩定的值,並且如果nop-clock發生在末尾附近,它將只是鎖存一個仍然穩定的值。我不確定在VHDL或Verilog中如何有效處理此類情況。
@supercat-遇到類似的問題,請看《 Cyclone IV器件手冊》,我發現解決同一問題的最佳方法是使用“ LAB範圍的同步負載”選項(“ LAB”是一組16個邏輯元素,因此,如果此類寄存器的大小不等於16位的倍數,則會浪費一些位,但這似乎是最有用的選擇)。我現在有兩個選擇:我可以編寫功能性Verilog,它將要求綜合工具選擇一種實現所需寄存器的方式(通常這是最佳選擇),或者,如果我的時間嚴格的話……
...要求,我可以強制這樣做:瀏覽[設備上可用的低級模塊列表](https://www.altera.com/content/dam/altera-www/global/zh_CN/pdfs/literature/catalogs/lpm.pdf)我發現`lpm_ff`可以實現具有同步負載的d型或t型觸發器。通過使用該模塊,我可以確保將這些功能準確地映射到設備的低級功能,而不會對其進行優化。
Brian Carlton
2010-12-07 21:56:33 UTC
view on stackexchange narkive permalink

正如@Andrey指出的那樣,這不值得您花費時間。具體來說,這些工具不會執行此操作,因此您將完全依靠自己。另外,由於它們具有內置寄存器,因此不使用它們將不會節省任何東西。

Peter Green
2015-12-09 20:19:15 UTC
view on stackexchange narkive permalink

確實有三種類型的設計。

  1. 組合。沒有時鐘,也沒有反饋路徑,並且系統沒有“內存”。當一個或多個輸入發生更改時,更改會通過邏輯波動。一段時間後,輸出穩定到新狀態,直到輸入再次更改為止。
  2. 同步順序。一個系統是由寄存器和組合邏輯塊組成的,這些寄存器由少量(通常為1個)時鐘提供時鐘。如果有多個時鐘,則可能需要對從一個時鐘域傳遞到另一時鐘域的信號進行特殊處理。
  3. 異步順序。有反饋路徑,鎖存器,寄存器或其他元素可以為過去的事件提供設計存儲,而不能由簡單分析的時鐘線提供時鐘。
  4. ol>

    通常,在合成/優化組合邏輯時,工具將假定最重要的是最終結果以及確定該結果所需的最長時間。

    您可以構建一個純粹組合的設計,它將獲得正確的結果。輸出可能會以任何順序更改,並且可能在達到最終值之前更改多次。這樣的設計非常浪費邏輯資源。大多數邏輯元素將大部分時間閒置,而在順序系統中,您可以重用這些元素來處理多個數據項。

    在順序同步系統中,最重要的是組合輸出當它們移至下一個觸發器時,該模塊已穩定到正確的狀態。它們的順序變化或沿途是否出現故障都無關緊要。再次,這些工具可以輕鬆地將其轉換為邏輯,只要時鐘足夠慢就能給出正確的答案(並且它們可以告訴您要使用的時鐘是否足夠慢)。

    在異步順序系統中,那些假設超出了窗口。毛刺可能很重要,輸出更改的順序可能很重要。工具和FPGA本身都是為同步設計而設計的。關於在標準FPGA或專門設計的FPGA上實現異步系統的可能性,已經有很多討論(如果您想了解更多,請使用Google異步FPGA設計),但仍處於主流公認的設計實踐之外

mikeselectricstuff
2010-12-07 19:31:06 UTC
view on stackexchange narkive permalink

是的。如果您沒有進程類型構造,則它不應執行諸如推斷寄存器之類的操作。諸如板載內存之類的東西會需要時鐘,儘管如果您確實需要,則可能會異步生成這些時鐘。

您的意思是只回答一個嗎?
Harrygoz
2018-07-15 17:16:25 UTC
view on stackexchange narkive permalink

FWIW,我想我應該補充一點,那就是異步邏輯解決方案中的一個顯而易見的目標是全球降低功耗。

那些全局時鐘/ PLL /緩衝器會消耗很多焦耳。

隨著FPGA解決方案進入電池供電的領域(例如Lattice Icestick),那麼這方面將引起更多關注。

這是一個很好的觀點,儘管值得考慮的是,設計不良的組合電路在某些情況下會執行與時序電路相同的操作,因為在計算部分結果並更新最終輸出以解決這些問題時,它們會產生大量的瞬態過渡,在CMOS電路中(與大多數FPGA一樣),功耗大致與轉換數成正比。時鐘可能會導致不必要的過渡,但是您也可以通過禁用電路中當前不需要的時鐘來降低功耗。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 2.0許可。
Loading...