本文首先對(duì) ASIC 和 FPGA 進(jìn)行了一個(gè)對(duì)比,然后介紹了 FPGA 的基本結(jié)構(gòu),最后解釋了 FPGA 實(shí)現(xiàn)可編程的基本原理。
ASIC vs. FPGA
這里先給出 ASIC 和 FPGA 的優(yōu)缺點(diǎn)
ASIC | FPGA | |
---|---|---|
優(yōu)點(diǎn) | 性能優(yōu)越 可靠性高 大批量下單位成本低 |
開(kāi)發(fā)初期無(wú)投入資金壁壘 設(shè)計(jì)工具使用方便,設(shè)計(jì)簡(jiǎn)單快速 產(chǎn)品原型機(jī)開(kāi)發(fā)時(shí)間短 管腳定義靈活,便于PCB布板 隨時(shí)進(jìn)行硬件功能設(shè)計(jì)修改 |
缺點(diǎn) | 開(kāi)發(fā)周期長(zhǎng):設(shè)計(jì)工具及設(shè)計(jì)流程復(fù)雜,快速進(jìn)入市場(chǎng)的壓力大 功能固定,不利修改和擴(kuò)展 NRE費(fèi)用高 設(shè)計(jì)工具及開(kāi)發(fā)人員昂貴 |
單位成本高 可靠性低/功耗大 性能低 |
用途 | 設(shè)計(jì)規(guī)模大,復(fù)雜度高的芯片 成熟度高,產(chǎn)量大的產(chǎn)品 |
要求快速迭代或者小批量產(chǎn)品 作為ASIC的算法驗(yàn)證加速 |
FPGA 基本結(jié)構(gòu)
基本介紹 | |
---|---|
可配置邏輯塊 (Configurable Logic Block, CLB) | 主要的邏輯資源,可用于實(shí)現(xiàn)組合邏輯、時(shí)序邏輯和存儲(chǔ)單元,具體后面再介紹 |
可編程 I/O 模塊 (Programmable I/O Block, IOB) | 芯片與外部的接口,用于不同電氣特性輸入/輸出信號(hào)的驅(qū)動(dòng)和匹配,具體后面再介紹 |
可編程互連 (Programmable Interconnect) | 用于 CLB 之間或 CLB 和 IOB 之間進(jìn)行互連,具體后面再介紹 |
配置存儲(chǔ)器 (Configuration Memory) | 通過(guò)寫(xiě)配置存儲(chǔ)器實(shí)現(xiàn)系統(tǒng)功能,如CLB實(shí)現(xiàn)的邏輯、CLB之間的互連、CLB和IOB之間互連,用戶(hù)不可見(jiàn),具體后面再介紹 |
Block RAM | 增加片上存儲(chǔ)資源,通過(guò)IP核方式調(diào)用,可用于實(shí)現(xiàn)單端口RAM、雙端口RAM、FIFO等 |
專(zhuān)用 DSP 模塊 | 如加法器、乘法器、累加器 |
嵌入式處理核 | 軟核和硬核,Xilinx 的 ZYNQ系列上就集成了 ARM 硬核 |
外設(shè)接口 | PCI-E接口、Ethernet結(jié)構(gòu)等 |
FPGA 基本原理
下面是 CLB、IOB、Programmable Interconnect 和 Configuration Memory 的一個(gè)示意圖,這四者共同實(shí)現(xiàn)了 FPGA 可編程的特點(diǎn)。
CLB 是 FPGA 的主要邏輯資源,可用于實(shí)現(xiàn)組合邏輯、時(shí)序邏輯和存儲(chǔ)單元。
IOB 是芯片與外部的接口,可以提供輸入輸出信號(hào)
通過(guò)往配置存儲(chǔ)器中寫(xiě)入不同的內(nèi)容,可以實(shí)現(xiàn)CLB的邏輯、CLB之間的互連、CLB和IOB之間互連,從而實(shí)現(xiàn)不同的功能。配置存儲(chǔ)器對(duì)用戶(hù)來(lái)說(shuō)是不可見(jiàn)的。
每個(gè) CLB 由 1 個(gè)或 2 個(gè) Slices 組成,Slices 有 SliceL 和 SliceM 這兩種類(lèi)型,下圖是一個(gè) SliceL 的結(jié)構(gòu)圖,其主要由查找表LUT、進(jìn)位鏈和存儲(chǔ)元素三部分組成。
查找表(LUT)
實(shí)現(xiàn)組合邏輯
對(duì)于一個(gè) n n n 輸入的邏輯運(yùn)算,不管是與、或、非運(yùn)算還是異或運(yùn)算,輸入最多只有 2 n 2^n 2n 種組合情況,因此最多只可能存在 2 n 2^n 2n 種結(jié)果,如果事先將相應(yīng)的結(jié)果存放于一個(gè)存儲(chǔ)單元,就相當(dāng)于實(shí)現(xiàn)了組合邏輯運(yùn)算電路的功能,下圖是使用一個(gè)三輸入的LUT來(lái)實(shí)現(xiàn) y = ( a & b ) ∣ ! c y=(a\&b)|!c y=(a&b)∣!c 的示意圖
Xilinx 7系列的FPGA采用6-輸入LUT結(jié)構(gòu),可以實(shí)現(xiàn)任意6-輸入邏輯功能(比如,4選1的多路選擇器)
如果要實(shí)現(xiàn)更多輸入的邏輯功能,就需要將多個(gè)LUT合在一起使用,這時(shí)候就需要用到多路選擇器進(jìn)行連接,我們從下面的 Slices 結(jié)構(gòu)圖可以看到有三個(gè)多路選擇器將4個(gè)LUT拼接起來(lái),可以實(shí)現(xiàn)任意8-輸入的邏輯功能或者16選1的多路選擇器
為什么4個(gè)6輸入的LUT只能實(shí)現(xiàn)任意8-輸入的邏輯功能?可以這么理解,想要實(shí)現(xiàn)任意 n n n-輸入的邏輯功能,那就需要 2 n 2^n 2n 個(gè)存儲(chǔ)單元,由于4個(gè)6輸入的LUT只有 4 ? 2 6 = 2 8 4\cdot 2^6=2^8 4?26=28 個(gè)存儲(chǔ)單元,因此只能實(shí)現(xiàn)任意8-輸入的邏輯功能。舉一個(gè)例子進(jìn)一步解釋?zhuān)热巛斎胄盘?hào)為 [ 7 : 0 ] ?input [7:0]\text{ input} [7:0]?input,可以令 AX 和 CX 等于 input [ 6 ] \text{input}[6] input[6](AX和CX是選擇信號(hào),詳情見(jiàn)上面的 Slices 結(jié)構(gòu)圖),令 BX 等于 input[7] \text{input[7]} input[7],令這 4 個(gè) LUT 的輸入均為 input[5:0] \text{input[5:0]} input[5:0], 4 個(gè) LUT 的存儲(chǔ)單元中依次寫(xiě)入 input \text{input} input 等于 8’b00xxxxxx、8’b01xxxxxx、8’b10xxxxxx 和 8’b11xxxxxx時(shí)的結(jié)果
為什么4個(gè)6輸入的LUT可以實(shí)現(xiàn)16選1的多路選擇器?1個(gè)LUT可以實(shí)現(xiàn)1個(gè)4選1的多路選擇器,4個(gè)LUT便可以實(shí)現(xiàn)4個(gè)4選1的多路選擇器,4個(gè)由LUT實(shí)現(xiàn)的4選1的多路選擇器,再加上上圖中圈出來(lái)的3個(gè)2選1的多路選擇器,便可以實(shí)現(xiàn)16選1的多路選擇器
實(shí)現(xiàn)DRAM
上面講的都是 SliceL,SliceM的不同點(diǎn)在于,它的LUT提供了寫(xiě)端口,包括寫(xiě)地址、寫(xiě)使能和寫(xiě)數(shù)據(jù),所以我們可以訪(fǎng)問(wèn) LUT 的存儲(chǔ)單元,從而將 LUT 作為 RAM 使用,如下圖所示
基于LUT實(shí)現(xiàn)的RAM,稱(chēng)之為 DRAM(Distributed Random Access Memory)
BRAM 和 DRAM 的區(qū)別如下:
- Block RAM是內(nèi)嵌的專(zhuān)用RAM,而Distributed RAM需要消耗珍貴的邏輯資源(SLICEM)組成
- Block RAM具有更高的時(shí)序性能,而Distributed RAM由于分布在不同的位置,延遲較大
- Distributed RAM的使用更靈活
- 較大容量的存儲(chǔ)部件,用Block RAM
- 零星小容量的存儲(chǔ)部件,用Distributed RAM
進(jìn)位鏈
用于實(shí)現(xiàn)超前進(jìn)位加法,代碼中的加法邏輯會(huì)使用進(jìn)位鏈實(shí)現(xiàn),用于提高加法器、減法器和比較器的速度
一個(gè)CARRY4模塊支持4位加法,其原理圖如下所示
通過(guò)級(jí)聯(lián)可以支持更多位寬的加法
存儲(chǔ)元素
其結(jié)構(gòu)如下所示,這部分用于實(shí)現(xiàn)觸發(fā)器或者鎖存器,配合 LUT 和進(jìn)位鏈可以實(shí)現(xiàn)時(shí)序電路
一個(gè)6-輸入的LUT最多可以生成8個(gè)觸發(fā)器,可以是同步復(fù)位或者異步復(fù)位,有關(guān)類(lèi)型如下表所示文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-829981.html
復(fù)位類(lèi)型 | 原語(yǔ) | 行為 |
異步復(fù)位 | FDCE | 復(fù)位后Q輸出0 |
FDPE | 復(fù)位后Q輸出1 | |
同步復(fù)位 | FDRE | 復(fù)位后Q輸出0 |
FDSE | 復(fù)位后Q輸出1 |
一個(gè)6-輸入的LUT最多可以生成4個(gè)鎖存器,異步復(fù)位,有關(guān)類(lèi)型如下表所示文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-829981.html
復(fù)位類(lèi)型 | 原語(yǔ) | 行為 |
異步復(fù)位 | LDCE | 復(fù)位后Q輸出0 |
LDPE | 復(fù)位后Q輸出1 |
到了這里,關(guān)于FPGA原理介紹 (CLB, LUT, 進(jìn)位鏈, 存儲(chǔ)元素, RAM)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!