今天想和大家一起聊聊 FPGA 的 IO。先說說我當(dāng)年入門的經(jīng)歷吧。國內(nèi)的大學(xué)有 FPGA 開發(fā)條件的實(shí)驗(yàn)室并不太多,當(dāng)年大學(xué)的那幫同學(xué)有的做 ARM,有的做 linux,很少有人做 FPGA,當(dāng)時學(xué) FPGA 僅僅是由于非常渴望的好奇心。所以,在淘寶買了一塊開發(fā)板,就開始了自己的 FPGA 之路。
大部分開發(fā)板的內(nèi)容主要是教學(xué)員怎么樣寫 Verilog 代碼,很少會對 FPGA 的芯片架構(gòu)做詳細(xì)的說明和解讀,所以當(dāng)年面試的時候就碰到了一個很尷尬的事情,面試官第一個問題問的就是:用的是哪顆 FPGA,內(nèi)核電壓是多少?當(dāng)時就懵了,雖然做了快一年 FPGA,我還沒有關(guān)注過芯片的內(nèi)核電壓···。
但其實(shí)熟悉 FPGA 的基本架構(gòu),了解 FPGA 的芯片內(nèi)部資源真的很重要。
雖然很多 FPGA 工程師都是寫代碼,但是作為硬件編程工程師,如果不熟悉 FPGA 的底層資源和架構(gòu),是很難寫出高質(zhì)量的代碼——至少很難寫出復(fù)雜邏輯的高質(zhì)量代碼,也很難站在系統(tǒng)的層面去考慮芯片的選型等問題。那熟悉 FPGA 架構(gòu),首先最主要的一點(diǎn),我們先來了解 FPGA 的 IO。
FPGA 的 IO 命名。FPGA 芯片 IO 命名方式太多,管腳也多,讓人感覺很亂。這是我當(dāng)年的感覺,諸如會經(jīng)常聽到:A13,B14···BANK34,BANK12····MIO0,EMIO···。但這確實(shí)是 FPGA 的特點(diǎn),F(xiàn)PGA 可以兼容多種不同的電壓標(biāo)準(zhǔn),也有豐富的 IO。
首先,F(xiàn)PGA 的 IO 物理命名規(guī)則,也就是我們做管腳約束時候的命名,芯片通常是長方體或者正方體,所以命名通常采用字母+數(shù)字組合的方式,從上到下是字母(A,B,C,D```),從左到右是數(shù)字(1,2,3```),所以諸如:A13(見下圖),就是圖上標(biāo)紅的位置,這個是 xilinx 的一顆芯片示意圖,其它廠商的 FPGA 芯片也類似。
其次,F(xiàn)PGA 的功能命名規(guī)則。功能命名規(guī)則每個廠家都會自己的一套規(guī)則,但都大同小異,我們重點(diǎn)來講述一下 xilinx 的命名(xilinx 的文檔是行業(yè)標(biāo)桿,其它 FPGA 廠家的資料多多少少會參考 xilinx)。通常 xilinx 的功能命名格式為:IO_LXXY#/IO_XX。其中:
(1) IO 代表用戶 IO;
(2) L 代表差分,XX 代表在當(dāng)前 BANK 下的唯一標(biāo)識號,Y=[P|N]表示 LVDS 信號的 P 或者 N;
(3) #表示 Bank 號。
比如,我們的原理圖中有一個 IO 的名字為:IO_L13P_T2_MRCC_12,那通過功能命名的規(guī)則我們就可以知道,這是一個用戶 IO,支持差分信號,是 BANK12 的第 13 對差分的 P 端口,與此同時它也是全局時鐘網(wǎng)絡(luò)輸入管腳(MRCC 是全局時鐘網(wǎng)絡(luò))。
再次,什么是 Bank。Bank 是一組物理位置和特性相近的 IO 的總稱,同一 BANK 的電壓的基準(zhǔn)是一致的,因此,通常如果我們需要各種不同標(biāo)準(zhǔn)的電壓,可以通過給到 BANK 的電壓基準(zhǔn)不同的方式來實(shí)現(xiàn)多種電平標(biāo)準(zhǔn)的輸入輸出。通常封裝越大,BANK 數(shù)量也越多,可以支持電壓標(biāo)準(zhǔn)也越多。如下圖就是 ZYNQ 7030 的一個 IO BANK 分布圖:
除了 FPGA 的用戶 IO 外,還有很多其他的功能 IO,如下載接口,模式選擇接口,還有 MRCC,也即我們前文講到的全局時鐘網(wǎng)絡(luò)和局部時鐘網(wǎng)路等。其中最值得關(guān)注的是 FPGA 的電源引腳,其中 ZYNQ 器件包含兩套完全獨(dú)立的供電系統(tǒng),一套是嵌入式端的電源(PS),一套是邏輯端的電源(PL),兩套供電系統(tǒng)完全獨(dú)立,因此也沒有先后上電的時序需求。如下:
通常包含的電壓有:
(1) 內(nèi)核電壓,Vccpint 和 Vccint 分別為 PS 的內(nèi)核電壓和 PL 的內(nèi)容電壓,內(nèi)核電壓的大小通常和工藝相關(guān),如 48nm XILINX 器件的內(nèi)核電壓為 1.2v,28nm 的 ZYNQ 器件的內(nèi)核電源為 1.0v(通常電壓都有一個范圍,范圍也和速度等級相關(guān)),當(dāng)然,電壓越低,在同樣邏輯規(guī)模和主頻下,對應(yīng)的功耗也會越低。
(2)Vccpaux 和 Vccaux 分別為 PS 和 PL 的輔助電壓。在 ZYNQ 器件中為 1.8v。
(3) Vccpll 為內(nèi)部鎖相環(huán)供電電壓。
(4) Vcc_mio0 為 PS 的 MIO0 BANK 的基準(zhǔn)電壓,VCCO_DDR 為 PS 端的 DDR 的電壓,此電壓通常和選擇的 DDR 顆粒相關(guān),如(DDR3,LDDR3 等相對應(yīng)的值就有所不同,這一部分我們都要在相關(guān)視頻中做詳細(xì)解讀)。
(5) Vccon 這部分就我們前面講到的 PL 端的 Bank 基準(zhǔn)。
對于純邏輯的 FPGA 器件,由于沒有 PS 端,因此相應(yīng)的 PS 端供電就沒有,只有 PL 端的供電,實(shí)現(xiàn)更簡單。
最后,我們來聊聊 FPGA 的上電。和所有的器件一樣,F(xiàn)PGA 的上電遵循一定的上電邏輯,通常情況下 SRAM 結(jié)構(gòu)(XILINX、Altera 等都屬于 SRAM 結(jié)構(gòu))的上電時間會比 FLASH 結(jié)構(gòu)的(Microm,Actel 等)上電時間要長。有些國產(chǎn) FPGA 為了簡化 BOM 成本(如安路半導(dǎo)體)不需要用戶特別關(guān)注上電時序,用單電源供電,芯片內(nèi)部控制上電時序。雖然不合理的上電時序有時候也能讓 FPGA 正常工作,但不正常的上電或掉電過程有可能會造成瞬時電流過大,無法保證上電期間 FPGAIO 為三態(tài),甚至損壞芯片,因此需要設(shè)計(jì)者特別關(guān)注上電時序。針對 XILINX FPGA 的上電通常需要遵循以下規(guī)則:
(1)在 PS 端,Vccpint,Vccpaux,Vccpll 一起上電,后啟動 PS 的 Vcco 電源(Vcco_mio0,Vcco_mio1,Vcco_ddr),其中 PS_POR_B 在上電期間應(yīng)保持低電平,直到內(nèi)核,輔助電壓,PLL 電壓和 BANK 的電壓達(dá)到相應(yīng)閾值。掉電的順序和上電順序保持一致。
(2)在 PL 端,推薦的上電順序依次為 Vccint,Vccbram,Vccaux,Vccaux_io,Vcco。其中,如果 Vccint 和 Vccbram 是相同的電壓,則可以采用同一電源供電,同時啟動。Vccaux,Vccaux_io 和 Vcco 為同一電壓則亦可以采用同一電源,同時啟動。
除此,在設(shè)計(jì) FPGA 的原理圖中要需要特別關(guān)注 Serdes 的供電(不同的廠家,甚至同一廠家不同的器件對 Serdes 都有不同的名稱,如:GTH,GTX 等等,但實(shí)質(zhì)都是自同步的高速串行收發(fā)器,支持的速率有所差別),不使用的情況下需相應(yīng)的懸空或者接地。
責(zé)任編輯:gt
評論
查看更多