第7章 Verilog設(shè)計(jì)優(yōu)化_第1頁
第7章 Verilog設(shè)計(jì)優(yōu)化_第2頁
第7章 Verilog設(shè)計(jì)優(yōu)化_第3頁
第7章 Verilog設(shè)計(jì)優(yōu)化_第4頁
第7章 Verilog設(shè)計(jì)優(yōu)化_第5頁
已閱讀5頁,還剩47頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第7章

Verilog設(shè)計(jì)的優(yōu)化第7章Verilog設(shè)計(jì)的優(yōu)化主要內(nèi)容7.1設(shè)計(jì)的可綜合性7.2流水線設(shè)計(jì)(PipelineDesign)技術(shù)7.3資源共享(ResourceSharing)7.4過程7.5阻塞賦值與非阻塞賦值7.6FPGA設(shè)計(jì)中毛刺的消除7.1設(shè)計(jì)的可綜合性

用FPGA/CPLD器件實(shí)現(xiàn)的設(shè)計(jì)中,綜合就是將Verilog或VHDL語言描述的行為級(jí)或功能級(jí)電路模型轉(zhuǎn)化為RTL級(jí)功能塊或門級(jí)電路網(wǎng)表的過程.綜合過程

可綜合的設(shè)計(jì)中應(yīng)注意不使用初始化語句;不使用帶有延時(shí)的描述;不使用循環(huán)次數(shù)不確定的循環(huán)語句,如forever,while等。應(yīng)盡量采用同步方式設(shè)計(jì)電路。除非是關(guān)鍵路徑的設(shè)計(jì),一般不采用調(diào)用門級(jí)元件來描述設(shè)計(jì)的方法,建議采用行為語句來完成設(shè)計(jì)。用always過程塊描述組合邏輯,應(yīng)在敏感信號(hào)列表中列出塊中出現(xiàn)的所有輸入信號(hào)??删C合的設(shè)計(jì)中應(yīng)注意所有的內(nèi)部寄存器都應(yīng)該能夠被復(fù)位,在使用FPGA實(shí)現(xiàn)設(shè)計(jì)時(shí),應(yīng)盡量使用器件的全局復(fù)位端作為系統(tǒng)總的復(fù)位,用器件的全局時(shí)鐘端作為系統(tǒng)外部時(shí)鐘輸入端。在Verilog模塊中,任務(wù)(task)通常被綜合成組合邏輯的形式;每個(gè)函數(shù)(function)在調(diào)用時(shí)通常也被綜合為一個(gè)獨(dú)立的組合電路模塊。7.2流水線設(shè)計(jì)技術(shù)

流水線設(shè)計(jì)是經(jīng)常用于提高所設(shè)計(jì)系統(tǒng)運(yùn)行速度的一種有效的方法。為了保障數(shù)據(jù)的快速傳輸,必須使系統(tǒng)運(yùn)行在盡可能高的頻率上,但如果某些復(fù)雜邏輯功能的完成需要較長的延時(shí),就會(huì)使系統(tǒng)難以運(yùn)行在高的頻率上,在這種情況下,可使用流水線技術(shù),即在長延時(shí)的邏輯功能塊中插入觸發(fā)器,使復(fù)雜的邏輯操作分步完成,減小每個(gè)部分的延時(shí),從而使系統(tǒng)的運(yùn)行頻率得以提高。流水線設(shè)計(jì)的代價(jià)是增加了寄存器邏輯,增加了芯片資源的耗用。

流水線操作的概念

如某個(gè)復(fù)雜邏輯功能的實(shí)現(xiàn)需較長的延時(shí),可將其分解為幾個(gè)(如3個(gè))步驟來實(shí)現(xiàn),每一步的延時(shí)變小,在各步間加入寄存器,以暫存中間結(jié)果,這樣可大大提高整個(gè)系統(tǒng)的最高工作頻率。流水線操作的概念示意圖

非流水線方式8位全加器moduleadder8(cout,sum,ina,inb,cin,clk);input[7:0]ina,inb;inputcin,clk;output[7:0]sum;outputcout;reg[7:0]tempa,tempb,sum;regcout,tempc;always@(posedgeclk)begintempa=ina;tempb=inb;tempc=cin;end //輸入數(shù)據(jù)鎖存always@(posedgeclk)begin{cout,sum}=tempa+tempb+tempc;endendmodule非流水線仿真結(jié)果分析兩級(jí)流水實(shí)現(xiàn)的8位加法器moduleadder_pipe2(cout,sum,ina,inb,cin,clk);input[7:0]ina,inb;inputcin,clk;outputreg[7:0]sum;outputregcout;reg[3:0]tempa,tempb,firsts;regfirstc;always@(posedgeclk)begin{firstc,firsts}=ina[3:0]+inb[3:0]+cin;tempa=ina[7:4];tempb=inb[7:4];endalways@(posedgeclk)begin{cout,sum[7:4]}=tempa+tempb+firstc;sum[3:0]=firsts;endendmodule將8位數(shù)每四位分2次相加,形成兩級(jí)流水線運(yùn)算過程。兩流水線設(shè)計(jì)仿真結(jié)果分析四級(jí)流水線實(shí)現(xiàn)的8位加法器modulepipeline(cout,sum,ina,inb,cin,clk);output[7:0]sum;outputcout;input[7:0]ina,inb;inputcin,clk;reg[7:0]tempa,tempb,sum;regtempci,firstco,secondco,thirdco,cout;reg[1:0]firsts,thirda,thirdb;reg[3:0]seconda,secondb,seconds;reg[5:0]firsta,firstb,thirds;always@(posedgeclk)begintempa=ina;tempb=inb;tempci=cin;end //輸入數(shù)據(jù)緩存always@(posedgeclk)begin{firstco,firsts}=tempa[1:0]+tempb[1:0]+tempci;//第一級(jí)加(低2位)firsta=tempa[7:2];firstb=tempb[7:2]; //未參加計(jì)算的數(shù)據(jù)緩存endalways@(posedgeclk)begin{secondco,seconds}={firsta[1:0]+firstb[1:0]+firstco,firsts};seconda=firsta[5:2];secondb=firstb[5:2]; //數(shù)據(jù)緩存endalways@(posedgeclk)begin{thirdco,thirds}={seconda[1:0]+secondb[1:0]+secondco,seconds};thirda=seconda[3:2];thirdb=secondb[3:2]; //數(shù)據(jù)緩存endalways@(posedgeclk)begin{cout,sum}={thirda[1:0]+thirdb[1:0]+thirdco,thirds};//第四級(jí)加(高兩位相加)endendmodule將8位數(shù)每兩位分4次相加,形成四級(jí)流水線運(yùn)算過程。設(shè)計(jì)綜合到不同器件的最高工作頻率

2個(gè)加法器和1個(gè)選擇器的實(shí)現(xiàn)方式moduleresource1(sum,a,b,c,d,sel);parameterSIZE=4;inputsel;input[SIZE-1:0]a,b,c,d;outputreg[SIZE:0]sum;always@(*)//使用通配符beginif(sel) sum=a+b;else sum=c+d;endendmodule7.3資源共享(ResourceSharing)資源共享可用來減少系統(tǒng)所耗用的器件資源,尤其是將一些耗用資源較多的模塊進(jìn)行共享,能有效降低整個(gè)系統(tǒng)耗用的資源。

2個(gè)選擇器和1個(gè)加法器的實(shí)現(xiàn)方式moduleresource2(sum,a,b,c,d,sel);parameterSIZE=4;inputsel;input[SIZE-1:0]a,b,c,d;outputreg[SIZE:0]sum;reg[SIZE-1:0]atemp,btemp;always@(*)//使用通配符beginif(sel)beginatemp=a;btemp=b;endelsebeginatemp=c;btemp=d;endsum=atemp+btemp;endendmodule資源共享(ResourceSharing)

器件資源的消耗對(duì)比資源共享(ResourceSharing)方式一需要2個(gè)加法器,而方式二通過增加一個(gè)多路復(fù)用MUX,共享一個(gè)加法器,由于加法器耗用的資源比MUX更多,因此方式二更節(jié)省資源。所以在電路設(shè)計(jì)中,應(yīng)盡可能使硬件代價(jià)高的功能模塊資源共享,從而降低整個(gè)系統(tǒng)的成本。計(jì)算位數(shù)越多,耗用的資源差別越大。資源共享(ResourceSharing)結(jié)論7.4過程在Verilog語言中,過程語句包括always和initial。always過程反復(fù)執(zhí)行其中的塊語句,而initial過程中的語句塊只執(zhí)行一次。always過程可綜合,initial語句只能用于仿真。always過程語句與VHDL語言的進(jìn)程語句Process非常相像,它既可以用來描述時(shí)序電路,也可以用來描述組合電路。一個(gè)Verilog模塊中的不同always過程語句是并行運(yùn)行的。assign賦值語句、實(shí)例元件的調(diào)用也都是并行運(yùn)行的,我們可以這樣理解:這些語句最終都綜合或翻譯成為具體的電路結(jié)構(gòu),而這些電路結(jié)構(gòu)是同時(shí)在運(yùn)行或動(dòng)作的。在進(jìn)行數(shù)字系統(tǒng)設(shè)計(jì)的時(shí)候應(yīng)注意將組合邏輯實(shí)現(xiàn)的電路和用時(shí)序邏輯實(shí)現(xiàn)的電路應(yīng)盡量分配到不同的always過程中。一個(gè)always過程中只允許描述對(duì)應(yīng)于一個(gè)時(shí)鐘信號(hào)的同步時(shí)序邏輯。always過程必須由敏感信號(hào)的變化來啟動(dòng),因此應(yīng)精心選擇進(jìn)程敏感表達(dá)式中的敏感變量。多個(gè)always過程間可通過信號(hào)線進(jìn)行通信和協(xié)調(diào)。7.5阻塞賦值與非阻塞賦值在可綜合的硬件設(shè)計(jì)中,使用阻塞和非阻塞賦值語句時(shí),應(yīng)注意以下原則(1)當(dāng)用“always”塊來描述組合邏輯時(shí),既可以用阻塞賦值,也可以采用非阻塞賦值,應(yīng)盡量使用阻塞賦值。(2)對(duì)時(shí)序邏輯描述和建模,使用非阻塞賦值方式。(3)為鎖存器(Latch)建模,應(yīng)使用非阻塞賦值。(4)若在同一個(gè)“always”過程塊中既為組合邏輯建模,又為時(shí)序邏輯建模,最好使用非阻塞賦值方式。7.5阻塞賦值與非阻塞賦值在可綜合的硬件設(shè)計(jì)中,使用阻塞和非阻塞賦值語句時(shí),應(yīng)注意以下原則(5)在一個(gè)“always”過程塊中,最好不要混合使用阻塞賦值和非阻塞賦值,雖然同時(shí)使用這兩種賦值方式在綜合時(shí)并不一定會(huì)出錯(cuò),但對(duì)同一個(gè)變量不能既進(jìn)行阻塞賦值,又進(jìn)行非阻塞賦值,這樣在綜合時(shí)會(huì)報(bào)錯(cuò)。(6)不能在兩個(gè)個(gè)或兩個(gè)以上的“always”過程塊中對(duì)同一個(gè)變量賦值,這樣會(huì)引發(fā)沖突,在綜合時(shí)會(huì)報(bào)錯(cuò)。(7)仿真時(shí)使用$strobe顯示非阻塞賦值的變量。時(shí)序邏輯建模應(yīng)盡量使用非阻塞賦值方式,否則使用阻塞賦值會(huì)出現(xiàn)如下情況:【例7.9】阻塞賦值方式描述的移位寄存器1moduleblock1(q0,q1,q2,q3,din,clk);inputclk,din;outputregq0,q1,q2,q3;always@(posedgeclk)begin q3=q2; //注意賦值語句的順序

q2=q1; q1=q0; q0=din;endendmodule//實(shí)現(xiàn)相當(dāng)右移寄存器功能。例7.9的RTL綜合結(jié)果【例7.10】阻塞賦值方式描述的移位寄存器2。moduleblock2(q0,q1,q2,q3,din,clk);inputclk,din;outputregq0,q1,q2,q3;always@(posedgeclk)begin q3=q2; q1=q0; //該句與下句的順序與例10.9顛倒

q2=q1; q0=din;endendmodule//實(shí)現(xiàn)的不是移位寄存器功能。所以阻塞語句不能隨意改變順序,否則將產(chǎn)生不同邏輯功能電路。例7.10的RTL綜合結(jié)果【例7.11】阻塞賦值方式描述的移位寄存器3。moduleblock3(q0,q1,q2,q3,din,clk);inputclk,din;outputregq0,q1,q2,q3;always@(posedgeclk)begin q0=din; //4條賦值語句的順序與例10.9中完全顛倒

q1=q0; q2=q1; q3=q2;endendmodule實(shí)現(xiàn)的不是移位寄存器功能。例7.11的RTL綜合結(jié)果【例7.12】非阻塞賦值方式描述的移位寄存器。moduleblock4(q0,q1,q2,q3,din,clk);inputclk,din;outputregq0,q1,q2,q3;always@(posedgeclk)begin q3<=q2; q1<=q0; q2<=q1; q0<=din;endendmodule實(shí)現(xiàn)的不是移位寄存器功能。結(jié)論對(duì)于阻塞賦值來說,賦值語句的順序?qū)ψ詈蟮木C合結(jié)果有著直接的影響。而如果采用非阻塞賦值方式來描述的話,則可以不考慮賦值語句的排列順序,只需將其連接關(guān)系描述清楚即可。所以,建議在實(shí)現(xiàn)時(shí)序邏輯電路時(shí)盡量使用非阻塞語句。但在用過程語句進(jìn)行組合邏輯電路設(shè)計(jì)時(shí)建議采用阻塞賦值方式:組合邏輯電路特點(diǎn)是當(dāng)輸入有變化時(shí)輸出隨之發(fā)生變化,因?yàn)檫^程語句是條件觸發(fā),當(dāng)條件不滿足時(shí),過程塊語句不能執(zhí)行,這樣仿真輸出的變量需要保持組合電路的連續(xù)輸出,所以過程賦值語句中需要對(duì)賦值變量定義為寄存器型,但生成的電路沒有寄存器,是組合驅(qū)動(dòng)電路。這種阻塞賦值語句充分說明組合邏輯電路信號(hào)間的變化關(guān)系。將上面的組合電路描述中的阻塞更換為非阻塞時(shí),生成的電路就不能滿足原電路實(shí)現(xiàn)的功能:盡量不要用非阻塞語句進(jìn)行組合邏輯電路設(shè)計(jì)。上圖7.6FPGA設(shè)計(jì)中毛刺的消除信號(hào)在FPGA器件內(nèi)部通過連線連接邏輯門時(shí),都有一定的延時(shí)。因此多路信號(hào)的電平值發(fā)生變化時(shí),在信號(hào)變化的瞬間,組合邏輯的輸出有先后順序,往往會(huì)出現(xiàn)一些不正確的“毛刺”(Glitch),稱為“冒險(xiǎn)”(Hazard)現(xiàn)象。這些毛刺在電路板的設(shè)計(jì)中由于PCB走線時(shí),存在分布電感和分布電容,所以許多毛刺能夠被自然濾除,而在PLD內(nèi)部沒有分布電感和電容,這些毛刺將被完整地保留并向下一級(jí)傳遞,所以在FPGA設(shè)計(jì)中,如何消除毛刺就變得很重要。可通過改變?cè)O(shè)計(jì),破壞毛刺產(chǎn)生的條件,來減少毛刺的發(fā)生。例如,在數(shù)字電路設(shè)計(jì)中,常常采用格雷碼計(jì)數(shù)器取代普通的二進(jìn)制計(jì)數(shù)器。還可根據(jù)D觸發(fā)器的D輸入端對(duì)毛刺不敏感的特點(diǎn)而消除毛刺,舉例說明7.6FPGA設(shè)計(jì)中毛刺的消除觀察下列仿真中的毛刺現(xiàn)象【例7.23】長幀同步時(shí)鐘的產(chǎn)生modulelongframe1(clk,strb);parameterDELAY=8;inputclk;outputregstrb;reg[7:0]counter;always@(posedgeclk)beginif(counter==255)counter<=0;elsecounter<=counter+1;endalways@(counter)beginif(counter<=(DELAY-1))strb<=1;elsestrb<=0;endendmodule毛刺時(shí)序仿真輸出波形引入了D觸發(fā)器的長幀同步時(shí)鐘的產(chǎn)生modulelongframe2(clk,strb);parameterDELAY=8;inputclk;output

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論