《硬件描述語(yǔ)言》課件7設(shè)計(jì)技巧_第1頁(yè)
《硬件描述語(yǔ)言》課件7設(shè)計(jì)技巧_第2頁(yè)
《硬件描述語(yǔ)言》課件7設(shè)計(jì)技巧_第3頁(yè)
《硬件描述語(yǔ)言》課件7設(shè)計(jì)技巧_第4頁(yè)
《硬件描述語(yǔ)言》課件7設(shè)計(jì)技巧_第5頁(yè)
已閱讀5頁(yè),還剩49頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、復(fù)雜數(shù)字系統(tǒng)設(shè)計(jì)的常用技巧提綱復(fù)雜數(shù)字系統(tǒng)設(shè)計(jì)的關(guān)鍵矛盾提高吞吐量的方法減小Latency的方法時(shí)序優(yōu)化方法面積優(yōu)化方法復(fù)雜數(shù)字系統(tǒng)設(shè)計(jì)的關(guān)鍵矛盾速度與面積在設(shè)計(jì)功能正確之后,需要處理的主要矛盾是速度與面積之間的矛盾。經(jīng)常遇到的問題:功能正確,設(shè)計(jì)時(shí)序不滿足要求;功能和時(shí)序滿足要求,占用SLICE資源太多;幾乎所有的設(shè)計(jì)技巧都是為了解決這一矛盾。速度的三重含義Throughput:吞吐量單位時(shí)間內(nèi)能處理的數(shù)據(jù)量常用單位有bit/s,符號(hào)/s等Latency:時(shí)延指的是從數(shù)據(jù)輸入到達(dá)至相應(yīng)數(shù)據(jù)輸出之間的時(shí)間。單位是微秒等。Timing:時(shí)序指的是時(shí)序單元之間的路徑所對(duì)應(yīng)的時(shí)延。通常說時(shí)序關(guān)系不滿

2、足一般指觸發(fā)器間關(guān)鍵路徑的最大時(shí)延超過目標(biāo)時(shí)鐘周期。標(biāo)準(zhǔn)度量是時(shí)鐘周期或頻率。解決速度與面積矛盾的基本原則向關(guān)鍵路徑要速度;對(duì)于關(guān)鍵路徑,可以采用犧牲面積換取速度的方式;向非關(guān)鍵路徑要面積。對(duì)于非關(guān)鍵路徑,通過各種方式換取面積。在速度的三個(gè)方面進(jìn)行折中:Latency換ThroughputTiming換ThroughputTiming換Latency等工具優(yōu)化與代碼優(yōu)化隨著EDA工具的逐步完善,許多優(yōu)化工作可以通過在工具中添加約束、設(shè)置優(yōu)化選項(xiàng)等方式來實(shí)現(xiàn)。但是在有的情況下,工具優(yōu)化不能完全滿足設(shè)計(jì)要求。例如:時(shí)序約束關(guān)系無(wú)法滿足。由于代碼風(fēng)格問題造成片內(nèi)一些資源不能有效利用等。代碼優(yōu)化在某些

3、條件下仍然必不可少。提綱復(fù)雜數(shù)字系統(tǒng)設(shè)計(jì)的關(guān)鍵矛盾提高吞吐量的方法減小Latency的方法時(shí)序優(yōu)化方法面積優(yōu)化方法提高吞吐量的方法流水線技術(shù)多路并行處理流水線技術(shù)流水線技術(shù)就是把本來只能在一個(gè)較長(zhǎng)的時(shí)鐘周期內(nèi)執(zhí)行的操作(組合邏輯)分成幾步較小的操作,并在多個(gè)較高速的時(shí)鐘內(nèi)完成。這些步驟的劃分是通過多級(jí)寄存器來實(shí)現(xiàn)的。前級(jí)寄存器處理新輸入數(shù)據(jù)的同時(shí),末級(jí)寄存器產(chǎn)生老輸入數(shù)據(jù)所對(duì)應(yīng)的輸出。流水線例子x的三次方“軟件”代碼:XPower = 1;for (i=0;i 3; i+)XPower = X * XPower;單核處理器,完全串行執(zhí)行,而且對(duì)一個(gè)內(nèi)存地址反復(fù)訪問!module power3(

4、XPower, finished,X, clk, start); output 7:0 XPower;output finished;input 7:0 X;input clk, start;reg 7:0 ncount;reg 7:0 XPower;assign finished = (ncount = 0);always(posedge clk)beginif(start) begin XPower = X; ncount = 2;endelse if(!finished) begin ncount = ncount - 1; XPower = XPower * X;endendendmo

5、dule與軟件類似的實(shí)現(xiàn)方式流水線例子上述實(shí)現(xiàn)方法的優(yōu)缺點(diǎn):優(yōu)點(diǎn):節(jié)省資源,只需要一個(gè)乘法器缺點(diǎn):必須在前一運(yùn)算結(jié)束之后才能開始新的運(yùn)算需要握手信號(hào)Throughput = 8/3, or 2.7 bits/clockLatency = 3 clocksTiming =One multiplier delay in the critical path流水線例子不采用流水線結(jié)構(gòu)的綜合結(jié)果Cell usage:FD 1 useFDE 8 usesFDR 1 useGND 1 useMULT18X18 1 useLUT2 1 useLUT3 9 usesI/O primitives: 18IBUF

6、9 usesOBUF 9 usesBUFGP 1 use流水線例子module power3(XPower, clk,X);output 7:0 XPower;input clk;input 7:0 X;reg 7:0 XPower;reg 7:0 XPower1, XPower2;reg 7:0 X1, X2;always (posedge clk) begin/ Pipeline stage 1X1 = X;XPower1 = X;/ Pipeline stage 2X2 = X1;XPower2 = XPower1 * X1;/ Pipeline stage 3XPower = XPow

7、er2 * X2;endendmodulePower3的流水線實(shí)現(xiàn)方法Throughput = 8/1, or 8 bits/clockLatency=3 clocksTiming =One multiplier delayin the critical path流水線例子FD 16 usesGND 1 useMULT18X18S 2 usesVCC 1 useI/O primitives: 16IBUF 8 usesOBUF 8 usesBUFGP 1 use多路并行處理提高Throughput的另一種有效方法是將耗時(shí)較長(zhǎng)的電路復(fù)制若干份,每份處理部分?jǐn)?shù)據(jù)。這種處理方法需要對(duì)輸入數(shù)據(jù)進(jìn)行分解

8、,對(duì)輸出數(shù)據(jù)進(jìn)行合并。主要用于減小Latency。提綱復(fù)雜數(shù)字系統(tǒng)設(shè)計(jì)的關(guān)鍵矛盾提高吞吐量的方法減小Latency的方法時(shí)序優(yōu)化方法面積優(yōu)化方法減小Latency的主要思想盡快將數(shù)據(jù)從輸入傳遞到輸出,減小中間過程處理時(shí)延。流水線技術(shù)不符合低Latency的要求經(jīng)常采用的方法:并行處理去掉流水線減小Latency的例子module power3_latency(XPower, clk,X);output 7:0 XPower;input clk;input 7:0 X;reg 7:0 XPower;reg 7:0 XPower1, XPower2;reg 7:0 X1, X2;always (p

9、osedge clk) XPower = XPower2 * X2;always * beginX1 = X;XPower1 = X;endalways * beginX2 = X1;XPower2 = XPower1*X1;endendmoduleThroughput = 8 bits/clock (assuming one new input per clock)Latency = 1 clockTiming = Two multiplier delays in the critical path減小Latency的例子減小Latency的代價(jià)打開pipeline,有可能會(huì)減小Trough

10、put會(huì)造成關(guān)鍵路徑時(shí)延增大同時(shí)保證Latency和Throughput的方法既要保證Throughput,又要保證較小的Latency,只能采取前述并行處理方法。提綱復(fù)雜數(shù)字系統(tǒng)設(shè)計(jì)的關(guān)鍵矛盾提高吞吐量的方法減小Latency的方法時(shí)序優(yōu)化方法面積優(yōu)化方法最高時(shí)鐘頻率相互聯(lián)系的任意兩個(gè)時(shí)序元素(通常是指寄存器)之間的最大時(shí)延將決定設(shè)計(jì)所能夠工作的最大時(shí)鐘頻率。改善時(shí)序性能的方法添加寄存器層關(guān)鍵路徑改造為并行結(jié)構(gòu)展平邏輯結(jié)構(gòu)寄存器配平減小扇出添加寄存器層改善時(shí)序的第一種策略是在關(guān)鍵路徑的中間添加中間寄存器層。主要應(yīng)用條件:本身就是流水線結(jié)構(gòu)增加時(shí)鐘Latency不能違背設(shè)計(jì)要求整個(gè)設(shè)計(jì)的功能不

11、受影響。添加寄存器層假設(shè)右側(cè)方式不能滿足時(shí)序設(shè)計(jì)要求如200MHzmodule fir(Y,A,B,C,X,clk, validsample);output 7:0 Y;input 7:0 A, B, C, X;input clk;input validsample;reg 7:0 X1, X2, Y;always (posedge clk)if(validsample) beginX1 = X;X2 = X1;Y = A* X+B* X1+C* X2;endendmodule所有乘加操作在一個(gè)時(shí)鐘周期內(nèi)完成,屬于一個(gè)關(guān)鍵路徑添加寄存器層添加寄存器層module fir(Y,A,B,C,X,c

12、lk, validsample);output 7:0 Y;input 7:0 A, B, C, X;input clk;input validsample;reg 7:0 X1, X2, Y;reg 7:0 prod1, prod2, prod3;always (posedge clk) beginif(validsample) beginX1 = X;X2 = X1;prod1 = A * X;prod2 = B * X1;prod3 = C * X2;endY = prod1 + prod2 + prod3;endendmodule將加法處理與乘法處理分開添加寄存器層關(guān)鍵路徑修改為并行結(jié)

13、構(gòu)在某些情況下關(guān)鍵路徑的時(shí)延過大是由于參與運(yùn)算的數(shù)據(jù)比特?cái)?shù)太多造成的,這種情況下往往可以將關(guān)鍵路徑修改為并行結(jié)構(gòu)。將多比特的數(shù)學(xué)運(yùn)算分為多個(gè)運(yùn)算的組合,這些組合是并行處理的。關(guān)鍵路徑修改為并行結(jié)構(gòu)并行乘法器當(dāng)FPGA內(nèi)的專用乘法器資源不足時(shí),需要用CLB(SLICE)資源搭建高速乘法器。串行結(jié)構(gòu)乘法器逐比特運(yùn)算速度很慢,可以改為并行結(jié)構(gòu)。關(guān)鍵路徑修改為并行結(jié)構(gòu)module mul_addtree(mul_a, mul_b, mul_out, clk, rst_n);parameter MUL_WIDTH = 4;parameter MUL_RESULT = 8;input MUL_WIDTH-

14、1 : 0 mul_a;input MUL_WIDTH-1 : 0 mul_b;input clk;input rst_n;output MUL_RESULT-1 : 0 mul_out;reg MUL_RESULT-1 : 0 mul_out;reg MUL_RESULT-1 : 0 stored0;reg MUL_RESULT-1 : 0 stored1;reg MUL_RESULT-1 : 0 stored2;reg MUL_RESULT-1 : 0 stored3;reg MUL_RESULT-1 : 0 add01;reg MUL_RESULT-1 : 0 add23;always

15、(posedge clk or negedge rst_n)beginif(!rst_n)begin /初始化寄存器變量mul_out = 8b0000_0000;stored0 = 8b0000_0000;stored1 = 8b0000_0000;stored2 = 8b0000_0000;stored3 = 8b0000_0000;add01 = 8b0000_0000;add23 = 8b0000_0000;endelse begin /實(shí)現(xiàn)移位相加stored3 = mul_b3?1b0,mul_a,3b0: 8b0;stored2 = mul_b2?2b0,mul_a,2b0: 8

16、b0;stored1 = mul_b1?3b0,mul_a,1b0: 8b0;stored0 = mul_b0?4b0,mul_a: 8b0;add01 = stored1 + stored0;add23 = stored3 + stored2;mul_out = add01 + add23;end end endmodule關(guān)鍵路徑修改為并行結(jié)構(gòu)展平邏輯結(jié)構(gòu)關(guān)鍵:在關(guān)鍵路徑部分盡量避免使用多優(yōu)先級(jí)結(jié)構(gòu)。通常,綜合與布局工具具有一定的智能性,能夠復(fù)制一些邏輯來減小扇出。但是它們不能打破代碼中以串行方式給出的邏輯結(jié)構(gòu),也無(wú)法判斷代碼中所體現(xiàn)出來的優(yōu)先級(jí)是不是必須的。展平邏輯結(jié)構(gòu)module re

17、gwrite(output reg 3:0 rout,input clk, in,input 3:0 ctrl);always (posedge clk)if(ctrl0) rout0 = in;else if(ctrl1) rout1 = in;else if(ctrl2) rout2 = in;else if(ctrl3) rout3 = in;endmodule具有優(yōu)先級(jí)的地址譯碼展平邏輯結(jié)構(gòu)module regwrite(output reg 3:0 rout,input clk, in,input 3:0 ctrl);always (posedge clk) beginif(ctrl

18、0) rout0 = in;if(ctrl1) rout1 = in;if(ctrl2) rout2 = in;if(ctrl3) rout3 = in;endendmodule寄存器配平原理:在寄存器之間重新分配邏輯,使得任意兩個(gè)寄存器之間的最大時(shí)延最小化。用于關(guān)鍵路徑與相鄰路徑之間時(shí)延嚴(yán)重不平衡的情況。由于時(shí)鐘頻率只是受最大時(shí)延路徑限制,因此可以通過較小的修改就有可能使關(guān)鍵路徑滿足時(shí)序要求。綜合工具本身有寄存器配平選項(xiàng),這個(gè)選項(xiàng)的特征是找出一些特定的結(jié)構(gòu),按照事先確定的方式重新定位寄存器。寄存器配平綜合工具的寄存器配平功能是受目前EDA水平限制的,對(duì)于一些特有的功能塊綜合工具不可能完全辨識(shí)

19、出它們的邏輯關(guān)系。因此,有時(shí)需要在代碼中手工修改設(shè)計(jì),進(jìn)行寄存器配平。寄存器配平module adder(output reg 7:0 Sum,input 7:0 A, B, C,input clk);reg 7:0 rA, rB, rC;always (posedge clk) beginrA = A;rB = B;rC = C;Sum = rA + rB + rC;endendmodule寄存器配平module adder(output reg 7:0 Sum,input 7:0 A, B, C,input clk);reg 7:0 rABSum, rC;always (posedge c

20、lk) beginrABSum = A + B;rC = C;Sum = rABSum + rC;endendmodule減小扇出提高關(guān)鍵路徑速度的一個(gè)常用方法是復(fù)制電路,減少關(guān)鍵路徑的扇出。當(dāng)一個(gè)信號(hào)網(wǎng)絡(luò)所帶負(fù)載增加時(shí),其路徑延時(shí)也相應(yīng)增加。這對(duì)復(fù)位信號(hào)網(wǎng)絡(luò)可能影響不大,但對(duì)三態(tài)使能等信號(hào)是不能容忍的。扇出對(duì)關(guān)鍵路徑延時(shí)的影響甚至超過了邏輯的級(jí)延時(shí)。確保一個(gè)網(wǎng)絡(luò)的扇出少于一定值。減小扇出大部分情況下綜合工具可以自動(dòng)完成這個(gè)工作。部分情況下,當(dāng)最后的靜態(tài)時(shí)序分析不滿足時(shí)需要手工復(fù)制電路,減小扇出。提綱復(fù)雜數(shù)字系統(tǒng)設(shè)計(jì)的關(guān)鍵矛盾提高吞吐量的方法減小Latency的方法時(shí)序優(yōu)化方法面積優(yōu)化方法面積

21、優(yōu)化方法資源共享合理使用復(fù)位信號(hào)資源共享基于if語(yǔ)句的資源共享if (siz = 4b0001).)count = count + 4b0001;else if (siz = 4b0010)count = count + 4b0010;else if (siz = 4b0011)count = count + 4b0011;else if (siz = 4b0000)count=count + 4b0100;if (siz = 4b0000)count = count + 0100;else if (.) count = count + siz;資源共享if (select)sum=A +B;

22、elsesum=C +D;if (sel =1)begin temp1 =A;temp2 =B;endelse begintemp1 =C;temp2 =D;endsum = temp1 + temp2;資源共享子表達(dá)式共享一個(gè)表達(dá)式中子表達(dá)式包含2個(gè)或更多的變量,如果相同的子表達(dá)式在多個(gè)等式中出現(xiàn),應(yīng)共享這些運(yùn)算減少電路的面積。通過聲明一個(gè)臨時(shí)變量存儲(chǔ)子表達(dá)式然后在任何需要重復(fù)使用這個(gè)子表達(dá)式的地方用臨時(shí)變量代替。temp = a + b;x = temp;y = temp + c;資源共享綜合工具與資源共享綜合工具都有資源共享選項(xiàng),但是只有滿足某些條件的情況下綜合工具才能夠認(rèn)出可共享資源。

23、為了保證可移植性,盡可能在代碼中體現(xiàn)出資源共享。資源共享資源共享與乒乓操作“乒乓操作”是一個(gè)常常應(yīng)用于數(shù)據(jù)流控制的處理技巧。資源共享與乒乓操作乒乓操作的處理流程為:輸入數(shù)據(jù)流通過“輸入數(shù)據(jù)選擇單元”將數(shù)據(jù)流等時(shí)分配到兩個(gè)(或以上)數(shù)據(jù)緩沖區(qū)。數(shù)據(jù)緩沖模塊可以為任何存儲(chǔ)模塊,比較常用的存儲(chǔ)單元為雙口RAM(DPRAM)、單口RAM(SPRAM)、FIFO等。在第一個(gè)緩沖周期,將輸入的數(shù)據(jù)流緩存到“數(shù)據(jù)緩沖模塊1”;在第2個(gè)緩沖周期,通過“輸入數(shù)據(jù)選擇單元”的切換,將輸入的數(shù)據(jù)流緩存到“數(shù)據(jù)緩沖模塊2”,同時(shí)將“數(shù)據(jù)緩沖模塊1”緩存的第1個(gè)周期數(shù)據(jù)通過“輸入數(shù)據(jù)選擇單元”的選擇,送到“數(shù)據(jù)流運(yùn)算處理模塊”進(jìn)行運(yùn)算處理;在第3個(gè)緩沖周期通過“輸入數(shù)據(jù)選擇單元”的再次切換,將輸入的數(shù)據(jù)流緩存到“數(shù)據(jù)緩沖模塊1”,同時(shí)將“數(shù)據(jù)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論