日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > > ZYNQ
		


前面學(xué)習(xí)了進(jìn)行低功耗的目的和功耗的構(gòu)成,今天就來(lái)分享一下功耗的分析。由于是面向數(shù)字IC前端設(shè)計(jì)的學(xué)習(xí),所以這里的功耗分析是基于DC中的power compiler工具;更精確的功耗分析可以采用PT,關(guān)于PT的功耗分析可以查閱其他資料,這里不涉及使用PT的進(jìn)行功耗分析。



(1)功耗分析與流程概述



上一個(gè)小節(jié)中講解了功耗的構(gòu)成,并且結(jié)合工藝庫(kù)進(jìn)行簡(jiǎn)要地介紹了功耗的計(jì)算。但是實(shí)際上,我們根本不可能人工地計(jì)算實(shí)際的大規(guī)模集成電路的功耗,我們往往借助EDA工具幫我們分析電路的功耗。這里我們就介紹一下EDA工具分析功耗的(普遍)流程,然后下一小節(jié)我們將介紹低功耗電路的設(shè)計(jì)和優(yōu)化。


①功耗分析流程的輸入輸出


功耗分析的流程(從輸入輸出關(guān)系看)如下所示:

上面的圖中,需要四種東西:


  • tech library:這個(gè)就是包含功耗信息的工藝庫(kù)了,比較精確的庫(kù)里面還應(yīng)該包含狀態(tài)路徑(SDPD)信息,代工廠提供。


  • netlist:設(shè)計(jì)的門(mén)級(jí)網(wǎng)表電路,可以通過(guò)DC綜合得到。


  • parasitic:設(shè)計(jì)中連線等寄生參數(shù),比如寄生電容、寄生電阻,這個(gè)一般是后端RC寄生參數(shù)工具提供,簡(jiǎn)單的功耗分析可以不需要這個(gè)文件。


  • switch activity:包含設(shè)計(jì)中每個(gè)節(jié)點(diǎn)的開(kāi)關(guān)行為情況,比如說(shuō)節(jié)點(diǎn)的翻轉(zhuǎn)率或者可以計(jì)算出節(jié)點(diǎn)翻轉(zhuǎn)率的文件。這個(gè)開(kāi)關(guān)行為輸入文件是很重要的。這個(gè)開(kāi)關(guān)行為可以有不同的形式提供,因此就有后面不同的分析功耗的方法。


(注意,不管使用什么方法進(jìn)行功耗分析,功耗分析的時(shí)候,輸入設(shè)計(jì)文件的都是門(mén)級(jí)網(wǎng)表文件)

②開(kāi)關(guān)行為的一些概念


說(shuō)到開(kāi)關(guān)行為,我們前面的翻轉(zhuǎn)率也是一種開(kāi)關(guān)行為。此外我們還有其他關(guān)于開(kāi)關(guān)行為描述的概念,這里我們通過(guò)舉例說(shuō)明,如下圖所示:

  • 翻轉(zhuǎn)(次)數(shù):邏輯變化的次數(shù),上圖中信號(hào)的翻轉(zhuǎn)數(shù)為3。


  • 翻轉(zhuǎn)率:前面也有相關(guān)介紹,這里重提一下,翻轉(zhuǎn)率是單位時(shí)間內(nèi)信號(hào)(包括時(shí)鐘、數(shù)據(jù)等等信號(hào))的翻轉(zhuǎn)次數(shù)。上圖中翻轉(zhuǎn)率為3/6 = 0.5(6個(gè)時(shí)間間隔內(nèi),翻轉(zhuǎn)了3次)。


  • T1,T0:(節(jié)點(diǎn))信號(hào)的邏輯值為1和0的持續(xù)時(shí)間,上圖中T1為4,T0為2。


  • 靜態(tài)概率(static  probability ,SP):(節(jié)點(diǎn))信號(hào)邏輯值為1的概率,上圖中的SP為4/6=2/3。

③開(kāi)關(guān)行為(文件)情況表示


前面我們說(shuō)到了功耗的分析需要開(kāi)關(guān)行為的情況,一般就是指每個(gè)節(jié)點(diǎn)的翻轉(zhuǎn)率情況,我們有下面方式設(shè)置翻轉(zhuǎn)率:


直接命令進(jìn)行:例如命令:

set_switching_activity  -static   0.2   -toggle_rate   20 -period  1000 [all_inputs]


這時(shí),翻轉(zhuǎn)率設(shè)置的節(jié)點(diǎn)是輸入,響應(yīng)的翻轉(zhuǎn)率為:Tr = 20/1000 = 0.02GHz


  • SAIF文件:即switching activity interchange format,開(kāi)關(guān)行為內(nèi)部交換格式文件,用于仿真器和功耗分析之間交換信息的ASCII文件(美國(guó)標(biāo)準(zhǔn)信息交換碼文件)。


  • VCD文件,即value change dump 文件,它也是一個(gè)ASCII文件,文件中包括了一個(gè)設(shè)計(jì)中所選擇變量值的變化信息,這些信息通過(guò)在仿真testbench中使用“VCD系統(tǒng)函數(shù)”得到。


在Synopsys的低功耗設(shè)計(jì)流程里面,可以使用power compiler(包含在design compiler中)進(jìn)行功耗分析。我們可以通過(guò)命令來(lái)定義節(jié)點(diǎn)的翻轉(zhuǎn)率的方法來(lái)分析功耗----稱(chēng)為無(wú)向量(vector-free)分析法;由于SAIF文件和VCD文件可以通過(guò)對(duì)電路仿真得到,它們是仿真接口格式文件,因此也可以通過(guò)VCS仿真器產(chǎn)生SAIF或者VCD文件的方法分析功耗。當(dāng)要分析的結(jié)果比較精確時(shí),一般使用SAIF文件或者VCD文件(VCD文件通過(guò)相關(guān)命令轉(zhuǎn)換成SAIF文件,而后使用SAIF進(jìn)行功耗分析)。


(2)無(wú)向量分析法



前面我們說(shuō)到,無(wú)向量分析法就是通過(guò)命令來(lái)定義節(jié)點(diǎn)的翻轉(zhuǎn)率的方法來(lái)分析功耗。我們先來(lái)逐條學(xué)習(xí)需要什么的命令,然后在后面進(jìn)行舉例說(shuō)明無(wú)向量分析法的腳本。


在學(xué)習(xí)設(shè)置翻轉(zhuǎn)率的命令之前,我們先來(lái)了解一下什么是設(shè)計(jì)的傳播起點(diǎn)和黑盒子。我們定義傳播的起點(diǎn)為設(shè)計(jì)的輸入端和黑盒子的輸出端,黑盒子是指在工藝庫(kù)里沒(méi)有功能描述的單元(比如ROM 、RAM或者一些IP核)。


上面的設(shè)計(jì)有三處起點(diǎn),一處是整個(gè)設(shè)計(jì)的輸入端,一處是黑盒子的輸出端,還有一處是某個(gè)單元的輸入端。最后一處的起點(diǎn)不包含在我們的定義中,但是我們也把它當(dāng)做起點(diǎn),因?yàn)檫@是被標(biāo)記了翻轉(zhuǎn)率,這個(gè)我們后面進(jìn)行講解。


利用無(wú)向量分析法分析功耗時(shí),我們不必提供設(shè)計(jì)內(nèi)部節(jié)點(diǎn)的翻轉(zhuǎn)率,而是通過(guò)設(shè)置起點(diǎn)的翻轉(zhuǎn)率就行了。我們有兩種方法設(shè)置翻轉(zhuǎn)率,一種是通過(guò)設(shè)置翻轉(zhuǎn)變量,一種是通過(guò)標(biāo)記的方法。下面我們就來(lái)介紹如何通過(guò)這兩種方法進(jìn)行設(shè)置翻轉(zhuǎn)率。


①設(shè)置翻轉(zhuǎn)變量


在power compiler中,可以設(shè)置下面的兩個(gè)翻轉(zhuǎn)變量進(jìn)行設(shè)置翻轉(zhuǎn)率:

power_default_toggle_rate

power_default_static_probability


下面就來(lái)介紹一下這兩個(gè)變量(主要介紹power_default_toggle_rate)。


power_default_toggle_rate:其用法我們可以在DC中進(jìn)行man一下,這個(gè)變量設(shè)置設(shè)計(jì)中默認(rèn)使用的翻轉(zhuǎn)率。定義方式是:


set   power_default_toggle_rate   翻轉(zhuǎn)值


翻轉(zhuǎn)值默認(rèn)是0.5。這個(gè)翻轉(zhuǎn)值不是翻轉(zhuǎn)率,這個(gè)變量定義的翻轉(zhuǎn)率是個(gè)相對(duì)的值:


  • 如果設(shè)計(jì)定義了時(shí)鐘,這個(gè)power_default_toggle_rate變量定義的翻轉(zhuǎn)率就以最快的時(shí)鐘為參考,比如翻轉(zhuǎn)值為0.5時(shí),設(shè)計(jì)中最快的時(shí)鐘為10ns,那么翻轉(zhuǎn)率Tr = 0.5/10ns = 0.05GHz,也就是整個(gè)設(shè)計(jì)中默認(rèn)的翻轉(zhuǎn)率是0.05GHz。


  • 如果設(shè)計(jì)中沒(méi)有時(shí)鐘,那么就會(huì)以工藝庫(kù)中的時(shí)間單位作為參考,例如工藝庫(kù)中的時(shí)間單位是ns,翻轉(zhuǎn)值為0.5,那么翻轉(zhuǎn)率Tr = 0.5/1ns = 0.5GHz。


power_default_static_probability:這個(gè)設(shè)置的是默認(rèn)的靜態(tài)概率,也就是起點(diǎn)的邏輯值是1的概率。至于靜態(tài)概率,這里就不詳細(xì)描述了。這兩個(gè)變量的默認(rèn)翻轉(zhuǎn)值都是0.5,翻轉(zhuǎn)率是很大的,一般情況下需要減小一點(diǎn),比如設(shè)置為0.01和0.02這樣的。

一般情況下,默認(rèn)的翻轉(zhuǎn)率是設(shè)置在起點(diǎn)上的,也就是說(shuō)起點(diǎn)的翻轉(zhuǎn)率用的是power_default_toggle_rate這個(gè)變量設(shè)置的翻轉(zhuǎn)率,內(nèi)部節(jié)點(diǎn)的翻轉(zhuǎn)率可以通過(guò)傳播得到,如下圖所示:

需要說(shuō)明的是,傳播不可以穿過(guò)沒(méi)有功能描述的黑盒子,也就是不能通過(guò)傳播的方式得到黑盒子的輸出翻轉(zhuǎn)率,因此我們?cè)谧钋懊婢投x了,將黑盒子的輸出當(dāng)做起點(diǎn),這樣其他節(jié)點(diǎn)的翻轉(zhuǎn)率可以通過(guò)傳播得到(包括黑盒子的輸入),黑盒子輸出的翻轉(zhuǎn)率通過(guò)默認(rèn)設(shè)置的翻轉(zhuǎn)率得到,我們就得到了設(shè)計(jì)中所有節(jié)點(diǎn)的翻轉(zhuǎn)率。

②標(biāo)記翻轉(zhuǎn)率


上面的方式設(shè)置的是默認(rèn)的翻轉(zhuǎn)率。當(dāng)我們需要為某個(gè)節(jié)點(diǎn)標(biāo)記某個(gè)指定的翻轉(zhuǎn)率,而不是使用默認(rèn)的翻轉(zhuǎn)率時(shí),我們就用到了標(biāo)記頻率,如下圖所示:

單元A的輸入端口標(biāo)記了特定翻轉(zhuǎn)率,比如說(shuō)0.04GHz。標(biāo)記的翻轉(zhuǎn)率比傳播的翻轉(zhuǎn)率優(yōu)先級(jí)更高,被標(biāo)記翻轉(zhuǎn)率的節(jié)點(diǎn)將作為一個(gè)新的起點(diǎn),這就不屬于起點(diǎn)的定義,但還是叫它為起點(diǎn)的原因。標(biāo)記翻轉(zhuǎn)率之后,這個(gè)單元后續(xù)的節(jié)點(diǎn)的翻轉(zhuǎn)率將通過(guò)這個(gè)新標(biāo)記的翻轉(zhuǎn)率傳播得到。


設(shè)置標(biāo)記翻轉(zhuǎn)率(簡(jiǎn)稱(chēng)設(shè)置翻轉(zhuǎn)率)的命令主要有兩條:

set_switching_activity 和 set_case_analysis,下面就來(lái)講解一下這兩條命令的意思。


set_switching_activity :設(shè)置某個(gè)節(jié)點(diǎn)的翻轉(zhuǎn)率和靜態(tài)概率,在使用無(wú)向量分析法估算功耗的時(shí)候,這個(gè)命令被廣泛使用,越多的節(jié)點(diǎn)上被標(biāo)記翻轉(zhuǎn)率,估算功耗的精度就越高。命令和選項(xiàng)如下所示:


set_switching_activity

[-static_probability static_probability]

[-toggle_rate toggle_rate]

[-state_condition state_condition]

[-path_sources path_sources]

[-rise_ratio rise_ratio]

[-period period_value | -base_clock clock]

[-type object_type_list]

[-hierarchy]

[object_list]

[-verbose]

下面來(lái)簡(jiǎn)單介紹一下常用的幾個(gè)選項(xiàng),詳細(xì)的介紹可以通過(guò)man set_switching_activity獲取。


-static_probability :設(shè)置靜態(tài)概率。


-period    period_value | -base_clock clock:設(shè)置時(shí)鐘(周期),-period和 -base_clock只能設(shè)置其中一個(gè)。


-toggle_rate:設(shè)置翻轉(zhuǎn)值,與-period或者 -base_clock相關(guān)聯(lián)。翻轉(zhuǎn)率Tr等于:用-base_clock選項(xiàng)指定的時(shí)鐘周期里面的翻轉(zhuǎn)數(shù)目  或 用-period選項(xiàng)指定的時(shí)間段里的翻轉(zhuǎn)數(shù)目;當(dāng)沒(méi)有這個(gè)設(shè)置兩個(gè)選項(xiàng)時(shí),將使用工藝庫(kù)里面的時(shí)間單位,即翻轉(zhuǎn)率等于在每個(gè)庫(kù)單位時(shí)間內(nèi)的翻轉(zhuǎn)數(shù)目。


下面來(lái)舉例說(shuō)明這個(gè)命令的用法:


例一:

create_clock CLK -period 20

set_switching_activity  -base_clock  CLK  -toggle   0.5  -static  0.015  [all_inputs]

上述命令設(shè)置了時(shí)鐘周期為20ns,然后命令使用的是-base_clock的選項(xiàng),所有輸入端的翻轉(zhuǎn)值為0.5,靜態(tài)概率為0.015,于是得到翻轉(zhuǎn)率Tr=0 .5/20=0.025 GHz

例二:

set_switching_activity -period  1000  -toggle  25  -static  0.015   [all_inputs]

上述沒(méi)有創(chuàng)建時(shí)鐘,但是使用了period選項(xiàng),意思是1000個(gè)周期內(nèi)翻轉(zhuǎn)了25次,于是我們就可以得到所以輸入的翻轉(zhuǎn)率Tr=25/1000=0. 025 GHz

例三:

set_switching_activity -toggle  0.025  -static  0.015 [all_inputs]

上述命令中,-period和 -base_clock這兩個(gè)選項(xiàng)都沒(méi)有使用,這個(gè)時(shí)候就跟工藝庫(kù)里面的時(shí)間單位有關(guān)了,若庫(kù)中時(shí)間單位為ns,那么我們就得到翻轉(zhuǎn)率Tr=0.025 /1 = 0.025 GHz

上面講解了set_switching_activity ,下面我們就來(lái)講解一下set_case_analysis。


set_case_analysis 用來(lái)指定一個(gè)靜態(tài)邏輯值,也就是設(shè)置信號(hào)為常數(shù),不進(jìn)行翻轉(zhuǎn);設(shè)計(jì)里面的一些信號(hào)需要這樣子設(shè)計(jì),例如復(fù)位信號(hào),設(shè)置如下所示:

set_case_analysis  1  [get_ports reset]

則設(shè)置了reset的值常為1.


上面我們講解了設(shè)置翻轉(zhuǎn)率的方法,下面舉例說(shuō)明一下如何綜合使用這兩種翻轉(zhuǎn)率。例如對(duì)于下面的設(shè)計(jì):


翻轉(zhuǎn)率的設(shè)置要求如下所示:


1.正確地定義時(shí)鐘;

2.使用set_case_analysis命令設(shè)置常數(shù)控制信號(hào)reset;

3.在傳輸起點(diǎn)設(shè)置翻轉(zhuǎn)率,在輸入端和黑盒子輸出端設(shè)置任何已知的翻轉(zhuǎn)率,其他的起點(diǎn)將使用默認(rèn)的翻轉(zhuǎn)率。

4.讓工具在設(shè)計(jì)中把翻轉(zhuǎn)率傳播下去

上面的沒(méi)有要求具體的翻轉(zhuǎn)率,因此我們可以設(shè)置我們想要的翻轉(zhuǎn)率,根據(jù)上面的要求,我們編寫(xiě)相應(yīng)的tcl腳本如下所示:

create_clock  -p  4  [get_ports clk}

set_case_analysis  0  reset  [get_ports  reset]

set_power_default_toggle_rate  0.003

set_switching_activity -tog 0.02  a

set_switching_activity -tog 0.06  b

set_switching_activity -tog 0.11  x


上面的腳本中,設(shè)置了周期為4(ns)的時(shí)鐘,然后利用set_case_analysis命令,設(shè)置reset端口為常數(shù);翻轉(zhuǎn)值為0.003,那么對(duì)應(yīng)的翻轉(zhuǎn)率為0.003/4ns,這個(gè)是默認(rèn)的翻轉(zhuǎn)率;然后利用set_switching_activity命令指定a、b、x的翻轉(zhuǎn)值,其翻轉(zhuǎn)率為 翻轉(zhuǎn)值/4ns。


前面介紹了無(wú)向量分析法進(jìn)行功耗分析,在介紹一下使用SAIF文件的方法進(jìn)行功耗分析之前,我們先來(lái)介紹一下綜合不變物體和綜合變化物體的概念,下圖為一個(gè)電路的RTL設(shè)計(jì)和門(mén)級(jí)設(shè)計(jì):

根據(jù)定義,在綜合前和綜合后,設(shè)計(jì)中的寄存器數(shù)目和寄存器的結(jié)構(gòu)是不變的,輸入/輸出端口和層次邊界是不變的,設(shè)計(jì)中的黑盒子是不變的。這些不變的物體稱(chēng)為綜合不變物體(Synthesis Invariant Objects,有時(shí)候也叫綜合不變對(duì)象)。設(shè)計(jì)中大部分的組合電路生成與設(shè)計(jì)約束有很大的關(guān)系,不同的約束產(chǎn)生不同的組合電路。這些變化的物體稱(chēng)為綜合變化的物體(Synthesis Variant Objects)。由于SAIF文件中涉及這兩個(gè)概念,這里先進(jìn)行介紹。


介紹完這兩個(gè)概念之后,下面我們就來(lái)了解一下使用SAIF進(jìn)行功耗分析。SAIF文件當(dāng)做翻轉(zhuǎn)率輸入文件的方法有兩種方式,也就是說(shuō)利用SAIF進(jìn)行功耗分析有兩種方法——對(duì)RTL級(jí)的電路仿真后得到的SAIF文件(稱(chēng)為RTL backward SAIF) 以及  對(duì)門(mén)級(jí)網(wǎng)表的電路仿真后得到的文件(稱(chēng)為Gate backward SAIF)。下面逐個(gè)進(jìn)行具體介紹。


(3)SAIF--RTL BACK分析法



RTL backward SAIF文件是通過(guò)對(duì)RTL代碼進(jìn)行仿真得到的,當(dāng)設(shè)計(jì)很大的時(shí)候,門(mén)級(jí)仿真時(shí)間就會(huì)很長(zhǎng),這時(shí)候就可以使用這種方法進(jìn)行分析。使用這種方法進(jìn)行分析功耗的速度比較快,但是進(jìn)度不夠門(mén)級(jí)仿真SAIF文件的高。


①RTL forward SAIF文件


RTL forward SAIF文件是記錄RTL設(shè)計(jì)中綜合不變物體的開(kāi)關(guān)行為文件,可以簡(jiǎn)單地理解:RTL forward SAIF文件簡(jiǎn)要地記錄了綜合不變物的翻轉(zhuǎn)率。RTL backward SAIF文件的產(chǎn)生需要RTL forward SAIF文件,因此我們首先需要產(chǎn)生RTL forward  SAIF文件。產(chǎn)生RTL  forward  SAIF文件的流程如下:


RTL  forward  SAIF文件是由power compiler (包含在design compiler中)產(chǎn)生的,根據(jù)流程,我們知道,主要設(shè)置一些變量,然后讀入RTL設(shè)計(jì)(RTL.v設(shè)計(jì)),接著讀出SAIF文件就可以了。相應(yīng)的腳本如下所示:

set  power_preserve_rtl-hier_names  true

read_verilog   "sub.v top. v"

rtl2saif  -output  fwd_ rtl.saif


一個(gè)示例RTL  forward  SAIF文件里面的部分內(nèi)容如下所示:

(SAIFILE

(SAIFVERSION "2 .0")

(DIRECTION "forward")

(DESIGN)

(DATE "Wed May 12 18:31:19 2004

(VENDOR "Synopsys,Inc")

(PROGRAM NAME "rtl2saif")

(VERSION“1 .0")

(DIVIDER/)

(INSTANCE top

(PORT

(address\15\ address\15\)

(address\14\ address\14\)

(address\13\ address\13\)

(address\12\ address\12\)

(address\11\ address\11\)

(address\10\ address\10\)

······

我們可以看到,文件里面包含設(shè)計(jì)中一系列綜合不變的物體。在后續(xù)仿真中,仿真器只監(jiān)視這些物體的開(kāi)關(guān)行為。

②RTL backward SAIF文件的產(chǎn)生


下面是產(chǎn)生RTL backward SAIF文件的流程:

從上圖中,我們知道,產(chǎn)生RTL backward SAIF文件,需要在仿真器輸入testbench測(cè)試平臺(tái)文件、RTL.v設(shè)計(jì)、RTL forward SAIF文件,然后使用VCS產(chǎn)生RTL forward SAIF文件時(shí),需要在testbench調(diào)用PLI監(jiān)測(cè)節(jié)點(diǎn)的翻轉(zhuǎn)率。下面我們就來(lái)介紹一下這幾個(gè)部分。


·首先是PLI。使用VCS產(chǎn)生SAIF文件,需要用到程序設(shè)計(jì)語(yǔ)言接口(programming language interface,PLI)。通過(guò)PLI監(jiān)測(cè)節(jié)點(diǎn)的翻轉(zhuǎn),得到節(jié)點(diǎn)的翻轉(zhuǎn)率。主要需要下面的系統(tǒng)任務(wù):

$set_gate_level_monitoring   ( on|off|rtl_on);

$set_toggle_region   (obj);

$read_ rtl_ saif(rtl_saif_file_name,tb_pathname);

$read_ lib_ saif(lib_saif_file_name);

$toggle_start;

$toggle_stop;

$toggle_reset();

$toggle_report(file_name,type,unit);


· RTL.v就是設(shè)計(jì)源文件了,然后RTL forward SAIF文件在前面也講過(guò)了,這里就從略。


· 最后是testbench。testbench中調(diào)用RTL設(shè)計(jì)、調(diào)用一下上述的PLI系統(tǒng)函數(shù)、調(diào)用RTL forward SAIF文件等。一個(gè)簡(jiǎn)單的示例testbench文件如下所示:


module  testbench;

top instl (a, b, c,s);//例化頂層設(shè)計(jì)

initial  begin

$read_rtl_saif ("myrtl.saif")

$set_toggle_region  (u1);

$toggle_start;

#120  a=0;

#STEP  in_a=temp_in_a;

······

$toggle_stop;

$toggle_report("rtl.saif",1.0e-9,"top");

end

endmodule


上面的測(cè)試平臺(tái)中,用了系統(tǒng)任務(wù)程序$read_rtl_saif ("myrtl. saif"),該命令讀入綜合不變物體文件——RTL forward SAIF。因此,仿真時(shí),仿真器僅僅監(jiān)視這些綜合不變物體的開(kāi)關(guān)行為。向量中$set_toggle_region (u1)命令選擇要監(jiān)視的模塊。$toggle_start和$toggle_stop命令用于控制監(jiān)視的起始和終止時(shí)間。$toggle_report("rtl. saif",1. 0e-9,"top")命令輸出SAIF信息到指定的文件。

一起都準(zhǔn)備就緒了,下面就可以使用VCS運(yùn)行仿真:

vcs  -R   rtl. v  testbench. v

注意,這里我們進(jìn)行的是RTL設(shè)計(jì)文件的仿真,仿真完成后,就可以得到rtl.saif 文件,這個(gè)文件就是RTL backward SAIF文件。

③功耗的分析


對(duì)RTL代碼仿真后,所得到的RTL Backward SAIF文件包含了設(shè)計(jì)中綜合不變物體的開(kāi)關(guān)行為信息。進(jìn)行功耗分析時(shí),分析工具通過(guò)其內(nèi)部仿真器把綜合不變物體的翻轉(zhuǎn)率傳播下去,從而得到其他所有節(jié)點(diǎn)的翻轉(zhuǎn)率,進(jìn)行門(mén)級(jí)電路的功耗分析。得到了RTL backward SAIF文件之后,我們根據(jù)前面的功耗分析的流程(從輸入輸出關(guān)系看),就可以分析功耗了:


這里的開(kāi)關(guān)活動(dòng)文件就是RTL backward SAIF文件了。然后在power compiler中利用RTL backward SAIF文件進(jìn)行功耗分析的流程如下所示:


一個(gè)相應(yīng)的示例腳本如下所示:

set  target_library  my. db

set  link_library  "*  $target_library"

read_verilog   mynetlist.v

current_design top

link

read_ saif  -input  rtl.saif  -inst  testbench/top

report_power

利用RTL backward SAIF文件分析功耗的過(guò)程就是上面這個(gè)樣子了。上面的流程和腳本適用于前版圖(pre-layout)的設(shè)計(jì),沒(méi)有用到寄生參數(shù)文件。連線的RC參數(shù)使用工藝庫(kù)里的線負(fù)載模型。如果是后版圖(post-layout)的設(shè)計(jì),要盡量使用寄生參數(shù)文件,提高功耗分析的精確度。


從上面我們就知道,利用RTL backward SAIF文件分析功耗的流程就是:

power compiler 產(chǎn)生 RTL forward SAIF文件 ——》VCS仿真產(chǎn)生RTL  backward SAIF文件 ——》power compiler 進(jìn)行分析功耗。


(4)SAIF--GATE分析法



前面介紹了RTL backward SAIF文件分析功耗的方法和流程,下面介紹一下Gate backward SAIF文件分析功耗的方法和流程,這個(gè)與RTL backward SAIF文件的很類(lèi)似。


①library  forward  SAIF 文件(簡(jiǎn)稱(chēng)為 庫(kù)SAIF文件)


庫(kù)SAIF文件是包含SDPD(電路狀態(tài)路徑)信息的SAIF文件。Gate backward SAIF文件的生成需要庫(kù)SAIF文件,該文件可以通過(guò)power compiler生成,流程如下所示:

對(duì)應(yīng)該流程的一個(gè)示例腳本如下所示:

read_db  mylib.db

lib2saif  -output  mylib. saif  -lib_pathname   mylib.db


示例庫(kù)SAIF文件的部分內(nèi)容如下所示:

(SAIFILE

(SAIFVERSION "2.0" "lib")

(DIRECTION "forward")

(DESIGN)

(DATE "Mon May 10 15:40:19 2004"

(VENDOR "Synopsys,Inc")

(PROGRAM NAME "lib2saif")

(DIVIDER / )

(LIBRARY "ssc_core_typ"

(MODULE "and2al"

(PORT

(Y

(COND A RISE FALL (IOPATH B)

COND B RISE FALL(IOPATH A)

COND DEFAULT)

)

······

庫(kù)SAIF文件中包含了SDPD信息。有了庫(kù)SAIF文件,仿真時(shí),仿真器會(huì)根據(jù)庫(kù)中的SDPD信息,監(jiān)視節(jié)點(diǎn)的開(kāi)關(guān)行為。

②Gate Backward SAIF文件的生成


下面是產(chǎn)生gate backward SAIF文件的流程:


從上圖中我們可以看到,產(chǎn)生gate backward SAIF需要testbench測(cè)試平臺(tái)、門(mén)級(jí)網(wǎng)表、標(biāo)準(zhǔn)延時(shí)格式(standard delay format)文件SDF、庫(kù)SAIF文件。其中SDF文件反標(biāo)了門(mén)級(jí)網(wǎng)表中的RC延時(shí)參數(shù)等,可以更為準(zhǔn)確地得到線網(wǎng)的延時(shí)。


testbench的示例內(nèi)容如下所示:

module testbench;

top instl (a, b, c,s);

initial

$sdf_annotate("my.sdf",dut)

initial begin

$read_lib_saif ("mylib.saif");

$set_toggle_region (u1);

$toggle_start;

#120  a=0;

#STEP  in_ a=temp_in_a;

······

$toggle_stop;

$toggle-report("gate.saif",1.0e-9,"top")

end

endmodule//testbench

testbench測(cè)試平臺(tái)主要是調(diào)用門(mén)級(jí)網(wǎng)表、SDF文件、庫(kù)SAIF文件。testbench中,用$sdf_annotate("my. sdf", dut)命令作SDF標(biāo)記,以保證時(shí)序的正確性,從而得到正確的翻轉(zhuǎn)數(shù)目。$ read_lib_saif ("mylib. saif")命令讀取庫(kù)SAIF文件中的SDPD信息。仿真器只監(jiān)視在SAIF文件里列出的SDPD開(kāi)關(guān)行為。$ set_toggle_region (u1)命令選擇要監(jiān)視的模塊。$ toggle_start和$toggle_stop命令控制開(kāi)始和結(jié)束時(shí)間。$ toggle_report("gate. saif",1. 0e-9, "top")命令把SAIF輸出到指定的文件。


萬(wàn)事俱備,只欠仿真,接下來(lái)就是使用VCS進(jìn)行仿真了:

vcs   -R   top.v   testbench. v

注意,這里的仿真是對(duì)門(mén)級(jí)網(wǎng)表的仿真,也就是說(shuō)這里的top.v是門(mén)級(jí)網(wǎng)表。產(chǎn)生的示例gate forward SAIF文件的部分內(nèi)容如下所示:

(SAIFILE

(SAIFVERSION "2 .0")

(DIRECTION  "backward")

(DESIGN)

(DATE  "Mon May 17 02:33:48 2006")

(VENDOR "Synopsys,Inc")

(PROGRAM_NAME  "VCS-Scirocco-MX Power Compiler")

(VERSION "1 .0")

(DIVIDER / )

(TIMESCALE  1  ns)

(DURATION  10000.00)

(INSTANCE tb

(INSTANCE top

(NET

(z\3\

(T0 6488) (T1 3493) (TX 18)

(TC 26) (IG 0)

)

······

(z\32\

(T0 6488) (T1 3493) (TX 18)

(TC 26)(IG 0)

)

······

)

(INSTANCE U3

(PORT

(Y

(TO 4989) (T1 5005) (TX 6)

(COND((D1 * !DO)|(! D1*D0)) (RISE)

(IOPATH S (TC 22 )(IG 0)

)

COND((D1*!DO)}(!D1,DO))

( IOPATH  S  (TC  21)(IG 0) (FALL)

)

COND DEFAULT (TC 0)(IG 0)

)

······

Gate Backward SAIF文件是通過(guò)對(duì)門(mén)級(jí)網(wǎng)表進(jìn)行仿真所得到的。如果設(shè)計(jì)很大,仿真需要的時(shí)間很長(zhǎng)。好處是精確度很高。VCS所產(chǎn)生的Gate Backward SAIF文件中包含了一些或所有連線的開(kāi)關(guān)行為和單元的開(kāi)關(guān)行為。這些開(kāi)關(guān)行為分別以上升和下降表示,與狀態(tài)和路徑有關(guān)。用這個(gè)信息可以進(jìn)行精確的功耗分析。

③功耗分析


有了門(mén)級(jí)網(wǎng)表、gate backward SAIF文件和SDF文件,就可以在power  compiler中進(jìn)行功耗分析了,分析功耗的流程圖如下所示:



對(duì)應(yīng)的一個(gè)示例腳本文件如下所示:

set   target_library  mylib.db

set  link_library " * $target_library"

read_verilog  mynetlist.v

current_design  top

link

read_read_parasitics  top.spef

read_ saif -input  mygate. saif  -inst  tb/top

report_power

上面的流程和腳本適用于后版圖(post-layout)的設(shè)計(jì),spef文件在做完版圖后產(chǎn)生。使用寄生參數(shù)文件,提高了功耗分析的精確度。如果是前版圖( pre-layout)的設(shè)計(jì),沒(méi)有寄生參數(shù)文件,連線的RC參數(shù)使用工藝庫(kù)里的線負(fù)載模型。

最后總結(jié)一下,這里分析功耗流程為:


power compiler 產(chǎn)生庫(kù)SAIF文件——》VCS產(chǎn)生gate backward SAIF文件——》power compiler進(jìn)行功耗分析。


(5)VCD轉(zhuǎn)SAIF分析法



介紹了使用SAIF文件分析功耗的方法,這個(gè)方法都是通過(guò)VCS仿真得到相應(yīng)的SAIF文件,然后進(jìn)行功耗分析。下面我們介紹使用VCD文件轉(zhuǎn)換成SAIF文件的方法,然后進(jìn)行功耗分析。


①VCD文件的產(chǎn)生


首先,我們?cè)谶M(jìn)行仿真的時(shí)候,需要通過(guò)在testbench中加入相關(guān)的系統(tǒng)函數(shù),產(chǎn)生相應(yīng)的VCD文件(和SDF文件),流程示意圖如下所示:

相應(yīng)的一個(gè)示例testbench如下所示:

module testbench;

······

initial

$sdf_annotate("my.sdf",dut)

initial begin

$dumpfile("vcd.dump");

$dumpvars;

······

endmodule

然后使用下面命令進(jìn)行仿真:

vcs  -R dut.v  testbench.v  +delay_mode_path

完成仿真之后,就可以得到VCD文件了。

②VCD文件轉(zhuǎn)換成SAIF文件


仿真時(shí)產(chǎn)生的VCD文件也包含了設(shè)計(jì)中節(jié)點(diǎn)和連線的開(kāi)關(guān)行為。在Power Compiler中,可以使用程序vcd2saif可以把VCD文件轉(zhuǎn)化為SAIF文件,如下圖所示:



vcd2saif是在UNIX命令行使用的一個(gè)程序。vcd2saif程序也可以把VPD文件(二進(jìn)制格式的VCD文件)轉(zhuǎn)化為SAIF格式的文件。如果設(shè)計(jì)很大,仿真的時(shí)間長(zhǎng),vcd2saif程序可以用管道傳遞的方式把VCD轉(zhuǎn)化為SAIF文件。這時(shí)vcd文件不存放在文件里,vcd通過(guò)先入先出(First-In  First-()nt,簡(jiǎn)稱(chēng)FIFO把數(shù)據(jù)傳給vcd2saif程序,然后產(chǎn)生SAIF文件。轉(zhuǎn)換的SAIF文件里沒(méi)有SDPD的信息。如下圖所示:



有了SAIF文件之后,我們就可以像前面那樣使用SAIF文件進(jìn)行功耗分析了,至于是版圖前的功耗分析還是版圖后的功耗分析,取決于功耗分析時(shí)有沒(méi)有與版圖中有關(guān)的信息,比如是SPEF文件。因此流程為:

VCS產(chǎn)生VCD文件——》power compiler 將VCD文件轉(zhuǎn)換為SAIF文件——》power compiler 進(jìn)行分析功耗


最后,我們來(lái)說(shuō)一下這里使用vcd2saif程序的好處,主要有下面三點(diǎn):

1.  VCD產(chǎn)生的速度快;

2.  VCD是IEEE的標(biāo)準(zhǔn)并且適用于進(jìn)行后仿真;

3.  轉(zhuǎn)換的過(guò)程快。

我們已經(jīng)介紹四種為設(shè)計(jì)產(chǎn)生開(kāi)關(guān)行為的方法,分別是直接設(shè)置翻轉(zhuǎn)率、RTL backward SAIF文件、gate back SAIF文件和VCD轉(zhuǎn)SAIF文件;這些方法可以混合使用,其優(yōu)先次序如下所示:

用read_ saif命令標(biāo)記的開(kāi)關(guān)行為優(yōu)先級(jí)最高;用set_switching_activity命令設(shè)置的開(kāi)關(guān)行為優(yōu)先級(jí)次之;優(yōu)先級(jí)最低的是用默認(rèn)的變量power_default_toggle_rate指定的翻轉(zhuǎn)率。


開(kāi)關(guān)行為可以被清除,使用“reset_switching_activity”命令可以清除所有被標(biāo)記的翻轉(zhuǎn)率和通過(guò)傳輸?shù)玫降姆D(zhuǎn)率。用report_saif可以顯示讀入saif文件后設(shè)計(jì)中的開(kāi)關(guān)行為信息。一個(gè)完整的SAIF文件,"user annotated”應(yīng)該是100%。如果SAIF不完整,那么默認(rèn)的翻轉(zhuǎn)率將附加到輸入端和黑盒子的輸出端。翻轉(zhuǎn)率通過(guò)零延遲仿真?zhèn)鬏斚氯ィ@樣就可以計(jì)算出設(shè)計(jì)的功耗。


使用report_saif命令的一個(gè)例子如下:

與開(kāi)關(guān)行為有關(guān)的命令有:

merge_saif #合并SAIF文件

read_sai f #讀backward SAIF文件

report_saif #報(bào)告開(kāi)關(guān)行為的信息

rtl2saif #產(chǎn)生RTL forward SAIF文件

write_ saif #寫(xiě)出一個(gè)backward SAIF文件

lib2saif #產(chǎn)生library forward SAIF文件

propagate_switching_activity #傳輸功耗清除

reset_switching_activity #清除開(kāi)關(guān)行為和/或翻轉(zhuǎn)率

set_switching_activity #在指定的物體上設(shè)置開(kāi)關(guān)行為



(6)功耗分析報(bào)告



我們是通過(guò)分析功耗報(bào)告(report_power命令產(chǎn)生)來(lái)查看設(shè)計(jì)功耗的,一個(gè)功耗報(bào)告的示例部分內(nèi)容如下所示:


Cell  Internal  Power=883.0439 mW(66%)

Net  Switching Power=453.0173 mW(34%)

Total  Dynamic  Power=1 .3361 W(100%)

Cell Leakage Power = 391.5133 nW


其中第一項(xiàng)為內(nèi)部短路功耗,第二項(xiàng)為開(kāi)關(guān)功耗,合起來(lái)為動(dòng)態(tài)功耗;最后一項(xiàng)為靜態(tài)功耗,也就是泄漏功耗。如果要報(bào)告設(shè)計(jì)中每個(gè)模塊和單元的功耗,在report_power命令后加選項(xiàng) -hier,例如:  report_power  -hier,產(chǎn)生的報(bào)告如下所示:

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉