FPGA入門者必讀寶典:詳述開發(fā)流程每一環(huán)節(jié)的物理含義和實(shí)現(xiàn)目標(biāo)
要知道,要把一件事情做好,不管是做哪們技術(shù)還是辦什么手續(xù),明白這個(gè)事情的流程非常關(guān)鍵,它決定了這件事情的順利進(jìn)行與否。同樣,我們學(xué)習(xí)FPGA開發(fā)數(shù)字系統(tǒng)這個(gè)技術(shù),先撇開使用這個(gè)技術(shù)的基礎(chǔ)編程語(yǔ)言的具體語(yǔ)法、使用工具和使用技巧不談,咱先來弄清楚FPGA的開發(fā)流程是什么。
本文引用地址:http://m.butianyuan.cn/article/279347.htmFPGA的開發(fā)流程是遵循著ASIC的開發(fā)流程發(fā)展的,發(fā)展到目前為止,F(xiàn)PGA的開發(fā)流程總體按照?qǐng)D1進(jìn)行,有些步驟可能由于其在當(dāng)前項(xiàng)目中的條件的寬度的允許,可以免去,比如靜態(tài)仿真過程,這樣來達(dá)到項(xiàng)目時(shí)間上的優(yōu)勢(shì)。但是,大部分的流程步驟還是需要我們循規(guī)蹈矩的去做,因?yàn)檫@些步驟的輸入是上一個(gè)步驟的結(jié)果,輸出是下一個(gè)步驟的輸入的關(guān)系,這樣的步驟就必不可少了。
圖1
有人看到這個(gè)流程圖的時(shí)候,第一個(gè)發(fā)自內(nèi)心的感嘆是“啊,怎么這么麻煩啊,特別是之前從事軟件開發(fā)轉(zhuǎn)過來的。對(duì)于他們來講,很少有接觸到一種技術(shù)有如此多的環(huán)節(jié)來實(shí)現(xiàn)。但是這并不能說明FPGA開發(fā)的具體難度,與軟件開發(fā)有輸入、編譯、鏈接、執(zhí)行步驟對(duì)應(yīng)的就是設(shè)計(jì)輸入、綜合、布局布線、下載燒寫,F(xiàn)PGA開發(fā)只是為了確保這核心實(shí)現(xiàn)主干路每一個(gè)環(huán)節(jié)的成功性加了其他的修飾(約束)和驗(yàn)證而已。下面,我們將以核心主干路為路線,一一介紹每個(gè)環(huán)節(jié)的物理含義和實(shí)現(xiàn)目標(biāo)。
設(shè)計(jì)輸入
設(shè)計(jì)輸入方式
從圖1 FPGA開發(fā)流程中的主干線上分離出第一步設(shè)計(jì)輸入橫向環(huán)節(jié),并做了進(jìn)一步的細(xì)節(jié)的處理,如圖2,從圖上看到,設(shè)計(jì)輸入方式有三種形式,有IP核、原理圖、HDL,由此展開設(shè)計(jì)輸入方式的探討。
圖2
原理圖輸入
原始的數(shù)字系統(tǒng)電路的設(shè)計(jì)可能大家還不可能想象,是用筆紙一個(gè)個(gè)邏輯門電路甚至晶體管搭建起來的,這樣的方式我們稱作原理圖的輸入方式。那個(gè)時(shí)候,硬件工程師們會(huì)圍繞的坐在一塊,拿著圖紙來討論電路。幸虧那時(shí)候的數(shù)字電路的還不是很復(fù)雜,要是放到今天,稍微大一點(diǎn)的系統(tǒng),也算得上是浩大工程,稍微有點(diǎn)電路要修改的話,這個(gè)時(shí)候你要是一個(gè)沒耐心或是一個(gè)急性子的人可能就就會(huì)喪失對(duì)這個(gè)領(lǐng)域的興趣。話說回來,那個(gè)年代出來的老工程師們,電路基礎(chǔ)功夫確實(shí)很扎實(shí)。
事情總是朝著好的方向發(fā)展的,后來出現(xiàn)了大型計(jì)算機(jī),工程師們開始將最原始的打孔的編程方式運(yùn)用到數(shù)字電路設(shè)計(jì)當(dāng)中,來記錄我們手工繪畫的電路設(shè)計(jì),后來存儲(chǔ)設(shè)備也開始用上了,從卡片過度到了存儲(chǔ)文本文件了,那個(gè)時(shí)候網(wǎng)表文件大致是起于那個(gè)時(shí)候。
需要注意的問題是原理圖和網(wǎng)表文件的關(guān)系,原理圖是我們最開始方便我們?cè)O(shè)計(jì)的一個(gè)輸入方式,而網(wǎng)表文件是計(jì)算機(jī)傳遞原理圖信息給下一道流程或是給仿真平臺(tái)進(jìn)行原理圖描述仿真用的。設(shè)計(jì)輸入方式不一樣,但是對(duì)于功能仿真來講,最終進(jìn)度到仿真核心的應(yīng)該是同一個(gè)文件,那么這個(gè)文件就是網(wǎng)表文件了。
有了計(jì)算機(jī)的輔助,數(shù)字電路設(shè)計(jì)起來可以說進(jìn)步了一大截,但是如果依然全部是基于邏輯門晶體管的話,還是比較繁瑣。于是后來出現(xiàn)了符號(hào)庫(kù),庫(kù)里包含一些常用的具有通行的器件,比如D觸發(fā)器類的等等,并隨著需求的發(fā)展,這些符號(hào)庫(kù)不斷的在豐富。與在原理圖里利用這些符號(hào)庫(kù)構(gòu)建電路對(duì)應(yīng)的是,由原理圖得到的這個(gè)網(wǎng)表文件的描述方式也相應(yīng)的得到擴(kuò)展,那么這里網(wǎng)表文件里對(duì)電路符號(hào)的描述就是最開始的原語(yǔ)了。
作為最原始的數(shù)字電路ASIC設(shè)計(jì)輸入的方式,并從ASIC設(shè)計(jì)流程延續(xù)到FPGA的設(shè)計(jì)流程,有著它與生俱來的優(yōu)點(diǎn),就是直觀性、簡(jiǎn)潔性,以致目前依然還在使用。但是需要注意的是,這也是相對(duì)的,具體討論見下一小節(jié)。
HDL輸入
HDL全稱是硬件描述語(yǔ)言Hardware Description Language,這種輸入方式要追溯的話得到20世紀(jì)90年代初了。當(dāng)時(shí)的數(shù)字電路的規(guī)模已足以讓按照當(dāng)時(shí)的輸入方式進(jìn)行門級(jí)抽象設(shè)計(jì)顧左顧不了右了,一不小心很容易出錯(cuò),而且得進(jìn)行多層次的原理圖切割,最為關(guān)鍵的是如何能做到在更抽象的層次上描述數(shù)字電路。
于是一些EDA開始提供一種文本形式的,非常嚴(yán)謹(jǐn),不易出錯(cuò)的HDL輸入方式開始提供了。特別是在1980年的時(shí)候,美國(guó)軍方發(fā)起來甚高速集成電路(Very-High-Speed Integrated Circuit)計(jì)劃,就是為了在部隊(duì)中裝備中大規(guī)模需求的數(shù)字電路的設(shè)計(jì)開發(fā)效率,那么這個(gè)VHSIC硬件描述語(yǔ)言就是我們現(xiàn)在的VHDL語(yǔ)言,它也是最早成為硬件描述語(yǔ)言的標(biāo)準(zhǔn)的。與之相對(duì)的是晚些時(shí)間民間發(fā)起的Verilog,后來到1995年的時(shí)候,它的第一個(gè)版本的IEEE標(biāo)準(zhǔn)才出臺(tái),但是沿用至今。
前面提到HDL語(yǔ)言具有不同層次上的抽象,這些抽象層有開關(guān)級(jí)、邏輯門級(jí)、RTL級(jí)、行為級(jí)和系統(tǒng)級(jí),如圖3.其中開關(guān)級(jí)、邏輯門級(jí)又叫結(jié)構(gòu)級(jí),直接反映的是結(jié)構(gòu)上的特性,大量的使用原語(yǔ)調(diào)用,很類似最開始原理圖轉(zhuǎn)成門級(jí)網(wǎng)表。RTL級(jí)又可稱為功能級(jí)。
圖3
HDL語(yǔ)言除了前面提到的兩種外,歷史上也出現(xiàn)了其他的HDL語(yǔ)言,有ABEL、AHDL、硬件C語(yǔ)言(System C語(yǔ)言、Handle-C)、System verilog等。其中ABEL和AHDL算是早期的語(yǔ)言,因?yàn)橄啾惹懊鎯煞N語(yǔ)言來講,或多或少都有些致命的缺陷而在小范圍內(nèi)使用或者直接淘汰掉了。而因?yàn)閂HDL和Verilog在仿真方面具有仿真時(shí)間長(zhǎng)的缺陷,System verilog和硬件C語(yǔ)言產(chǎn)生了,從圖3看,System Verilog是在系統(tǒng)級(jí)和行為級(jí)上為Verilog做補(bǔ)充,同時(shí)硬件C語(yǔ)言產(chǎn)生的原因還有就是有種想把軟件和硬件設(shè)計(jì)整合到一個(gè)平臺(tái)下的思想。
IP(Intellectual Property)核
什么是IP核?任何實(shí)現(xiàn)一定功能的模塊叫做IP(Intellectual Property)。這里把IP核作為一種輸入方式單獨(dú)列出來,主要考慮到完全用IP核確實(shí)是可以形成一個(gè)項(xiàng)目。它的產(chǎn)生可以說是這樣的一個(gè)逆過程。
在隨著數(shù)字電路的規(guī)模不斷擴(kuò)大的時(shí)候,面對(duì)一個(gè)超級(jí)大的工程,工程師們可能是達(dá)到一種共識(shí),將這規(guī)模巨大而且復(fù)雜的設(shè)計(jì)經(jīng)常用到的具有一定通用性的功能給獨(dú)立出來,可以用來其他設(shè)計(jì)。當(dāng)下一次設(shè)計(jì)的時(shí)候,發(fā)現(xiàn)這些組裝好的具有一定功能的模塊確實(shí)挺好用的,于是越來越多的這種具有一定功能的模塊被提取出來,甚至工程師之間用來交換,慢慢大家注意到它的知識(shí)產(chǎn)權(quán),于是一種叫做IP知識(shí)產(chǎn)權(quán)的東西出來了,于是集成電路一個(gè)全新領(lǐng)域(IP設(shè)計(jì))產(chǎn)生了。
IP按照來源的不同可以分為三類,第一種是來自前一個(gè)設(shè)計(jì)的內(nèi)部創(chuàng)建模塊,第二種是FPGA廠家,第三種就是來自IP廠商;后面兩種是我們關(guān)注的,這是我們進(jìn)行零開發(fā)時(shí)考慮的現(xiàn)有資源問題,先撇開成本問題,IP方式的開發(fā)對(duì)項(xiàng)目周期非常有益的,這也是在FPGA應(yīng)用領(lǐng)域章節(jié)陳列相關(guān)FPGA廠家IP資源的原因。
FPGA廠家和IP廠商可以在FPGA開發(fā)的不同時(shí)期提供給我們的IP.我們暫且知道他們分別是未加密的RTL級(jí)IP、加密的RTL級(jí)IP、未經(jīng)布局布線的網(wǎng)表級(jí)IP、布局布線后的網(wǎng)表級(jí)IP.他們的含義在后面陸續(xù)介紹FPGA的開發(fā)步驟的時(shí)候,相信大家能夠恍然大悟。需要說明的是,越是FPGA靠前端步驟的時(shí)候提供的IP,他的二次開發(fā)性就越好,但是它的性能可能是個(gè)反的過程,同時(shí)也越貴,畢竟任何一個(gè)提供者也不想將自己的源碼程序提供給他者,但是為了不讓客戶走向其他商家,只能提高價(jià)賣了,同時(shí)加上一些法律上的協(xié)議保護(hù)。那么越朝FPGA開發(fā)步驟的后端,情況就相反了,越是后端,IP核就會(huì)進(jìn)一步做優(yōu)化,性能就越好,但是一些客戶不要的功能就不好去了。
FPGA廠商提供一般常用的IP核,畢竟為了讓大家用他們家的芯片,但是一些特殊需要的IP核還是需要付費(fèi)的。當(dāng)然這里需要說明的是FPGA廠商的IP是很少可以交叉用的,這一點(diǎn)很容易想,對(duì)廠家來講不會(huì)做這種給競(jìng)爭(zhēng)者提供服務(wù)事情的。IP廠商一般會(huì)高價(jià)的提供未加密的RTL級(jí)源碼,有時(shí)FPGA廠商為了擴(kuò)大芯片市場(chǎng)占有率,會(huì)購(gòu)買第三方的IP做進(jìn)一步的處理后免費(fèi)提給該FPGA芯片使用者的。
輸入方式使用探討
在上面我們介紹了三種輸入方式,有些地方會(huì)講到第四種輸入方式,就是門級(jí)網(wǎng)表文件輸入的形式,我們這里并沒有把它歸為一種輸入方式,原因在于,本身這些門級(jí)網(wǎng)表文件的產(chǎn)生還是源于介紹的三種輸入方式中的一種或是幾種混合的方式。所以這里沒有把它歸為一類。
好了,在上面三種輸入方式介紹的基礎(chǔ)上,我們來探討一下這令人眼花繚亂的輸入方式,探討的目的就是為了讓我們更好的使用他們。
首先,來總結(jié)一下三者的優(yōu)缺點(diǎn),其實(shí)是兩種,因?yàn)镮P核不管是哪個(gè)層次,或者在原理圖中被以符號(hào)的形式被例化,或者在HDL中被模塊例化。所以這里集中探討的是原理圖和HDL的優(yōu)缺點(diǎn)。原理圖的優(yōu)點(diǎn)就是結(jié)構(gòu)直觀性,HDL的優(yōu)點(diǎn)是嚴(yán)密性、支持甚寬的抽象描述層次、易于移植、方便仿真調(diào)試等等,缺點(diǎn)就是不具備對(duì)方的優(yōu)點(diǎn)。當(dāng)時(shí)出現(xiàn)HDL的時(shí)候,人們確實(shí)是想著原理圖該退出歷史舞臺(tái)了,但是到現(xiàn)在它還依然存在著。存在即是有道理的,存在就得用它,但是又得使用HDL,于是存在一種混合編程的形式。除了頂層模塊用原理圖之外,其他的內(nèi)部子模塊全部使用HDL來描述,HDL描述的模塊可以通過工具轉(zhuǎn)換成符號(hào),然后在頂層模塊中引用這些符號(hào),這就完成混合編程。
圖4
fpga相關(guān)文章:fpga是什么
評(píng)論