//**************************************************************
//instance of module MODULE_NAME_A filename:module_name_a.v
//**************************************************************
MODULE_NAME_A U_MUDULE_NAME_A( //例化名在模块名前面加U_
.A (A ),
.B (B ),
.C (C )
);
//*****************************
// MAIN CORE
//*****************************
//Sequential logic style
//不允许有模糊不清的状态机模式,所有的状态机必须清晰明了。
// 我们要求将状态机的时序部分和组合逻辑部分分开。(详情可以参考我的另一篇blog verilog规范设计--状态机)
//always中,一定要用 begin end 区分,格式和代码风格统一如下
always @(posedge clk_* or negedge rest_n)
begin : SEQ_BLOCK_NAME
//统一的缩排取4个空格宽度
//赋值或者条件判断时要注明比特宽度,注意表达式的位宽匹配
//复位的条件表达式及命名要和 always 敏感列表中的描述相统一,并且一定要使用异步复
// 位。 所有的复位必须低有效。
if (rst_n==1'b0)
counter<=4'b0; // if else 中仅有一个语句行时,不要使用 begin end
else
begin
//一般表达式在运算符的两侧要各留出一个空格,但定义比较长的表达式,去掉预先级高
// 的运算符前的空格,使其与运算对象紧连在一起,可以更清晰的显示表达式结构。
if( (&a==1’b1) && ( !flag==1’b1) ||( b==1’b1) ) //如果一个表达式的分组情况不是很明显时,加上括号有助于理解。
counter <= #`DLY siginal_b;
else; // if else 搭配使用,对于缺省的条件要写”else;”;
end
end // SEQ_BLOCK_NAME
//Combinational logic style
always @(signal_a or signal_b)
begin : COM_BLOCK-NAME
//if else 结构综合的结构可能是与或非门构成的,也可能是一组多路选择器,而 case
// 结构综合结果一般会是多路选择器,但对于可以优化的 case 综合工具会综合出更简单的结构。
//所有对于可以写出平行结构的条件,优先写成 case 结构,例如地址译码等,条件之间
// 有重复和嵌套的情况则是写成 if else 结构。
case (expression)
item1 : begin
signal_c=*****;
end
item2 : //statement;
default ://statement; // case 中的缺省条件要写”default”;
endcase
end // COM_BLOCK_NAME
//*********************