做芯片第一應(yīng)該關(guān)注的是芯片的PPA(Performance, Power, Area),本篇淺顯的部分討論,第二個 P,Power功耗,在RTL設(shè)計中如何做到低功耗設(shè)計,對于移動設(shè)備續(xù)航的十分重要,不要讓你的芯片徒增功耗。
數(shù)據(jù)通路寄存器打拍
數(shù)據(jù)寄存器打拍帶上vld,不加復(fù)位邏輯,這樣會省去寄存器復(fù)位電路的布線面積,而且工具還會給寄存器自動插時鐘門控,還達(dá)到了降低功耗的效果。至于寄存器不復(fù)位,一些剛學(xué)習(xí)的朋友可能會感覺有些刷新認(rèn)知,寄存器怎么能不復(fù)位,不復(fù)位不就是x態(tài)了,系統(tǒng)不就紊亂了。是的,寄存器不復(fù)位是會產(chǎn)生x態(tài),不過這里說的是數(shù)據(jù)通路,控制通路的所有信號都是必須帶復(fù)位邏輯。數(shù)據(jù)通路因為這里是帶著vld進(jìn)行打拍,只需要保證在你使用的時候,它不是x態(tài)就行了??刂仆返男盘?a href="http://wenjunhu.com/v/tag/8966/" target="_blank">控制系統(tǒng)的運(yùn)行,出現(xiàn)x態(tài),必然掛死。而數(shù)據(jù)通路只要保證在vld的有效,也就是我踩這個數(shù)據(jù)的時候它是正確的就行了,不管它是x態(tài)還是其他無效的數(shù)據(jù)。當(dāng)然如果數(shù)據(jù)有作為判斷邏輯用于控制,那這個數(shù)據(jù)一定要進(jìn)行復(fù)位。代碼示例,時序邏輯可以省略else,寄存器默認(rèn)保持,組合邏輯必須寫else。vld是一個脈沖將這個數(shù)據(jù)踹一腳直接踹進(jìn)這個寄存器存儲,在下一腳來臨之前,這個寄存器都將保持這個數(shù)據(jù)。
always @(posedge clk)begin if(data_vld) dout[63:0] 《= din;end
手動插入時鐘門控
手動插入時鐘門控,根據(jù)控制場景的不同自動關(guān)掉部分模塊的時鐘,留有軟件的控制通道,由軟件關(guān)閉。可以有效的減少動態(tài)功耗。舉例,比如一塊運(yùn)算電路配置全開的時候需要四個相同的計算模塊同時工作,最少的情況只需要一個模塊工作,這時根據(jù)配置的不同可以將其他三個模塊的時鐘關(guān)掉,減少動態(tài)功耗。
整個Top模塊掉電
整個二級Top模塊掉電休眠,掉電后將所有需要保存的數(shù)據(jù)寫到memory中,等下一次模塊喚醒上電啟動時再重新寫回到硬件中。ASIC中的RAM可以自己生成是否需要掉電保存數(shù)據(jù)的功能,不需要的專門存儲的RAM也一起掉電。需要使用和保存的數(shù)據(jù)寄存器較少,可以從模塊伸出接口到頂層,讓軟件讀走,等下一次模塊喚醒上電啟動時再通過軟件配置寄存器配置回模塊。這就是低功耗模式。
靜態(tài)功耗和動態(tài)功耗
靜態(tài)功耗只要電路供電就有,除非掉電休眠,否則無法避免,動態(tài)功耗只要存在高低電平切換就有。在rtl設(shè)計時,良好的代碼風(fēng)格也可以降低動態(tài)功耗,乘法器、加法器等運(yùn)算單元,通過減少組合邏輯的翻轉(zhuǎn),從而達(dá)到降低動態(tài)功耗的效果。輸入到輸出,組合邏輯的a、b端值不變,沒有電平翻轉(zhuǎn),所以不會有動態(tài)功耗,只存在靜態(tài)功耗。在設(shè)計中考慮組合邏輯無效翻轉(zhuǎn)問題,某段時間這部分?jǐn)?shù)據(jù)無效,通過使能信號選擇這部分邏輯保持,得到避免動態(tài)功耗的效果。
責(zé)任編輯:haq
-
芯片
+關(guān)注
關(guān)注
456文章
50889瀏覽量
424226 -
Verilog
+關(guān)注
關(guān)注
28文章
1351瀏覽量
110134 -
低功耗
+關(guān)注
關(guān)注
10文章
2407瀏覽量
103754
原文標(biāo)題:Verilog如何實現(xiàn)低功耗設(shè)計?
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論