FPGA萬(wàn)花筒之(六):FPGA的基本結(jié)構(gòu)

姓名:張俸璽 學(xué)號(hào):20012100022 學(xué)院:竹園三號(hào)書(shū)院

轉(zhuǎn)自https://blog.csdn.net/k331922164/article/details/829263426

【嵌牛導(dǎo)讀】FPGA,可編程門(mén)陣列,作為一種較為新型的技術(shù),為大多數(shù)人所陌生。如今,F(xiàn)PGA成為一個(gè)技術(shù)熱門(mén)。那么,對(duì)于一個(gè)FPGA,它的基本結(jié)構(gòu)是什么?本文對(duì)這個(gè)問(wèn)題做出了解答。

【嵌牛鼻子】FPGA Xilinx Altera Cyclone

【嵌牛提問(wèn)】FPGA的基本結(jié)構(gòu)是什么?

【嵌牛正文】

FPGA的基本結(jié)構(gòu)

FPGA由6部分組成,分別為可編程輸入/輸出單元、基本可編程邏輯單元、嵌入式塊RAM、豐富的布線(xiàn)資源、底層嵌入功能單元和內(nèi)嵌專(zhuān)用硬核等。

每個(gè)單元簡(jiǎn)介如下:

1.可編程輸入/輸出單元(I/O單元)

目前大多數(shù)FPGA的I/O單元被設(shè)計(jì)為可編程模式,即通過(guò)軟件的靈活配置,可適應(yīng)不同的電器標(biāo)準(zhǔn)與I/O物理特性;可以調(diào)整匹配阻抗特性,上下拉電阻;可以調(diào)整輸出驅(qū)動(dòng)電流的大小等。


2.基本可編程邏輯單元

FPGA的基本可編程邏輯單元是由查找表(LUT)和寄存器(Register)組成的,查找表完成純組合邏輯功能。FPGA內(nèi)部寄存器可配置為帶同步/異步復(fù)位和置位、時(shí)鐘使能的觸發(fā)器,也可以配置成為鎖存器。FPGA一般依賴(lài)寄存器完成同步時(shí)序邏輯設(shè)計(jì)。一般來(lái)說(shuō),比較經(jīng)典的基本可編程單元的配置是一個(gè)寄存器加一個(gè)查找表,但不同廠(chǎng)商的寄存器和查找表的內(nèi)部結(jié)構(gòu)有一定的差異,而且寄存器和查找表的組合模式也不同。

學(xué)習(xí)底層配置單元的LUT和Register比率的一個(gè)重要意義在于器件選型和規(guī)模估算。由于FPGA內(nèi)部除了基本可編程邏輯單元外,還有嵌入式的RAM、PLL或者是DLL,專(zhuān)用的Hard IP Core等,這些模塊也能等效出一定規(guī)模的系統(tǒng)門(mén),所以簡(jiǎn)單科學(xué)的方法是用器件的Register或LUT的數(shù)量衡量。

3.嵌入式塊RAM

目前大多數(shù)FPGA都有內(nèi)嵌的塊RAM。嵌入式塊RAM可以配置為單端口RAM、雙端口RAM、偽雙端口RAM、CAM、FIFO等存儲(chǔ)結(jié)構(gòu)。

CAM,即為內(nèi)容地址存儲(chǔ)器。寫(xiě)入CAM的數(shù)據(jù)會(huì)和其內(nèi)部存儲(chǔ)的每一個(gè)數(shù)據(jù)進(jìn)行比較,并返回與端口數(shù)據(jù)相同的所有內(nèi)部數(shù)據(jù)的地址。簡(jiǎn)單的說(shuō),RAM是一種寫(xiě)地址,讀數(shù)據(jù)的存儲(chǔ)單元;CAM與RAM恰恰相反。

除了塊RAM,Xilinx和Lattice的FPGA還可以靈活地將LUT配置成RAM、ROM、FIFO等存儲(chǔ)結(jié)構(gòu)。

4.豐富的布線(xiàn)資源

布線(xiàn)資源連通FPGA內(nèi)部所有單元,連線(xiàn)的長(zhǎng)度和工藝決定著信號(hào)在連線(xiàn)上的驅(qū)動(dòng)能力和傳輸速度。布線(xiàn)資源的劃分:

1)全局性的專(zhuān)用布線(xiàn)資源:以完成器件內(nèi)部的全局時(shí)鐘和全局復(fù)位/置位的布線(xiàn);

2)長(zhǎng)線(xiàn)資源:用以完成器件Bank間的一些高速信號(hào)和一些第二全局時(shí)鐘信號(hào)的布線(xiàn)(這里不懂什么是“第二全局時(shí)鐘信號(hào)”);

3)短線(xiàn)資源:用來(lái)完成基本邏輯單元間的邏輯互連與布線(xiàn);

4)其他:在邏輯單元內(nèi)部還有著各種布線(xiàn)資源和專(zhuān)用時(shí)鐘、復(fù)位等控制信號(hào)線(xiàn)。

由于在設(shè)計(jì)過(guò)程中,往往由布局布線(xiàn)器自動(dòng)根據(jù)輸入的邏輯網(wǎng)表的拓?fù)浣Y(jié)構(gòu)和約束條件選擇可用的布線(xiàn)資源連通所用的底層單元模塊,所以常常忽略布線(xiàn)資源。其實(shí)布線(xiàn)資源的優(yōu)化與使用和實(shí)現(xiàn)結(jié)果有直接關(guān)系。

5.底層嵌入功能單元

底層嵌入功能單元是指通用程度較高的嵌入式功能模塊。如鎖相環(huán)(Phase Locked Loop,PLL)、DLL(Delay Locked Loop)、DSP(Digital Signal Processing)和CPU等。

6.內(nèi)嵌專(zhuān)用硬核

與“底層嵌入單元”是有區(qū)別的,這里指的硬核主要是那些通用性相對(duì)較弱,不是所有FPGA器件都包含硬核。

CycloneⅡ簡(jiǎn)介

CYCLONEⅡ系列FPGA器件由美國(guó)Altera公司出品,屬于中端產(chǎn)品。采用了90nm的工藝,增加了片內(nèi)邏輯單元數(shù)。為了方便說(shuō)明,在此僅選用EP2C5進(jìn)行分析講解。

FPGA的命名規(guī)則

先了解一下FPGA的命名規(guī)則,這樣就可以從芯片名字的角度來(lái)看這是怎么樣性能的一款芯片了。

例如EP2C20F484C6,含義:

EP——工藝,

2C——cyclone2,

20——LE數(shù)量約為20K,

F——封裝形式,

484——管腳數(shù),

C——溫度范圍(確定其是工業(yè)級(jí),軍品級(jí),還是商業(yè)級(jí)),

6——速度(數(shù)字越小速度越快)。

1.邏輯單元與邏輯陣列

? ? 邏輯單元(Logic Element,LE)在FPGA器件內(nèi)部,用于完成用戶(hù)邏輯的最小單元。一個(gè)邏輯陣列包含16個(gè)邏輯單元以及一些其他資源, 在一個(gè)邏輯陣列內(nèi)部的16個(gè)邏輯單元有更為緊密的聯(lián)系,可以實(shí)現(xiàn)特有的功能。

一個(gè)邏輯單元主要由以下部件組成:一個(gè)四輸入的查詢(xún)表(LookUp Table,LUT),一個(gè)可編程的寄存器,一條進(jìn)位鏈,一條寄存器級(jí)連鏈。

查詢(xún)表: 用于完成用戶(hù)需要的邏輯功能,CYCLONEⅡ系列的查詢(xún)表是4輸入1輸出的,可以完成任意4輸入1輸出的組合邏輯。

可編程寄存器:可以配置成D觸發(fā)器,T觸發(fā)器,JK觸發(fā)器,SR觸發(fā)器。每個(gè)寄存器包含4個(gè)輸入信號(hào),數(shù)據(jù)輸入、時(shí)鐘輸入、時(shí)鐘使能、復(fù)位輸入。

一個(gè)邏輯單元包含3個(gè)輸出,兩個(gè)用于驅(qū)動(dòng)行連接、列連接、直接連接,另外一個(gè)用于驅(qū)動(dòng)本地互聯(lián)。 這三個(gè)輸出是相互獨(dú)立的。輸出信號(hào)可以來(lái)自于查詢(xún)表也可以來(lái)自于寄存器。

本地互連通路是邏輯陣列的重要組成部分,芯片級(jí)設(shè)計(jì)思路上的考慮與節(jié)省我們就不討論,從實(shí)際運(yùn)用出發(fā),直接看看這個(gè)互連通路是干什么用的。本地互連通路提供了一種邏輯陣列內(nèi)部的連接方式, 邏輯陣列內(nèi)部還包含一種對(duì)外的高速連接通路,稱(chēng)之為直接連接通路。

直接連接通路連接的是相鄰的邏輯陣列,或者與邏輯陣列相鄰的M4K存儲(chǔ)器塊、乘法器、鎖相環(huán)等。

CYCLONEⅡ系列FPGA的邏輯單元有兩種工作模式:普通模式和算數(shù)模式。

普通模式適合于一般的邏輯運(yùn)算。算數(shù)模式適用于實(shí)現(xiàn)加法器、計(jì)數(shù)器、累加器、比較器等。

邏輯陣列的主體是16個(gè)邏輯單元,另外還有一些邏輯陣列內(nèi)部的控制信號(hào)以及互連通路。前面所講的互聯(lián)通路和直接連接通路就是邏輯陣列中的部分。

邏輯陣列還包括一些控制信號(hào):兩個(gè)時(shí)鐘信號(hào),兩個(gè)時(shí)鐘使能信號(hào),兩個(gè)異步復(fù)位信號(hào),一個(gè)同步復(fù)位信號(hào),一個(gè)同步加載信號(hào)。

2.內(nèi)部連接通路

在FPGA內(nèi)部存在各種連接通路,連接不同的模塊,比如邏輯單元之間、邏輯單元與存儲(chǔ)器之間。FPGA內(nèi)部資源是按照行列的形式排列的,所以連接通路也分為行列的。

行連接又分為R4連接、R24連接和直接連接。R4連接就是連接4個(gè)邏輯陣列,或者3個(gè)邏輯陣列和1個(gè)存儲(chǔ)塊, 或者3個(gè)邏輯陣列和1個(gè)乘法器。簡(jiǎn)單地說(shuō)就是連接4個(gè)模塊吧。R24就是24個(gè)模塊。列連接是C4,C16,含義不用說(shuō)了吧,是連接4個(gè)模塊和16個(gè)模塊。

3.時(shí)鐘資源

CYCLONEⅡ系列FPGA有關(guān)時(shí)鐘資源部分主要包括全局時(shí)鐘樹(shù)和鎖相環(huán)兩部分。

全局時(shí)鐘樹(shù)又稱(chēng)全局時(shí)鐘網(wǎng)絡(luò),負(fù)責(zé)把時(shí)鐘分配到器件內(nèi)部的各個(gè)單元,控制器件內(nèi)部所有資源。鎖相環(huán)則可以完成分頻、倍頻、移項(xiàng)等相關(guān)時(shí)鐘的基本操作。

全局時(shí)鐘樹(shù)是一種時(shí)鐘網(wǎng)絡(luò)結(jié)構(gòu),可以為FPGA內(nèi)部的所有資源提供時(shí)鐘信號(hào),這些資源包括內(nèi)部的寄存器、內(nèi)部的存儲(chǔ)器、輸入輸出管腳寄存器等。

CYCLONEⅡ系列FPGA中每條全局時(shí)鐘樹(shù)都對(duì)應(yīng)一個(gè)時(shí)鐘控制模塊,時(shí)鐘控制模塊的作用是從多個(gè)時(shí)鐘源種選擇一個(gè)連接到全局時(shí)鐘樹(shù),進(jìn)而提供給片內(nèi)的各種資源。這些時(shí)鐘源包括鎖相環(huán)的輸出,專(zhuān)用時(shí)鐘引腳的輸入,兩用時(shí)鐘引腳的輸入或者內(nèi)部邏輯。

專(zhuān)用時(shí)鐘引腳是為時(shí)鐘輸入專(zhuān)門(mén)設(shè)計(jì)的引腳,在有可能的情況下應(yīng)該盡量將時(shí)鐘信號(hào)連接到專(zhuān)用管腳上。EP2C5有8個(gè)專(zhuān)用時(shí)鐘引腳(CLK),4個(gè)位于芯片左側(cè),4個(gè)位于芯片右側(cè)。

兩用時(shí)鐘引腳(DPCLK)通常用于介入時(shí)鐘或者異步控制信號(hào),EP2C5有8個(gè)兩用時(shí)鐘引腳,芯片每一側(cè)兩個(gè)。CYCLONEⅡ系列FPGA允許對(duì)兩用時(shí)鐘引腳的輸入延時(shí)進(jìn)行設(shè)置,是我們更好地控制時(shí)序。

置于CYCLONEⅡ系列FPGA對(duì)全局時(shí)鐘樹(shù)的使用方式和限制,在此也不一一羅列開(kāi)來(lái),也要注意的是,時(shí)鐘的鏈接也會(huì)受到這樣或者那樣的限制,如果在實(shí)際電路的過(guò)程中出現(xiàn)了問(wèn)題,自然也會(huì)在編譯過(guò)程中提示出來(lái)的,所以切記不要將所有警告都忽略掉,因?yàn)檫@些警告可能是程序設(shè)計(jì)中的漏洞,當(dāng)某種狀態(tài)浮現(xiàn)的時(shí)候會(huì)導(dǎo)致程序運(yùn)行的不穩(wěn)定。

鎖相環(huán)在FPGA中除了分頻、倍頻操作外,還進(jìn)場(chǎng)用于內(nèi)部時(shí)鐘和外部時(shí)鐘保持沿同步,提供需要的外部時(shí)鐘輸出等。EP2C5包含兩個(gè)鎖相環(huán)(PLL1,PLL2)。

鎖相環(huán)支持單端時(shí)鐘輸入和差分時(shí)鐘輸入。 當(dāng)采用單端時(shí)鐘輸入的時(shí)候CLK0~3作為時(shí)鐘源提供給鎖相環(huán),當(dāng)采用差分時(shí)鐘輸入的時(shí)候,CLK0、CLK1提供給PLL1,CLK2、CLK3提供給PLL2。只有專(zhuān)用的時(shí)鐘輸入引腳的時(shí)鐘信號(hào)才能驅(qū)動(dòng)鎖相環(huán)。

鎖相環(huán)最主要的目的是產(chǎn)生一個(gè)和外部輸入始終保持同步的時(shí)鐘信號(hào),包括頻率同步和相位同步。將鎖相環(huán)的特性和功能總結(jié)一下有:分頻倍頻、相移、設(shè)置占空比、片內(nèi)外時(shí)鐘輸出、時(shí)鐘切換、鎖定指示、反饋模式、控制信號(hào)。

鎖相環(huán)結(jié)構(gòu)里有PFD,相頻鑒別器(Phase Frequency Detector, PFD)。什么是PFD呢,其作用是比較反饋時(shí)鐘信號(hào)同參考時(shí)鐘信號(hào)的相位關(guān)系,然后給出控制信號(hào)用于調(diào)節(jié)壓控振蕩器的產(chǎn)生的時(shí)鐘頻率。鎖相環(huán)結(jié)構(gòu)里還有兩個(gè)預(yù)分頻器和三個(gè)后分頻器(又稱(chēng)后比例計(jì)數(shù)器)。

鎖定檢測(cè)部分用于檢測(cè)當(dāng)前鎖相環(huán)的狀態(tài),當(dāng)參考時(shí)鐘和反饋回來(lái)的時(shí)鐘子信號(hào)同步的時(shí)候,鎖相環(huán)進(jìn)入鎖定狀態(tài)。

完成反饋是鎖相環(huán)最核心部分,CYCLONEⅡ系列FPGA的鎖相環(huán)有三種反饋模式。

普通模式:將全局時(shí)鐘樹(shù)的時(shí)鐘信號(hào)反饋給相頻鑒別器,從而保證內(nèi)部寄存器的輸入時(shí)鐘與外部輸入始終保持相位同步。

零延時(shí)模式:鎖相環(huán)將專(zhuān)用的外部輸出時(shí)鐘引腳的輸出時(shí)鐘反饋給相頻鑒別器,從而保證輸出時(shí)鐘引腳上的時(shí)鐘信號(hào)和輸入引腳上的時(shí)鐘是沿對(duì)齊的。

無(wú)補(bǔ)償模式:鎖相環(huán)竟不會(huì)對(duì)全局時(shí)鐘樹(shù)作補(bǔ)償,也不對(duì)外部時(shí)鐘輸出引腳作補(bǔ)償。這樣做的好處是可以簡(jiǎn)化反饋電路,改善時(shí)鐘性能。

4.內(nèi)部存儲(chǔ)器

CYCLONEⅡ系列FPGA的內(nèi)部存儲(chǔ)器是以M4K存儲(chǔ)器塊的形式存在的,每一個(gè)存儲(chǔ)器塊的大小為4608bit。M4K塊包括輸入/輸出寄存器,作用相信大家都知道。還擁有本地互聯(lián)通路,作用前面講過(guò)了哦。

好的。直接來(lái)看端口吧,從端口看作用,了解怎樣去控制。

clock——輸入——時(shí)鐘信號(hào)

clock_en——輸入——時(shí)鐘使能信號(hào)

aclr——輸入——異步復(fù)位信號(hào)

renwe——輸入——讀寫(xiě)使能信號(hào)

byteena——輸入——字節(jié)使能信號(hào)

addressstall——輸入——地址鎖存信號(hào)

address——輸入——地址

datain——輸入——數(shù)據(jù)輸入

dataout——輸出——數(shù)據(jù)輸出

看了這些端口以及端口說(shuō)明,相信作用就不言而喻了吧,換而言之,當(dāng)我們想使用內(nèi)部存儲(chǔ)模塊的時(shí)候,控制好這些端口的數(shù)據(jù)流就能夠使用好這部分的資源了,當(dāng)然存儲(chǔ)器的使用離不開(kāi)時(shí)序的控制,如果沒(méi)有得到自己想要的結(jié)果,極有可能是時(shí)序控制部分出了問(wèn)題。

CYCLONEⅡ系列FPGA中的M4K存儲(chǔ)器可以被配置成以下模式:

單口模式:存儲(chǔ)器不能同時(shí)進(jìn)行讀寫(xiě)操作。

簡(jiǎn)單雙口模式:支持同時(shí)對(duì)存儲(chǔ)器進(jìn)行讀寫(xiě)操作,讀端口和寫(xiě)端口可以位寬不同,如果對(duì)同一地址進(jìn)行讀寫(xiě),則輸出端數(shù)據(jù)為改地址更新前的數(shù)據(jù)。

完全雙口模式:兩個(gè)端口可以任意組合,同時(shí)為寫(xiě)端口,同時(shí)為讀端口,或者一個(gè)為寫(xiě)端口一個(gè)為讀端口。存儲(chǔ)器位寬不能為32或36。潛在威脅,如果兩端口同時(shí)向一個(gè)地址寫(xiě)入數(shù)據(jù)的時(shí)候,會(huì)導(dǎo)致該地址中的數(shù)據(jù)出現(xiàn)不可預(yù)知的狀況。

移位寄存器模式:節(jié)約用邏輯單元中構(gòu)建寄存器而消耗。利用時(shí)鐘下降沿寫(xiě)入數(shù)據(jù),時(shí)鐘上升沿讀出數(shù)據(jù),配置好該模式后是自動(dòng)完成的哦。

只讀存儲(chǔ)器模式:存儲(chǔ)器的內(nèi)容通過(guò)存儲(chǔ)器初始化文件(.mif)指定。

FIFO模式:用于數(shù)據(jù)的緩沖、多路數(shù)據(jù)的對(duì)齊、變換時(shí)鐘域等。

5.乘法器

在數(shù)字信號(hào)處理運(yùn)算中,主要包括濾波、快速傅里葉變換、離散余弦變換等。在寫(xiě)運(yùn)算常常會(huì)涉及到大量的乘法運(yùn)算,所以在FPGA中設(shè)計(jì)了嵌入的乘法器,專(zhuān)門(mén)用在這方面的信號(hào)處理。如果使用邏輯單元來(lái)搭建乘法器,會(huì)消耗不少邏輯單元并且會(huì)抑制運(yùn)算速度的提高。

嵌入的乘法器包含有可選的輸入/輸出寄存器。寄存器的使用會(huì)提高電路性能但是會(huì)產(chǎn)生延時(shí)。乘法模塊還包括兩個(gè)控制信號(hào),signa和signb來(lái)控制乘數(shù)A和乘數(shù)B是否有符號(hào)。另外一個(gè)乘法器還可以拆開(kāi)成兩個(gè)并行的乘法器,例如EP2C5有1個(gè)18bit*18bit的乘法器,可以作為兩個(gè)9bit*9bit的乘法器使用,但是需要注意的是,符號(hào)控制信號(hào)就一對(duì),所以要求兩個(gè)乘法器在相同位置的數(shù)據(jù)輸入必須同時(shí)為符號(hào)數(shù)或者無(wú)符號(hào)數(shù)。

6.輸入/輸出引腳

在學(xué)習(xí)這一節(jié)之前我一直很迷惑,為什么FPGA會(huì)分成多個(gè)bank,每一個(gè)bank之間好像是獨(dú)立的又好像有聯(lián)系。看書(shū)之后才明白每一組bank都有單獨(dú)的供電電源,所以我們?cè)谑褂玫臅r(shí)候可以根據(jù)要求,為不同的組提供不同的電壓,從而實(shí)現(xiàn)在不同輸入/輸出組內(nèi)使用不同的輸入/輸出標(biāo)準(zhǔn)。

在輸入/輸出引腳和FPGA內(nèi)部邏輯單元之間存在輸入/輸出單元(IOE),每個(gè)輸入輸出單元包含1個(gè)輸出緩沖和3個(gè)寄存器。3個(gè)寄存器分別用于鎖存輸入數(shù)據(jù)、輸出數(shù)據(jù)、和輸出數(shù)據(jù)使能信號(hào)。

由于FPGA常常會(huì)用于做信號(hào)的匹配,所以涉及到輸入/輸出單元的知識(shí)點(diǎn)也不少,在此也就簡(jiǎn)單羅列一下。

一個(gè)輸入/輸出組可以同時(shí)支持單端標(biāo)準(zhǔn)個(gè)差分標(biāo)準(zhǔn),只要器需要的VCCIO相同。

若干個(gè)輸入/輸出單元構(gòu)成一個(gè)輸入/輸出模塊位于芯片的外圍。輸入/輸出模塊可以提供兩組輸出信號(hào),io_datain0和io_datain1。輸入/輸出模塊的輸入信號(hào)由兩部分構(gòu)成:一部分有行引腳時(shí)鐘或列引腳時(shí)鐘提供,另一部分由邏輯陣列提供。

一個(gè)輸入/輸出單元有8個(gè)輸入信號(hào),這些信號(hào)從邏輯陣列以及行引腳時(shí)鐘傳送來(lái)的信號(hào)中產(chǎn)生。輸入/輸出單元中的3個(gè)寄存器被分為兩組,數(shù)據(jù)輸入寄存器為一組,數(shù)據(jù)輸出寄存器和輸出使能寄存器為另一組,有各自的時(shí)鐘和時(shí)鐘使能信號(hào)。

輸入/輸出單元中的輸出緩沖支持調(diào)節(jié)引腳的驅(qū)動(dòng)電流??稍O(shè)置輸出緩沖的電壓轉(zhuǎn)換速度。輸出緩沖可設(shè)置為開(kāi)漏輸出模式。輸入輸出單元包含總線(xiàn)保持電路。包含一個(gè)可選的上拉電阻。

CYCLONEⅡ系列FPGA還有片內(nèi)終端串接電阻,可以用來(lái)匹配傳輸線(xiàn)的特性阻抗。終端電阻的使用可以防止傳輸線(xiàn)上的信號(hào)反射,保持信號(hào)的完整性。在使用片內(nèi)的終端串接電阻的時(shí)候,不能設(shè)置輸入輸出引腳的驅(qū)動(dòng)電流。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容