在RTL編碼中考慮延時
01
看下面一段代碼,第四個else if 分支中的數據信號DATA_is_late_arriving延時比較高,要怎么處理,將電路的性能提高?
一般最高優先級給最遲到的關鍵信號,因此要將DATA_is_late_arriving這個信號單獨拿出來分析,代碼如下:
再來看下面一段代碼以及其電路圖,假設A信號到來比較晚,如何修改能夠提高電路性能?
核心思想還是將延遲高的信號往后面優先級更高的地方放 ,只需做小小修改即可,代碼如下:
在RTL編碼中考慮面積
02
隨著芯片工藝的進步和生產成本的降低,其實面積已經顯得沒有時序問題那么重要。一般綜合過程中可以對面積進行優化,但是在RTL設計的時候還是需要盡量減小面積的開銷,這樣可以達到事半功倍的效果。
例如RTL代碼中的一個“+”可能對應著一個64位的加法器,所以條件語句中的比較運算,我們要判斷其必要性,是否能用更簡單的運算代替。
比如判斷A是否小于32(if(A<32)),可以改成判斷A的第五位是否為0(if(A[5]==1'b0)),這兩種表達形式是等價的,但是后者的判斷條件更節省面積,相當于用一個1bit的邏輯門代替一個6bit的比較器,如果我們遇到定值的比較都可以這么操作。
如果必須使用復雜的運算符,則應考慮是否可以資源共享,盡管電路邏輯綜合工具也會在綜合的過程中采用資源共享的方法進行優化,但是,綜合器的策略是有限的,因此,在編寫RTL的時候,應該盡量考慮共享,而不是把這項工作完全留給綜合工具。
如上面的代碼所示,右邊是修改之后的代碼,這樣可以減少兩個不必要的加法器,實際的設計中資源共享可能不會像這樣明顯,因此平時應該按照這樣的思路多多練習。
還有一種情況就是關于多比特位的信號問題, 多比特位操作意味著成倍使用資源 ,在使用多比特位的信號時,看看這個信號是否所有比特位都需要參與操作,如果不是,則可以只對需要的部分比特進行操作。例如訪問RAM的地址有8比特,而寫入操作時從0開始,每隔32個地址寫入一個值,地址的產生可以有兩種寫法。顯然右邊這種寫法操作的比特位會比左邊的代碼少。
在RTL編碼中考慮功耗
03
一個電路中的功耗影響因素主要以下4個因素: 該點電路的翻轉次數、電路的工作頻率、該點的電容還有電壓值 。
但是負載電容、工作電壓和工作頻率這些都是RTL設計無法改變的因素,因此在RTL級設計主要考慮盡量降低電路的翻轉頻率。
主要措施包括如下:
①門控時鐘;
②增加使能信號,使得部分電路只有在需要工作時才工作;
(門控時鐘與增加使能的區別是:門控時鐘是關掉時鐘,而使能關閉的是電路的功能,但是時鐘仍然在翻轉,顯然門控時鐘更好)
③對芯片各個模塊進行控制,在需要工作時才工作;
④除了有用信號和時鐘的翻轉會消耗功耗,組合邏輯產生的毛刺也會大量消耗功耗。但是毛刺在設計中無法避免,因此,只有盡量減少毛刺在電路中的傳播,才可以減少功耗。即在設計中,盡量把產生毛刺的電路放在傳播路徑的最后。另外可以使用一些減少毛刺的技術;
⑤對于有限狀態機,可以通過低功耗編碼來減少電路的翻轉,比如將二進制編碼改為獨熱碼、格雷碼等。
在RTL編碼中考慮布線問題
04
如果可以在RTL編碼階段考慮代碼,可能對布線產生的影響就可以避免最后出現無法布通的情況。
熱點是指設計的功能需要在一個面積內占用大量的布線資源。熱點產生原因:RTL編碼時使用了特定的結構,如很大的mux。
這種結構產生的熱點,在綜合的時候,導致的延遲是看不出來的,只有到了布線階段才能給看到它的負面影響。因此,我們在RTL階段應該重視這種電路,及早發現可能在布線階段產生的問題。
如果設計的功能中確實需要采用很大的mux,可以通過其他方式改變他的結構。其基本的思想就是將一個大的mux分解為多級較小的mux。
-
RAM
+關注
關注
8文章
1369瀏覽量
114870 -
比較器
+關注
關注
14文章
1658瀏覽量
107354 -
加法器
+關注
關注
6文章
183瀏覽量
30179 -
RTL
+關注
關注
1文章
385瀏覽量
59897 -
門控時鐘
+關注
關注
0文章
27瀏覽量
8962
發布評論請先 登錄
相關推薦
評論