數字邏輯實驗課後對于Verilog的标準書寫的小總結,不是必須寫成這樣,但是是一種好的程式設計風格。
來源:數字邏輯與Verilog設計實驗課講解,個人做的筆記與整理。
良好的程式設計風格有利于減少消耗的硬體資源,提高設計的工作頻率 。
提高系統的可移植性和可維護性。
程式的格式化能展現程式員的基本素質和整個團隊的風貌。
有C語言基礎的這部分可以簡單略過,看看即可。無基礎的可以跳過,有一定程式設計經驗後再來總結提高。
用于命名的字元集為:字母A~Z和a~z, 數字0~9以及下劃線組成。
例如:
參數(parameter)、常量(constant)和塊标号(block label)名必須一緻采用大寫;
而信号,變量和結構名(construct)以及執行個體标号(instance)必須一緻采用小寫。
有利于在仿真時,區分不變和變化的 資料。
例子:
在不區分大小寫的情況下,名字必須唯一。例如,名字state和State不能同時出現在同一設計中。因為有的EDA工具不區分大小寫。
如果一個名字由多個字組成,則使用下劃線連接配接,用以增加名字的可讀性。
為了使信号的名字有意義,可以根據信号類型選取相應的字尾。
具體示例如下:
命名
信号類型
執行個體
xx_r
寄存器類型
Data_out_r
xx_a
異步信号
Addr_strobe_a
xx_clk
時鐘信号
Sys_clk
xx_nc
不連續信号
Stata_nc
xx_n
低電平有效信号
Reset_n
xx_pn
有n個相位的信号
Enable_p2
xx_z
三态信号
Data_out_z
xx_next
狀态機信号
Transmit_next
xx_test
測試模式信号
Parallel_clk_test
sys_xxx
系統信号
sys_dout,sys_din
clk_xxx
時鐘信号(也可這樣寫)
clk_768MHZ
rst_xxx reset_xxx
複位信号
st_xxx set_xxx
置位信号
這個确實有點抽象...
順序:
将子產品英文名稱的各個單詞的首字母組合起來,形成3~5個符号的縮寫。
Arithmatic logical unit —— ALU
若子產品的英文名隻有一個單詞,可取該單詞的前3個字母
Decider —— DEC
所有的變量命名分為兩個部分:
第一部分表明資料方向,其中資料發出方在前,資料接收方在後;
第一部分全部大寫,
第二部分為資料名稱。
第二部分中所有具有明确意義的英文名全部拼寫或者縮寫的第一個字母大寫,其餘部分小寫。
兩個部分用下劃線隔離開。
例:CPUMMU_WrReq (CPU發送給MMU的寫請求信号)
子產品内部的信号由幾個單詞連接配接而成,縮寫要求能基本表明本單詞的含義。
主要有三點:
普通描述注釋“//”就可以
檔案頭注釋有一點麻煩,但是顯得很标準。
子產品之間(always)的注釋參照檔案頭注釋
正文書寫要求與C語言類似。
用四個空格代替TAB鍵;因為不同的編輯系統的Tab制表符間距可能不同。
每行隻有一個Verilog語句;對于長的語句可以使用回車和縮進方法,表示成連續的語句行。
避免使用寫死;建議使用宏或則參數來定義常數,避免使用寫死數值。例如:
下面是更多出于美觀的考慮:
各節之間加1行或者多行空格
不同變量,變量與符号,變量與括号之間都應該保留一個空格 alwaya @ ( … )
邏輯運算符、算術運算符、比較運算符等運算符兩側各留一個空格。(單數操作運算符例外)
使用”//” 注釋時,在”//”後應當有一個空格