Verilog代码的风格规范

简介: 原则: 注释是对代码的“提示”,而不是文档。程序中的注释不可喧宾夺主,注释太多会让人眼花缭乱。 边写代码边注释,修改代码的同时要修改相应的注释,以保证注释与代码的一致性,不再有用的注释要删除。 如果代码本来就是清楚的,则不必加注释。

空行

module mux4_to_1(out, in0, in1, in2, in3, s1, s0);
    input [1:0] in0, in1, in2, in3;
    input s1, s0;
    output reg [1:0] out;
//变量声明后空行
always @(*)
begin
    case ({s1,s0})
        2'b00: out = in0;
        2'b01: out = in1;
        2'b10: out = in2;
        default: out = in3;
    endcase
end
endmodule
//两模块间空行
module mux2_to_1(/*...*/);
    /**/
endmodule

空格

module mux4_to_1(out, in0, in1, in2, in3, s1, s0); //模块名后不留空格
    input [1:0] in0, in1, in2, in3;
    input s1, s0;
    output reg [1:0] out;
    always @(*) //关键字后空格(always后加空格)
    begin
        //关键字后空格(case后加空格)
        case ({s1, s0})
            2'b00: out = in0; //分号向前紧跟
            2'b01: out = in1;
            //赋值运算符、关系运算符、算术运算符、逻辑运算符、位运算符等双目运算符前后都要加空格
            2'b10: out = in2;
            default: out = in3;
        endcase
    end
endmodule
//单目运算符前后不加空格

缩进

module mux4_to_1(out, in0, in1, in2, in3, s1, s0);
    input [1:0] in0, in1, in2, in3;
    input s1, s0;
    output reg [1:0] out;
    always @(*)
    begin
      case ({s1,s0}) //case在always里,要缩进
        2'b00: out = in0; //case的的每一条在case里,也要缩进
        2'b01: out = in1;
        2'b10: out = in2;
        default: out = in3;
    endcase
end
endmodule

缩进原则:如果地位相等,则不需要缩进;如果属于某一个代码的内部代码就需要缩进。

对齐

module mux4_to_1(out, in0, in1, in2, in3, s1, s0);
    input [1:0] in0, in1, in2, in3;
    input s1, s0;
    output reg [1:0] out;
    always @(*)
    begin //begin和end要独占一行,且不缩进
    case ({s1,s0})
        2'b00: out = in0;
        2'b01: out = in1;
        2'b10: out = in2;
        default: out = in3;
    endcase
end
endmodule

代码行

module mux4_to_1(out, in0, in1, in2, in3, s1, s0);
    input [1:0] in0, in1, in2, in3;
    input s1, s0;
    output reg [1:0] out;
    always @(*) //always、if、else等独占一行
    begin
        case ({s1,s0})
            2'b00: out = in0; //一行代码只做一件事情,如只写一条语句
            2'b01: out = in1;
            2'b10: out = in2;
            default: out = in3;
        endcase
    end
endmodule

注释

module mux4_to_1(out, in0, in1, in2, in3, s1, s0); //注释开始符号与代码之间有空格
    input [1:0] in0, in1, in2, in3;//4个待选输入
    input s1, s0; //选择信号
    output reg [1:0] out; //存放被选择出的数据
    always @(*)
    begin
        case ({s1,s0})
            2'b00: out = in0; //in0的值赋给out <- 这是一条多余注释
            2'b01: out = in1;
            2'b10: out = in2;
            default: out = in3;
        endcase
    end
endmodule

原则:

  1. 注释是对代码的“提示”,而不是文档。程序中的注释不可喧宾夺主,注释太多会让人眼花缭乱。
    边写代码边注释,修改代码的同时要修改相应的注释,以保证注释与代码的一致性,不再有用的注释要删除。
    如果代码本来就是清楚的,则不必加注释。
相关文章
|
6月前
|
前端开发 JavaScript
工作中代码书写规范
前端代码规范增进代码整洁与团队协作,降低维护成本。包括代码规范、风格和注释建议:选择编程语言对应的编码规范,统一命名、缩进和换行规则;注重代码风格的一致性、简洁性和可配置性;注释要简洁明了,位于关键位置。通过制定规范文档、使用代码检查工具、定期代码审查和鼓励改进来执行规范,提升团队效率和代码质量。
66 0
|
3月前
|
前端开发
前端代码书写规范
【8月更文挑战第15天】前端代码书写规范
48 0
|
5月前
|
算法 安全 编译器
【简洁的代码永远不会掩盖设计者的意图】如何写出规范整洁的代码
【简洁的代码永远不会掩盖设计者的意图】如何写出规范整洁的代码
48 1
|
6月前
|
存储 缓存 算法
代码简洁之道:我们该如何规范代码的命名?
代码简洁之道:我们该如何规范代码的命名?
104 1
|
6月前
|
前端开发 JavaScript 算法
比较流行的前端代码书写规范都有哪些
【4月更文挑战第13天】前端代码规范增进代码可读性和团队协作,包括缩进(用2空格)、命名(变量 camelCase,常量 MY_CONSTANT,类 PascalCase)、注释、语句与表达式、错误处理、代码复用。文件命名规范涉及扩展名、目录结构、简洁文件名、入口文件和配置文件命名。遵循这些规范能提高代码一致性,但需按项目需求调整。不断学习新规范以适应前端技术发展。
64 1
|
6月前
|
存储 运维 算法
软件体系结构 - 架构风格(3)主程序/子程序架构风格
【4月更文挑战第21天】软件体系结构 - 架构风格(3)主程序/子程序架构风格
342 0
|
6月前
|
存储 数据安全/隐私保护 芯片
基于VHDL语言的8路彩灯控制器的设计_kaic
基于VHDL语言的8路彩灯控制器的设计_kaic
|
开发工具 git
代码统一风格、代码规范和提交规范
1、安装模块 全局安装 eslint、commitlint 、 check-prettier npm install eslint commitlint check-prettier -g 本地安装 npm install eslint-config-prettier  stylelint  stylelint-config-prettier stylelint-config-standard husky  @commitlint/config-conventional -D VSCode 安装 Eslint和Prettier插件
150 0
|
开发工具 芯片 异构计算
Verilog 设计方法
Verilog 的设计多采用自上而下的设计方法(top-down)。即先定义顶层模块功能,进而分析要构成顶层模块的必要子模块;然后进一步对各个模块进行分解、设计,直到到达无法进一步分解的底层功能块。这样,可以把一个较大的系统,细化成多个小系统,从时间、工作量上分配给更多的人员去设计,从而提高了设计速度,缩短了开发周期。
162 1
HDLBits练习汇总-03-Verilog语言--模块层次结构(二)
HDLBits练习汇总-03-Verilog语言--模块层次结构
410 0
HDLBits练习汇总-03-Verilog语言--模块层次结构(二)