美章網(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)化手段作了詳細(xì)的闡述,對設(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

    主站蜘蛛池模板: 亚洲国产精品一区二区第四页| 成人免费一区二区三区在线观看| 精品视频在线观看一区二区| 激情内射亚州一区二区三区爱妻| 国产裸体歌舞一区二区| bt7086福利一区国产| 亚洲AV无码一区二区三区在线观看| 精品视频一区二区三区免费| 波多野结衣中文字幕一区| 精品国产乱码一区二区三区| 午夜视频久久久久一区 | 人妻视频一区二区三区免费| 精品国产一区二区三区在线观看| 亚洲日韩AV一区二区三区四区 | 亚洲AV无码国产一区二区三区| 国产一区二区三区日韩精品 | 国产精品一区二区三区免费| 亚洲日韩AV一区二区三区四区| 久久久精品一区二区三区| 日本精品夜色视频一区二区| 国产乱码一区二区三区| 鲁丝片一区二区三区免费| 亚洲高清偷拍一区二区三区| 国产一区二区在线|播放| 人妻天天爽夜夜爽一区二区| 国产在线精品一区二区在线观看 | 亚洲日韩中文字幕无码一区| 亚州日本乱码一区二区三区| 久久无码精品一区二区三区| 国产中文字幕一区| 色婷婷av一区二区三区仙踪林| 无码少妇一区二区性色AV| 好爽毛片一区二区三区四| 无码人妻一区二区三区精品视频| 另类ts人妖一区二区三区| 色欲AV蜜桃一区二区三| 日亚毛片免费乱码不卡一区| 无码福利一区二区三区| 国产电影一区二区| 一区国产传媒国产精品| 91精品福利一区二区三区野战|