最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

談一談FPGA研發(fā)心得

2023-03-14 16:35 作者:明德?lián)PFPGA科教  | 我要投稿

首先來(lái)說(shuō):
FPGA是一種器件。其英文名 feild programable gate arry 。很長(zhǎng),但不通俗。通俗來(lái)說(shuō),是一種功能強(qiáng)大似乎無(wú)所不能的器件。通常用于通信、網(wǎng)絡(luò)、圖像處理、工業(yè)控制等不同領(lǐng)域的器件。就像ARM、DSP等嵌入式器件一樣,成為無(wú)數(shù)碼農(nóng)碼工們情感傾瀉而出的代碼真正獲得生命的地方。只不過(guò),一樣的編程,卻是不一樣的思想。嵌入式軟件人員看到的是C。而FPGA工程師看到是硬件描述語(yǔ)言,verilog或VHDL。軟件看到是函數(shù)、對(duì)象、重構(gòu)。FPGA工程師則是模塊、流水、復(fù)用。從現(xiàn)象上看,都是代碼到下載程序再到硬件上運(yùn)行。不能只看現(xiàn)象而忽略本質(zhì)。FPGA 開發(fā)本質(zhì)上是設(shè)計(jì)一顆IC,“**的身子,丫鬟的命”不是所有verilog/VHDL代碼,都能獲得青睞去流片成為真正的芯片,而更多的則成為運(yùn)行在FPGA器件上,成為完成相同功能的替代品。其實(shí)現(xiàn)的功能卻一點(diǎn)也不遜色于百萬(wàn)身價(jià)流片的近親。從而成為獨(dú)樹一幟的行業(yè)。
FPGA開發(fā)的流程,是通過(guò)verilog/VHDL等硬件描述語(yǔ)言通過(guò)EDA工具編譯、綜合、布局布線成為下載文件,最終加載到FPGA器件中去,完成所實(shí)現(xiàn)的功能。那硬件描述語(yǔ)言描述的是什么?這里描述的就是組合邏輯電路和時(shí)序邏輯電路。組合邏輯電路就是大家所熟知的 與門、或門、非門。時(shí)序邏輯電路則是觸發(fā)器。數(shù)字芯片上絕大部分邏輯都是這兩種邏輯實(shí)現(xiàn)的。也就是基本上每個(gè)電子行業(yè)的人所學(xué)過(guò)的數(shù)字電路。順便說(shuō)一下,感謝香農(nóng)大師,在其碩士畢業(yè)論文<繼電器與開關(guān)電路的符號(hào)分析>就奠定了數(shù)字電路的的根基。只不過(guò)在FPGA中,與或非的操作變成了查找表的操作。于是所有的數(shù)字電路變成了查找表和寄存器,這就構(gòu)成了FPGA的基礎(chǔ)。查找表負(fù)責(zé)邏輯實(shí)現(xiàn),寄存器存儲(chǔ)電路狀態(tài)。二者配合,雙劍合璧,天衣無(wú)縫。這是最初的FPGA的雛形。 現(xiàn)代FPGA內(nèi)部出了查找表和寄存器之外,還有RAM塊,用于存儲(chǔ)大量的數(shù)據(jù)塊,這是因?yàn)镽AM塊較寄存器來(lái)存儲(chǔ)大量數(shù)據(jù)更能節(jié)省芯片實(shí)現(xiàn)的面積。FPGA內(nèi)部的時(shí)序電路則需要時(shí)鐘的輸入,通常FPGA內(nèi)部需要時(shí)鐘種類較多,因此需要在片內(nèi)產(chǎn)生所需的的相關(guān)的時(shí)鐘,如不同頻率,不同相位的時(shí)鐘,因此時(shí)鐘管理單元DCM/PLL也是必不可少的內(nèi)部部件。除此之外,F(xiàn)PGA內(nèi)部還包括接口I/O,I/O分為普通I/O和高速I/O,高速I/O支持例如高速的SERDES,用于實(shí)現(xiàn)XAUI,PCIE等高速接口,這些接口動(dòng)輒幾Gbps到10Gbps以上。此外種類多種多樣的硬核IP也是各FPGA廠商差異化競(jìng)爭(zhēng)利器,例如POWERPC、ARM等硬核IP。從而構(gòu)成CPU+FPGA于一體的集可編程性和可重構(gòu)的處理平臺(tái)。因此,相對(duì)來(lái)所,F(xiàn)PGA雖然發(fā)展有二三十年的歷史,其基本架構(gòu)一直不變不大。
回到問(wèn)題開始的地方,F(xiàn)PGA的英文翻譯過(guò)來(lái)是現(xiàn)場(chǎng)可編程門陣列。這是相對(duì)ASIC來(lái)說(shuō)的,ASIC的硬件也可看做是門陣列,但是其是非可編程的器件。流片完成其功能就固化了,而FPGA的可編程性就在其能夠重新下載配置文件,來(lái)改變其內(nèi)在的功能,這就是其可編程性的由來(lái)。從前端開發(fā)流程來(lái)說(shuō),F(xiàn)PGA和ASIC開發(fā)并無(wú)二至。由于ASIC開發(fā)一次性投入成本較高,F(xiàn)PGA無(wú)疑是一種經(jīng)濟(jì)的替代方案,用于實(shí)現(xiàn)的高速的數(shù)據(jù)并行處理。如業(yè)務(wù)能夠支撐大規(guī)模應(yīng)用并且協(xié)議固化,則能夠分?jǐn)偝杀镜腁SIC實(shí)現(xiàn)就有成本的優(yōu)勢(shì)。
FPGA作為一種器件,技術(shù)上主要壟斷在少數(shù)大公司手中,那就是雙巨頭ALTERA和XILINX。除此之外還有一些份額相對(duì)較小的公司,例如ACTEL和LATTICE。不止是FPGA的硬件芯片,其配套的EDA工具技術(shù)壁壘更高。因此相對(duì)于CPU來(lái)說(shuō),F(xiàn)PGA的國(guó)產(chǎn)化更不樂(lè)觀,不過(guò)已經(jīng)有國(guó)內(nèi)的廠商來(lái)從事這一行業(yè),例如國(guó)微和京微雅格等,也在一些細(xì)分市場(chǎng)上推出自己的FPGA產(chǎn)品。
FPGA和他那些小伙伴們 (一) 系統(tǒng)架構(gòu)組成
通常來(lái)講,“一個(gè)好漢三個(gè)幫”,一個(gè)完整的嵌入式系統(tǒng)中由單獨(dú)一個(gè)FPGA使用的情況較少。通常由多個(gè)器件組合完成,例如由一個(gè)FPGA+CPU來(lái)構(gòu)成。通常為一個(gè)FPGA+ARM,ARM負(fù)責(zé)軟件配置管理,界面輸入外設(shè)操作等操作,F(xiàn)PGA負(fù)責(zé)大數(shù)據(jù)量運(yùn)算,可以看做CPU的專用協(xié)處理器來(lái)使用,也常會(huì)用于擴(kuò)展外部接口。常用的有ARM+FPGA,DSP+FPGA,或者網(wǎng)絡(luò)處理器+FPGA等種種架構(gòu)形式,這些架構(gòu)形式構(gòu)成整個(gè)高速嵌入式設(shè)備的處理形態(tài)。
不得不說(shuō)的是,隨著技術(shù)的進(jìn)步,現(xiàn)在CPU中集成的單元也隨之增加,例如TI的“達(dá)芬奇”架構(gòu)的處理器內(nèi)部通常由ARM+DSP構(gòu)成。同時(shí)異構(gòu)的處理器形態(tài)業(yè)逐漸流行,如ARM9+ARM7的結(jié)構(gòu)。這類一個(gè)主要處理系統(tǒng)(ARM9)外帶輔助處理系統(tǒng)(ARM7)的設(shè)計(jì),同樣成為現(xiàn)在處理器設(shè)計(jì)的流行方向。主處理系統(tǒng)運(yùn)行嵌入式操作系統(tǒng),而輔助處理單元?jiǎng)t專注某一些的專用領(lǐng)域的處理。這些系統(tǒng)的應(yīng)用減少了FPGA作為CPU協(xié)處理單元的領(lǐng)域。因?yàn)楫吘笷PGA相比ARM等流行嵌入式處理器價(jià)格要相對(duì)較高。
在這種情形下,F(xiàn)PGA的廠商似乎也感受到了壓力,不約而同推出了帶ARM硬核的FPGA,例如ALTERA的 和XILINX的ZYNQ和ALTERA的SOC FPGA。這是即是互相競(jìng)爭(zhēng)的需要,也是同眾多CPU廠商一掰手腕的杰總。即使在這兩種在趨勢(shì)下,經(jīng)典的處理器+FPGA的設(shè)計(jì)仍然可看做為高性能嵌入式系統(tǒng)的典型配置。
經(jīng)典的處理器+FPGA的配置中有多種的架構(gòu)形式,即多個(gè)處理器單元,可能是ARM,MIPS,或者DSP,F(xiàn)PGA也可能是多片的配置,具體架構(gòu)形式于具體處理的業(yè)務(wù)相關(guān)和目標(biāo)設(shè)備的定位也相關(guān)。因?yàn)镕PGA作為簡(jiǎn)單業(yè)務(wù)流大數(shù)據(jù)量的處理形態(tài)仍然是CPU無(wú)可比擬的優(yōu)勢(shì),F(xiàn)PGA內(nèi)部可以開發(fā)大量業(yè)務(wù)數(shù)據(jù)并行,從而實(shí)現(xiàn)高速的數(shù)據(jù)處理。
在實(shí)現(xiàn)高速處理方面,CPU的另一個(gè)發(fā)展趨勢(shì)是多核,多核處理器也能處理大數(shù)據(jù)量的業(yè)務(wù)的并行,例如業(yè)界TERILA已推出64核的多核處理器,采用MIPS處理器,通過(guò)二維MASH網(wǎng)絡(luò)連接在一起,形成NOC的結(jié)構(gòu)。在性能上已經(jīng)和現(xiàn)有的高速FPGA的處理能力上不相上下。但是多核處理器的不得不說(shuō)的問(wèn)題就是,同一業(yè)務(wù)流分配到多核處理上后,如需交互,例如訪問(wèn)同一資源,就會(huì)造成讀寫的緩存一致的問(wèn)題,解決的這一問(wèn)題的天然思路是加鎖,即在變量訪問(wèn)上加自旋鎖,但是帶來(lái)的問(wèn)題就是處理性能的急劇下降。而FPGA無(wú)論并行處理和同一變量的訪問(wèn),都可以變成工程師的設(shè)計(jì)水平的問(wèn)題,沒有原理性的挑戰(zhàn)。
沒有一種器件可以滿足全人類的眾多需求,因此不用擔(dān)心FPGA沒有用武之地。必定是一系列產(chǎn)品的組合。下面主要介紹一下FPGA可以作為現(xiàn)今熱門場(chǎng)景的幾種應(yīng)用。
(1)網(wǎng)絡(luò)存儲(chǔ)產(chǎn)品,特別是現(xiàn)在的NAS,或者SAN設(shè)備上,其存儲(chǔ)的時(shí)間、接口、安全性等都要求較高,而FPGA無(wú)論處理性能還是擴(kuò)展接口的能力都使其在這一領(lǐng)域大有作為?,F(xiàn)在高端FPGA單片就可以擴(kuò)展32個(gè)或者更多4G或者8G的FC接口。并且其協(xié)議處理相對(duì)的固定,也使FPGA在這一領(lǐng)域有大量的可能應(yīng)用。
(2)高速網(wǎng)絡(luò)設(shè)備,現(xiàn)在高速網(wǎng)絡(luò)設(shè)備10G、40/100G以太網(wǎng)設(shè)備領(lǐng)域,同樣FPGA也是關(guān)鍵的處理部件。特別是IPv6的商用化及大數(shù)據(jù)對(duì)于基礎(chǔ)設(shè)施的高要求,都使這一領(lǐng)域的處理應(yīng)用會(huì)逐漸廣泛,這一領(lǐng)域通常是高速網(wǎng)絡(luò)處理器(NP)+FPGA的典型架構(gòu)。
(3)4G等通信設(shè)備,對(duì)于新一代通信基站的信號(hào)處理,F(xiàn)PGA+DSP陣列的架構(gòu)就是絕配。特別是在專用處理芯片面世之前,這樣的架構(gòu)可以保證新一代通信基礎(chǔ)設(shè)施的迅速研發(fā)和部署。
沒有完美的架構(gòu),只有合適的組合,各種芯片和架構(gòu)都是為應(yīng)用服務(wù),互相的滲透是趨勢(shì),也是必然。FPGA相對(duì)處理器的可編程領(lǐng)域,仍然屬于小眾(雖然人數(shù)也不少)。但是正像一則笑話所說(shuō):大腿雖然比根命根子粗,但決沒有命子重要。這算開個(gè)玩笑。FPGA的實(shí)現(xiàn)為以后的芯片化留下了許多可能和想象空間,從而在應(yīng)用大量爆發(fā)時(shí)通過(guò)芯片化來(lái)大幅降低成本,這這也正是其他可編程器件所不能比擬的。
FPGA和他那些小伙伴們 (二) 器件互聯(lián)
系統(tǒng)架構(gòu)確定,下一步就是FPGA與各組成器件之間互聯(lián)的問(wèn)題了。通常來(lái)說(shuō),CPU和FPGA的互聯(lián)接口,主要取決兩個(gè)要素:
(1)CPU所支持的接口。
(2)交互的業(yè)務(wù)。
通常來(lái)說(shuō),F(xiàn)PGA一般支持與CPU連接的數(shù)字接口,其常用的有EMIF,PCI,PCI-E,UPP,網(wǎng)口(MII/GMII/RGMII),DDR等接口。作為總線類接口,F(xiàn)PGA通常作為從設(shè)備與CPU連接,CPU作為主設(shè)備通過(guò)訪問(wèn)直接映射的地址對(duì)FPGA進(jìn)行訪問(wèn)。根據(jù)是否有時(shí)鐘同步,通??偩€訪問(wèn)分為同步或異步的總線,根據(jù)CPU外部總線協(xié)議有所不同,但數(shù)據(jù)、地址、控制信號(hào)基本是總線訪問(wèn)類型中總線信號(hào)所不能省略的。CPU手冊(cè)中會(huì)對(duì)信號(hào)定義和時(shí)序控制有著詳細(xì)的說(shuō)明,F(xiàn)PGA需要根據(jù)這些詳細(xì)說(shuō)明來(lái)實(shí)現(xiàn)相應(yīng)的邏輯。同時(shí)CPU還可以對(duì)訪問(wèn)時(shí)序進(jìn)行設(shè)置,比如最快時(shí)鐘,甚至所需的最小建立時(shí)間和保持時(shí)間,這些一般CPU都可以進(jìn)行設(shè)置,而這些具體參數(shù),不僅影響FPGA的實(shí)現(xiàn),也決定總線訪問(wèn)的速度和效率。對(duì)于同步總線,只需要根據(jù)輸入時(shí)鐘進(jìn)行采樣處理即可,但對(duì)于異步總線,則需要的對(duì)進(jìn)入的控制信號(hào)進(jìn)行同步化處理,通常處理方式是寄存兩拍,去掉毛刺。因此用于采樣的時(shí)鐘就與CPU所設(shè)置的總線參數(shù)相關(guān),如采樣時(shí)鐘較低,等控制信號(hào)穩(wěn)定后在譯碼后輸出,一個(gè)總線操作周期的時(shí)間就會(huì)相對(duì)較長(zhǎng),其處理的效率也相對(duì)較低;假如采樣時(shí)鐘過(guò)快,則對(duì)關(guān)鍵路徑又是一個(gè)挑戰(zhàn),因此合理設(shè)定采樣頻率,便于接口的移植并接口的效率是設(shè)計(jì)的關(guān)鍵點(diǎn)和平衡點(diǎn)。
對(duì)于總線型的訪問(wèn)來(lái)說(shuō),數(shù)據(jù)信號(hào)通常為三態(tài)信號(hào),用于輸入和輸出。這種設(shè)計(jì)的目的是為了減少外部連線的數(shù)量。因?yàn)閿?shù)據(jù)信號(hào)相對(duì)較多一般為8/16/32位數(shù)據(jù)總線??偩€的訪問(wèn)的優(yōu)勢(shì)是直接映射到系統(tǒng)的地址區(qū)間,訪問(wèn)較為直觀。但相對(duì)傳輸速率不高,通常在幾十到100Mbps以下。這種原因的造成主要為以下因素(1)受制總線訪問(wèn)的間隔,總線操作周期等因素,總線訪問(wèn)間隔即兩次訪問(wèn)之間總線空閑的時(shí)間,而總線操作周期為從發(fā)起到相應(yīng)的時(shí)間。(2)不支持雙向傳輸,并且FPGA需主動(dòng)發(fā)起對(duì)CPU操作時(shí),一般只有發(fā)起CPU的中斷處理一種方式。這種總線型操作特點(diǎn),使其可以用作系統(tǒng)的管理操作,例如FPGA內(nèi)部寄存器配置,運(yùn)行過(guò)程中所需參數(shù)配置,以及數(shù)據(jù)流量較小的信息交互等操作。這些操作數(shù)據(jù)量和所需帶寬適中,可以應(yīng)對(duì)普通的嵌入式系統(tǒng)的處理需求。
對(duì)于大數(shù)據(jù)流量的數(shù)據(jù)交互,一般采用專用的總線交互,其特點(diǎn)是,支持雙向傳輸,總線傳輸速率較快,例如GMII/RGMII、Upp、專用LVDS接口,及SERDES接口。專用SERDES接口一般支持的有PCI-E,XAUI,SGMII,SATA,Interlaken接口等接口。GMII/RGMII,專用LVDS接口一般處理在1GbpS一下的業(yè)務(wù)形式,而PCI-E,根據(jù)其型號(hào)不同,支持幾Gbps的傳輸速率。而XAUI可支持到10Gbps的傳輸速率,lnterlaken接口可支持到40Gbps的業(yè)務(wù)傳輸。
對(duì)于不同所需的業(yè)務(wù)形式及處理器的類型,則可選擇相應(yīng)的接口形式,來(lái)傳輸具體的業(yè)務(wù)?,F(xiàn)今主流FPGA中都提供的各種接口的IP。選擇FPGA與各型CPU互聯(lián)接口,一般選擇主流的應(yīng)用交互方案,特殊的接口缺少支撐IP,導(dǎo)致開發(fā)、調(diào)試、維護(hù)和兼容性的成本都較大,同時(shí)注意系統(tǒng)的持續(xù)演進(jìn)的需要,如只在本項(xiàng)目使用一次,而下一項(xiàng)目或開發(fā)階段已摒棄此類接口,則需提前規(guī)劃技術(shù)路線。畢竟一個(gè)穩(wěn)定、高效的接口互聯(lián)是一個(gè)項(xiàng)目成功的基礎(chǔ)。
不是所有的嵌入式系統(tǒng)都需要“高大上”的接口形式,各類低速的穩(wěn)定接口也同樣在FPGA的接口互聯(lián)中有著重要的角色,其中UART、SPI、I2C等連接形式也非常的常見。畢竟,一個(gè)優(yōu)秀的設(shè)計(jì)不是“高大上”的堆積,而是對(duì)需求最小成本的滿足。適合的才是最美的。
靈活性的陷阱
如果說(shuō)用一個(gè)詞來(lái)描述FPGA的特性,靈活性肯定名列前茅。
FPGA的靈活性在于:
(一)I/O的靈活性,其可以通過(guò)其I/O組成各種接口與各種器件連接,并且支持不同的電氣特性。
(二)內(nèi)部存儲(chǔ)器靈活性,可以通過(guò)IP生成工具生成各種深度和寬度的RAM或者FIFO等。
(三)邏輯的靈活性,內(nèi)部邏輯通可生成的各種類型IP。
對(duì)于I/O接口來(lái)說(shuō),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)整是沒有任何問(wèn)題的。但是隨著FPGA的接口IP核硬核化的趨勢(shì),逐漸由很多的接口IP不能支持這種調(diào)整。例如對(duì)于較早的SDRAM或者DDRSDRAM來(lái)說(shuō),在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接口來(lái)說(shuō),其硬核IP(ALTERA)上就不支持4組SERDES的順序互換,這將會(huì)影響其硬核FCS的編碼。如果板級(jí)連接上與PHY的順序與FPGA例化IP的約束不一致,則其硬核PCS就不能布局布線通過(guò)(軟核FCS可以支持調(diào)整)。這種靈活性認(rèn)識(shí)導(dǎo)致硬件板級(jí)互聯(lián)的問(wèn)題可謂屢見不鮮,特別是系統(tǒng)復(fù)雜度的上升,板級(jí)連線的增加,將會(huì)導(dǎo)致設(shè)計(jì)人員疏忽從而掉入“靈活性的陷阱”。解決此類問(wèn)題的方法。包括(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工程師就是拿來(lái)就用的狀態(tài)。而缺少整體內(nèi)部memory規(guī)劃,一般來(lái)說(shuō),對(duì)于單端口、雙端口、假雙端口,各型芯片手冊(cè)中都有明確的定義,例如xilinx的SPATAN3系列中最小RAM單元為18K。一個(gè)RAM例化最小單位就是18K。而新的器件中最小單位一般為9K。也就是說(shuō)雖然工程師例化的較小的RAM,例如25616.只有4K,但是其也占用一個(gè)最小單元,根據(jù)器件的不同而不同。而亂用雙端口導(dǎo)致RAM資源的過(guò)分占用則是更常見的設(shè)計(jì)問(wèn)題。FPGA內(nèi)部對(duì)于單個(gè)RAM能夠支持的真雙端口是有限制的。舉例說(shuō)明,對(duì)于ALTERA的9K的存儲(chǔ)單元一般支持51218的雙端口RAM。但如果是一個(gè)25632的雙端口則需要占用2個(gè)9K的存儲(chǔ)RAM。也就是說(shuō),RAM器件的能力是有限的,這取決于RAM的外部互聯(lián)線是有限的,以剛才說(shuō)的25632的雙端口RAM來(lái)說(shuō),其需要數(shù)據(jù)線就是64根(雙端口),對(duì)于單個(gè)RAM的連線資源來(lái)說(shuō),這是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通過(guò)MII連接,現(xiàn)有的IP則難以滿足需求。這是因?yàn)镸II連接PHY其所有的時(shí)鐘都是PHY提供的。CPU的設(shè)計(jì)也是與PHY連接,其時(shí)鐘也有PHY提供。而如果二者連接,就變成都等著對(duì)方提供時(shí)鐘,則就變成沒有時(shí)鐘。這種調(diào)試問(wèn)題相對(duì)來(lái)說(shuō)容易解決,不過(guò)在系統(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ì),其最終要成為變成硬件承載的,每一行語(yǔ)句都要考慮其綜合后的電路,才能真正領(lǐng)會(huì)FPGA設(shè)計(jì)的精髓。
“合抱之木,生于毫末;九層之臺(tái),起于壘土;千里之行,始于足下?!?老子《道德經(jīng)》

對(duì)于新手來(lái)說(shuō),如何上手調(diào)試FPGA是關(guān)鍵的一步。
對(duì)于每一個(gè)新設(shè)計(jì)的FPGA板卡,也需要從零開始調(diào)試。
那么如何開始調(diào)試?
下面介紹一種簡(jiǎn)易的調(diào)試方法。
(1) 至少設(shè)定一個(gè)輸入時(shí)鐘 input sys_clk;
(2) 設(shè)定輸出 output [N-1:0] led;
(3)設(shè)定32位計(jì)數(shù)器 reg [31:0] led_cnt;
(4) 時(shí)鐘驅(qū)動(dòng)計(jì)數(shù)器開始工作
always@(posedge sys_clk)
led_cnt <= led_cnt + 1
(5)輸出led信號(hào)。
assign led = led_cnt[M:N];
程序完成。
(6)設(shè)定管教約束
如果為XILINX FPGA ,在UCF文件中 NET “sys_clk” LOC = 管腳名稱
如果為ALTERA FPGA ,在QSF文件中,添加 set_location_assignment 管腳名稱 -to sys_clk
其他管腳,可依次類推。
(7)編譯,布局、布線,生成配置文件。
XILINX 生成BIT文件。
ALTERA 生成SOF文件
(8)連接JTAG,下載相應(yīng)的配置文件。
(9)觀察是否閃燈(肉眼可見)。
關(guān)于閃燈的解釋如下:
assign led = led_cnt[M:N]; led_cnt 為32bit的信號(hào),需要幾個(gè)閃燈,則根據(jù)輸入時(shí)鐘的頻率和肉眼能夠分辨的時(shí)間(100ms)。如輸出時(shí)鐘為25Mhz。則閃燈看見的位置能夠分批到10hz。需分頻2.5M= 32‘h2625A0,因此,則需要輸出至少為led_cnt[21]位,才能看到閃燈。

雖然程序簡(jiǎn)單,但是,通過(guò)調(diào)試可以確認(rèn):
(1)首先可確定JTAG下載器的正確連接,能夠正常下載下載文件。如不能,常見問(wèn)題包括
(一)檢查是否安裝驅(qū)動(dòng)。
(二)下載器是否由紅燈變成黃燈/綠燈。如紅燈亮一般情況下,JTAG的與電路板VCC沒有供電。
(三)檢查JTAG連接的線序。
(四)檢查JTAG電路,檢查原理圖上TMS,TDI,TDO的上拉和下拉電阻是否與datasheet中一致。
通過(guò)以上四種方式,可排除絕大部分JTAG下載的錯(cuò)誤。
(2)可以判斷晶振是否起振,下載后無(wú)燈閃。
(一)首先,示波器查看晶振頻率,觀察晶振的輸出,如無(wú)輸出,查看晶振的電源和地信號(hào),如電源正常,而晶振無(wú)反應(yīng),則更換晶振。
(二)如無(wú)示波器,也有替代的方法,通過(guò)嵌入式邏輯分析儀抓信號(hào)(任意信號(hào))。如邏輯分析儀點(diǎn)擊采樣后無(wú)反應(yīng),則無(wú)時(shí)鐘輸入。
這是因?yàn)檫壿嫹治鰞x也需要時(shí)鐘進(jìn)行邏輯值的存儲(chǔ)。
(3)如正常下載后閃燈,證明該FPGA板卡硬件設(shè)計(jì)上能夠達(dá)到最低限度的FPGA調(diào)試狀態(tài)。
最后,說(shuō)明一下,為什么是閃燈而不是亮燈的程序,這是因?yàn)椋紫乳W燈可以判斷外部晶振工作正常,并且由于LED等通常為上拉,也就是說(shuō)邏輯值0表示燈亮,而也不排除某硬件工程師非要下拉。邏輯1表示亮。因此采用閃燈更加方便。
問(wèn)題:為什么LED燈值為什么要上拉?
這是因?yàn)椋篖ED上拉后,需要燈亮?xí)r電流由外部電源提供,而下拉,燈亮?xí)r電流由芯片的CMOS電路驅(qū)動(dòng)。這種在設(shè)計(jì)中應(yīng)避免。
勿用諱言,現(xiàn)在國(guó)內(nèi)FPGA開發(fā)還處于小作坊的開發(fā)階段,一般都是三、四個(gè)人,七八臺(tái)機(jī)器.小作坊如何也能做出大成果。這是每個(gè)FPGA工程師都要面臨的問(wèn)題。架構(gòu)設(shè)計(jì)是面臨的第一關(guān)。經(jīng)常有這樣的項(xiàng)目,需求分析,架構(gòu)設(shè)計(jì)匆匆忙忙,號(hào)稱一兩個(gè)月開發(fā)完畢,實(shí)際上維護(hù)項(xiàng)目就花了一年半時(shí)間。主要包括幾個(gè)問(wèn)題,一,性能不滿足需求。二,設(shè)計(jì)頻繁變更。三,系統(tǒng)不穩(wěn)定,調(diào)試問(wèn)題不收斂。
磨刀不誤砍柴工,F(xiàn)PGA設(shè)計(jì)的需求分析是整個(gè)設(shè)計(jì)第一步。如何將系統(tǒng)的功能需求,轉(zhuǎn)換成FPGA的設(shè)計(jì)需求,是FPGA架構(gòu)設(shè)計(jì)的首要問(wèn)題。首先, 需要明確劃分軟件和硬件的邊界。軟件主要處理輸入輸出、界面顯示、系統(tǒng)管理、設(shè)備維護(hù)。而FPGA則負(fù)責(zé)大數(shù)據(jù)流的處理。
如果使用幾百元FPGA實(shí)現(xiàn)了一個(gè)十幾元單片機(jī)就能完成的功能,就算實(shí)現(xiàn)的非常完美,那么這是一個(gè)什么樣的神設(shè)計(jì)?任何一個(gè)項(xiàng)目都要考慮成本,研發(fā)成本、物料成本、維護(hù)成本等等。FPGA的使用位置必定是其他器件難以企及的優(yōu)勢(shì)。
因此對(duì)于一個(gè)FPGA架構(gòu)設(shè)計(jì),其首先需要考慮就是性能,如沒有性能的需求,其他的處理器ARM就可能替代其功能。其次就是接口,用于處理器擴(kuò)展其沒有的接口,作為高速接口轉(zhuǎn)換。最后,需要考慮就是可維護(hù)性,F(xiàn)PGA的調(diào)試是非常耗時(shí)的,一個(gè)大型的FPGA的編譯時(shí)間在幾小時(shí)甚至更高(通過(guò)嵌入式分析儀抓信號(hào),每天工作8小時(shí),只能分析兩到三次)。而軟件調(diào)試只需make,編譯時(shí)間以秒來(lái)記(這個(gè)問(wèn)題可以通過(guò)提升編譯服務(wù)器性能改善而不能消失,本質(zhì)上要考慮可測(cè)性設(shè)計(jì))。如果不考慮維護(hù)性和可測(cè)性,調(diào)試成本和壓力就非常之大。
通常,F(xiàn)PGA的大部分架構(gòu)設(shè)計(jì)可以采用數(shù)據(jù)流驅(qū)動(dòng)的方式來(lái)實(shí)現(xiàn),例子1,假設(shè)一個(gè)實(shí)現(xiàn)視頻解壓縮FPGA的設(shè)計(jì),輸入是無(wú)線接口,輸出為顯示屏。那么輸入輸出的接口基本就能確定。以數(shù)據(jù)流為驅(qū)動(dòng)可以粗略劃分,輸入接口->解壓縮模塊->視頻轉(zhuǎn)換模塊->顯示接口。如需要視頻緩沖,則確定是否需要連接外部存儲(chǔ)器。那就需要確認(rèn)在什么位置進(jìn)行數(shù)據(jù)的緩沖。通過(guò)要支持顯示的畫面的質(zhì)量,就能確認(rèn)最大碼流,同樣可以計(jì)算視頻解壓模塊和轉(zhuǎn)換模塊的計(jì)算能力,從而導(dǎo)出所需的內(nèi)部總線寬度,系統(tǒng)頻率,以及子模塊個(gè)數(shù)等等。例子2,某支持通過(guò)有線電視網(wǎng)上網(wǎng)電視IP網(wǎng)關(guān),同樣也是輸入的普通IP網(wǎng)絡(luò),輸出為有線調(diào)試網(wǎng)的調(diào)試解調(diào)器。將IP報(bào)文等長(zhǎng)填充后,在固定時(shí)隙內(nèi)送入有線電視網(wǎng)中,同樣也是基于數(shù)據(jù)流驅(qū)動(dòng)的方式。
數(shù)據(jù)流驅(qū)動(dòng)式架構(gòu),可以作為FPGA設(shè)計(jì)中一個(gè)最重要的架構(gòu)。通常來(lái)說(shuō)應(yīng)用于IP領(lǐng)域、存儲(chǔ)領(lǐng)域、數(shù)字處理領(lǐng)域等較大型FPGA設(shè)計(jì)都是數(shù)據(jù)流驅(qū)動(dòng)式架構(gòu),主要包括輸入接口單元,主處理單元,輸出接口單元。還可能包括,輔助處理單元、外部存儲(chǔ)單元。這些單元之間一般采用流水式處理,即處理完畢后,數(shù)據(jù)打包發(fā)完下一級(jí)處理。其中輸入輸出可能有多個(gè),此時(shí)還需要架構(gòu)內(nèi)部實(shí)現(xiàn)數(shù)據(jù)的交換。
另一種較為常用的架構(gòu)方式為調(diào)用式架構(gòu),即一般FPGA通過(guò)標(biāo)準(zhǔn)接口如PCI、PCI-E,CPCI,PCI-X,EMIF等等。各種接口,F(xiàn)PGA內(nèi)部實(shí)現(xiàn)某一加速單元,如視頻加速,數(shù)據(jù)處理,格式轉(zhuǎn)換等操作。這種結(jié)構(gòu)基本基本圍繞FPGA接口、加速單元展開,屬于數(shù)據(jù)的反饋類型,即處理完數(shù)據(jù)又反饋回接口模塊。
其他雖然各型各樣,如SOPC,如各型接口,但本質(zhì)上其都是為上述架構(gòu)服務(wù)的,或做配置管理替代外部CPU,或在數(shù)據(jù)流中間傳遞中間參數(shù)?;蛟趦?nèi)部實(shí)現(xiàn)CPU+協(xié)處理器的架構(gòu),因此說(shuō),無(wú)他變化。
孫子兵法云:“兵無(wú)常勢(shì),水無(wú)常形”。但是對(duì)于一種設(shè)計(jì)技術(shù)來(lái)說(shuō),沒有一種固定演進(jìn)的架構(gòu)和設(shè)計(jì),那么項(xiàng)目的整個(gè)設(shè)計(jì)層次總是推到重來(lái),從本質(zhì)上說(shuō),就是一種低水平重復(fù)。如果總結(jié)規(guī)律,提煉共性,才能在提升設(shè)計(jì)層次,在小作坊中取得大成果。
架構(gòu)設(shè)計(jì)漫談(二)穩(wěn)定壓倒一切
敏捷開發(fā)宣言中,有一條定律是“可以工作的軟件勝過(guò)面面俱到的文檔”。如何定義可可以工作的,這就是需求確定后架構(gòu)設(shè)計(jì)的首要問(wèn)題。而大部分看這句話的同志更喜歡后半句,用于作為不寫文檔的借口。
FPGA的架構(gòu)設(shè)計(jì)最首先可以確定就是外接接口,就像以前說(shuō)的,穩(wěn)定可靠的接口是成功的一半。接口的選擇需要考慮幾個(gè)問(wèn)題。
1, 有無(wú)外部成熟IP。一般來(lái)說(shuō),ALTERA和XILINX都提供大量的接口IP,采用這些IP能夠提升研發(fā)進(jìn)度,但不同IP在不同F(xiàn)PGA上需要不同license,這個(gè)需要通過(guò)代理商來(lái)獲得(中國(guó)國(guó)情,軟件是不賣錢的)。
2, 自研接口IP,能否滿足時(shí)間、進(jìn)度、穩(wěn)定性、及兼容性的要求。
案例1設(shè)計(jì)一個(gè)網(wǎng)絡(luò)接口在邏輯設(shè)計(jì)上相對(duì)簡(jiǎn)單,比如MII接口等同于4bit數(shù)據(jù)線的25MHZ樣,而RGMII可以使用雙沿125Mhz的采樣專用的雙沿采樣寄存器完成(使用寄存器原語(yǔ))。但是如何支持與不同PHY連接一個(gè)兼容性問(wèn)題(所謂設(shè)計(jì)挑PHY的問(wèn)題,這個(gè)問(wèn)題后面詳述)。
案例2:CPU通過(guò)接口連接FPGA時(shí),如果CPU此時(shí)軟復(fù)位,則有管腳會(huì)上拉,此時(shí)如果該管腳連接FPGA接口是控制信號(hào)且控制信號(hào)高電平有效,則此時(shí)FPGA邏輯必然出錯(cuò)。同樣FPGA在配置時(shí),管教輸出高阻,如此時(shí)CPU上電且板級(jí)電路管腳上拉,則同樣會(huì)導(dǎo)致CPU采樣出錯(cuò)(誤操作的問(wèn)題)。
不能只是考慮編寫verilog代碼仿真能對(duì)就行,接口設(shè)計(jì)應(yīng)該站在系統(tǒng)的角度來(lái)看問(wèn)題,問(wèn)題不是孤立的,還是互相聯(lián)系。
設(shè)計(jì)中,如果需要存儲(chǔ)大量數(shù)據(jù),就需要在外部設(shè)計(jì)外部存儲(chǔ)器,這是因?yàn)镕PGA內(nèi)部RAM的數(shù)量是有限的。是采用SRAM、DDR2、DDR3。這就需要綜合考慮存儲(chǔ)數(shù)據(jù)大大小,因?yàn)镾RAM的容量也有限,但是其接口簡(jiǎn)單,實(shí)現(xiàn)簡(jiǎn)單方便,且讀取延時(shí)較小。DDR2、DDR3的容量較大,接口復(fù)雜,但FPGA內(nèi)部有成熟IP可用,但是讀取的延時(shí)較大,從發(fā)起讀信號(hào)到讀回?cái)?shù)據(jù)一般在十幾個(gè)時(shí)鐘周期以上。如果對(duì)數(shù)據(jù)時(shí)延有要求,需要上一次存儲(chǔ)數(shù)據(jù)作為下一次使用,且數(shù)據(jù)量不太大(幾百K到幾兆),則SRAM是較好的選擇。而其他方面DDR2/DDR3是較好的選擇。為什么不用SDRAM或者DDR。這是因?yàn)樵O(shè)計(jì)完畢,采購(gòu)會(huì)告訴你,市場(chǎng)上這樣老的芯片基本都停產(chǎn)了。
FPGA接口在設(shè)計(jì)選擇的原則就是:能力夠用,簡(jiǎn)單易用。特別值得一提的是高速SERDES接口,最好使用廠商給的參考設(shè)計(jì),有硬核則不選擇軟核,測(cè)試穩(wěn)定后,一定要專門的位置約束,避免后面添加的邏輯擁擠后影響到接口時(shí)序,也可避免接口設(shè)計(jì)人員與最終的邏輯設(shè)計(jì)人員扯皮(不添加過(guò)多邏輯,接口是好用的)。一個(gè)分析高速SERDES的示波器,采樣頻率至少20G甚至更高以上,動(dòng)輒上百萬(wàn),出現(xiàn)問(wèn)題,不一定有硬件條件可調(diào)試。

回到開頭,如何定義“可用的”設(shè)計(jì),穩(wěn)定我想是前提,而接口的穩(wěn)定性更是前提的前提。這里穩(wěn)定包括,滿負(fù)荷邊界測(cè)試,量產(chǎn)、環(huán)境試驗(yàn)等一系列穩(wěn)定可靠。而在架構(gòu)設(shè)計(jì)中,就選擇成熟的接口,能有效的避免后續(xù)流程中的問(wèn)題,從源頭保證產(chǎn)品的質(zhì)量。

溫馨提示:明德?lián)P2023推出了全新課程——
邏輯設(shè)計(jì)基本功修煉課,降低學(xué)習(xí)FPGA門檻的同時(shí),增加了學(xué)習(xí)的趣味性

明德?lián)P除了培訓(xùn)學(xué)習(xí)還有項(xiàng)目承接業(yè)務(wù),擅長(zhǎng)的項(xiàng)目主要包括的方向有以下幾個(gè)方面:

1. MIPI視頻拼接
2. SLVS-EC轉(zhuǎn)MIPI接口(IMX472 IMX492)
3. PCIE采集系統(tǒng)
4. 圖像項(xiàng)目
5. 高速多通道ADDA系統(tǒng)
6. 基于FPGA板卡研發(fā)
7. 多通道高靈敏電荷放大器
8. 射頻前端

需要了解相關(guān)信息可以聯(lián)系:小甜老師13112028098(微信同號(hào))



談一談FPGA研發(fā)心得的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
黄陵县| 阿图什市| 郴州市| 兴义市| 洞头县| 佛教| 祁东县| 南陵县| 张家港市| 延寿县| 通河县| 巴中市| 保靖县| 蚌埠市| 鄂托克前旗| 靖宇县| 留坝县| 孟村| 漠河县| 淅川县| 兴海县| 惠安县| 密山市| 温州市| 道真| 通化县| 铜鼓县| 高安市| 西盟| 越西县| 攀枝花市| 隆尧县| 永和县| 夏津县| 阳泉市| 台北县| 富平县| 金乡县| 大姚县| 云和县| 景德镇市|