圖解:FPGA
對(duì)于I/O接口來說,F(xiàn)PGA的I/O可以支持不同類型的電平和驅(qū)動(dòng)能力,各I/O未定義之前其地位平等,例如一個(gè)數(shù)據(jù)信號(hào)可將其約束在任意引腳,只要其電平符合連接的規(guī)范。因此硬件工程師基于這種認(rèn)識(shí),在PCB布線時(shí),基于布線需要,便調(diào)整其布線的順序,例如互換兩個(gè)信號(hào)的位置。通常情況上,這種調(diào)整是沒有任何問題的。但是隨著FPGA的接口IP核硬核化的趨勢(shì),逐漸由很多的接口IP不能支持這種調(diào)整。例如對(duì)于較早的SDRAM或者DDRSDRAM來說,在xilinx和ALTERA的FPGA上,其數(shù)據(jù)、地址信號(hào)等都是可調(diào)的。但是隨著DDR2,DDR3接口的出現(xiàn),其IP接口,只能支持在某個(gè)BANK并且例化結(jié)束后直接生成相應(yīng)的約束文件,而這些的改動(dòng)將會(huì)導(dǎo)致布局布線的錯(cuò)誤。
另一些例子則是一些高速SERDES的組合。例如對(duì)于XAUI接口來說,其硬核IP(ALTERA)上就不支持4組SERDES的順序互換,這將會(huì)影響其硬核FCS的編碼。如果板級(jí)連接上與PHY的順序與FPGA例化IP的約束不一致,則其硬核PCS就不能布局布線通過(軟核FCS可以支持調(diào)整)。這種靈活性認(rèn)識(shí)導(dǎo)致硬件板級(jí)互聯(lián)的問題可謂屢見不鮮,特別是系統(tǒng)復(fù)雜度的上升,板級(jí)連線的增加,將會(huì)導(dǎo)致設(shè)計(jì)人員疏忽從而掉入“靈活性的陷阱”。
解決此類問題的方法包括:
(1)預(yù)評(píng)估,在設(shè)計(jì)之前就在FPGA上評(píng)估所需的接口的邏輯占用、約束位置、時(shí)鐘需求等等,預(yù)先評(píng)估給系統(tǒng)設(shè)計(jì)提供相應(yīng)的數(shù)據(jù)支撐和設(shè)計(jì)參考。
(2)溝通,對(duì)于設(shè)計(jì)的變更,要進(jìn)行有效溝通,不能使鐵路警察,各管一段。
(3)設(shè)計(jì)評(píng)審,雖然老套,但每個(gè)環(huán)節(jié)上的評(píng)審能有效減少掉入類似陷阱的幾率。
對(duì)于內(nèi)部存儲(chǔ)資源,大多數(shù)FPGA工程師就是拿來就用的狀態(tài)。而缺少整體內(nèi)部memory規(guī)劃,一般來說,對(duì)于單端口、雙端口、假雙端口,各型芯片手冊(cè)中都有明確的定義,例如xilinx的SPATAN3系列中最小RAM單元為18K。一個(gè)RAM例化最小單位就是18K。而新的器件中最小單位一般為9K。也就是說雖然工程師例化的較小的RAM,例如256*16.只有4K,但是其也占用一個(gè)最小單元,根據(jù)器件的不同而不同。而亂用雙端口導(dǎo)致RAM資源的過分占用則是更常見的設(shè)計(jì)問題。
FPGA內(nèi)部對(duì)于單個(gè)RAM能夠支持的真雙端口是有限制的。舉例說明,對(duì)于ALTERA的9K的存儲(chǔ)單元一般支持512*18的雙端口RAM。但如果是一個(gè)256*32的雙端口則需要占用2個(gè)9K的存儲(chǔ)RAM。也就是說,RAM器件的能力是有限的,這取決于RAM的外部互聯(lián)線是有限的,以剛才說的256*32的雙端口RAM來說,其需要數(shù)據(jù)線就是64根(雙端口),對(duì)于單個(gè)RAM的連線資源來說,這是FPGA內(nèi)部邏輯資源難以承受的。所以根據(jù)器件特定,合理規(guī)劃內(nèi)部memory資源,才能在最大限度的達(dá)到高效的利用。
FPGA內(nèi)部可以例化各型IP,基于IP的復(fù)用的可以大大增加研發(fā)的進(jìn)度。但是各種IP的互聯(lián)之間則需對(duì)IP的特性了解清楚,明確IP是否為業(yè)務(wù)所需的IP。有的IP和工程所需可能只是名稱一致,但其功能卻不是你想要的。例如網(wǎng)口IP在MII連接方式下,是用于FPGA連接PHY的操作。如果FPGA與CPU通過MII連接,現(xiàn)有的IP則難以滿足需求。這是因?yàn)镸II連接PHY其所有的時(shí)鐘都是PHY提供的。CPU的設(shè)計(jì)也是與PHY連接,其時(shí)鐘也有PHY提供。而如果二者連接,就變成都等著對(duì)方提供時(shí)鐘,則就變成沒有時(shí)鐘。這種調(diào)試問題相對(duì)來說容易解決,不過在系統(tǒng)規(guī)劃是,就需要對(duì)整個(gè)IP是否能夠滿足系統(tǒng)的設(shè)計(jì)要求,有著明確的判斷。
靈活性是FPGA最大的特性,在設(shè)計(jì)中避開那些靈活性的陷阱,才能從FPGA整體上提升設(shè)計(jì)能力,而不是做只會(huì)寫Verilog的碼農(nóng)。畢竟FPGA設(shè)計(jì)不是軟件設(shè)計(jì),其最終要成為變成硬件承載的,每一行語句都要考慮其綜合后的電路,才能真正領(lǐng)會(huì)FPGA設(shè)計(jì)精髓。
相關(guān)閱讀:
實(shí)用技術(shù):利用FPGA技術(shù)設(shè)計(jì)步進(jìn)電機(jī)系統(tǒng)
設(shè)計(jì)低功耗、高性能FPGA的技術(shù)
設(shè)計(jì)必備:不得不知的FPGA設(shè)計(jì)經(jīng)驗(yàn)