美章網(wǎng) 資料文庫 Verilog HDL模型優(yōu)化范文

Verilog HDL模型優(yōu)化范文

本站小編為你精心準(zhǔn)備了Verilog HDL模型優(yōu)化參考范文,愿這些范文能點燃您思維的火花,激發(fā)您的寫作靈感。歡迎深入閱讀并收藏。

Verilog HDL模型優(yōu)化

摘要本文基于模型優(yōu)化的必要性,對使用Veriloghdl建模時可以運用的優(yōu)化手段作了詳細的闡述,對設(shè)計者具有一定的指導(dǎo)意義。

關(guān)鍵詞模型優(yōu)化;綜合;表達式

1引言

每個設(shè)計者在進行Verilog建模時都會形成自己的設(shè)計風(fēng)格,同一個電路設(shè)計,用Verilog描述可以寫出許多邏輯上等價的模型,而大多數(shù)設(shè)計者考慮的主要是代碼書寫上的方便和功能上是否正確,對設(shè)計的模型是否最優(yōu)化結(jié)構(gòu)卻考慮甚少,這樣不僅加重了邏輯綜合的負(fù)擔(dān),影響綜合效率,而且很可能會導(dǎo)致設(shè)計出的芯片未達到最優(yōu)的面積和速度。因此,在Verilog建模時,很有必要進行模型優(yōu)化。

2模型優(yōu)化概述

影響一個芯片性能的指標(biāo)主要有兩個:面積和速度。模型優(yōu)化就是通過一定的手段對模型的結(jié)構(gòu)進行調(diào)整、組合和精簡,從而使設(shè)計出的芯片達到更小的面積和更快的速度。

綜合所生成的邏輯易受模型描述方式的影響。把語句從一個位置移到另一個位置,或者拆分表達式都會對所生成的邏輯產(chǎn)生重大影響,這可能會造成綜合出的邏輯門數(shù)有所增減,也可能改變其定時特性。因此,采取一定的手段可以實現(xiàn)對邏輯的優(yōu)化。但是由于優(yōu)化終點包含的兩個方面面積和速度是互相矛盾的,優(yōu)化一個方面必定影響另一個方面,而無法實現(xiàn)面積和速度都達到最優(yōu),這就需要設(shè)計者對兩者進行權(quán)衡,看設(shè)計偏重于哪個方面,而采取不同的優(yōu)化起點。

下面分別從面積和速度兩個方面對模型優(yōu)化的手段進行介紹。

3面積的優(yōu)化3.1提取公共子表達式

如果條件語句的互斥分支中有公共子表達式,可以提取該公共子表達式。如下面的模型可以提取公共子表達式:

if(enable)

P=A&(B+C);

else

Q=(B+C)|D;

此模型中條件語句的互斥分支中都計算了表達式B+C,因此,應(yīng)將該表達式提取出來放在條件語句之前進行賦值,新模型如下所示:

Tmp=B+C;//引入一個臨時變量

if(enable)

P=A&Tmp;

else

Q=Tmp|D;

這樣,綜合工具就會綜合出一個加法器,而原來的模型則會綜合出兩個加法器。引申到一般情況,若在邏輯中找到有公共子表達式,就可以將該公共子表達式賦值給一個臨時變量,然后用該臨時變量來表示該公共子表達式,這樣就可以減少綜合出的ALU單元的數(shù)量,以實現(xiàn)面積的優(yōu)化。

3.2代碼移位

如果在循環(huán)語句內(nèi)某個表達式的值在每次循環(huán)中都不變化,可以將該表達式移至循環(huán)之外。如下面的模型可以進行代碼移位:

P=…

for(i=1;i<=5;i++)

begin

Q=P+5;//假設(shè)循環(huán)中未對P賦新值

end

賦值語句“Q=P+5;”右端的表達式不隨循環(huán)變量而變,因此,應(yīng)將該表達式移至循環(huán)之外,新模型如下所示:

P=…

Tmp=P+5;//引入一個臨時變量

for(i=1;i<=5;i++)

begin

Q=Tmp;

end

這樣,綜合工具對“P+5”只會綜合出一個加法器,而原來的模型會產(chǎn)生5個加法器,每循環(huán)一次就產(chǎn)生一個,造成了代碼冗余。優(yōu)化后的新模型不僅減少了綜合出的ALU單元的數(shù)量,而且提高了仿真效率。

3.3資源共享

資源共享是指在互斥條件下共享算術(shù)邏輯單元(ALU)的過程。如下面的模型:

if(num>5)

P=A+B;

else

P=A-C;

如果不采用資源分配,算符“+”和“-”就會被綜合成兩個單獨的ALU。而如果采用了資源分配,僅需一個ALU就可以實現(xiàn)“+”和“-”這兩種運算。這是因為這兩種算符總是互斥地使用。此外還生成了一個多路選擇器,用來從B和C中選擇合適的量接到ALU的第二個輸入端上。實際上,資源分配就是共享算符的過程。共享算符有以下幾種可能的情況:

(1)算符相同,運算量相同。如:A+B和A+B,這種情況同“提取公共子表達式”,顯然必須共享。

(2)算符相同,有一個運算量不同。如:A+B和A+C,這時需引入一個多路選擇器,要進行面積與速度之間的權(quán)衡。

(3)算符相同,運算量都不同。如:A+B和C+D,這時需引入兩個多路選擇器,要進行面積與速度之間的權(quán)衡。

(4)算符不同,運算量相同。如:A+B和A-B,可以將“+”和“—”合成一個ALU單元,要共享。

(5)算符不同,有一個運算量不同。如:A+B和A-C,這時需引入一個多路選擇器,要進行面積與速度之間的權(quán)衡。

(6)算符和運算量都不同。如:A+B和C-D,這時需引入兩個多路選擇器,要進行面積與速度之間的權(quán)衡。

在共享ALU的時候,要在ALU的某個輸入端引入多路選擇器,這樣會增加路徑的延遲。因此,設(shè)計者應(yīng)根據(jù)實際情況權(quán)衡是優(yōu)化面積重要還是優(yōu)化速度重要,如果是在“定時至上”的設(shè)計中,最好不要采用資源共享。

此外,對于復(fù)雜的運算單元,可以采用函數(shù)和任務(wù)來定義這些共享的數(shù)據(jù)處理模塊,以減少器件資源的消耗,降低成本。

3.4消除觸發(fā)器

有些設(shè)計者為了圖編寫代碼的方便,喜歡將同一條件控制下的賦值語句寫在一個時序控制語句中,如下面的模型:

always@(posedgeCLK)

begin

case(State)

0:

begin

preState<=1;

Dout<=16’h56;

end

1:

begin

preState<=0;

Dout<=16’h29;

end

endcase

end

設(shè)計者的本意僅是要把preState的值保存在上升沿觸發(fā)的觸發(fā)器中,而Dout的值只是受State影響的組合邏輯,原本只需要1個觸發(fā)器即可,而上述模型綜合后的網(wǎng)表會生成17個觸發(fā)器,浪費了資源,優(yōu)化后的模型如下所示:

always@(posedgeCLK)//推導(dǎo)出觸發(fā)器

begin

case(State)

0:preState<=1;

1:preState<=0;

endcase

end

always@(State)//組合邏輯

begin

case(State)

0:Dout<=16’h56;

1:Dout<=16’h29;

endcase

end

3.5消除鎖存器

推導(dǎo)鎖存器的規(guī)則是:

(1)變量在條件語句(if或case語句)中被賦值。

(2)變量未在條件語句的所有分支中都被賦值。

(3)在always語句的多次調(diào)用之間需要保存變量值。

同時滿足以上3個條件,就會將變量推導(dǎo)成鎖存器。有的設(shè)計者可能會圖省事沒有在所有的條件分支中對變量進行賦值,這樣就導(dǎo)致原本不需要產(chǎn)生鎖存器的變量產(chǎn)生了鎖存器,而浪費了資源。

消除鎖存器的最好方法是在設(shè)計時明確哪些變量需要鎖存器,哪些則不需要。對不需要推導(dǎo)出鎖存器的變量,在其所有條件分支中都對其賦值,或者是在條件語句之前對其進行初始化賦值。

4速度的優(yōu)化4.1使用括號

在表達式中使用括號,可以控制所綜合出的邏輯電路的結(jié)構(gòu),縮短電路的關(guān)鍵路徑,從而實現(xiàn)速度的優(yōu)化。

例如對語句P=A+B-C+D,綜合工具在綜合右端表達式時遵循從左至右進行演算,就會構(gòu)造出如圖1所示的電路。

使用括號后的語句為:P=(A+B)-(C-D),綜合后的電路如圖2所示。

圖1未使用括號綜合出的電路圖2使用括號綜合出的電路

很顯然,未使用括號時關(guān)鍵路徑的深度為3,而使用括號后的關(guān)鍵路徑深度為2,優(yōu)化了速度。

4.2提取關(guān)鍵路徑

在電路設(shè)計中,有些信號的路徑比較長,或者信號本身就來得比較晚,從而造成電路的建立時間不夠。這種引起電路建立時間不夠的信號路徑稱為關(guān)鍵路徑。這種關(guān)鍵信號路徑大多要提取出來特別對待,以盡量減少它的延時。

4.2.1提取重復(fù)變量

如語句P=(a&b&c)|(b&d&e)中的信號b的路徑就是關(guān)鍵路徑,可以提取出來單獨處理,提取關(guān)鍵路徑前后的電路模型如圖3所示。

圖3電路模型比較

由圖中可以看出,信號b的路徑由2級變成了1級,增加了其建立時間,縮短了延遲,而且還減少了一個與門,既提高了速度又減少了面積。

4.2.2提取先行關(guān)鍵路徑

如下面的模型所示:

always@(aorborcordoreorcurrent_out)

begin

next_out=current_out;

if(!a)begin

if(b&!(d&!e))next_out=!c;

elsenext_out=c;

end

elseif(d&!e)next_out=c;

end

其中,輸入信號e在always語句塊中是個時間非常緊的關(guān)鍵信號,需要進行特殊處理。處理后的模型如下所示:

always@(aorborcordoreorcurrent_out)

begin

next_out=current_out;

if(e)begin

if(!a)begin

if(b)next_out=!c;

elsenext_out=c;

end

end

elsebegin

if(!a)begin

if(b&!d)next_out=!c;

elsenext_out=c;

end

elseif(d)next_out=c;

end

end

上述模型描述了關(guān)鍵信號e的分步提取方法,改寫后的描述都與原always塊邏輯等效。

5其它優(yōu)化手段5.1引用工藝庫中預(yù)定義的宏結(jié)構(gòu)

設(shè)計者可以根據(jù)需要使用模塊實例化語句來實現(xiàn)預(yù)定義功能塊,就好像對待元件那樣,在模型中對其進行實例化,然后再綜合此實例模型。例如,要建立一個加法器,根據(jù)面積約束,可以調(diào)用一個面積高效的行波加法器,而根據(jù)延時約束,可以調(diào)用一個快速但面積較大的先行結(jié)構(gòu)加法器。

5.2使用小型設(shè)計

實驗研究表明邏輯電路規(guī)模在2000門至5000門時邏輯優(yōu)化器的優(yōu)化效果最佳,因此,設(shè)計時應(yīng)盡量組織成多個模塊或多個always語句段。

綜合過程的運行時間主要用于邏輯優(yōu)化,它與設(shè)計規(guī)模呈指數(shù)關(guān)系,因此將各個子功能塊的規(guī)模保持在可處理的設(shè)計范圍內(nèi)很關(guān)鍵。

5.3傳播常量

使用常量傳播技術(shù)可以增加電路模型修改的靈活性和可移植性。如果有一個確定意義的常量并且在模型中的多處地方都引用到,則可以將該常量值定義為一個常量符號,然后直接引用該常量符號即可,如下所示:

parameterCOUNT=16;

P=COUNT*2;

for(i=0;i<COUNT-1;i++)

其中,COUNT表示的是循環(huán)次數(shù),根據(jù)需要可以在語句“parameterCOUNT=16;”中修改其值。由于它是一個常量,在綜合時不會為表達式“COUNT*2”和“COUNT-1”生成任何硬件,而是在編譯時直接計算出表達式的值并將其賦給變量。

6結(jié)束語

一般情況下,綜合工具會自動對Verilog模型進行優(yōu)化,但如果設(shè)計者在電路設(shè)計時直接就編寫出結(jié)構(gòu)優(yōu)化的電路模型,就會大大減少綜合工具的運行時間,甚至有時候綜合工具無法優(yōu)化的結(jié)構(gòu)經(jīng)過手工調(diào)整后實現(xiàn)了優(yōu)化的目的。因此,養(yǎng)成良好的設(shè)計風(fēng)格是很重要的,在設(shè)計時不僅要保證設(shè)計的正確性,還要注重設(shè)計的高效性,避免不必要的反復(fù)修正,這樣才能提高設(shè)計效率,縮短開發(fā)周期。

參考文獻

[1]王金明.VerilogHDL程序設(shè)計教程.北京:人民郵電出版社,2004.1

[2]J.Bhasker.VerilogHDL綜合實用教程.北京:清華大學(xué)出版社,2004.1

主站蜘蛛池模板: 热99re久久精品精品免费| 九九在线精品视频| 色偷偷狠狠色综合网| 娇妻校花欲乱往事叶子txt下载| 亚洲欧洲日产国码在线观看| 精品久久亚洲一级α| 国产亚洲欧美精品久久久| 日本阿v精品视频在线观看| 巨大破瓜肉h强| 久久亚洲中文字幕精品一区| 欧洲三级在线观看| 午夜影院在线视频| 青柠直播视频在线观看网| 天天干天天摸天天操| 两个人看的日本高清电影| 毛片在线免费视频| 制服丝袜日韩中文字幕在线| 范冰冰hd未删减版在线观看| 国产成人综合在线视频| **aa级毛片午夜在线播放| 国内精品伊人久久久久妇| runaway韩国动漫全集在线| 成人看片黄在线观看| 久久一区二区三区免费播放| 日韩人妻无码一区二区三区综合部 | a色毛片免费视频| 成人免费淫片在线费观看| 久久久久777777人人人视频| 日韩在线视频免费播放| 亚洲AV无码一区二区二三区软件| 欧美巨大xxxx做受高清| 亚洲欧美成人一区二区在线电影| 男人j桶进女人免费视频| 再深一点再重一点| 美女动作一级毛片| 国产白丝在线观看| pruburb.html官网| 性猛交xxxxx按摩欧美| 中文字幕不卡高清免费| 色天天综合久久久久综合片| 欧美大尺度xxxxx视频|