FPGA(Field-Programmable Gate Array),,即現(xiàn)場(chǎng)可編程門(mén)陣列,,它是作為專(zhuān)用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,,又克服了原有可編程器件門(mén)電路數(shù)有限的缺點(diǎn),。對(duì)于時(shí)序如何用FPGA來(lái)分析與設(shè)計(jì),本文將詳細(xì)介紹,。
基本的電子系統(tǒng)如圖 1所示,,一般自己的設(shè)計(jì)都需要時(shí)序分析,如圖 1所示的Design,,上部分為時(shí)序組合邏輯,,下部分只有組合邏輯。而對(duì)其進(jìn)行時(shí)序分析時(shí),,一般都以時(shí)鐘為參考的,,因此一般主要分析上半部分。在進(jìn)行時(shí)序分析之前,需要了解時(shí)序分析的一些基本概念,,如時(shí)鐘抖動(dòng),、時(shí)鐘偏斜(Tskew)、建立時(shí)間(Tsu),、保持時(shí)間(Th)等,。時(shí)序分析也就是分析每一個(gè)觸發(fā)器(寄存器)是否滿(mǎn)足建立時(shí)間/保持時(shí)間,而時(shí)序的設(shè)計(jì)的實(shí)質(zhì)就是滿(mǎn)足每一個(gè)觸發(fā)器的建立時(shí)間/保持時(shí)間的要求,。
圖 1 基本的電子系統(tǒng)
一,、時(shí)鐘抖動(dòng)和時(shí)鐘偏斜
1.時(shí)鐘抖動(dòng)
時(shí)鐘信號(hào)邊沿變化的不確定時(shí)間稱(chēng)為時(shí)鐘抖動(dòng),如圖 2所示,。一般情況下的時(shí)序分析是不考慮時(shí)鐘抖動(dòng),,如果考慮時(shí)鐘抖動(dòng),則建立時(shí)間應(yīng)該是Tsu+T1,,保持時(shí)間應(yīng)該是Th+T2,。
圖 2 時(shí)鐘抖動(dòng)時(shí)序圖
2.時(shí)鐘偏斜
時(shí)序偏斜分析圖如圖 3所示。時(shí)鐘的分析起點(diǎn)是源寄存器(Reg1),,終點(diǎn)是目標(biāo)寄存器(Reg2),。時(shí)鐘在圖中的結(jié)構(gòu)中傳輸也會(huì)有延遲,時(shí)鐘信號(hào)從時(shí)鐘源傳輸?shù)皆醇拇嫫鞯难訒r(shí)為T(mén)c2s,,傳輸?shù)侥繕?biāo)寄存器的延時(shí)為T(mén)c2d,。時(shí)鐘網(wǎng)絡(luò)的延時(shí)為T(mén)c2s與Tc2d之差,即Tskew=Tc2d-Tc2s,。
圖 3 時(shí)鐘偏斜時(shí)序圖
二,、建立時(shí)間和保持時(shí)間
建立時(shí)間(Setup Time)常用Tsu表示,指的是在觸發(fā)器的時(shí)鐘信號(hào)上升沿到來(lái)以前,,數(shù)據(jù)和使能信號(hào)穩(wěn)定不變的時(shí)間,,如果建立時(shí)間不夠,數(shù)據(jù)將不能在這個(gè)時(shí)鐘上升沿被打入觸發(fā)器,,使能信號(hào)無(wú)效,,也就是說(shuō)在這個(gè)時(shí)鐘周期對(duì)數(shù)據(jù)的操作時(shí)無(wú)效的;保持時(shí)間(Hold Time)常用Th表示,,指的是在觸發(fā)器的時(shí)鐘信號(hào)上升沿到來(lái)以后,,數(shù)據(jù)和使能信號(hào)穩(wěn)定不變的時(shí)間,如果保持時(shí)間不夠,,數(shù)據(jù)同樣不能被打入觸發(fā)器,,對(duì)數(shù)據(jù)的操作同樣是無(wú)效的,使能信號(hào)無(wú)效,。數(shù)據(jù)要能穩(wěn)定傳輸,,就必須滿(mǎn)足建立時(shí)間和保持時(shí)間的關(guān)系,,圖 4標(biāo)識(shí)了它們間的關(guān)系。
圖 4 建立時(shí)間/操持時(shí)間的概念
三,、發(fā)送沿和捕獲沿
(1)發(fā)送沿(Launch Edge):前級(jí)寄存器發(fā)送數(shù)據(jù)對(duì)應(yīng)的時(shí)鐘沿,,是時(shí)序分析的起點(diǎn);
(2)捕獲沿(Latch Edge):后記寄存器捕獲數(shù)據(jù)對(duì)應(yīng)的時(shí)鐘沿,,是時(shí)序分析的終點(diǎn),。相對(duì)于launch Edge通常為一個(gè)時(shí)鐘周期,但不絕對(duì),,如多周期,。
“信號(hào)跳變抵達(dá)窗口”:對(duì)latch寄存器來(lái)說(shuō),從previous時(shí)鐘對(duì)應(yīng)的Hold Time開(kāi)始,,到current 時(shí)鐘對(duì)應(yīng)的Setup Time 結(jié)束,。
“信號(hào)電平采樣窗口”:對(duì)latch寄存器來(lái)說(shuō),從current時(shí)鐘對(duì)應(yīng)的Setup Time開(kāi)始,,到current時(shí)鐘對(duì)應(yīng)的Hold Time結(jié)束,。
launch寄存器必須保證驅(qū)動(dòng)的信號(hào)跳變到達(dá)latch寄存器的時(shí)刻處于“信號(hào)跳變抵達(dá)窗口”內(nèi),才能保證不破壞latch寄存器的“信號(hào)電平采樣窗口”,。
圖 5 Launch Edge和Latch Edge
四,、數(shù)據(jù)和時(shí)鐘的時(shí)序分析
如圖 6所示,為分析建立時(shí)間/保持時(shí)間的基本電路圖,。Tclk1為Reg1的時(shí)鐘延時(shí),,Tclk2為Reg2的時(shí)鐘延時(shí),Tco為Reg1固有延時(shí),,Tdata為Reg1的到Reg2之間組合邏輯的延時(shí),,Tsu為Reg2的建立時(shí)間,Th為Reg2的保持時(shí)間,,設(shè)時(shí)鐘clk周期為T(mén),這里分析數(shù)據(jù)的建立時(shí)間和保持時(shí)間,。
圖 6 基本電路圖
1,、建立時(shí)間的分析
如圖 7所示,建立時(shí)間的分析是以第一個(gè)launch Edge為基準(zhǔn),,在Latch Edge查看結(jié)果,。建立時(shí)間的裕量(T為時(shí)鐘周期):
Setup Stack = (T+Tclk2) – Tsu – (Tclk1+Tco+Tdata)
假設(shè)△T = Tclk2-Tclk1,則:
Setup Stack = (T+△T) – Tsu – (Tco+Tdata)
可見(jiàn)△T<0影響建立時(shí)間,,使建立時(shí)間的要求更加苛刻,。因此對(duì)于△T盡量避免,采用同步單時(shí)鐘,,并且盡量采用全局的時(shí)鐘信號(hào),,這樣△T幾乎為0,,,△T的影響幾乎不存在,可以忽略不計(jì),。
如果建立時(shí)間的裕量Setup Stack小于0,,則不滿(mǎn)足建立時(shí)間,也就會(huì)產(chǎn)生不穩(wěn)定態(tài),,并通過(guò)寄存器傳輸下去,。
圖 7 建立時(shí)間時(shí)序分析圖
2、保持時(shí)間的分析
如圖 8所示,,保持時(shí)間的分析是以第二個(gè)launch Edge為基準(zhǔn),,在Latch Edge查看結(jié)果。保持時(shí)間的裕量:
Hold Stack = (Tclk1+Tco+Tdata) – Tclk2 – Th
假設(shè)△T = Tclk2-Tclk1,,則:
Hold Stack = (Tco+Tdata) – △T – Th
可見(jiàn)△T>0影響保持時(shí)間,,使保持時(shí)間的要求更加苛刻。,。因此對(duì)于△T盡量避免,,采用同步單時(shí)鐘,并且盡量采用全局的時(shí)鐘信號(hào),,這樣△T幾乎為0,,,△T的影響幾乎不存在,可以忽略不計(jì),。
如果保持時(shí)間的裕量Hold Stack小于0,,則不滿(mǎn)足保持時(shí)間,也就會(huì)產(chǎn)生不穩(wěn)定態(tài),,并通過(guò)寄存器傳輸下去,。
圖 8 保持時(shí)間時(shí)序分析圖
五、DT6000S項(xiàng)目實(shí)例
DT6000S項(xiàng)目上有4路光以太網(wǎng)接口連接到FPGA,,由FPGA進(jìn)行實(shí)現(xiàn)MAC層和解碼IEC61850的SV和GOOSE,。以太網(wǎng)PHY通過(guò)MII接口和FPGA,因此FPGA與外部的接口有4路MII接口,。項(xiàng)目初期是實(shí)現(xiàn)1路光以太網(wǎng)接口,,并且驗(yàn)證功能正確之后,但是后期變成的4路光以太網(wǎng)時(shí),,總會(huì)存在1路光以太網(wǎng)通信不正常,。經(jīng)過(guò)分析得到是FPGA通MII接口和PHY的時(shí)序不滿(mǎn)足。如圖 9所示為MII接口的時(shí)序圖,,時(shí)序不滿(mǎn)足分為T(mén)X_CLK和RX_CLK,。
其一是PHY輸出的TX_CLK和FPGA依據(jù)TX_CLK產(chǎn)生的TXD[3:0]&TX_EN延時(shí)大,主要延時(shí)為內(nèi)部邏輯的延時(shí),,PCB延時(shí)小并且一致,,導(dǎo)致PHY的TX_CLK的建立時(shí)間不滿(mǎn)足,,從而導(dǎo)致發(fā)送數(shù)據(jù)錯(cuò)誤。
其二是PHY輸出的RX_CLK和RXD[3:0]&RX_DV&RX_ER到FPGA內(nèi)部同步觸發(fā)器的延時(shí)之差太大,,導(dǎo)致FPGA內(nèi)部同步觸發(fā)器的RX_CLK的建立時(shí)間不滿(mǎn)足,,從而導(dǎo)致接收數(shù)據(jù)錯(cuò)誤。
因此FPGA在綜合時(shí)需要添加約束,,使之時(shí)序滿(mǎn)足要求,,約束的條件為T(mén)XD[3:0]和TX_EN的輸出延時(shí)要少。RX_CLK和RXD[3:0]&RX_DV&RX_ER路徑延時(shí)之差要小,。添加約束之后,,4路MII接口的光以太網(wǎng)數(shù)據(jù)通信就正常了。
圖 9 MII時(shí)序圖
這里闡述了時(shí)序分析基礎(chǔ),,說(shuō)明概念的同時(shí)進(jìn)行了時(shí)序分析,,通過(guò)時(shí)序分析理解建立時(shí)間和保持時(shí)間。希望大家閱讀本文之后可以對(duì)FPGA時(shí)序分析有進(jìn)一步的了解,。