天天看點

數字電路設計之RTL編碼指導原則

一、performance:要滿足所需邏輯功能以及時序要求。這是最重要的一項,要是連這個都不滿足,那麼做這個項目就沒有了意義。不過在滿足這個performan的過程中會遇到一些問題,比如下面的都是在寫HDL的功能上需要注意的地方。如果要有較高的frequency的話,可以考慮并行處理,流水線之類的。

阻塞/非阻塞:“=”用于組合邏輯;“<=”用于時序邏輯。

不完全敏感清單:always@(*)是利用了所有的信号,這樣做不容易遺漏信号。

RTL的延時:延遲是不可以綜合的,可以考慮加buffer,buf可以有延時效果。使用#delay是無效的。

鎖存器:不完整的case和if語句會導緻鎖存器,一般不要有鎖存器,會導緻時序的混亂。

代碼的循環利用:盡量寫成可循環利用的子產品,可以提高代碼使用率,減少面積和功耗。

狀态機:Moore機由目前狀态決定輸出,通常用one-hot代碼,輸出譯碼邏輯少。Mealy機由目前狀态和目前輸入決定下一狀态,一般使用二進制編碼!但是比較快!

避免觸發器混合用:如果正負時鐘沿用于捕捉或提供外部DDR資料,利用I/ODDR。

二、resource:就是實作我們的功能我們希望盡量減少資源的使用,提高資源的使用率。我們希望用最少的資源做最多的事,這為我們的設計降低了成本。我們可以在綜合設定選項中關閉邏輯複制(logic replication)綜合選項。我們要盡量減少寄存器的使用,一些工程師跟我說寄存器往往是最寶貴的資源,盡量節約一些。是以程式設計的時候盡量用wire,不要用reg的資源。不是很必要的話,盡量減少流水線級數,多使用SRLs,DSP slices和block RAMs等專有硬體資源代替。

三、power:如今移動裝置越來越輕量化,對于功耗提出了更高的要求,除了電池的機關存儲量越來越大之外,還可以使得硬體的低功耗運作狀态,具體技術可以看我之前的部落格。那些方法都是從很多論文裡看到的,理論簡單,都是效果很好。還推薦大家看一本書《power essential》,這本書從實體模電級别,COMS到數字電路的RTL再到架構都有進行低功耗處理,應該是目前為數不多的幾本低功耗書籍,你可以看看亞馬孫的價格都要上千的。(不過可以向我要電子版!!!)隻有英文版,寫得真是不錯!

繼續閱讀