|
勇敢的芯伴你玩轉(zhuǎn)Altera FPGA連載26:內(nèi)里本質(zhì)探索——器件結(jié)構(gòu) 上 特權(quán)同學(xué),版權(quán)所有 配套例程和更多資料下載鏈接: http://pan.baidu.com/s/1i5LMUUD
在第1章里,我們已經(jīng)討論了FPGA的基本開發(fā)設(shè)計(jì)流程。在本章,我們也討論了基本的邏輯電路,那么它和代碼以及最終的FPGA器件之間又是怎樣的關(guān)系呢?如圖3.18所示,設(shè)計(jì)者先編寫RTL級(jí)代碼來(lái)描述自己需要實(shí)現(xiàn)的功能;然后在EDA工具中對(duì)其進(jìn)行綜合,RTL級(jí)的代碼就被轉(zhuǎn)換為邏輯電路,就如前面一節(jié)里的與、或、非等一大堆門電路的各種組合;最后這些邏輯電路需要被實(shí)現(xiàn)到特定的FPGA器件中,這個(gè)步驟我們通常稱之為布局布線。
圖3.18 RTL代碼、邏輯電路和器件 在談到FPGA的規(guī)模大小時(shí),我們常常說(shuō)FPGA器件有多少個(gè)門。因此,很多人就天真的以為FPGA器件里面就不過是一大堆與門、或門和非門,設(shè)計(jì)者寫好代碼實(shí)現(xiàn)的邏輯就對(duì)應(yīng)為FPGA里面的各種不同門之間的相互連接。實(shí)際情況還真不是這么簡(jiǎn)單,F(xiàn)PGA里面還真的找不著幾個(gè)與門、或門和非門。那么FPGA器件內(nèi)部到底以怎樣的方式來(lái)實(shí)現(xiàn)我們需要的邏輯電路呢?下面我們就通過剖析Altera公司的Cyclone IV系列FPGA器件的內(nèi)部結(jié)構(gòu)來(lái)解開這個(gè)迷。 翻開Cyclone IV系列的器件手冊(cè),如圖3.19所示,Volume1的Section 1是Device Core(器件內(nèi)核,也可以譯為器件內(nèi)部結(jié)構(gòu)),其下的第2章內(nèi)容,即Logic Elements andLogic Array Blocks in Cyclone IV Devices是專門談?wù)撈骷䞍?nèi)部邏輯單元結(jié)構(gòu)的。為了幫助大家更好的理解這部分內(nèi)容,除了對(duì)這個(gè)典型的FPGA器件結(jié)構(gòu)進(jìn)行介紹,我們還會(huì)列舉一個(gè)實(shí)例來(lái)看看一段代碼是如何被綜合為邏輯電路,以及邏輯電路如何被映射(布局布線)到器件中。
圖3.19 Cyclone IV器件手冊(cè)目錄截圖 我們先看看Cyclone IV這款器件的內(nèi)部結(jié)構(gòu),如圖3.20所示。器件當(dāng)中最多的就是邏輯陣列塊(Logic array blocks,簡(jiǎn)稱LABs),每個(gè)LABs包含了16個(gè)邏輯單元(Logic elements,簡(jiǎn)稱LEs),LEs是能夠?qū)崿F(xiàn)用戶邏輯功能的最小單位,后面我們還會(huì)詳細(xì)介紹這個(gè)LEs的內(nèi)部結(jié)構(gòu)。其實(shí)這顆Cyclone IV器件的邏輯結(jié)構(gòu)在Altera公司的器件中非常具有典型性,Altera公司的FPGA也基本都是類似的內(nèi)部結(jié)構(gòu)。在器件的周圍布滿了I/O塊,這些I/O塊直接連接控制著器件外部裸露的I/O管腳。I/O塊中包括了雙向的I/O緩沖以及一些可編程的I/O特性功能,如施密特觸發(fā)、上拉電阻和各種電平標(biāo)準(zhǔn)(如高達(dá)400Mbps速率的存儲(chǔ)器接口以及高達(dá)875Mbps速率的LVDS接口)。I/O塊不同bank上也有多組GCLK引腳可用作全局時(shí)鐘輸入,GCLK引腳輸入的信號(hào)在器件內(nèi)部具有低延時(shí)、高扇出等特性,不僅適合于時(shí)鐘信號(hào)輸入,也可以作為復(fù)位、置位等控制信號(hào)的輸入。除此以外,Cyclone IV器件還具有豐富的內(nèi)嵌存儲(chǔ)器資源,如M9K存儲(chǔ)塊可用于配置成緊耦合的ROM、單口RAM、雙口RAM、移位寄存器以及FIFO,非常實(shí)用;同樣是內(nèi)嵌的可用于各種DSP算法實(shí)現(xiàn)的18*18乘法器資源則在很多應(yīng)用在都能派上用場(chǎng)。
圖3.20 Cyclone IV器件內(nèi)部結(jié)構(gòu) 雖然圖3.20的結(jié)構(gòu)圖中沒有示意出各個(gè)功能塊之間的相互連接關(guān)系,但是大家可以想象,其實(shí)在各個(gè)功能塊之間存在著豐富的可編程的互連線幫助實(shí)現(xiàn)最終的應(yīng)用。如圖3.21所示,各個(gè)行列LABs之間會(huì)有可編程的互連線、LABs內(nèi)部的各個(gè)LEs內(nèi)部之間也會(huì)有可編程的互連線、I/O塊與LABs之間、LABs與存儲(chǔ)塊以及乘法器之間都有著靈活可編程的互連線。
圖3.21 LAB互聯(lián)結(jié)構(gòu) |