<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > FPGA系統設計原則和技巧之:FPGA系統設計的3個(gè)基本原則

FPGA系統設計原則和技巧之:FPGA系統設計的3個(gè)基本原則

作者: 時(shí)間:2017-06-05 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/201706/348811.htm

9.1的3個(gè)基本原則

9.1.1面積與速度的平衡互換原則

在FPGA設計領(lǐng)域,面積通常指的是FPGA的芯片資源,包括邏輯資源和I/O資源等。速度一般指的是FPGA工作的最高頻率。和DSP或者ARM芯片不同,FPGA設計的工作頻率不是固定的,而是和設計本身的延遲緊密相聯(lián)。

在實(shí)際設計中,使用最小的面積設計出最高的速度當然是每一個(gè)開(kāi)發(fā)者追求的目標。但往往面積和速度是不可兼得的。想使用最低的成本設計出最高性能的產(chǎn)品是不現實(shí)的,只有兼顧面積和速度,在成本和性能之間有所取舍,才能夠達到設計者的產(chǎn)品需求。

1.速度換面積

速度優(yōu)勢可以換取面積的節約。面積越小,就意味可以用更低的成本來(lái)實(shí)現產(chǎn)品的功能。

所謂的速度優(yōu)勢指的是在整個(gè)FPGA設計中,有一部分模塊的算法運行周期較其他部分快很多,這部分模塊就相對與其他的部分具有速度優(yōu)勢。利用這部分模塊的速度優(yōu)勢來(lái)降低整個(gè)FPGA設計的使用資源就是速度換面積原則的體現。

速度換面積原則在一些較復雜的算法設計中常常會(huì )用到。在這些算法設計中,流水線(xiàn)設計常常是必須用到的技術(shù)。在流水線(xiàn)的每一級,常常有同一個(gè)算法被重復的使用,但是使用的次數不一樣的現象。在正常的設計中,這些被重復使用但是使用次數不同的模塊將會(huì )占用大量的FPGA資源。

隨著(zhù)FPGA技術(shù)的不斷發(fā)展,FPGA內部越來(lái)越多的內嵌了DSP乘法模塊,為一些常用算法的實(shí)現提供了很大的方便,也大大提高了運算的速度和能力。因此,在以往設計中那些被重復使用的算法模塊的速度可以很高,即相對其他部分具有速度優(yōu)勢。

利用這個(gè)特點(diǎn),重新對FPGA的設計進(jìn)行改造。將被重復使用的算法模塊提煉出最小的復用單元,并利用這個(gè)最小的高速單元代替原設計中被重復使用但次數不同的模塊。當然在改造的時(shí)候必然會(huì )增加一些其他的資源來(lái)實(shí)現這個(gè)代替的過(guò)程。但是只要速度具有優(yōu)勢,那么增加的這部分邏輯依然能夠實(shí)現降低面積、提高速度的目的。

如圖9.1所示,是一個(gè)流水線(xiàn)的n個(gè)步驟,每個(gè)步驟都相應地運算一定次數的算法,每個(gè)步驟的算法都占用獨立的資源實(shí)現。其中運算次數方框的大小表示占用的設計資源。

圖9.1未使用速度換面積的流水線(xiàn)算法

假設這些算法中有可以復用的基本單元,并且具有速度優(yōu)勢,那么就可以使用如圖9.2所示的方式實(shí)現面積的節省。在這種方法中,通過(guò)將算法提取出最小單元,配合算法次數計數器及流水線(xiàn)的輸入輸出選擇開(kāi)關(guān),即可實(shí)現將原設計中復雜的算法結構簡(jiǎn)化的目的。

圖9.2使用速度換面積的流水線(xiàn)算法

可以看到,速度換面積的關(guān)鍵是的復用。

2.面積換速度

面積換速度正好和速度換面積相反。在這種方法中,面積的復制可以換取速度的提高。支持的速度越高,就意味著(zhù)可以實(shí)現更高的產(chǎn)品性能。在某些應用領(lǐng)域,比如軍事、航天等,往往關(guān)注的是產(chǎn)品的性能,而不是成本。這些產(chǎn)品中,可以采用并行處理技術(shù),實(shí)現面積換速度。

如圖9.3所示是利用并行技術(shù)、面積(資源)復制的方法實(shí)現了高速的處理能力。

在進(jìn)行FPGA進(jìn)行設計時(shí),我們必須注意到,FPGA的工作頻率是有限的。因為FPGA是工作在TTL電平下,該電平結構(晶體管-晶體管)所能支持的切換頻率是有限的。但是在實(shí)際的產(chǎn)品設計中,高頻的處理需求越來(lái)越多,如何解決這個(gè)矛盾?

首先使用簡(jiǎn)單的串/并轉換實(shí)現多路的速度降頻,如圖9.3所示,450Mbit/s的頻率分為3路,每路150Mbit/s;其次在每一路上使用相同算法但各占設計資源的處理模塊進(jìn)行低頻(相對)的處理;最后再將每一路的處理結果進(jìn)行并/串轉換成為高頻的輸出數據。

圖9.3面積換速度實(shí)現并行高速處理

串/并和并/串轉換能夠支持那么高的頻率嗎?這個(gè)問(wèn)題的解決得益于FPGA技術(shù)的發(fā)展。如今主流的FPGA器件中,都帶有高速的I/O資源及內部RAM供用戶(hù)使用。這些高速I(mǎi)/O資源及內部RAM能夠實(shí)現I/O接口的穩定高速切換和數據總線(xiàn)寬度的轉換。這部分的詳細介紹參見(jiàn)9.3節。

9.1.2硬件可實(shí)現原則

FPGA設計通常會(huì )采用HDL語(yǔ)言,比如或者VHDL。當采用HDL語(yǔ)言來(lái)描述一個(gè)硬件電路功能的時(shí)候,一定要保證代碼描述的電路是硬件可實(shí)現的。語(yǔ)言的語(yǔ)法與C語(yǔ)言很相似,但是它們之間有本質(zhì)的區別。

C語(yǔ)言是基于過(guò)程的高級語(yǔ)言,編譯后可以在CPU上運行。而語(yǔ)言描述的本身就是硬件結構,編譯后是硬件電路。因此,有些語(yǔ)句在C語(yǔ)言的環(huán)境中應用沒(méi)有問(wèn)題,但是在HDL語(yǔ)言環(huán)境下就會(huì )導致結果不正確或者不理想。

比如for語(yǔ)句,以下代碼在C語(yǔ)言下是一段普通代碼:

for(i=0;i16;i++)

DoSomething(); //實(shí)現函數的重復調用

在C語(yǔ)言下運行沒(méi)有任何問(wèn)題,但是在VerilogHDL的環(huán)境下編譯就會(huì )導致綜合后的資源嚴重浪費。所以for語(yǔ)句在VerilogHDL環(huán)境下一般只用來(lái)做仿真或者行為級的描述。那么for語(yǔ)句在HDL語(yǔ)言中如何實(shí)現呢?有幾種不同的模式,其中最常見(jiàn)的是以下方式。

reg[3:0]counter; //調用次數計數器

always@(posedgeclk) //計數器計數模塊

if(syn_rst)

counter=4’b0;

else

counter=counter+1;

always@(posedgeclk) begin //使用case語(yǔ)句實(shí)現分支調用,

case(counter) //配合計數器計數,各分支可使用同樣的執行語(yǔ)句

4’b000: DoSomething; //實(shí)現該語(yǔ)句的重復調用

4’b0001:DoSomething; //等同于高級語(yǔ)言中的for語(yǔ)句

……

default:DoSomething;

endcase

end

在counter計數器的不同狀態(tài)可以設計不同的動(dòng)作。如果都是完成一樣的操作,就是循環(huán)for語(yǔ)句了。

9.1.3原則

同步電路和異步電路是FPGA設計的兩種基本電路結構形式。

的核心電路是由組合邏輯電路構成的,比如異步的SRAM、FIFO的讀寫(xiě)控制信號,地址譯碼電路等。這類(lèi)電路的輸出信號不依賴(lài)于任何時(shí)鐘信號。異步電路最大缺陷就是會(huì )產(chǎn)生毛刺。

的核心電路是由各種觸發(fā)器構成的。這類(lèi)電路的任何輸出都是在某個(gè)時(shí)鐘的邊沿驅動(dòng)觸發(fā)器產(chǎn)生的。所以,可以很好地避免毛刺的產(chǎn)生。

在專(zhuān)用芯片(ASIC)的設計過(guò)程中,同步設計一般會(huì )比占用更多的資源。但是在FPGA設計過(guò)程中并不是這樣。FPGA內部的最小單元是LE,每個(gè)LE里面既包括了實(shí)現異步電路需要的查找表資源,也包括了實(shí)現同步電路需要的寄存器資源。

如圖9.4所示是Altera公司的Cyclone系列FPGA的LE結構圖。從圖中可以看出,這個(gè)LE中包含了輸入輸出的MUX,同步和異步的控制邏輯,LUT以及可編程寄存器。如果使用這個(gè)系列的FPGA(其他的FPGA類(lèi)似)進(jìn)行同步電路或異步電路的設計,那么不管使用的是LE中的LUT還是寄存器,綜合工具綜合的結果都是消耗一個(gè)LE。

圖9.4CycloneLE結構圖

因此,單純的使用異步電路也并不會(huì )節省觸發(fā)器的資源?;蛘哒f(shuō),使用同步設計電路,并不會(huì )帶來(lái)FPGA資源的浪費。但是全同步的設計對于FPGA的仿真驗證是有好處的。因為電路的所有動(dòng)作都是在相同的時(shí)鐘邊沿來(lái)觸發(fā),可以減少整個(gè)設計的延遲,提高系統的工作頻率。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>