<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è) > 嵌入式系統 > 設計應用 > 一個(gè)進(jìn)位保留加法陣列的HDL代碼生成器

一個(gè)進(jìn)位保留加法陣列的HDL代碼生成器

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

在現代數字通信系統中,的應用相當廣泛。尤其在對基帶信號的處理和整個(gè)系統的控制中,不但能大大縮減電路的體積,提高電路的穩定性,而且先進(jìn)的開(kāi)發(fā)工具使整個(gè)系統的設計調試周期大大縮短。其中對于一些基帶信號處理任務(wù),既可以用硬件實(shí)現,也可以用軟件實(shí)現。用硬件實(shí)現的突出特點(diǎn)是可處理的數據速率大大提高,但相應的硬件實(shí)現也有一些弊端。對于目前流行的一些CPU包括DSP和單片機,都擁有豐富的指令集,可以很方便地處理各種數學(xué)運算。而用或ASIC這樣的純硬件來(lái)實(shí)現數學(xué)運算則有一定的困難,且不同的實(shí)現結構所能達到的性能也大不相同。是在FPGA中實(shí)現各種數學(xué)運算的基礎。一個(gè)單純的兩個(gè)加數的可以用簡(jiǎn)單的組合邏輯來(lái)實(shí)現。但對于求多個(gè)加數和的運算,則可以有多種實(shí)現方案。下面首先比較幾種實(shí)現方案的性能和所消耗資源,然后針對最優(yōu)方案給出一種HDL(Hardware Description Language)代碼生成器。

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

1 多加數不同實(shí)現方案的分析和比較

  本文所討論的加法器的加數都是無(wú)符號的正數,對于帶符號的加法運算可以通過(guò)一些附加處理后送入無(wú)符號加法器。以計算8個(gè)1位二進(jìn)制加數的和為例進(jìn)行分析,它可以有以下幾種方案來(lái)實(shí)現:方案一最普通,是直接用加法器的級聯(lián)將所有8個(gè)位逐次相加,這種實(shí)現方案最簡(jiǎn)單。因為8個(gè)1Bit數據的和最大可以是8,為4Bit數據,為了處理方便,所有的加數都事先擴展到4Bit再進(jìn)行相加。設累加器的總延時(shí)為T(mén)add,一個(gè)全加器的延時(shí)為T(mén)a,則用普通加法器進(jìn)行一個(gè)4Bit加法。由于進(jìn)位的逐級傳遞,所以在最壞情況下,需要大約4Ta的時(shí)間,8個(gè)加數全部加完需要7×4Ta=28Ta的時(shí)間。方案二是對方案一的改進(jìn),即將4Bit全加器全部換成超前進(jìn)位加法器。設超前進(jìn)位加法器的延時(shí)為T(mén)c(Ta≤Tc4Ta),這樣全部加法需要7Tc的時(shí)間。雖然方案二的時(shí)延已經(jīng)縮短很多,可以處理的數據速率得到提高,但這種級聯(lián)式的加法器的延時(shí)會(huì )隨著(zhù)加數的增多而呈線(xiàn)性增長(cháng),在要求速度較高的場(chǎng)合無(wú)法達到要求。于是本文提出方案三,即采用適合硬件實(shí)現高速并行的進(jìn)位保留加法陣列。典型的8個(gè)1Bit數據進(jìn)位保留加法陣列如圖1所示。

  一個(gè)1位全加器有三個(gè)輸入 A、B、Ci和兩個(gè)輸出Sum、Co,其中A和B是加數與被加數,Ci是輸入進(jìn)位,Sum是和,Co是輸出進(jìn)位。三個(gè)輸入對兩個(gè)輸出而言是對稱(chēng)的,即使它們互相交換位置結果也不會(huì )受到影響。如果把一串全加器簡(jiǎn)單排成一行,它們之間的進(jìn)位線(xiàn)不連接,則這一串全加器稱(chēng)為進(jìn)位保留全加器。它具有如下特性:三個(gè)輸入數之和等于兩個(gè)輸出數之和,即三個(gè)相加數每通過(guò)一次進(jìn)位保留加法器,其個(gè)數就變?yōu)樵瓉?lái)的2/3。利用該特點(diǎn),對于所有相加數,在第一級將這些相加數分成三個(gè)一組,每組進(jìn)入一個(gè)進(jìn)位保留加法器,產(chǎn)生的和與進(jìn)位數為原來(lái)的2/3,但是產(chǎn)生的和數位數有所擴展。在第二級再將上一級的輸出分為3個(gè)一組,分別相加。依此類(lèi)推,直到最后形成兩個(gè)操作數,即累加和與累加進(jìn)位。再用超前進(jìn)位加法器將它們相加就得到最終的結果。由圖1可知這種進(jìn)位保留加法陣列的延時(shí)為:4Ta+Tc。

  以Altera公司的FPGA芯片EPF10K30為實(shí)現芯片,對采用上面三種方案的8個(gè)1Bit加數的加法器進(jìn)行了仿真,仿真波形如圖2所示。

  由圖2可以看出,對于8Bit的Codeword中的“1”進(jìn)行統計,三種加法器方案中進(jìn)位保留加法陣列方案(AdderArray)的延時(shí)最短;方案二,超前進(jìn)位加法器級聯(lián)方案(FastAdder)的延時(shí)次之;方案一,采用普通全加器級聯(lián)方案(FullAdder)的延時(shí)最長(cháng)。上面的仿真由于位數較少,并不能很明顯地體現出幾種方案的差別。圖3是對32Bit漢明距離發(fā)生器所用的累加器的仿真波形圖。

  由圖3可以很明顯地看出,方案三,進(jìn)位保留加法陣列的延時(shí)大大低于另兩種方案;而方案二的延時(shí)小于方案一,但相差不是很大,這主要因為雖然超前進(jìn)位加法器本身的計算時(shí)間小于普通全加器。但累加結果在級間是逐級串行傳遞的,所以隨著(zhù)級數的增多,其延時(shí)也會(huì )迅速增大。而每一級的超前進(jìn)位的加法優(yōu)勢受輸入數據影響較大,對于比較小的數據,不涉及到向高位的進(jìn)位傳遞問(wèn)題,超前進(jìn)位邏輯的作用就不能被完全發(fā)揮出來(lái)。

  一般說(shuō)來(lái),系統可實(shí)現的性能與它所消耗的資源或處理復雜度之間總是矛盾的,性能的提高總是要以多消耗資源為代價(jià)的,而資源節省也總要相應降低一些性能。但是對于三種加法器方案所消耗資源進(jìn)行統計表明,進(jìn)位保留加法陣列消耗的資源大大小于其他兩種方案。對于32個(gè)1Bit加法器方案,若采用Altera公司的EPF10K30芯片分別實(shí)現,級聯(lián)型全加器方案和級聯(lián)型超前進(jìn)位加法器方案均需要消耗182個(gè)LC(Logical Cells),而進(jìn)位保留加法陣列方案僅需65個(gè)LC。由此可知,進(jìn)位保留加法陣列方案無(wú)論從性能表現還是資源消耗上都比前兩種方案優(yōu)異。這是因為它是一種并行處理的資源利用率更高的方案,是一種本質(zhì)上不同于前兩者的更好的實(shí)現方案。

2 進(jìn)位保留加法陣列的

  雖然進(jìn)位保留加法器具有如此明顯的優(yōu)勢,但它的實(shí)現是比較復雜的,不如級聯(lián)型加法器直觀(guān)、易實(shí)現。首先需要計算加法陣列的結構參數,參見(jiàn)圖1,包括加法陣列的層數,每層所需要的全加器的個(gè)數和每層操作數的位數,然后按照陣列的規則畫(huà)出陣列的結構圖,最后對照結構圖寫(xiě)HDL代碼。其中每層操作數的位數都不同,而且全加器的輸出Sum和Co有不同的權值,在加到下一層運算中時(shí)處理方式是不同的,Co需要移位相加。對于一個(gè)稍微大一點(diǎn)的陣列,編寫(xiě)HDL代碼是一件既耗時(shí)又容易出錯的工作。針對這種情況,本文給出了一個(gè)進(jìn)位保留加法陣列的。它可以根據設計的需要自動(dòng)計算加法陣列的結構參數,然后生成對應的HDL代碼,大大方便了加法陣列的設計工作。

  如圖4所示,程序所需要的輸入參數是加法陣列輸入加數的個(gè)數和位數,單擊“計算”按鈕后程序將生成整個(gè)進(jìn)位保留加法陣列的結構參數和消耗資源統計。由圖4可知,32個(gè)1Bit加數的加法陣列共有8層,第一層需要10組全加器,每組1Bit;第二層需要7組全加器,每組2Bit(即兩個(gè)1Bit全加器),以此類(lèi)推。窗口左下角的資源統計欄里計算了整個(gè)加法陣列所需的全加器個(gè)數。而所需的LC數目是一個(gè)大概的統計值,它是在Maxplus II Version 10里編譯本所生成的AHDL(Altera HDL)代碼,然后讓編譯器自選FLEX 10K器件進(jìn)行適配的結果。需要特別指出的是,加法陣列各層之間的連接結構將極大地影響FPGA的適配結果。所以本生成器根據Altera公司FPGA的結構特點(diǎn),對陣列的連接結構進(jìn)行了優(yōu)化設計,使加法陣列適配后消耗的資源接近最小。

  點(diǎn)擊“生成代碼”按鈕后將出現圖5所示的HDL代碼窗口。圖5中顯示的是32個(gè)1Bit加法陣列的AHDL代碼。單擊“拷貝”按鈕,然后在Maxplus II軟件中粘貼到一個(gè)tdf文件中就可以直接進(jìn)行編譯和適配了。本程序還可以提供加法陣列的VHDL和Verilog代碼,使進(jìn)位保留加法陣列可以很方便地嵌入任何一種形式的系統設計中。

  一些很典型的FPGA應用如FIR濾波器、高速乘法器和漢明距離發(fā)生器等都需要計算多個(gè)加數的和。針對此需求,本文首先比較了多加數加法器的三種實(shí)現方案,得出進(jìn)位保留加法陣列是一種性能優(yōu)異的實(shí)現方案。然后給出了一個(gè)能夠自動(dòng)生成加法陣列HDL代碼的程序,它方便易用,并且能夠提供AHDL、VHDL和Verilog三種HDL語(yǔ)言的代碼,可以極大地提高開(kāi)發(fā)效率。



關(guān)鍵詞: HDL代碼生成器 加法器 FPGA

評論


相關(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>