FPGA入門(mén)者必讀寶典:詳述開(kāi)發(fā)流程每一環(huán)節的物理含義和實(shí)現目標
要知道,要把一件事情做好,不管是做哪們技術(shù)還是辦什么手續,明白這個(gè)事情的流程非常關(guān)鍵,它決定了這件事情的順利進(jìn)行與否。同樣,我們學(xué)習FPGA開(kāi)發(fā)數字系統這個(gè)技術(shù),先撇開(kāi)使用這個(gè)技術(shù)的基礎編程語(yǔ)言的具體語(yǔ)法、使用工具和使用技巧不談,咱先來(lái)弄清楚FPGA的開(kāi)發(fā)流程是什么。
本文引用地址:http://dyxdggzs.com/article/279347.htmFPGA的開(kāi)發(fā)流程是遵循著(zhù)ASIC的開(kāi)發(fā)流程發(fā)展的,發(fā)展到目前為止,FPGA的開(kāi)發(fā)流程總體按照圖1進(jìn)行,有些步驟可能由于其在當前項目中的條件的寬度的允許,可以免去,比如靜態(tài)仿真過(guò)程,這樣來(lái)達到項目時(shí)間上的優(yōu)勢。但是,大部分的流程步驟還是需要我們循規蹈矩的去做,因為這些步驟的輸入是上一個(gè)步驟的結果,輸出是下一個(gè)步驟的輸入的關(guān)系,這樣的步驟就必不可少了。

圖1
有人看到這個(gè)流程圖的時(shí)候,第一個(gè)發(fā)自?xún)刃牡母袊@是“啊,怎么這么麻煩啊,特別是之前從事軟件開(kāi)發(fā)轉過(guò)來(lái)的。對于他們來(lái)講,很少有接觸到一種技術(shù)有如此多的環(huán)節來(lái)實(shí)現。但是這并不能說(shuō)明FPGA開(kāi)發(fā)的具體難度,與軟件開(kāi)發(fā)有輸入、編譯、鏈接、執行步驟對應的就是設計輸入、綜合、布局布線(xiàn)、下載燒寫(xiě),FPGA開(kāi)發(fā)只是為了確保這核心實(shí)現主干路每一個(gè)環(huán)節的成功性加了其他的修飾(約束)和驗證而已。下面,我們將以核心主干路為路線(xiàn),一一介紹每個(gè)環(huán)節的物理含義和實(shí)現目標。
設計輸入
設計輸入方式
從圖1 FPGA開(kāi)發(fā)流程中的主干線(xiàn)上分離出第一步設計輸入橫向環(huán)節,并做了進(jìn)一步的細節的處理,如圖2,從圖上看到,設計輸入方式有三種形式,有IP核、原理圖、HDL,由此展開(kāi)設計輸入方式的探討。

圖2
原理圖輸入
原始的數字系統電路的設計可能大家還不可能想象,是用筆紙一個(gè)個(gè)邏輯門(mén)電路甚至晶體管搭建起來(lái)的,這樣的方式我們稱(chēng)作原理圖的輸入方式。那個(gè)時(shí)候,硬件工程師們會(huì )圍繞的坐在一塊,拿著(zhù)圖紙來(lái)討論電路。幸虧那時(shí)候的數字電路的還不是很復雜,要是放到今天,稍微大一點(diǎn)的系統,也算得上是浩大工程,稍微有點(diǎn)電路要修改的話(huà),這個(gè)時(shí)候你要是一個(gè)沒(méi)耐心或是一個(gè)急性子的人可能就就會(huì )喪失對這個(gè)領(lǐng)域的興趣。話(huà)說(shuō)回來(lái),那個(gè)年代出來(lái)的老工程師們,電路基礎功夫確實(shí)很扎實(shí)。
事情總是朝著(zhù)好的方向發(fā)展的,后來(lái)出現了大型計算機,工程師們開(kāi)始將最原始的打孔的編程方式運用到數字電路設計當中,來(lái)記錄我們手工繪畫(huà)的電路設計,后來(lái)存儲設備也開(kāi)始用上了,從卡片過(guò)度到了存儲文本文件了,那個(gè)時(shí)候網(wǎng)表文件大致是起于那個(gè)時(shí)候。
需要注意的問(wèn)題是原理圖和網(wǎng)表文件的關(guān)系,原理圖是我們最開(kāi)始方便我們設計的一個(gè)輸入方式,而網(wǎng)表文件是計算機傳遞原理圖信息給下一道流程或是給仿真平臺進(jìn)行原理圖描述仿真用的。設計輸入方式不一樣,但是對于功能仿真來(lái)講,最終進(jìn)度到仿真核心的應該是同一個(gè)文件,那么這個(gè)文件就是網(wǎng)表文件了。
有了計算機的輔助,數字電路設計起來(lái)可以說(shuō)進(jìn)步了一大截,但是如果依然全部是基于邏輯門(mén)晶體管的話(huà),還是比較繁瑣。于是后來(lái)出現了符號庫,庫里包含一些常用的具有通行的器件,比如D觸發(fā)器類(lèi)的等等,并隨著(zhù)需求的發(fā)展,這些符號庫不斷的在豐富。與在原理圖里利用這些符號庫構建電路對應的是,由原理圖得到的這個(gè)網(wǎng)表文件的描述方式也相應的得到擴展,那么這里網(wǎng)表文件里對電路符號的描述就是最開(kāi)始的原語(yǔ)了。
作為最原始的數字電路ASIC設計輸入的方式,并從ASIC設計流程延續到FPGA的設計流程,有著(zhù)它與生俱來(lái)的優(yōu)點(diǎn),就是直觀(guān)性、簡(jiǎn)潔性,以致目前依然還在使用。但是需要注意的是,這也是相對的,具體討論見(jiàn)下一小節。
HDL輸入
HDL全稱(chēng)是硬件描述語(yǔ)言Hardware Description Language,這種輸入方式要追溯的話(huà)得到20世紀90年代初了。當時(shí)的數字電路的規模已足以讓按照當時(shí)的輸入方式進(jìn)行門(mén)級抽象設計顧左顧不了右了,一不小心很容易出錯,而且得進(jìn)行多層次的原理圖切割,最為關(guān)鍵的是如何能做到在更抽象的層次上描述數字電路。
于是一些EDA開(kāi)始提供一種文本形式的,非常嚴謹,不易出錯的HDL輸入方式開(kāi)始提供了。特別是在1980年的時(shí)候,美國軍方發(fā)起來(lái)甚高速集成電路(Very-High-Speed Integrated Circuit)計劃,就是為了在部隊中裝備中大規模需求的數字電路的設計開(kāi)發(fā)效率,那么這個(gè)VHSIC硬件描述語(yǔ)言就是我們現在的VHDL語(yǔ)言,它也是最早成為硬件描述語(yǔ)言的標準的。與之相對的是晚些時(shí)間民間發(fā)起的Verilog,后來(lái)到1995年的時(shí)候,它的第一個(gè)版本的IEEE標準才出臺,但是沿用至今。
前面提到HDL語(yǔ)言具有不同層次上的抽象,這些抽象層有開(kāi)關(guān)級、邏輯門(mén)級、RTL級、行為級和系統級,如圖3.其中開(kāi)關(guān)級、邏輯門(mén)級又叫結構級,直接反映的是結構上的特性,大量的使用原語(yǔ)調用,很類(lèi)似最開(kāi)始原理圖轉成門(mén)級網(wǎng)表。RTL級又可稱(chēng)為功能級。

圖3
HDL語(yǔ)言除了前面提到的兩種外,歷史上也出現了其他的HDL語(yǔ)言,有ABEL、AHDL、硬件C語(yǔ)言(System C語(yǔ)言、Handle-C)、System verilog等。其中ABEL和AHDL算是早期的語(yǔ)言,因為相比前面兩種語(yǔ)言來(lái)講,或多或少都有些致命的缺陷而在小范圍內使用或者直接淘汰掉了。而因為VHDL和Verilog在仿真方面具有仿真時(shí)間長(cháng)的缺陷,System verilog和硬件C語(yǔ)言產(chǎn)生了,從圖3看,System Verilog是在系統級和行為級上為Verilog做補充,同時(shí)硬件C語(yǔ)言產(chǎn)生的原因還有就是有種想把軟件和硬件設計整合到一個(gè)平臺下的思想。
IP(Intellectual Property)核
什么是IP核?任何實(shí)現一定功能的模塊叫做IP(Intellectual Property)。這里把IP核作為一種輸入方式單獨列出來(lái),主要考慮到完全用IP核確實(shí)是可以形成一個(gè)項目。它的產(chǎn)生可以說(shuō)是這樣的一個(gè)逆過(guò)程。
在隨著(zhù)數字電路的規模不斷擴大的時(shí)候,面對一個(gè)超級大的工程,工程師們可能是達到一種共識,將這規模巨大而且復雜的設計經(jīng)常用到的具有一定通用性的功能給獨立出來(lái),可以用來(lái)其他設計。當下一次設計的時(shí)候,發(fā)現這些組裝好的具有一定功能的模塊確實(shí)挺好用的,于是越來(lái)越多的這種具有一定功能的模塊被提取出來(lái),甚至工程師之間用來(lái)交換,慢慢大家注意到它的知識產(chǎn)權,于是一種叫做IP知識產(chǎn)權的東西出來(lái)了,于是集成電路一個(gè)全新領(lǐng)域(IP設計)產(chǎn)生了。
IP按照來(lái)源的不同可以分為三類(lèi),第一種是來(lái)自前一個(gè)設計的內部創(chuàng )建模塊,第二種是FPGA廠(chǎng)家,第三種就是來(lái)自IP廠(chǎng)商;后面兩種是我們關(guān)注的,這是我們進(jìn)行零開(kāi)發(fā)時(shí)考慮的現有資源問(wèn)題,先撇開(kāi)成本問(wèn)題,IP方式的開(kāi)發(fā)對項目周期非常有益的,這也是在FPGA應用領(lǐng)域章節陳列相關(guān)FPGA廠(chǎng)家IP資源的原因。
FPGA廠(chǎng)家和IP廠(chǎng)商可以在FPGA開(kāi)發(fā)的不同時(shí)期提供給我們的IP.我們暫且知道他們分別是未加密的RTL級IP、加密的RTL級IP、未經(jīng)布局布線(xiàn)的網(wǎng)表級IP、布局布線(xiàn)后的網(wǎng)表級IP.他們的含義在后面陸續介紹FPGA的開(kāi)發(fā)步驟的時(shí)候,相信大家能夠恍然大悟。需要說(shuō)明的是,越是FPGA靠前端步驟的時(shí)候提供的IP,他的二次開(kāi)發(fā)性就越好,但是它的性能可能是個(gè)反的過(guò)程,同時(shí)也越貴,畢竟任何一個(gè)提供者也不想將自己的源碼程序提供給他者,但是為了不讓客戶(hù)走向其他商家,只能提高價(jià)賣(mài)了,同時(shí)加上一些法律上的協(xié)議保護。那么越朝FPGA開(kāi)發(fā)步驟的后端,情況就相反了,越是后端,IP核就會(huì )進(jìn)一步做優(yōu)化,性能就越好,但是一些客戶(hù)不要的功能就不好去了。
FPGA廠(chǎng)商提供一般常用的IP核,畢竟為了讓大家用他們家的芯片,但是一些特殊需要的IP核還是需要付費的。當然這里需要說(shuō)明的是FPGA廠(chǎng)商的IP是很少可以交叉用的,這一點(diǎn)很容易想,對廠(chǎng)家來(lái)講不會(huì )做這種給競爭者提供服務(wù)事情的。IP廠(chǎng)商一般會(huì )高價(jià)的提供未加密的RTL級源碼,有時(shí)FPGA廠(chǎng)商為了擴大芯片市場(chǎng)占有率,會(huì )購買(mǎi)第三方的IP做進(jìn)一步的處理后免費提給該FPGA芯片使用者的。
輸入方式使用探討
在上面我們介紹了三種輸入方式,有些地方會(huì )講到第四種輸入方式,就是門(mén)級網(wǎng)表文件輸入的形式,我們這里并沒(méi)有把它歸為一種輸入方式,原因在于,本身這些門(mén)級網(wǎng)表文件的產(chǎn)生還是源于介紹的三種輸入方式中的一種或是幾種混合的方式。所以這里沒(méi)有把它歸為一類(lèi)。
好了,在上面三種輸入方式介紹的基礎上,我們來(lái)探討一下這令人眼花繚亂的輸入方式,探討的目的就是為了讓我們更好的使用他們。
首先,來(lái)總結一下三者的優(yōu)缺點(diǎn),其實(shí)是兩種,因為IP核不管是哪個(gè)層次,或者在原理圖中被以符號的形式被例化,或者在HDL中被模塊例化。所以這里集中探討的是原理圖和HDL的優(yōu)缺點(diǎn)。原理圖的優(yōu)點(diǎn)就是結構直觀(guān)性,HDL的優(yōu)點(diǎn)是嚴密性、支持甚寬的抽象描述層次、易于移植、方便仿真調試等等,缺點(diǎn)就是不具備對方的優(yōu)點(diǎn)。當時(shí)出現HDL的時(shí)候,人們確實(shí)是想著(zhù)原理圖該退出歷史舞臺了,但是到現在它還依然存在著(zhù)。存在即是有道理的,存在就得用它,但是又得使用HDL,于是存在一種混合編程的形式。除了頂層模塊用原理圖之外,其他的內部子模塊全部使用HDL來(lái)描述,HDL描述的模塊可以通過(guò)工具轉換成符號,然后在頂層模塊中引用這些符號,這就完成混合編程。

圖4
fpga相關(guān)文章:fpga是什么
評論