FPGA可綜合風格程式碼
#1:當為時序邏輯建模,使用“非阻塞賦值”。
#2:當為鎖存器(latch)建模,使用“非阻塞賦值”。
#3:當用always塊為組合邏輯建模,使用“阻塞賦值”
#4:當在同一個always塊裡面既為組合邏輯又為時序邏輯建模,使用“非阻塞賦值”。
#5:不要在同一個always塊裡面混合使用“阻塞賦值”和“非阻塞賦值”。
#6:不要在兩個或兩個以上always塊裡面對同一個變數進行賦值。
#7:使用$strobe以顯示已被“非阻塞賦值”的值。
#8:不要使用#0延遲的賦值。
#9:在VERILOG語法中, if...else if ... else 語句是有優先順序的,一般說來第一個IF的優先順序最高,最後一個ELSE的優先順序最低。如果描述一個編碼器,在XILINX的XST綜合引數就有一個關於優先順序編碼器硬體原語句的選項Priority Encoder Extraction. 而CASE語句是"平行"的結構,所有的CASE的條件和執行都沒有“優先順序”。而建立優先順序結構會消耗大量的組合邏輯,所以如果能夠使用CASE語句的地方,儘量使用CASE替換IF...ELSE結構。
#10:XILINX的底層可程式設計硬體資源叫SLICE,由2個FF和2個LUT組成。 FF觸發器 LUT查詢表
ALTERA的底層可程式設計硬體資源叫LE, 由1個FF和1個LUT組成。
#11:慎用鎖存器(latch),同步時序設計要儘量避免使用鎖存器,綜合出非目的性latch的主要原因在於不完全的條件判斷句。另外一種情況是設計中有組合邏輯的反饋環路(combinatorial feedback loops)。
#12:狀態機的一般設計原則,Biary, gray-code 編碼使用最少的觸發器,較多的組合邏輯。而one-hot編碼反之。所以CPLD多使用GRAY-CODE, 而FPGA多使用ONE-HOT編碼。另一方面,小型設計使用GRAY-CODE和BINARY編碼更有效,而大型狀態機使用ONE-HOT更有效。
#13:業界主流CPLD產品是lattice的LC4000系列和ALTERA的MAX3000系列。
#14:復位使初始狀態可預測,防止出現禁用狀態。FPGA 和CPLD 的復位訊號採用非同步低電平有效訊號,連線到其全域性復位輸入端,使用專用路徑通道,復位訊號必須連線到FPGA 和CPLD 的全域性復位管腳。。
#15:不要用時鐘或復位訊號作資料或使能訊號,也不能用資料訊號作為時鐘或復位訊號,否則HDL 綜合時會出現時序驗證問題。訊號穿過時鐘的兩半個週期時,要在前後分別取樣;防止出現半穩定狀態。
#16:fpga設計中 不要使用門時鐘(don't use gated clock)。時鐘訊號必須連線到全域性時鐘管腳上。
#17:不要使用內部三態訊號,否則增加功耗。
#18:只使用同步設計,不要使用延時單元。
#19:避免使用負延觸發的雙穩態多諧振盪器(flip flop)。
#20:不要使用訊號和變數的預設值(或初始值),用復位脈衝初始化
訊號和變數。
#21:不要在程式碼中使用buffer 型別的埠讀取輸出資料;要使用out 型別,再增加另外變數或訊號,以獲取輸出值。
這是因為buffer 型別的埠不能連線到其他型別的埠上,因此buffer 型別就會在整個設計的埠中傳播下去。
#22:對變數要先讀後寫;如果先寫後讀,就會產生長的組合邏輯和鎖存器(或暫存器)。這是因為變數值是立即獲取的。
#2:當為鎖存器(latch)建模,使用“非阻塞賦值”。
#3:當用always塊為組合邏輯建模,使用“阻塞賦值”
#4:當在同一個always塊裡面既為組合邏輯又為時序邏輯建模,使用“非阻塞賦值”。
#5:不要在同一個always塊裡面混合使用“阻塞賦值”和“非阻塞賦值”。
#6:不要在兩個或兩個以上always塊裡面對同一個變數進行賦值。
#7:使用$strobe以顯示已被“非阻塞賦值”的值。
#8:不要使用#0延遲的賦值。
#9:在VERILOG語法中, if...else if ... else 語句是有優先順序的,一般說來第一個IF的優先順序最高,最後一個ELSE的優先順序最低。如果描述一個編碼器,在XILINX的XST綜合引數就有一個關於優先順序編碼器硬體原語句的選項Priority Encoder Extraction. 而CASE語句是"平行"的結構,所有的CASE的條件和執行都沒有“優先順序”。而建立優先順序結構會消耗大量的組合邏輯,所以如果能夠使用CASE語句的地方,儘量使用CASE替換IF...ELSE結構。
#10:XILINX的底層可程式設計硬體資源叫SLICE,由2個FF和2個LUT組成。 FF觸發器 LUT查詢表
ALTERA的底層可程式設計硬體資源叫LE, 由1個FF和1個LUT組成。
#11:慎用鎖存器(latch),同步時序設計要儘量避免使用鎖存器,綜合出非目的性latch的主要原因在於不完全的條件判斷句。另外一種情況是設計中有組合邏輯的反饋環路(combinatorial feedback loops)。
#12:狀態機的一般設計原則,Biary, gray-code 編碼使用最少的觸發器,較多的組合邏輯。而one-hot編碼反之。所以CPLD多使用GRAY-CODE, 而FPGA多使用ONE-HOT編碼。另一方面,小型設計使用GRAY-CODE和BINARY編碼更有效,而大型狀態機使用ONE-HOT更有效。
#13:業界主流CPLD產品是lattice的LC4000系列和ALTERA的MAX3000系列。
#14:復位使初始狀態可預測,防止出現禁用狀態。FPGA 和CPLD 的復位訊號採用非同步低電平有效訊號,連線到其全域性復位輸入端,使用專用路徑通道,復位訊號必須連線到FPGA 和CPLD 的全域性復位管腳。。
#15:不要用時鐘或復位訊號作資料或使能訊號,也不能用資料訊號作為時鐘或復位訊號,否則HDL 綜合時會出現時序驗證問題。訊號穿過時鐘的兩半個週期時,要在前後分別取樣;防止出現半穩定狀態。
#16:fpga設計中 不要使用門時鐘(don't use gated clock)。時鐘訊號必須連線到全域性時鐘管腳上。
#17:不要使用內部三態訊號,否則增加功耗。
#18:只使用同步設計,不要使用延時單元。
#19:避免使用負延觸發的雙穩態多諧振盪器(flip flop)。
#20:不要使用訊號和變數的預設值(或初始值),用復位脈衝初始化
訊號和變數。
#21:不要在程式碼中使用buffer 型別的埠讀取輸出資料;要使用out 型別,再增加另外變數或訊號,以獲取輸出值。
這是因為buffer 型別的埠不能連線到其他型別的埠上,因此buffer 型別就會在整個設計的埠中傳播下去。
#22:對變數要先讀後寫;如果先寫後讀,就會產生長的組合邏輯和鎖存器(或暫存器)。這是因為變數值是立即獲取的。
#23:在組合邏輯程式中,其敏感向量標中要包含所有要讀取得訊號;這是為了防止出現不必要的鎖存器。
轉載自http://blog.chinaunix.net/uid-21227800-id-65930.html,以供學習。
相關文章
- 如何選擇適合你的程式碼風格?
- C 語言程式碼風格之 Linux 核心程式碼風格Linux
- .editorconfig 程式碼風格配置
- Google JavaScript 程式碼風格指南GoJavaScript
- Vue 前端程式碼風格指南Vue前端
- Typora 程式碼塊Mac風格化Mac
- 前端程式碼規範 — JavaScript 風格指南前端JavaScript
- Laravel 保持統一程式碼風格Laravel
- java程式設計規約----程式碼風格(一)Java程式設計
- PEP 8 程式程式碼的編寫風格指南
- RecyclerView綜合案例庫和系列部落格View
- 編寫可維護的JavaScript-程式設計風格JavaScript程式設計
- PHPStorm 程式碼格式化風格調整PHPORM
- 《碼處高效:Java開發手冊》之程式碼風格Java
- 幽默:把Java寫成Python風格的程式碼JavaPython
- 程式碼風格統一:commitlint & eslint & standard-versionMITEsLint
- 求求你規範下你的程式碼風格
- 統一規範化程式碼的命名風格
- Go 語言程式碼風格規範-指南篇Go
- Go 語言程式碼風格規範-概述篇Go
- php-cs-fixer,自動修正程式碼風格PHP
- Vue專案使用eslint + prettier規範程式碼風格VueEsLint
- 擴充套件01:程式碼風格/python規範style套件Python
- JavaScript編碼風格指南JavaScript
- JavaScript 編碼風格指南JavaScript
- FPGA學習中的程式碼閱讀FPGA
- 編碼風格:Mvc模式下SSM環境,程式碼分層管理MVC模式SSM
- Aupera:FPGA讓視訊編碼與AI結合水到渠成FPGAAI
- 使用ESLint+Prettier來統一前端程式碼風格EsLint前端
- aardio教程五) 寫Python風格的aardio程式碼(字串篇)Python字串
- PyCharm關於修改程式碼的風格及樣式PyCharm
- Python 編碼風格參考Python
- 談談JavaScript編碼風格JavaScript
- PHP編碼風格規範PHP
- 從基礎到實現:整合學習綜合教程(附Python程式碼)Python
- Flutter第7天–字型圖示+綜合小案例+Android程式碼互動FlutterAndroid
- Flutter第7天--字型圖示+綜合小案例+Android程式碼互動FlutterAndroid
- FMEA和HAZOP在煤氣櫃風險分析綜合應用