近年來(lái),隨著集成電路技術(shù)和EDA技術(shù)的不斷發(fā)展,集設(shè)計(jì)、模擬、綜合和測(cè)試功能為一體的VHDL語(yǔ)言,已作為IEEE標(biāo)準(zhǔn)化的硬件描述語(yǔ)言。由于其在語(yǔ)法和風(fēng)格上類似于現(xiàn)代高級(jí)匯編語(yǔ)言,具有良好的可讀性,描述能力強(qiáng),設(shè)計(jì)方法靈活,易于修改,又具有可移植性,可重復(fù)利用他人的IP模塊(具有知識(shí)產(chǎn)權(quán)的功能模塊)等諸多優(yōu)勢(shì)而成為EDA設(shè)計(jì)方法的首選。VHDL設(shè)計(jì)是行為級(jí)設(shè)計(jì),所帶來(lái)的問(wèn)題是設(shè)計(jì)者的設(shè)計(jì)思考與電路結(jié)構(gòu)相脫節(jié)。設(shè)計(jì)者主要是根據(jù)VHDL的語(yǔ)法規(guī)則,對(duì)系統(tǒng)目標(biāo)的邏輯行為進(jìn)行描述,然后通過(guò)綜合工具進(jìn)行電路結(jié)構(gòu)的綜合、編譯和優(yōu)化,并通過(guò)仿真工具進(jìn)行邏輯功能仿真和系統(tǒng)時(shí)延的仿真。實(shí)際設(shè)計(jì)過(guò)程中,由于每個(gè)工程師對(duì)語(yǔ)言規(guī)則和電路行為的理解程度不同,每個(gè)人的編程風(fēng)格各異,往往同樣的系統(tǒng)功能,描述的方式不一,綜合出來(lái)的電路結(jié)構(gòu)更是大相徑庭。即使最終綜合出的電路都能實(shí)現(xiàn)相同的邏輯功能,但其電路的復(fù)雜程度和時(shí)延特性差別很大,甚至某些臃腫的電路還會(huì)產(chǎn)生難以預(yù)料的問(wèn)題。因此,對(duì)VHDL設(shè)計(jì)中簡(jiǎn)化電路結(jié)構(gòu),優(yōu)化電路設(shè)計(jì)的問(wèn)題進(jìn)行深入探討,很有必要。
VHDL電路設(shè)計(jì)的優(yōu)化與VHDL描述語(yǔ)句、EDA工具以及可編程器件(PLD)的選用都有著直接的關(guān)系。設(shè)計(jì)人員首先應(yīng)注意到以下基本問(wèn)題:
① PLD器件的邏輯資源是有限的。
② 可編程器件具有特定的結(jié)構(gòu),應(yīng)注意器件結(jié)構(gòu)與實(shí)際系統(tǒng)的匹配,使系統(tǒng)性能達(dá)到最佳。
③ 不是所有的設(shè)計(jì)都能實(shí)現(xiàn)到任意選擇的結(jié)構(gòu)中去。
④ 電路優(yōu)化的目標(biāo)相當(dāng)于求最優(yōu)解的問(wèn)題。
1 VHDL設(shè)計(jì)中提高硬件綜合效率的主要策略
VHDL作為一種硬件描述和仿真語(yǔ)言,最終要實(shí)現(xiàn)的是實(shí)際硬件電路。但是其設(shè)計(jì)初衷并非綜合,某些語(yǔ)句并不被綜合器支持,所以在選擇語(yǔ)句時(shí)應(yīng)考慮到綜合與仿真的效率。只有使用綜合工具支持的語(yǔ)句,設(shè)計(jì)出的程序才有意義。在編程時(shí)要注意以下幾點(diǎn):
① 盡量不使用WAIT FOR XX ns語(yǔ)句和AFTER XX ns語(yǔ)句。XX ns表明在執(zhí)行下一操作之前需要等待的時(shí)間,但綜合器不予支持,一般忽略該時(shí)間,而不會(huì)綜合成某種元件,故對(duì)于包含此類語(yǔ)句的程序,仿真結(jié)果與綜合結(jié)果往往不一致。
② 聲明信號(hào)和變量時(shí)盡量不賦初值,定義某確定數(shù)值時(shí),使用常量而不用變量賦初值的形式。因?yàn)榇蠖鄶?shù)綜合工具將忽略賦值等初始化語(yǔ)句,諸如:VARIABAL S∶INTEGER∶=0。
③ 函數(shù)或過(guò)程調(diào)用時(shí)盡量使用名稱關(guān)聯(lián)。因?yàn)槊Q關(guān)聯(lián)可以比位置關(guān)聯(lián)更好地防止產(chǎn)生不正確的端口連接和元件聲明,也不要在同一個(gè)語(yǔ)句中同時(shí)使用兩種關(guān)聯(lián)。諸如:
clk_1:bufes port map(I=》clock_in,clock_out);(不正確的用法)
clk_1:bufes port map(I=》clock_in,O=》clock_out);(正確的用法)
④ 正確使用when_else語(yǔ)句、if_else語(yǔ)句和case語(yǔ)句。VHDL設(shè)計(jì)電路的復(fù)雜程度除取決于設(shè)計(jì)功能的難度外,還受設(shè)計(jì)工程師對(duì)電路描述方法的影響。最常見的使電路復(fù)雜化的原因之一是,設(shè)計(jì)中存在許多本不必要的類似LATCH的結(jié)構(gòu),并且這些結(jié)構(gòu)通常都由大量的觸發(fā)器組成,不僅使電路更復(fù)雜,工作速度降低,而且由于時(shí)序配合的原因還會(huì)導(dǎo)致不可預(yù)料的結(jié)果。例如,描述譯碼電路時(shí),由于每個(gè)工程師的寫作習(xí)慣不同,有的喜歡用IF.。.ELSE 語(yǔ)句,有的喜歡用WHEN.。.ELSE方式,而用IF.。.ELSE時(shí),稍不注意,在描述不需要寄存器的電路時(shí)沒(méi)加ELSE,則會(huì)引起電路不必要的開銷。
例程1: if ina=″00000″ then
Outy<=″0000111″;
elsif ina=″00001″ then
Outy<=″0001000″;
elsif ina=″00010″ then
Outy<=″0001001″;
……
else
Outy<=″0000000″;
end if;
例程2: Outy<=″0000111″ when ina=″00000″ else
″0001000″ when ina=″00001″ else
″0001001″ when ina=″00010″ else
……
″0000000″;
例程2由于使用WHEN.。.ELSE完整條件語(yǔ)句,不會(huì)生成鎖存器結(jié)構(gòu),所以不會(huì)有問(wèn)題。而例程1若不加else Outy<=″0000000″語(yǔ)句,則屬于不完整條件表達(dá)方式,會(huì)生成一個(gè)含有7位寄存器的結(jié)構(gòu)。雖然上述例程都能實(shí)現(xiàn)相同的譯碼功能,但是電路復(fù)雜度會(huì)大不相同。
⑤ 注意算術(shù)功能的設(shè)計(jì)優(yōu)化。例如下面兩條語(yǔ)句:
Out《=A+B+C+D;
Out《=(A+B)+(C+D);
第一條語(yǔ)句綜合后將會(huì)連續(xù)疊放3個(gè)加法器(((A+B)+C)+D);第二條語(yǔ)句(A+B)和(C+D)使用兩個(gè)并行的加法器,同時(shí)進(jìn)行加法運(yùn)算,再將運(yùn)算結(jié)果通過(guò)第三個(gè)加法器進(jìn)行組合。雖然使用資源數(shù)量相同,但第二條語(yǔ)句速度更快。以4位和16位加法器為例,選用Altera公司 EPF10K30AQC240_3芯片,通過(guò)synopsys FPGA Express綜合工具實(shí)現(xiàn)的結(jié)果進(jìn)行測(cè)試,比較結(jié)果如表1所列。
2 優(yōu)化系統(tǒng)速度的VHDL設(shè)計(jì)策略
選用基于VHDL設(shè)計(jì)的CPLD/FPGA器件往往首先是為了滿足高速運(yùn)行的需要,如通信系統(tǒng)。系統(tǒng)運(yùn)行速度與電路節(jié)點(diǎn)之間的延時(shí)直接相關(guān),因此,減少冗余邏輯,縮短節(jié)點(diǎn)延時(shí)是提高系統(tǒng)速度的關(guān)鍵。速度優(yōu)化與電路結(jié)構(gòu)設(shè)計(jì)(如器件結(jié)構(gòu)特性、系統(tǒng)電路構(gòu)成和PCB制板情況)和軟件使用(如綜合器性能和 VHDL描述方式)都有關(guān)系。
2.1 電路結(jié)構(gòu)方面速度優(yōu)化的主要方法
① 流水線設(shè)計(jì)是最常用的速度優(yōu)化技術(shù)。采用流水線設(shè)計(jì)雖然不能縮短總工作周期,但通過(guò)把一個(gè)工作周期內(nèi)的邏輯操作分成幾步較小操作,并連續(xù)同步實(shí)現(xiàn)的策略,可大大提高系統(tǒng)總體運(yùn)行速度。
② 合理使用嵌入式陣列塊EAB資源和LPM宏單元庫(kù)。在DSP、圖像處理等領(lǐng)域,乘法器是應(yīng)用最廣泛、最基本的模塊,其速度往往制約著整個(gè)系統(tǒng)性能。而EAB是PLD器件中非常有效的高速資源,利用EAB單元和參數(shù)化模塊LPM,可以設(shè)計(jì)出乘法器等高速電路。
③ 關(guān)鍵路徑優(yōu)化。所謂關(guān)鍵路徑是指從輸入到輸出延時(shí)最長(zhǎng)的邏輯通道。關(guān)鍵路徑優(yōu)化是保證系統(tǒng)速度優(yōu)化的有效方法。
2.2 軟件使用方面速度優(yōu)化的方法
一般EDA軟件尤其是綜合器,均會(huì)提供一些針對(duì)具體器件和設(shè)計(jì)的優(yōu)化選項(xiàng)。設(shè)計(jì)者在使用軟件時(shí)應(yīng)注意根據(jù)優(yōu)化目標(biāo)的要求,適當(dāng)修改軟件設(shè)置。在MAX+plusII中,就可以使用Assign/Device命令選擇不同速度等級(jí)的芯片。
3 面積優(yōu)化的VHDL設(shè)計(jì)策略
面積優(yōu)化是提高芯片資源利用率的另一種方法,通過(guò)面積優(yōu)化可以使用規(guī)模更小的芯片,從而降低成本和功耗,為以后技術(shù)升級(jí)預(yù)留更多資源。面積優(yōu)化最常用的方法是資源共享和邏輯優(yōu)化。
3.1 資源共享方法
資源共享的主要思想是通過(guò)數(shù)據(jù)緩沖或多路選擇的方法來(lái)共享數(shù)據(jù)通道中占用資源較多的模塊(如乘法器、多位加法器等算術(shù)模塊)。
例程3: process(A0,A1,B,sel)
begin
if(sel=‘0’)then result《=A0*B;
else result《=A1*B;
end if;
end processs;
例程4: process(A0,A1,B,sel)
begin
if(sel=‘0’)then temp《=A0;
else temp《=A1;
end if;
result《=temp*B;
end processs;
例程3的設(shè)計(jì)可用圖1描述,例程4的設(shè)計(jì)可用圖2描述。可見例程4節(jié)省了一個(gè)代價(jià)高昂的乘法器,整個(gè)設(shè)計(jì)占用面積比例程3幾乎減少了一半。
3.2 邏輯優(yōu)化方法
通過(guò)邏輯優(yōu)化以減少資源利用也是常用的面積優(yōu)化方法(如常數(shù)乘法器的應(yīng)用,并行邏輯串行化處理等),但其代價(jià)往往是速度的犧牲。在延時(shí)要求不高的情況下,采用這種方法可以達(dá)到減少電路復(fù)雜度、實(shí)現(xiàn)面積優(yōu)化的目的。
4 結(jié)論
通過(guò)以上初步的探討可知,用VHDL進(jìn)行集成電路的設(shè)計(jì),不僅需要熟悉VHDL語(yǔ)言的使用方法和對(duì)設(shè)計(jì)要求的深刻理解,而且應(yīng)在設(shè)計(jì)全程中遵循最優(yōu)化設(shè)計(jì)的基本原則,在電路結(jié)構(gòu)設(shè)計(jì)和軟件使用中尋找滿足設(shè)計(jì)要求的最佳方案。
評(píng)論
查看更多