如何编写符合Verilog代码质量规范的代码?

摘要:title: Verilog代码质量规范 date: 2025102 11:52:25 cover: true mathjax: false summary: 个人在团队中积累出的一些关于代码质量的规范 categories: Note
补档声明 由于我的博客服务器和备案到期,所以选择转移到博客园平台来进行保存和记录。以后也有可能会在上面不定期更新一些技术类博客。 前言 Verilog,虽然教材或者一些教程一直在强调本质上其实是在构建一个适应我们需求的电路,但是由于Verilog的并行性和并不适用于传统软件流的抽象层级,以及一些许许多多的小trick的存在,所以要想写好还是不容易的。 并行性就意味着一段功能代码,在VSCode编辑器里,无论是在上方还是下方,其功能都是一样的,但是怎么安排它,让其视觉和逻辑上变得合理,是需要我们考虑的。 其硬件描述的抽象层级就意味着它不是通过一行行功能指令去完成某个操作的,本质上是在构建每个状态所需要触发的逻辑门。 状态机是我们编写Verilog时刻要考虑的东西,通过状态机这一抽象层我们能够把硬件电路的行为通过一个个状态去触发。所以我们在编写模块的时候必须深刻理解模块要进行的操作,了解其每一个操作所占用的状态,和状态之间跳转的逻辑。 而一个模块中可能又有一个主状态机来完成操作,其他的一些辅助电路来完成统计,为了便于模块间的连接和测试,最好遵循一定的模块命名和信号命名规范。 基本语法 试图用一张网图来讲清楚 命名规范 信号命名 采用有意义且有效的名字,尽量采用连贯的缩写,比如:address →addr; clock→clk; 长信号名用下划线“ _”分割单词; 特殊信号加后缀表示其特性,如:低电平有效信号: _n;时钟信号:_clk;输入信号:_i ; 输出信号:_o; 寄存器打拍的信号,第一级以“ff1”结尾,后面依次“ ff2”,"_ff3",其他类型的信号禁止使用该后缀命名; 不建议使用reg作为信号结尾; 不使用vdd, vss, vcc, vref开头为普通信号命名; define和parameter定义的常量和参数使用全大写; 所有的模块名,信号名,变量名和端口名小写,不建议使用驼峰命名法,而是**_**作为连接符 模块例化时 使用xxx_inst作为模块名,多次例化可以使用xxx_inst1,xxx_inst2等 模块连接使用端口名连接,不要使用顺序连接。
阅读全文