當(dāng)前位置:首頁 > 嵌入式 > 嵌入式硬件

利用FPGA實(shí)現(xiàn)大型設(shè)計(jì)時(shí),可能需要FPGA具有以多個(gè)時(shí)鐘運(yùn)行的多重?cái)?shù)據(jù)通路,這種多時(shí)鐘FPGA設(shè)計(jì)必須特別小心,需要注意最大時(shí)鐘速率、抖動(dòng)、最大時(shí)鐘數(shù)、異步時(shí)鐘設(shè)計(jì)和時(shí)鐘/數(shù)據(jù)關(guān)系。設(shè)計(jì)過程中最重要的一步是確定要用多少個(gè)不同的時(shí)鐘,以及如何進(jìn)行布線,本文將對(duì)這些設(shè)計(jì)策略深入闡述。

FPGA設(shè)計(jì)的第一步是決定需要什么樣的時(shí)鐘速率,設(shè)計(jì)中最快的時(shí)鐘將確定FPGA必須能處理的時(shí)鐘速率。最快時(shí)鐘速率由設(shè)計(jì)中兩個(gè)觸發(fā)器之間一個(gè)信號(hào)的傳輸時(shí)間P來決定,如果P大于時(shí)鐘周期T,則當(dāng)信號(hào)在一個(gè)觸發(fā)器上改變后,在下一個(gè)邏輯級(jí)上將不會(huì)改變,直到兩個(gè)時(shí)鐘周期以后才改變,如圖1所示。



傳輸時(shí)間為信號(hào)在第一個(gè)觸發(fā)器輸出處所需的保持時(shí)間加上兩級(jí)之間的任何組合邏輯的延遲,再加兩級(jí)之間的布線延遲以及信號(hào)進(jìn)入第二級(jí)觸發(fā)器的設(shè)置時(shí)間。無論時(shí)鐘速率為多少,每一個(gè)FPGA設(shè)計(jì)所用的時(shí)鐘必須具有低抖動(dòng)特性。抖動(dòng)S是觸發(fā)器的一個(gè)時(shí)鐘輸入到另一個(gè)觸發(fā)器的時(shí)鐘輸入之間的最大延遲。為使電路正常工作,抖動(dòng)必須小于兩個(gè)觸發(fā)器之間的傳輸時(shí)間。

圖2顯示了如果抖動(dòng)大于傳輸時(shí)間(S>P)將出現(xiàn)的情況,該電路用時(shí)鐘的兩個(gè)上升沿來延遲信號(hào)1。然而,信號(hào)1上的一個(gè)改變會(huì)在相同的時(shí)鐘周期上傳輸?shù)降男盘?hào)3上,從而引起信號(hào)2的改變。因?yàn)镾>P,電路將不能不正常。



須注意的是,時(shí)鐘速率與傳輸延時(shí)并沒有什么關(guān)系,甚至普通的100bps時(shí)鐘也會(huì)出現(xiàn)抖動(dòng)問題。這意味著雖然FPGA供應(yīng)商宣稱他們的芯片具有較短的傳輸時(shí)間和很高的時(shí)鐘速率,但抖動(dòng)問題可能會(huì)嚴(yán)重,甚至那些沒有運(yùn)行在最高速率上的設(shè)計(jì)也是如此。

好在FPGA供應(yīng)商已經(jīng)認(rèn)識(shí)到時(shí)鐘抖動(dòng)的影響,并在他們的芯片中提供低抖動(dòng)的布線資源。這些特殊的布線能夠在芯片中一個(gè)給定范圍內(nèi)的任何兩個(gè)觸發(fā)器之間提供一個(gè)確定的最大抖動(dòng)。部分產(chǎn)品的低抖動(dòng)資源覆蓋了整個(gè)芯片,而其它的則可能只覆蓋了FPGA邏輯塊中的一個(gè)特定的行或列。對(duì)于一個(gè)需要很多不同時(shí)鐘源的設(shè)計(jì),這些低抖動(dòng)FPGA是比較理想的選擇。

多時(shí)鐘設(shè)計(jì)的最嚴(yán)重問題之一是用異步時(shí)鐘將兩級(jí)邏輯結(jié)合在一起。由于異步時(shí)鐘會(huì)產(chǎn)生亞穩(wěn)態(tài),從而嚴(yán)重降低設(shè)計(jì)性能,或完全破壞設(shè)計(jì)所能實(shí)現(xiàn)的功能。在觸發(fā)器的時(shí)序要求產(chǎn)生沖突時(shí)(設(shè)置時(shí)間和保持時(shí)間)將產(chǎn)生亞穩(wěn)態(tài),觸發(fā)器的最終輸出是未知的,并使整個(gè)設(shè)計(jì)處于不確定狀態(tài)。如果有一級(jí)邏輯要將數(shù)據(jù)異步地發(fā)送到另一級(jí),圖3所示的情形將不能滿足觸發(fā)器的設(shè)置和保持時(shí)間要求。確切地說,如果設(shè)計(jì)中含有異步邏輯將有可能會(huì)產(chǎn)生亞穩(wěn)態(tài)。在處置異步資源時(shí)必需非常小心,因?yàn)檫@可能產(chǎn)生一些很嚴(yán)重的問題。




多時(shí)鐘設(shè)計(jì)

本文以電信應(yīng)用中的E3多路復(fù)用/解復(fù)用設(shè)計(jì)為例。如圖4所示,多路復(fù)用器接收來自一組獨(dú)立線路接口芯片的16個(gè)獨(dú)立E1信道,每一個(gè)信道都工作于2.048MHz;經(jīng)復(fù)用后,這些E1流組合成4個(gè)E2流,分別工作在8.0448MHz;4個(gè)E2流最后組合成一個(gè)E3流,以34.368Mbps的速率串行發(fā)送出去。在接收端執(zhí)行相反的操作:解復(fù)用器從E3流提取4個(gè)E2數(shù)據(jù)流,然后從E2流提取16個(gè)E1流,最終將E1流發(fā)送到接收端的線路接口芯片。



這些E1線路接口在發(fā)送和接收時(shí)都獨(dú)立工作,因此2.048MHz的時(shí)鐘速率可以有+/- 20ppm的偏差。同樣,因?yàn)榇蠖鄶?shù)系統(tǒng)同時(shí)發(fā)送和接收數(shù)據(jù),分立的多路復(fù)用器和多路解復(fù)用器將提供2個(gè)獨(dú)立的E3流(發(fā)送和接收)。因此,兩個(gè)34.368MHz的時(shí)鐘可以存在細(xì)微的差異。

由于E2流是在芯片上產(chǎn)生的,這些E2多路復(fù)用器可以共享同一個(gè)8.448MHz時(shí)鐘。然而,由于接收的數(shù)據(jù)速率與我們所設(shè)計(jì)的板無關(guān)(且不能假定所有E2多路復(fù)用器使用相同時(shí)鐘),所以E2解復(fù)用器時(shí)鐘必須能工作在略為不同的速率下。

此外,假定設(shè)計(jì)中需要一個(gè)由工作頻率為1MHz的處理器控制的獨(dú)立SPI(串行外圍接口)總線接口,該接口用于狀態(tài)和控制。這樣一來,設(shè)計(jì)中總共用了32個(gè)2.048MHz時(shí)鐘,5個(gè)8.448MHz時(shí)鐘,2個(gè)34.368MHz時(shí)鐘和一個(gè)1MHz時(shí)鐘,總共多達(dá)40個(gè)時(shí)鐘。

本設(shè)計(jì)中最快時(shí)鐘是34.368MHz E3時(shí)鐘。FPGA的最大時(shí)鐘速率的確定很重要,因?yàn)樵O(shè)計(jì)的差異將影響到該最大值。然而,在芯片商的資料手冊(cè)中常常可以看到“全局時(shí)鐘設(shè)置及保持時(shí)間”和“至CLB輸出的時(shí)鐘”兩個(gè)參數(shù),將這兩個(gè)參數(shù)的最大值相加,再增加25%就能可以得到最小時(shí)鐘周期的初略值,在最大時(shí)鐘速率條件下允許10%的余量,以保證過熱條件下能正常工作。因此,我們?cè)O(shè)置的最小速率為40MHz,很多較新的FPGA都能夠很容易地支持該頻率。事實(shí)上,F(xiàn)PGA供應(yīng)商已經(jīng)推出了超過300MHz的器件。

在確定了能滿足最大頻率要求的FPGA后,就需要保證有足夠的空間來實(shí)現(xiàn)你的設(shè)計(jì)。如果所選的FPGA沒有足夠的余量,就不能提供足夠的布線資源來滿足設(shè)計(jì)的時(shí)序約束。通常芯片供應(yīng)商宣稱的速率是最佳條件下的速率,F(xiàn)PGA供應(yīng)商一般建議FPGA邏輯在布線功能開始明顯變差以前可以用到80%。在選擇FPGA器件時(shí),建議在新的設(shè)計(jì)時(shí)最好使FPGA邏輯用到50%左右,這樣就允許計(jì)算起始設(shè)計(jì)大小出現(xiàn)超差,以及為在設(shè)計(jì)起動(dòng)后產(chǎn)生不可避免的設(shè)計(jì)變更留出空間。如果最終的設(shè)計(jì)只占用低于50%的資源,則可以使用同一系列中較小的FPGA以降低成本。

通過時(shí)序約束來規(guī)定慢時(shí)鐘速率,從而可以改進(jìn)設(shè)計(jì)中最快時(shí)鐘的布線。在多路復(fù)用器例子中,如果設(shè)置FPGA布線工具SPI總線時(shí)鐘為1MHz,而E3時(shí)鐘為40MHz,布線工具將盡量使E3時(shí)鐘的邏輯電路模塊相鄰布局。如果由于空間的限制而不能將全部電路布局在一起,則首先應(yīng)將SPI邏輯另外布局,因?yàn)镾PI邏輯可以處理更長傳輸延遲。所有FPGA供應(yīng)商的布線工具都能規(guī)定這些較慢時(shí)鐘速率。

減少時(shí)鐘數(shù)量

根據(jù)市場(chǎng)調(diào)查,目前還沒有哪個(gè)FPGA器件能夠支持這種多路復(fù)用器/解復(fù)用器設(shè)計(jì)所需的40個(gè)時(shí)鐘。所以,我們必須減少所需要的時(shí)鐘數(shù)。

首先了解E2和E3多路復(fù)用器的時(shí)鐘。前面已經(jīng)分析了4個(gè)E2多路復(fù)用器工作在相同時(shí)鐘下的可接受度,E3多路復(fù)用器運(yùn)行于比E2時(shí)鐘高得多的速率,必需使用一個(gè)不同的時(shí)鐘。但是,如果我們從E3時(shí)鐘中引出E2時(shí)鐘是否可行呢?因?yàn)镋3多路復(fù)用器要從每個(gè)E2支路得到數(shù)據(jù),我們可以在需要E2多路復(fù)用器給我們數(shù)據(jù)時(shí),簡單地將脈沖送給每個(gè)多路復(fù)用器。我們沒有去掉任何時(shí)鐘,但E2時(shí)鐘現(xiàn)在是基于E3時(shí)鐘。

如果在所有的多路復(fù)用器中也使用同樣的時(shí)鐘,并且只使用一個(gè)使能信號(hào)來告訴E2多路復(fù)用器什么時(shí)候工作,這時(shí)會(huì)產(chǎn)生什么問題呢?如果E3多路復(fù)用器用34.368MHz時(shí)鐘產(chǎn)生使能信號(hào),在這些使能信號(hào)上的抖動(dòng)不會(huì)比用在FPGA中任何其它同步邏輯更大。所以,使能信號(hào)可以使用正常(高抖動(dòng))布線資源,這樣就不需要單獨(dú)的8.448MHz多路復(fù)用器時(shí)鐘,讀取E1數(shù)據(jù)緩沖器的數(shù)據(jù)時(shí)也是一樣。換言之,如果E2多路復(fù)用器需要數(shù)據(jù),它可以激活到特定緩沖器的使能信號(hào)。到緩沖器的時(shí)鐘本身能夠保持E3多路復(fù)用器所用的34.368MHz時(shí)鐘,如圖5所示。



最后,我們檢查16個(gè)從線路接口芯片輸入到FPGA的E1時(shí)鐘。這些時(shí)鐘有會(huì)產(chǎn)生下面幾個(gè)問題:首先,16個(gè)時(shí)鐘將占用太多可用芯片時(shí)鐘布線資源;其次,在同一個(gè)FPGA中使用16個(gè)異步時(shí)鐘來驅(qū)動(dòng)相互鄰近的觸發(fā)器,由于地彈、串?dāng)_和其它效應(yīng)將產(chǎn)生噪聲問題。例如,由于噪聲的原因,一個(gè)正邊沿觸發(fā)器會(huì)在下降邊沿時(shí)改變輸出狀態(tài),此類問題將難以處理。

作為一種可能的解決方案,我們推薦使用一個(gè)最快的時(shí)鐘來對(duì)16個(gè)E1時(shí)鐘采樣。16個(gè)輸入時(shí)鐘都接近2.048MHz,并且還有一個(gè)34.368MHz的系統(tǒng)時(shí)鐘。這樣,我們可以用34.368MHz時(shí)鐘來對(duì)16個(gè)E1時(shí)鐘分別進(jìn)行采樣,并將結(jié)果存儲(chǔ)在一個(gè)16位存儲(chǔ)器中(每個(gè)E1時(shí)鐘一個(gè)位)。然后,我們可以使用一個(gè)算法來檢測(cè)在E1時(shí)鐘上由低至高的轉(zhuǎn)換,為每一個(gè)E1數(shù)據(jù)信號(hào)產(chǎn)生一個(gè)使能信號(hào),并在下一個(gè)周期(34.368MHz)中存儲(chǔ)數(shù)據(jù)。

要成功實(shí)現(xiàn)這種方案,還必需了解時(shí)鐘-數(shù)據(jù)關(guān)系以避免在數(shù)據(jù)變化時(shí)對(duì)數(shù)據(jù)采樣,參見圖6。請(qǐng)注意在時(shí)鐘采樣電路的第一級(jí)中使用了兩個(gè)觸發(fā)器以確保在亞穩(wěn)態(tài)下正常工作。另外需要注意的是,數(shù)據(jù)和時(shí)鐘必須具有相同時(shí)鐘周期數(shù)的延遲。

我們已經(jīng)成功地將多路復(fù)用器的時(shí)鐘減少到一個(gè)時(shí)鐘,同樣的方法可否用在解復(fù)用器呢?E3解復(fù)用器必須采用一個(gè)外部輸入時(shí)鐘,這是因?yàn)轵?qū)動(dòng)E3輸入數(shù)據(jù)的同一個(gè)片外器件利用到該時(shí)鐘。由于E3解復(fù)用器知道在什么時(shí)候發(fā)送數(shù)據(jù)到E2解復(fù)用器,并能對(duì)每個(gè)E2解復(fù)用器產(chǎn)生使能信號(hào),而四個(gè)E2解復(fù)用器能工作在與E3多路復(fù)用器相同的主時(shí)鐘下。同樣,E2多路復(fù)用器能夠?yàn)槊總€(gè)E1流產(chǎn)生使能信號(hào)。

如果我們假設(shè)線路接口芯片能夠接受有間隙的時(shí)鐘(gapped clock),一旦確定發(fā)出E1使能信號(hào),我們只需要發(fā)送一個(gè)時(shí)鐘脈沖至線路接口。然而,只需要簡單地發(fā)送使能信號(hào)本身至接口芯片而不必產(chǎn)生一個(gè)新的時(shí)鐘。因?yàn)樗椭两涌诘臄?shù)據(jù)將在使能信號(hào)的下降沿產(chǎn)生改變(參見圖5),我們需要確認(rèn)接口在時(shí)鐘的上升沿進(jìn)行采樣。因?yàn)槭鼓苄盘?hào)僅在線路接口芯片上而不是在FPGA內(nèi)用作一個(gè)時(shí)鐘,就沒有必要在一個(gè)低抖動(dòng)源中進(jìn)行布線。注意這是在知道將再也不會(huì)用主時(shí)鐘的連續(xù)脈沖送數(shù)據(jù)到相同的從屬器件中時(shí)才這樣做。

1MHz SPI時(shí)鐘并不能簡單去掉,但我們現(xiàn)在通過使用使能信號(hào)和時(shí)鐘過采樣技術(shù),將原先40個(gè)時(shí)鐘減少到3個(gè),這樣我們就有了更大的器件選擇范圍。

異步時(shí)鐘

在用異步時(shí)鐘產(chǎn)生任何邏輯前應(yīng)該盡量先考慮采用其它替代方法,用異步時(shí)鐘的組合邏輯是產(chǎn)生亞穩(wěn)態(tài)問題的主要原因。同樣,當(dāng)違反觸發(fā)器的設(shè)置和保持時(shí)間約束時(shí),在一個(gè)短時(shí)間內(nèi)輸出將具有不確定性,并且將最終設(shè)定在“1”或“0”上,確切的狀態(tài)不可預(yù)知。

幸運(yùn)的是對(duì)于亞穩(wěn)態(tài)性問題已經(jīng)有一些解決方案。圖6說明了這一方案,這是一種雙寄存器方法:進(jìn)入第一級(jí)觸發(fā)器的數(shù)據(jù)與時(shí)鐘異步,所以第一級(jí)觸發(fā)器幾乎肯定是亞穩(wěn)態(tài);然而,只要亞穩(wěn)態(tài)的長度小于時(shí)鐘的周期,第二級(jí)觸發(fā)器就不會(huì)進(jìn)入亞穩(wěn)態(tài)。但是,F(xiàn)PGA供應(yīng)商很少提供亞穩(wěn)態(tài)時(shí)間,盡管該時(shí)間一般小于觸發(fā)器的設(shè)置和保持時(shí)間之和。

如果時(shí)鐘不是太快而且能滿足時(shí)序約束的話,像圖6所示的電路將可能不會(huì)產(chǎn)生亞穩(wěn)態(tài)。只要所有輸出到觸發(fā)器的通路由相同時(shí)鐘驅(qū)動(dòng),即使第一級(jí)觸發(fā)器的輸出可用,通常還是需要用像圖6中電路來將亞穩(wěn)態(tài)隔離到一條短線。采用這種方法后,將不太可能出現(xiàn)由于電路的改變而無意地在無時(shí)鐘驅(qū)動(dòng)的邏輯中用到該亞穩(wěn)太線。


如果讀數(shù)據(jù)的是一個(gè)計(jì)數(shù)器,像從一個(gè)異步FIFO讀或?qū)懙刂?,你?yīng)該考慮下列情況:一個(gè)傳統(tǒng)的3位計(jì)數(shù)器在狀態(tài)之間有一個(gè)、兩個(gè)或三個(gè)位的變化,例如讀數(shù)發(fā)生在計(jì)數(shù)器從“011”到“100”變化的瞬間,則所有三個(gè)位的值將不確定,讀的值會(huì)是八種可能狀態(tài)中的任一種。如果計(jì)數(shù)器是使用格雷碼,如表所示,則每次僅有一位發(fā)生狀態(tài)改變,如果讀數(shù)發(fā)生在計(jì)數(shù)器變化的瞬間,則只有一個(gè)位會(huì)有問題,所以在讀操作中只有兩種可能結(jié)果,而且這兩種可能結(jié)果是計(jì)數(shù)器正好在讀以前的值和正好在讀以后的值時(shí)。因?yàn)樽x正好發(fā)生在計(jì)數(shù)器產(chǎn)生變化的瞬間,你不可能確切地說哪個(gè)值是正確的,即兩者都應(yīng)該認(rèn)為是有效的。

另一個(gè)避免異步時(shí)鐘問題的方法是忽略較慢的時(shí)鐘,并用較快的時(shí)鐘來采樣。這需要數(shù)據(jù)有特殊的成幀特性(例如,具有一個(gè)前導(dǎo)碼)來定義數(shù)據(jù)邊界。這是一個(gè)常用的方法,在差不多每一個(gè)具有UART形式的嵌入式系統(tǒng)都有應(yīng)用。該方法是:采用一個(gè)非常快的時(shí)鐘,比如數(shù)據(jù)符號(hào)率的16倍,在連續(xù)發(fā)現(xiàn)15個(gè)起始字符后開始采樣,則下一個(gè)16(左右)位相當(dāng)于送的第一個(gè)位,再下一個(gè)16(左右)位對(duì)應(yīng)下一個(gè)位,并以次類推。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉