寫代碼的時候總是因為粗心而出錯,怎樣才可以養成好的寫verilog代碼的習慣?


一般來說沒有好的辦法,熟練而已

養成好的代碼風格,會好一點

充分利用編寫工具的輔助功能,會好一點

多用複製粘貼,不容易將較長的名字敲錯


養成好的代碼規範


好的 coding style + 好的代碼編輯工具


1. 合適的編輯工具

假設使用Vim編輯器;

如果是verilog,那麼syntastic插件可以支持用verilator/iverilog做靜態語法檢查,一邊寫一邊可以實時顯示一些基本的語法錯誤。(但暫時不支持systemverilog檢查)。

寫完module文件後,做lint檢查,從簡單的位寬不匹配或者逗號分號寫錯了到一些規則不符都可能給你爆出來,遇到多了解決多了,那麼一可以在寫的時候就比較有意識的注意,二是可以快速定位問題。

自動補全,推薦youcompeleteme,少打錯字母。

可以自動生成常見的代碼塊框架,比如說always_ff @(posedge clk or negedge rst_n) begin end 什麼的一鍵就出來了,我用ultisnips,github上有一些寫好的verilog/systemverilog snippets,另外自己也可以寫。

2. 好的Coding style

我記得有synopsys建議的verilog代碼規範,Freescale 的verilog代碼規範,陳佩蕙的verilog代碼規範,etc;可以去eetop上找下,這些文檔里說的都差不多。


試試emacs的verilog-mode,可以避免很多小錯誤。。

另外,盡量消掉編輯/模擬工具上出現的warning


我來隨便說幾個。

1檢查數據之間賦值位寬是否匹配,不匹配不報錯,然後你就回遇到各種各樣奇怪的問題。

2不要在多個always裡面對同一個信號進行賦值。

3良好的寫狀態機的習慣是分成三段。時鐘驅動,邏輯轉換,狀態機輸出。

保持一個良好的寫代碼的習慣非常重要。Verilog語法比較寬容,入門比較容易。但是容易出錯。良好的編程習慣能省下一大筆調試的時間。

-----------------------------------------------------

我們三個沒一個人贊


我覺得 你可能需要 了解下 tab 鍵 這個功能 !對就是這麼簡單,有時間的話放張照片讓你看下 具體來說:

module…………;

(Tab鍵)input ……;

(Tab鍵)input ……;

(Tab鍵)output ……;

(Tab)Always…………

(Tab)Begin

(Tab)………………;

(Tab)end

Endmodule

總之,效果剛剛的!(可補圖片)

當然,這只是從寫作格式上來說的!

你也看到了,就是分成一塊一塊的,就算有問題,因為格式很清晰,很容易發現錯誤的!不過,說實話,我只是覺得,可能,我只是說可能,你對於調試不太熟(可補鏈接一處,或教程出錯調試實例幾個)

具體到各種類型的話,比如,狀態機類的,分三步……之類的就不一一贅述了!(可補各類例題)

嗯,就是這樣!

就像寫一篇文章的格式分成幾部分,每部分又包括幾段,每段開頭要空兩格(verilog分號相當於一句話,可我就是要把它當做一段的來看)


代碼筆誤挺正常的,高級專家也有腦子一抽的時候。因為複製粘貼忘了改而改代碼,刷網表,甚至EC的事也見了不少。

那麼怎麼辦呢,一,代碼review,自己看,別人看,一起看。二,用lint工具,確認error和warning。

最後,提升自己的能力,寫清晰,明了的代碼,不把正確與否的可能交到綜合工具手裡。

Ps一記,血的教訓,條件判斷語錄中一定要不要用表達式(比如if(a+b>c)),因為表達式的位寬很有可能和你預期的不一致,而且非常隱蔽。

Ps2,等等。這是個一年前得問題??


推薦閱讀:

你有哪些良好的消費習慣?堅持多久了?
一個人經歷過刻骨銘心、心痛得死去活來的事情以後,到底是如何神奇地在時間和習慣中遺忘掉這些事的?
類似 Habit List 這樣的 iOS 應用真能夠幫助習慣養成嗎?

TAG:習慣 | 代碼 | 現場可編輯邏輯門陣列FPGA | Verilog |