2.1 变量命名
2.1.1 wire型变量命名
(1). Wire型变量定义如下:名词+动词+_Sig
”_”的第一个字母大写,其它小写,用”_”隔开,按中文含义,直接翻译成english。
例如: VSync_Sig
注:如果一个字母,可以直接贴着旁边的整个单词,如VSync_Sig所示。
(2). Module里的变量名也定义成wire型
例如:
module sync_module
(
CLK, RSTn,
VSYNC_Sig, HSYNC_Sig,Ready_Sig,
Column_Addr_Sig,Row_Addr_Sig
);
2.1.2 reg型变量命名
小写,用”_”隔开,按中文含义,直接翻译成english。
例如: reg [10:0]count_h;
2.1.3 parameter型变量命名
Parameter定义的变量全大写,也按中文含义,直接翻译成english.
2.1.4 系统级信号的命名
系统级信号指复位信号,置位信号,时钟信号等需要输送到各个模块的全局信号。系统信号以字符串sys或syn开头;时钟信号以clk开头,并在后面添加相应的频率值;复位信号一般以rst或reset开头;置位信号为st或set开头。典型的信号命名方式如下所示:
wire [7:0] Sys_Dout_Sig;
wire Clk_32p768MHz_Sig;
wire Reset_Sig;
wire St_Counter_Sig;
2.2 对齐
2.2.1 begin…end的书写规范
同一个层次的所有语句左端对齐;initial、always等语句块的begin关键词跟在本行的末尾,相应的end关键词与initial、always对齐;这样做的好处是避免因begin独占一行而造成行数太多;如:
always @ ( posedgeSysClk or negedge SysRst ) begin
if( !SysRst ) DataOut <= 4'b0000;
else if( LdEn ) begin
DataOut <= DataIn;
End
else
DataOut <= DataOut +4'b0001;
end
不同层次之间的语句使用Tab键进行缩进,每加深一层缩进一个Tab;在endmodule,endtask,endcase等标记一个代码块结束的关键词后面要加上一行注释说明这个代码块的名称。
2.3 Module的命名规则
功能模块:动词+名词_module
控制模块:动词+名词_control_module
(1). 模块的命名规则
在系统设计阶段应该为每个模块进行命名。命名的方法是,将模块英文名称的各个单词首字母组合起来,形成3到5个字符的缩写。若模块的英文名只有一个单词,可取该单词的前3个字母。各模块的命名以3个字母为宜。例如:
ArithmaticLogical Unit模块,命名为ALU。
DataMemory Interface模块,命名为DMI。
Decoder模块,命名为DEC。
(2). 模块之间接口信号的命名
模块之间接口信号,最好标明数据方向
vga_control_module U3
(
.CLK( CLK_40Mhz),
.RSTn(RSTn ),
.Ready_Sig( Ready_Sig ), // input - from U2
.Column_Addr_Sig( Column_Addr_Sig ), // input - from U2
.Row_Addr_Sig( Row_Addr_Sig ), // input - from U2
.Red_Sig(Red_Sig ), // output - to top
.Green_Sig( Green_Sig ), //output - to top
.Blue_Sig(Blue_Sig ) // output - to top
);
(3). 模块内部信号
模块内部的信号由几个单词连接而成,缩写要求能基本表明本单词的含义;单词除常用的缩写方法外(如:Clock->Clk, Write->Wr, Read->Rd等),一律取该单词的前几个字母( 如:Frequency->Freq, Variable->Var 等);每个缩写单词的第一个字母大写;若遇两个大写字母相邻,中间添加一个下划线(如DivN_Cntr)
参考:http://blog.csdn.net/lvwx369/article/details/9887041