1
賽題背景分析
低功耗設計是數字系統非常重要的考慮因素。為了支持低功耗設計,首先要對功耗進行計算。功耗可分為靜態功耗(漏電流引起)和動態功耗(門翻轉引起)。在本賽題中,我們主要考慮動態功耗的計算方法。 動態功耗的計算公式如下: ?其中,VDD為電壓,C為等效電容,Tr為翻轉率,即單位時間內邏輯門從0→1或從1→0的翻轉次數。我們可以把電壓和等效電容近似視為常數,對于不同的電路負載,統計其Tr,就可以計算動態功耗。 這道賽題的目的,就是讓大家通過VCD文件來統計一個電路負載的翻轉率。 如何得到翻轉率呢?我們回顧一下,在電路設計的時候,先設計其RTL(如verilog)代碼,并編寫testbench給出激勵進行測試,如下所示: ?用常見的仿真工具跑如上RTL代碼和testbench,可得到如下的輸出結果波形: 信號變化波形圖(芯華章科技股份有限公司-Fusion Debug 提供) 仿真工具可以把上述波形輸出VCD文件,類似: ?好,現在重點來了。給定VCD文件(其實就是波形的文本表示),我們就可以統計翻轉率,進而利用上述的功耗公式來計算動態功耗,它們之間的邏輯關系如下圖: ?在本賽題中,我們只關注如何從VCD文件(對應波形)到翻轉率的解析。2
賽題要點解析
本賽題主要就是進行VCD文件的解析,然后根據題目的要求,得到不同的統計結果(如翻轉次數tc,信號邏輯值為1的時間t1, 信號邏輯值為0的時間t0,信號邏輯值為x的時間tx,以及信號邏輯值為1的概率又稱靜態概率sp)、某個時間窗口的統計結果、不同層次信號的統計結果。 因此,首先需要定義一些數據結構表示信號時間序列,可以用數組或者vector等,將VCD文件讀取、解析為這些信號時間序列變量,再針對這些變量進行統計分析,得到所需的輸出。如下圖所示: ?2.1 VCD文件解析
VCD文件解析的思路如下:-
首先掃描文件頭,建立每個信號對應的數組或者vector。
-
將VCD文件看作是不同時間段的信號改變,對于一個時間段,掃描各個變量的值的變化,記錄其變化,就構成了時間序列。
?這樣,掃描完一個文件之后,各個變量隨時間變化的序列就存下來了。
2.2統計輸出
有了信號的時間序列值,可以根據題目要求打印統計結果。主要考慮幾方面:-
翻轉率等參數的計算,需要統計1和0的時間。
-
一個時間窗口的統計值,需要截取一個時間窗口進行計算。
-
層次化的信號,需要從文件中讀取信號間的層次關系進行計算。
2.3多核加速
在題目要求中提到了多核加速,假如你的電腦有多個核,就可以用多線程方式加速。多核加速的本質是將任務劃分到多個線程,讓多個線程在多個核上同時運行從而提高計算速度。 加速方法有兩種,一種是將文件讀入到內存,然后將不同的行分配到不同的核/線程來處理,我們稱之為橫向劃分;另外一種是將文件切分開分到不同的核,每個核處理文件的不同段,我們稱之為縱向劃分。 ?可以采用pthread或者openMP進行并行編程,需要注意線程間的同步和鎖機制。2.4文件處理
當VCD文件很大時,為了減少一次性讀入占用太多內存,可以每次讀入一部分文件存在內存中,如用getline等函數每次讀一行等。3
建議解題步驟
1
對VCD的基本語法先熟悉一下,如信號名字的對應關系,每一行表示什么含義等。
2
實現VCD文件到信號時間序列變量的轉換。這是一個文本逐行解析的過程。
3
寫統計分析的模塊,每個模塊對應不同的統計需求,相對獨立。
4
學習pthread或openMP多線程編程,學習如何創建線程、線程間如何同步、加鎖等。
5
用pthread或openMP提高你的程序的效率,這里需要并行劃分程序。
6
嘗試一下不同的文件讀取速度和占用內存情況,選擇一個占用內存比較小的方式。
4
其它注意事項
大家在解題時還需要注意以下幾點: 1)不要輕易放棄,題目本身難度不大,已經提煉成了算法題,前期的知識準備要花點時間; 2)一定要積極參加培訓,很多知識其實一點就透;在沒有相關背景積累的情況下學習會有一定的挑戰性,但也可以補充很多知識; 3)要遵循循序漸進、從易到難的解題思路,切不可貪大求全讓自己陷入到重重迷霧之中; 最后,預祝各位同學發揮出自己的水平,取得良好的成績。 審核編輯 :李倩-
集成電路
+關注
關注
5387文章
11536瀏覽量
361676 -
電壓
+關注
關注
45文章
5601瀏覽量
115715 -
等效電容
+關注
關注
0文章
16瀏覽量
7927
原文標題:芯華章賽題解析:數字集成電路動態功耗優化策略分析與評估
文章出處:【微信號:X-EPIC,微信公眾號:芯華章科技】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論