<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 詳解FPGA開(kāi)發(fā)流程中每一環(huán)節的物理含義和實(shí)現目標

詳解FPGA開(kāi)發(fā)流程中每一環(huán)節的物理含義和實(shí)現目標

作者: 時(shí)間:2017-10-14 來(lái)源:網(wǎng)絡(luò ) 收藏

  要知道,要把一件事情做好,不管是做哪們技術(shù)還是辦什么手續,明白這個(gè)事情的流程非常關(guān)鍵,它決定了這件事情的順利進(jìn)行與否。同樣,我們學(xué)習開(kāi)發(fā)數字系統這個(gè)技術(shù),先撇開(kāi)使用這個(gè)技術(shù)的基礎編程語(yǔ)言的具體語(yǔ)法、使用工具和使用技巧不談,咱先來(lái)弄清楚的開(kāi)發(fā)流程是什么。

本文引用地址:http://dyxdggzs.com/article/201710/366244.htm

  的開(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)系,這樣的步驟就必不可少了。

  

  有人看到這個(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í)現目標。

  設計輸入

  FPGA開(kāi)發(fā)—設計輸入方式

  從圖1 FPGA開(kāi)發(fā)流程中的主干線(xiàn)上分離出第一步設計輸入橫向環(huán)節,并做了進(jìn)一步的細節的處理,如圖2,從圖上看到,設計輸入方式有三種形式,有IP核、原理圖、HDL,由此展開(kāi)設計輸入方式的探討。

  

  原理圖輸入

  原始的數字系統電路的設計可能大家還不可能想象,是用筆紙一個(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)下一小節。

  FPGA開(kāi)發(fā)—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)為功能級。

  

  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è)平臺下的思想。

  FPGA開(kāi)發(fā)—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芯片使用者的。

  FPGA開(kāi)發(fā)—輸入方式使用探討

  在上面我們介紹了三種輸入方式,有些地方會(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ò)工具轉換成符號,然后在頂層模塊中引用這些符號,這就完成混合編程。

  

  在接觸的很多FPGA的初學(xué)者很容易被原理圖的輸入方式給迷惑,甚至愛(ài)的深沉,加上本身其他輸入方式的繁瑣的輸入的厭惡,更是愛(ài)的無(wú)法自拔。當開(kāi)始強制性要求開(kāi)始時(shí)養成多用HDL輸入的習慣的時(shí)候,有些甚至有著(zhù)痛心疾首般的痛苦,但是隨著(zhù)學(xué)習的深入,做的東西越來(lái)越大,嘗到HDL輸入方式帶來(lái)的甜頭的時(shí)候,就會(huì )覺(jué)得那個(gè)苦沒(méi)有白吃。

  我覺(jué)得原理圖輸入方式從現在的一些線(xiàn)索看來(lái),在今后的某一天將會(huì )服役終結。首先是找到了原理圖自身帶有優(yōu)勢的替代品,那就是主流FPGA集成環(huán)境中的綜合器和第三方綜合器都具有RTL視圖生成功能,這個(gè)視圖完全展示了項目的結構組成,可以上下分層,最大的好處就是可以檢查核實(shí)寫(xiě)的RTL級代碼的綜合后電路情況。還有一條線(xiàn)索是,大家用的仿真軟件Modelsim并沒(méi)有提供原理圖輸入的支持,是原理圖的設計必須在集成環(huán)境成轉換成RTL級代碼或是綜合成網(wǎng)表形式來(lái)做仿真,也是一件繁瑣的事。原理圖的離開(kāi)只是時(shí)間問(wèn)題。

  至于目前HDL選擇哪一種比較好,這個(gè)問(wèn)題放到開(kāi)始將HDL基礎語(yǔ)法知識的地方進(jìn)行探討。這里要說(shuō)明的是,并不是我們這里講Verilog使用就否定其他的HDL語(yǔ)言。各種HDL的爭端從未停止過(guò),現在還是依然存在四種開(kāi)發(fā)人,第一種是使用Verilog/System Verilog的人,第二種是使用VHDL的人,第三種就是使用System C的人,第四種是混合型的人,到底哪種好,也有也許是時(shí)間問(wèn)題吧,時(shí)間證明一切。

  綜合

  不管你是采用單一的輸入方式,還是采用的是混合編程(這種在很多跨公司合作項目中會(huì )碰見(jiàn),也許A公司用的是VHDL,B公司用的是Verilog,那這個(gè)項目中很大可能采用混合型),我們統稱(chēng)得到設計輸入后,都得把設計輸入得到一個(gè)可以和FPGA硬件資源相匹配的一個(gè)描述。假設FPGA是基于LUT結構的,那么我們就得到一個(gè)基于LUT結構門(mén)級網(wǎng)表。在這個(gè)過(guò)程中,又可以分為如圖兩個(gè)步驟。

  

  需要說(shuō)明的是在A(yíng)ltera的開(kāi)發(fā)流程中,將編譯、映射過(guò)程按照我們敘述的合稱(chēng)綜合,而在Xilinx開(kāi)發(fā)流程中,由設計輸入得到門(mén)級網(wǎng)表的過(guò)程叫做綜合,而映射過(guò)程歸結到其叫做實(shí)現的某一子步驟中。但是整體的流程還是遵循這個(gè)順序的,只是叫法一些外表性的不一樣而已。

  FPGA開(kāi)發(fā)—編譯

  原理圖、HDL、IP核這些都將通過(guò)編譯后生成門(mén)級的網(wǎng)表,這里生成門(mén)級網(wǎng)表的過(guò)程其實(shí)是早起ASIC的步驟,直接生成門(mén)電路網(wǎng)表。這個(gè)時(shí)候的網(wǎng)表文件和具體的器件無(wú)關(guān),也就是說(shuō),生成的門(mén)電路網(wǎng)表也是一種平臺移植的媒質(zhì)。

  FPGA開(kāi)發(fā)—映射

  我們通過(guò)編譯得到一張門(mén)級網(wǎng)表之后,與早先ASIC開(kāi)發(fā)流程中在這個(gè)門(mén)級網(wǎng)表布線(xiàn)后去做掩膜不同,接下來(lái)就得考慮如何與我們選擇的硬件平臺結合起來(lái),畢竟我們使用的硬件平臺是由一個(gè)一個(gè)的LUT(假設這類(lèi)FPGA)組成的。那么這個(gè)結合的過(guò)程就是映射過(guò)程。

  這個(gè)過(guò)程其實(shí)很復雜,首先需要把形成的網(wǎng)表邏輯門(mén)給規劃成一些小的組合,然后再去映射到LUT中,這個(gè)過(guò)程中規劃按照一定的算法和章程進(jìn)行。不同的算法和章程就會(huì )得到不同的映射,不同的映射就會(huì )為后面的過(guò)程提供不同的選擇,最終生成性能不一樣的電路了。

  我們把講基于SRAM技術(shù)的FPGA的二選一多路器拿出來(lái)舉個(gè)例子,如圖6,可以按照紅色線(xiàn)將二選一多路器完全劈成兩邊,原來(lái)的一個(gè)表就可以規劃到其他兩個(gè)表或表內容中,因為被劈成的兩部分可單獨成表,也可以被規劃到其他電路形成的表里。

  

  映射的工程比較復雜,運算量也很大,也是為什么FPGA開(kāi)發(fā)過(guò)程中,一直存在的一個(gè)問(wèn)題,形成最終的可配置二進(jìn)制文件的時(shí)間非常長(cháng),特別是一些大一點(diǎn)的項目,時(shí)間消耗比較長(cháng)的一個(gè)點(diǎn)就是映射了,至于具體的映射算法就超出了書(shū)的范圍了。再強調的是,映射是和器件有關(guān)的,即使是同一個(gè)系列,不同型號的FPGA內部就夠也是有區別的,好比從外觀(guān)看都是一個(gè)單元樓內的單元房,但是每個(gè)單元房?jì)妊b修、家具擺設等都是不一樣的。

  布局布線(xiàn)

  FPGA開(kāi)發(fā)—布局

  講到這一塊,正好有這么一個(gè)例子來(lái)講解這個(gè)概念。近來(lái)報道朝鮮希望在俄羅斯遠東地區租用數十萬(wàn)公頃的土地用來(lái)培育農產(chǎn)品。咱先撇開(kāi)今后的購買(mǎi)的成功與否,假設成功了,并且有了這個(gè)詳細的希望培育的農作物的品種及數量,有各式各樣的蔬菜、主糧、禽類(lèi)畜養場(chǎng)、果樹(shù)等等。我們前面做的那些流程得到的LUT門(mén)級網(wǎng)表就好比這樣的清單。

  得到這樣的清單之后,我們再假設在這十萬(wàn)公頃的土地上,陽(yáng)光、水資源、溫差都有一定的分布。大家知道農作物的的成長(cháng)和高量產(chǎn)或者與陽(yáng)關(guān)有關(guān),或者與水資源有關(guān),或者與溫差有關(guān),并且禽類(lèi)的畜養材料與農作物的副產(chǎn)有關(guān)。所以接下來(lái)要做的事情就是根據現有的自然條件和農產(chǎn)品的所需環(huán)境特點(diǎn)合理布局,哪些地適合做什么。

  緊接著(zhù)我們回到FPGA開(kāi)發(fā)中來(lái),我們通過(guò)前面的步驟得到的清單就是LUT門(mén)級網(wǎng)表。網(wǎng)表里提供的僅僅是從邏輯關(guān)系上一些LUT結構的連接。我們需要將這些LUT結構配置到FPGA具體的哪個(gè)位置。需要說(shuō)明的是,FPGA里任何硬件結構都是按照橫縱坐標進(jìn)行標定的,圖中選中的是一個(gè)SLICE,SLICE里面存放著(zhù)表和其他結構,它的位置在X50Y112上。不同的資源的坐標不一樣,但是坐標的零點(diǎn)是公用的。

  

  在FPGA里布局需要考慮的問(wèn)題是,如何將這些已有的邏輯上連接的LUT及其它元素合理的放到現有的FPGA里,達到功能要求的時(shí)候保證質(zhì)量。具體點(diǎn)就比如,乘法器這樣的電路適合放在RAM附近,當然,硬件乘法器的硬件布局一般也是在存儲器附近,有利于縮短乘法的延時(shí)時(shí)間,什么樣的電路需要配置高速等等。

  十萬(wàn)公頃的地布局規劃好了,農產(chǎn)品就會(huì )有很好的豐收,同樣FPGA開(kāi)發(fā)布局布好了,由FPGA搭建起來(lái)的電路就會(huì )更加穩定和擴展性。

  FPGA開(kāi)發(fā)—布線(xiàn)

  上小節中,我們把十萬(wàn)公頃的地給安排好了,哪些地該種什么。具體實(shí)施之前還有一些是必須做的,比如農作物的澆灌,沒(méi)有一個(gè)很好的灌溉系統是一個(gè)問(wèn)題;再比如豐收了得采摘吧,這個(gè)時(shí)候,能夠讓大卡車(chē)到達每一塊農地的公路樞紐也是需要解決的問(wèn)題。將每一塊或者相關(guān)的田地連接的灌水系統和公路的建設,就好比我們這個(gè)布線(xiàn)的過(guò)程。

  我們在FPGA內通過(guò)布局,知道那些LUT具體分布到哪個(gè)SLICE,但是一方面如何讓這些SLICE連接起來(lái),二方面如何讓輸入的信號到達相應的開(kāi)始處理點(diǎn)和如何讓輸出到達輸出IO上,并且連接的電路整體性能好,這就是布線(xiàn)這個(gè)環(huán)節需要完成的內容。要達到布線(xiàn)最優(yōu)話(huà),當然這里面設計到布線(xiàn)算法和很多細節問(wèn)題,比如涉及到布線(xiàn)資源、PLL資源分布。但是這些對我們理解布線(xiàn)這個(gè)概念沒(méi)有很多益處,暫且不深入,本質(zhì)上就是一個(gè)線(xiàn)路求最優(yōu)的問(wèn)題。

  FPGA開(kāi)發(fā)—約束

  約束,在圖1上看到,在綜合和布局布線(xiàn)這兩個(gè)流程環(huán)節里都出現了,我們暫且規定其為約束一和約束二,或者說(shuō)綜合約束和布局布線(xiàn)約束,布局布線(xiàn)約束又可以分為位置約束、時(shí)序約束。約束,就是對這些環(huán)節操作定制規則。一般開(kāi)發(fā)環(huán)境會(huì )對這些約束有個(gè)默認,這些默認的設置對大部分情況下還是適用的,但是通常布局布線(xiàn)約束中的I/O約束是我們每一個(gè)工程都必須給定的。同時(shí)開(kāi)發(fā)工具開(kāi)放其他約束接口,允許我們設置這些規則,具體的有哪些約束怎么去做在后面介紹工具使用的時(shí)候進(jìn)行討論,這里先明白這些約束的基本概念。

  FPGA開(kāi)發(fā)—綜合約束

  相信大家已經(jīng)下意識的將綜合約束和綜合過(guò)程掛在一起了,沒(méi)錯,綜合約束確實(shí)是在綜合過(guò)程中做的,用來(lái)指導綜合過(guò)程,包括編譯和映射。我們已經(jīng)知道綜合過(guò)程是將RTL級電路描述轉換到FPGA上的硬件單元(LUT)中,形成以FPGA存在的硬件單元構成的電路。

  我們還是拿前面有過(guò)的例子來(lái)說(shuō)明,不同的約束將導致生成性能不同的電路。綜合這么一個(gè)完成式***能的電路,沒(méi)有加資源共享得到的電路如圖8左邊所示的電路,而加了資源共享的約束后,得到的電路結構如圖8右邊的電路。

  

  通過(guò)之前的分析,得到左邊的電路結構資源消耗多但是速度快,而右邊的結構消耗資源少,但是速度慢,乘法器需要分時(shí)復用。

  當然這只是一個(gè)例子,但是足以說(shuō)明,不同的綜合指導原則也就是綜合約束,將會(huì )產(chǎn)生不同的電路。當得到的電路性能不能滿(mǎn)足需求的時(shí)候,適當考慮綜合約束,來(lái)達到一個(gè)速度和面積的轉換的效果,實(shí)現性能的提升。電路實(shí)現的速度和消耗的面積是貫穿在FPGA開(kāi)發(fā)過(guò)程中兩個(gè) 矛盾的問(wèn)題,綜合約束是其中一種小范圍內實(shí)現速度和面見(jiàn)平衡點(diǎn)移動(dòng)的方式。

  FPGA開(kāi)發(fā)—位置約束

  沒(méi)錯,你又想對了,位置約束和我們布局有關(guān)系,它就是指布局的策略。根據所選擇的FPGA平臺現有硬件資源分布來(lái)決定我們布局。

  其中最典型的位置約束就是I/O約束。一個(gè)典型的系統是既有輸入也有輸出的,而不管是輸入還是輸出,都是從I/O上為端點(diǎn)的。輸入從哪個(gè)端點(diǎn)進(jìn)來(lái),輸出從哪個(gè)端點(diǎn)出去,輸入是需要支持什么樣的電氣特性的端點(diǎn),輸出又是需要支持什么樣的電氣特定的端點(diǎn)。這些都是I/O約束做的事情。任何一個(gè)工程,都必須有這么一個(gè)約束。

  還有一種典型的位置約束是在增量編譯里涉及的物理界定。增量編譯的出現就是因為在FPGA開(kāi)發(fā)過(guò)程中綜合和布局布線(xiàn)的長(cháng)耗時(shí)性而提出的。思想就是把FPGA切成很多個(gè)小塊的FPGA,然后約定具體哪塊小FPGA放置什么模塊,實(shí)現什么樣的功能,從物理上進(jìn)行界定。當修改工程后,開(kāi)發(fā)平臺就會(huì )檢測哪些小FPGA內沒(méi)有進(jìn)行修改,哪些進(jìn)行了修改,然后將修改過(guò)的部分重新進(jìn)行綜合布局布線(xiàn)步驟。這樣一來(lái),相比原來(lái)修改一點(diǎn),全工程重新經(jīng)過(guò)那些過(guò)程來(lái)講,時(shí)間節省下來(lái)了。

  FPGA開(kāi)發(fā)—時(shí)序約束

  估計沒(méi)有多少懸念了,時(shí)序約束很大程度上和布線(xiàn)有關(guān)。為什么要做這個(gè)約束?

  由于一方面信號在芯片內傳遞是需要消耗時(shí)間的,另一方面大量存在的寄存器有反應時(shí)間,而我們開(kāi)發(fā)的最開(kāi)始的時(shí)候這些時(shí)間都是理想化的。但是考慮到真實(shí)情況下,如果跑的速度比較高,達到了200M這么個(gè)速度,當然這個(gè)高速和具體的芯片有關(guān),高性能的芯片本身跑的速度可以達到很高,200M相對來(lái)說(shuō)就不是高速,對一些低性能芯片還可能達不到200M。這個(gè)時(shí)候,這些時(shí)間達到了同樣一個(gè)系統時(shí)間數量級的時(shí)候,很可能影響電路的性能了。某一刻,該來(lái)的信號沒(méi)有來(lái),默認的話(huà)就會(huì )采集錯誤信號了。

  為了讓這些硬件本身帶來(lái)的延時(shí)時(shí)間更理想化,我們就要對這些決定時(shí)間延時(shí)的因素優(yōu)化來(lái)減少時(shí)間延時(shí)。對于寄存器本身的反應時(shí)間這個(gè)因素我們開(kāi)發(fā)者是無(wú)能為力的,我們要做的優(yōu)化就是布線(xiàn)了。是走直線(xiàn)還是走其他,不僅僅決定于自身這條路徑,還和整個(gè)系統布線(xiàn)有關(guān),好比水桶原理,系統性能決定于最差路徑延時(shí)。

  時(shí)序約束做的就是這些事情,但是時(shí)序約束并不是指具體去連接每一條線(xiàn),這個(gè)工作就像前面那些流程一樣都是由軟件去實(shí)現的,先用軟件自己默認原則布線(xiàn),然后對其結果分析,不滿(mǎn)足時(shí)序要求的,我們再對具體的問(wèn)題路徑做一些指導約束。時(shí)序約束的添加,主要包括周期約束、輸入偏移約束和輸出偏移約束。具體的過(guò)程在后面章節介紹工具使用時(shí)會(huì )有具體動(dòng)手的指導。

  FPGA開(kāi)發(fā)—仿真

  在經(jīng)過(guò)上面從設計輸入到綜合再到布局布線(xiàn)過(guò)程的介紹后,我們來(lái)集中探討一下,在這些過(guò)程中涉及到的相應的仿真。

  仿真,字面上講就是模擬真實(shí)狀況。我們FPGA設計里面的仿真,就是模擬真實(shí)電路的狀況,查看電路是不是我們需要的電路。如果我們把FPGA開(kāi)發(fā)形成電路當作一個(gè)產(chǎn)品的生產(chǎn)過(guò)程,那么在FPGA開(kāi)發(fā)流程中含有的三種仿真(RTL級仿真、靜態(tài)仿真和時(shí)序仿真)就好比產(chǎn)品線(xiàn)中的三道檢測站。如圖9,這三道工序任何一道出了問(wèn)題,修改設計后都得重新走這三道卡,所以盡量在把問(wèn)題發(fā)現在源頭。

  

  FPGA開(kāi)發(fā)—測試平臺

  所謂testbench,即測試平臺,詳細的說(shuō)就是給待驗證的設計添加激勵,同時(shí)觀(guān)察輸出響應是否符合設計要求。測試平臺,測試平臺在做功能仿真、靜態(tài)仿真和時(shí)序仿真的時(shí)候都需要用到。剛開(kāi)始的對于一些初學(xué)者,遇到的都是一些簡(jiǎn)單的東西,測試平臺相應的也很簡(jiǎn)單,用一個(gè)文件就可以很清晰的呈現測試結構。對于一些復雜的項目,測試就沒(méi)有那么簡(jiǎn)單了,由此還專(zhuān)門(mén)產(chǎn)生一個(gè)行業(yè)——測試行業(yè)。這個(gè)時(shí)候我們要用到一個(gè)概念就是結構化測試。

  一個(gè)完整的測試平臺如下圖10所示,它是分結構組成的,其中對設計測試結果的判斷不僅可以通過(guò)觀(guān)察對比波形得到,而且可以靈活使用腳本命令將有用的輸出信息打印到終端或者產(chǎn)生文本進(jìn)行觀(guān)察,也可以寫(xiě)一段代碼讓它們自動(dòng)比較輸出結果。

  

  測試平臺的設計是多種多樣,可以使用靈活的Verilog的驗證腳本,但是它也是基于硬件語(yǔ)言但是又服務(wù)于軟件測試的語(yǔ)言,有時(shí)并行有時(shí)順序,只有掌握這些關(guān)鍵點(diǎn),才能很好服務(wù)測試。需要說(shuō)明的一點(diǎn)是,不管大家是已經(jīng)在用Verilog在寫(xiě)測試平臺還是剛學(xué)習寫(xiě)測試平臺,那么建議大家還是能用到System Verilog中相對Verilog新的語(yǔ)法還是嘗試的用,System Verilog是一種趨勢,它本身就是向下兼容的第三代的Verilog。

  FPGA開(kāi)發(fā)— RTL級仿真

  這里RTL級仿真屬于第一道檢測,有些場(chǎng)合稱(chēng)作功能仿真,為了突出和后面的靜態(tài)仿真的區別,以免在后面介紹靜態(tài)仿真的時(shí)候大家弄的很頭大,我們還是這樣稱(chēng)呼。它是對工程在寄存器轉送級進(jìn)行的描述時(shí)進(jìn)行測試,查看其在RTL級描述的時(shí)候實(shí)現的功能的正確性。

  關(guān)于RTL級仿真,如果設計中設計到原理圖輸入的話(huà),在一些仿真工具中是不支持的,比如Modelsim,這個(gè)時(shí)候要進(jìn)行功能上的驗證,可以將原理圖轉換成HDL描述,或者直接把整個(gè)工程轉換成LUT門(mén)級網(wǎng)表后進(jìn)行后面要講到的靜態(tài)仿真完成。

  所有邏輯功能的驗證都希望在RTL級做,盡可能的將問(wèn)題發(fā)現在RTL級仿真過(guò)程中,減少后面發(fā)現問(wèn)題帶來(lái)的反復。

  FPGA開(kāi)發(fā)— 靜態(tài)仿真

  靜態(tài)仿真,有些地方給的外號叫門(mén)級仿真,確切的說(shuō)應該是綜合后的LUT門(mén)級網(wǎng)表。是在綜合過(guò)程后做的仿真。有些開(kāi)發(fā)平臺下將靜態(tài)仿真具體又分為編譯仿真和映射仿真,比如ISE就是這樣做的,但是個(gè)人覺(jué)得應該很少場(chǎng)合做這個(gè)編譯仿真。靜態(tài)仿真的目的就是驗證當工程到了用LUT門(mén)級網(wǎng)表描述的時(shí)候,從功能上檢查驗證工程的正確性。

  不管是Altera還是Xilinx的開(kāi)發(fā)平臺,都直接支持靜態(tài)仿真,但是由于各自廠(chǎng)家的仿真器專(zhuān)業(yè)性不強,我們還是用第三方仿真工具比較多。這時(shí)候在第三方工具下的輸入必須是經(jīng)過(guò)綜合工具綜合出來(lái)的涵蓋工程所有信息的LUT門(mén)級網(wǎng)表文件了。一般專(zhuān)業(yè)一點(diǎn)的第三方綜合工具是不具備綜合功能的,至少我們在使用Modelsim的時(shí)候,并沒(méi)有要求我們添加工程用到的具體的哪一款型號FPGA的信息。這也是靜態(tài)仿真的外號門(mén)級仿真指的是LUT門(mén)級網(wǎng)表仿真的依據。

  FPGA開(kāi)發(fā)— 時(shí)序仿真

  時(shí)序仿真是在布局布線(xiàn)之后做的,在前面介紹時(shí)序約束的時(shí)候講到,布線(xiàn)延時(shí)問(wèn)題影響到了電路的性能的時(shí)候可以做時(shí)序約束。那么這個(gè)延時(shí)問(wèn)題的獲得就可以通過(guò)時(shí)序仿真獲得,當然還有一種獲得延時(shí)出現超載情況,這個(gè)屬于下面小節介紹的靜態(tài)時(shí)序分析了。

  一般情況下,電路進(jìn)行完布線(xiàn)過(guò)程后,會(huì )生成一個(gè)延時(shí)信息文件,我們簡(jiǎn)稱(chēng)SDF(standrad dealy format)文件,Quartus平臺下是以.sdo文件形式存在的。里面含有三種延時(shí)信息,分別為最小值、典型值、最大值,存在的形式是最小值:典型值:最大值,一般縮寫(xiě)min:typ:max。這里也體現了,在FPGA里的延時(shí)信息是不能夠精確獲得的,只能是逼近,因為本身同一器件中,不同的區域的邏輯門(mén)也很有可能和其他的區域內同種的邏輯門(mén)的延時(shí)不一樣。我們這里舉一個(gè)例子來(lái)說(shuō)明一下這三種值的含義。

  

  如上圖,這是一個(gè)描述一段延時(shí)線(xiàn)的延時(shí)信息,給的延時(shí)信息從in端點(diǎn)到out端點(diǎn),輸入發(fā)生跳變后,分別以最小值、典型值和最大值將信號跳變傳遞到out端點(diǎn)。我們這里只是一段延時(shí)線(xiàn),在延時(shí)信息文件里還有一類(lèi)延時(shí)信息,就是一些具有邏輯功能的cell延時(shí),這個(gè)時(shí)候信號跳變又分為由高變低和有低變高,因為這兩種跳變在這些器件里的三種延時(shí)值是不一樣的,得分別探討,具體分別以某一種情況類(lèi)推。

  在做后仿真的時(shí)候,只需要在做完靜態(tài)仿真后的基礎上添加布線(xiàn)的延時(shí)信息后,再分析邏輯功能是否滿(mǎn)足要求。后方針的平臺 使用情況和前面一樣,一般采用第三方仿真工具,典型的是Modlesim,具體操作過(guò)程見(jiàn)軟件相關(guān)操作章節。

  FPGA開(kāi)發(fā)—靜態(tài)時(shí)序分析

  靜態(tài)時(shí)序分析,簡(jiǎn)稱(chēng)STA(StaTIc TIming Analysis),這個(gè)過(guò)程做的話(huà)一把是在是做后仿真前做的。在布局布線(xiàn)后,會(huì )生成時(shí)序分析報告,該報告是分析工具利用從布線(xiàn)的路勁上提取出寄生參數后精確計算出來(lái)的。該報告中會(huì )提示出一些關(guān)鍵路徑,所謂關(guān)鍵路勁就是指延時(shí)信息比較突出的信號節點(diǎn)流,通過(guò)分析可以得到不滿(mǎn)足時(shí)序要求的路徑,這個(gè)過(guò)程就是STA過(guò)程。

  靜態(tài)時(shí)序分析的特點(diǎn)就是不需要輸入向量就能窮盡所有的路徑,且運行速度很快、占用內存較少,不僅可以對芯片設計進(jìn)行全面的時(shí)序功能檢查,而且還可利用時(shí)序分析的結果來(lái)優(yōu)化設計。很多設計都可以在功能驗證的成功的基礎上,加上一個(gè)很好的靜態(tài)時(shí)序分析,就可以替代耗時(shí)非常長(cháng)的后仿真了,這是一種很有保障性的化簡(jiǎn)流程方式。后仿真相對靜態(tài)時(shí)序分析來(lái)說(shuō)還具有邏輯驗證,在加上延時(shí)信息的基礎上分析邏輯。

  FPGA開(kāi)發(fā)—在線(xiàn)調試

  在線(xiàn)調試也稱(chēng)作板級調試,它是將工程下載到FPGA芯片上后分析代碼運行的情況。有人會(huì )以為,我們不是已經(jīng)做了仿真了,甚至是時(shí)序仿真都通過(guò)了,還會(huì )存在問(wèn)題么?在實(shí)際中,存在這么些情況我們需要用到在線(xiàn)調試:

  

  仿真不全面而沒(méi)有發(fā)現的FPGA設計錯誤。很多情況下,由于太復雜,無(wú)法做到100%的代碼覆蓋率;

  在板級交互中,存在異步事件,很難做仿真,或者仿真起來(lái)時(shí)間很長(cháng),無(wú)法運行;

  除了本身FPGA外,還可能存在板上互連可靠性問(wèn)題、電源問(wèn)題和IC之間的信號干擾問(wèn)題,都可能導致系統運行出錯;

  FPGA開(kāi)發(fā)—潛在問(wèn)題。

  在線(xiàn)調試的方式主要有兩種,一種是利用外部測試設備,把內部信號傳送到FPGA針腳上,然后用示波器或者邏輯分析儀觀(guān)察信號;另一種就是利用嵌入式邏輯分析儀,在設計中插入邏輯分析儀,利用JTAG邊緣數據掃描和開(kāi)發(fā)工具完成數據交互。

  嵌入式邏輯分析儀的原理相當與在FPGA中開(kāi)辟一個(gè)環(huán)形存儲器,存儲器的大小決定了能夠查看的數據的深度,是可以人為設定的,但是不得超出資源。在FPGA內部,根據設置的需要查看的信號節點(diǎn)信息和驅動(dòng)的采樣時(shí)鐘,對信息進(jìn)行采樣,并放置到設定的存儲空間里,存儲空間是環(huán)形的,內容隨時(shí)間更新。然后通過(guò)判斷觸發(fā)點(diǎn)來(lái)檢查采集數據,一旦滿(mǎn)足觸發(fā)條件,這個(gè)時(shí)候會(huì )停止掃描,然后將觸發(fā)點(diǎn)前后的一些數據返回給PC端的測試工具進(jìn)行波形顯示,供開(kāi)發(fā)者進(jìn)行調試。

  目前的調試工具都是和本身的FPGA開(kāi)發(fā)平臺掛鉤的,不同FPGA廠(chǎng)商都會(huì )有開(kāi)發(fā)軟件平臺,嵌入式邏輯分析儀也就不同。Altera 廠(chǎng)家提供的是SignalTapII,而 Xilinx廠(chǎng)家提供的是 ChipScope,這些工具的具體使用在后面工具中詳解。

  當然這里除了嵌入式邏輯分析儀外,各廠(chǎng)家還提供了一些其他的在線(xiàn)調試工具,例如SignalProbe等等,但是或多或少的用的人不是很多,有興趣的可以找到該功能使用的說(shuō)明手冊。

  FPGA開(kāi)發(fā)— 配置及固化

  好了,到了我們最后一個(gè)環(huán)節就可以完成FPGA的流程了。這一部分我們分四個(gè)小節來(lái)講,首先是針對大家很多人不是太清楚的FPGA配置過(guò)程安排的,隨后一節為了更加深理解,舉了altera 的FPGA敘述配置全過(guò)程,第三小節是探討FPGA主要的配置模式,最后一節就是正對這些配置模式展開(kāi)的對比選擇探討。

  FPGA開(kāi)發(fā)— 配置過(guò)程

  在FPGA正常工作時(shí),配置數據存儲在SRAM中,這個(gè)SRAM單元也被稱(chēng)為配置存儲器(configure RAM)。由于SRAM是易失性存儲器,因此在FPGA上電之后,外部電路需要將配置數據重新載入到芯片內的配置RAM中。在芯片配置完成之后,內部的寄存器以及I/O管腳必須進(jìn)行初始化(iniTIalization),等到初始化完成以后,芯片才會(huì )按照用戶(hù)設計的功能正常工作,即進(jìn)入用戶(hù)模式。

  FPGA上電以后首先進(jìn)入配置模式(configuration),在最后一個(gè)配置數據載入到FPGA以后,進(jìn)入初始化模式(initialization),在初始化完成后進(jìn)入用戶(hù)模式(user-mode)。在配置模式和初始化模式下,FPGA的用戶(hù)I/O處于高阻態(tài)(或內部弱上拉狀態(tài)),當進(jìn)入用戶(hù)模式下,用戶(hù)I/O就按照用戶(hù)設計的功能工作。

  舉例——altera FPGA配置全過(guò)程

  一個(gè)器件完整的配置過(guò)程將經(jīng)歷復位、配置和初始化等3個(gè)過(guò)程。FPGA正常上電后,當其nCONFIG管腳被拉低時(shí),器件處于復位狀態(tài),這時(shí)所有的配置RAM內容被清空,并且所有I/O處于高阻態(tài),FPGA的狀態(tài)管腳nSTATUS和CONFIG_DONE管腳也將輸出為低。當FPGA的nCONFIG管腳上出現一個(gè)從低到高的跳變以后,配置就開(kāi)始了,同時(shí)芯片還會(huì )去采樣配置模式(MSEL)管腳的信號狀態(tài),決定接受何種配置模式。隨之,芯片將釋放漏極開(kāi)路(open-drain)輸出的nSTATUS管腳,使其由片外的上拉電阻拉高,這樣,就表示FPGA可以接收配置數據了。在配置之前和配置過(guò)程中,FPGA的用戶(hù)I/O均處于高阻態(tài)。

  在接收配置數據的過(guò)程中,配置數據由DATA管腳送入,而配置時(shí)鐘信號由DCLK管腳送入,配置數據在DCLK的上升沿被鎖存到FPGA中,當配置數據被全部載入到FPGA中以后,FPGA上的CONF_DONE信號就會(huì )被釋放,而漏極開(kāi)路輸出的CONF_DONE信號同樣將由外部的上拉電阻拉高。因此,CONF_DONE管腳的從低到高的跳變意味著(zhù)配置的完成,初始化過(guò)程的開(kāi)始,而并不是芯片開(kāi)始正常工作。

  INIT_DONE是初始化完成的指示信號,它是FPGA中可選的信號,需要通過(guò)Quartus II工具中的設置決定是否使用該管腳。在初始化過(guò)程中,內部邏輯、內部寄存器和I/O寄存器將被初始化,I/O驅動(dòng)器將被使能。當初始化完成以后,器件上漏極開(kāi)始輸出的INIT_DONE管腳被釋放,同時(shí)被外部的上拉電阻拉高。這時(shí),FPGA完全進(jìn)入用戶(hù)模式,所有的內部邏輯以及I/O都按照用戶(hù)的設計運行,這時(shí),那些FPGA配置過(guò)程中的I/O弱上拉將不復存在。不過(guò),還有一些器件在用戶(hù)模式下I/O也有可編程的弱上拉電阻。在完成配置以后,DCLK信號和DATA管腳不應該被浮空(floating),而應該被拉成固定電平,高或低都可以。

  如果需要重新配置FPGA,就需要在外部將nCONFIG重新拉低一段時(shí)間,然后再拉高。當nCONFIG被拉低吼,nSTATUS和CONF_DONE也將隨即被FPGA芯片拉低,配置RAM被清,所有I/O都變成三態(tài)。當nCONFIG和nSTATUS都變?yōu)楦邥r(shí),重新配置就開(kāi)始了。

  配置模式

  這一塊分成兩部分,一部分是在線(xiàn)調試配置,另一塊是固化,即將工程配置到相應存儲單元中,上電后,通過(guò)存儲在存儲器中的內容配置FPGA。

  在線(xiàn)配置

  第一部分在線(xiàn)調試配置過(guò)程是通過(guò)JTAG模式完成的,如圖13所示,在JTAG模式中,PC和FPGA通信的時(shí)鐘為JTAG接口的TCLK,數據直接從TDI進(jìn)入FPGA,完成相應功能的配置。

  

  JTAG接口是一個(gè)業(yè)界標準接口,主要用于芯片測試等功能。FPGA基本上都可以支持JTAG命令來(lái)配置FPGA的方式,而且JTAG配置方式比其他任何方式優(yōu)先級都高。JTAG接口有4個(gè)必需的信號TDI, TDO, TMS和TCK以及1個(gè)可選信號TRST構成,其中:

  TDI,用于測試數據的輸入;

  TDO,用于測試數據的輸出;

  TMS,模式控制管腳,決定JTAG電路內部的TAP狀態(tài)機的跳變;

  TCK,測試時(shí)鐘,其他信號線(xiàn)都必須與之同步;

  TRST,可選,如果JTAG電路不用,可以講其連到GND。

  FPGA開(kāi)發(fā)—固化

  第二部分固化程序到存儲器中的過(guò)程可以分為兩種方式,主模式和從模式。主模式下

  FPGA器件引導配置操作過(guò)程,它控制著(zhù)外部存儲器和初始化過(guò)程;從模式下則由外部計算機或控制器控制配置過(guò)程。主、從模式從傳輸數據寬度上,又分別可以分為串行和并行。

 ?。?)主串模式

  主串模式是最簡(jiǎn)單的固化模式,如圖14所示,這個(gè)模式過(guò)程不需要為外部存儲器提供一系列地址。它利用簡(jiǎn)單的脈沖信號來(lái)表明數據讀取的開(kāi)始,接著(zhù)由FPGA提供給存儲器時(shí)鐘,存儲器在時(shí)鐘驅動(dòng)下,將數據輸入到FPGA Cdata_in端口。

  

 ?。?)主并模式

  主并模式其實(shí)和主串模式的一樣機理,只不過(guò)是在主串的基礎上,同周期數內傳送的數據變成8位,或者更高,如圖15。這樣一來(lái),主并行相比主串行的數度要優(yōu)先了?,F代有些地方已采用這種方式來(lái)配置FPGA的了。

  

 ?。?)從并模式

  從上面看到,主模式下的連接還是很簡(jiǎn)單的。但是有時(shí)候,系統可能用其他微處理器來(lái)對FPGA進(jìn)行配置。這里的微處理器可以指FPGA內嵌的處理器,比如說(shuō)Nios。微處理器控制著(zhù)何時(shí)配置FPGA,從哪讀取配置文件。如圖16,這種方式的優(yōu)點(diǎn)是處理器可以靈活隨時(shí)變更FPGA配置,同時(shí)配置的速度也快。微處理器先從外部存儲設備里讀取一個(gè)字節的數,然后寫(xiě)到FPGA里。

  

 ?。?)從串模式

  理解了從并模式,從串模式就不用很多解釋了,它的特點(diǎn)就是節約FPGA管腳I/O。

 ?。?)多片級聯(lián)

  多片模式有兩種,一種是采用菊花鏈的思想,多片FPGA共享一個(gè)存儲器,另外一個(gè)是可以使用其他存儲器配置不同的FPGA。如果所示是一個(gè)共享型的結構,顯示啟動(dòng)了。這里分主FPGA和從FPGA,主FPGA和存儲器是使用串行主模式來(lái)配置,而后面那個(gè)的配置是通過(guò)第一配置好的FPGA上微處理器進(jìn)行協(xié)調的。

  

  模式選擇

  現今FPGA應該可以支持上面五種配置模式,是通過(guò)3個(gè)模式引腳來(lái)實(shí)現的,具體的映射如下表,在今后模式還是有可能增加的。

  

  在PS模式下,如果你用電纜線(xiàn)配置板上的FPGA芯片,而這個(gè)FPGA芯片已經(jīng)有配置芯片在板上,那你就必須隔離纜線(xiàn)與配置芯片的信號。一般平時(shí)調試時(shí)不會(huì )把配置芯片焊上的,這時(shí)候用纜線(xiàn)下載程序。只有在調試完成以后,才把程序燒在配置芯片中, 然后將芯片焊上?;蛘吲渲眯酒褪强梢苑奖闳∠潞干系哪欠N。這樣出了問(wèn)題還可以方便地調試。。

  對FPGA芯片的配置中,可以采用AS模式的方法,如果采用EPCS的芯片,通過(guò)一條下載線(xiàn)進(jìn)行燒寫(xiě)的話(huà),那么開(kāi)始的“nCONFIG,nSTATUS”應該上拉,要是考慮多種配置模式,可以采用跳線(xiàn)設計。讓配置方式在跳線(xiàn)中切換,上拉電阻的阻值可以采用10K一般在做FPGA實(shí)驗板的時(shí)候,用AS+JTAG方式,這樣可以用JTAG方式調試,而最后程序已經(jīng)調試無(wú)誤了后,再用AS模式把程序燒到配置芯片里去。

  FPGA開(kāi)發(fā)—開(kāi)發(fā)工具總結

  在圍繞圖1把FPGA開(kāi)發(fā)流程講完后,這里對每個(gè)環(huán)節中設計的相關(guān)軟件進(jìn)行總結,如下表所示。畢竟充分利用各種工具的特點(diǎn),進(jìn)行多種EDA工具的協(xié)同設計,對FPGA的開(kāi)發(fā)是非常重要的。充分利用了這些EDA工具的優(yōu)點(diǎn),能夠提高開(kāi)發(fā)效率和系統性能。

  

  表中列出的每種EDA工具都有自己的特點(diǎn)。一般由FPGA廠(chǎng)商提供的集成開(kāi)發(fā)環(huán)境,如Altera Quartus II和Xilinx ISE,在邏輯綜合和設計仿真環(huán)節都不是非常優(yōu)秀,因此一般都會(huì )提供第三方EDA工具的接口,讓用戶(hù)更方便地利用其他EDA工具。為了提高設計效率,優(yōu)化設計結果,很多廠(chǎng)家提供了各種專(zhuān)業(yè)軟件,用以配合FPGA芯片廠(chǎng)家提供的工具進(jìn)行更高效的設計。

  比較常見(jiàn)的使用方式是:FPGA廠(chǎng)商提供的集成開(kāi)發(fā)環(huán)境、專(zhuān)業(yè)邏輯仿真軟件、專(zhuān)業(yè)邏輯綜合軟件一起使用,進(jìn)行多種EDA工具的協(xié)同設計。比如Quartus II+ModelSim+FPGA Compiler II,ISE+ModelSim+Synplify Pro等等。



關(guān)鍵詞: FPGA

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>