Verilog Coding Style

1.为什么需要Coding Style

  • 可综合性 - 代码需要综合成网表,如果写了一些不可综合的代码,会出现错误
  • 可读性,代码通常有多个版本,所以需要保证代码的可读性
  • 保证代码质量,方便后续的综合以及后端的布局布线

2.头文件



使用统一的文件头,其中包括:

  • 作者名
  • 模块名
  • 创建日期
  • 功能概要(功能列表,mode 1... 2... 3...)
  • 更改记录(通常在initial阶段和stable阶段之间更改代码,更改feature需要记录,修改bug不需要进行记录)

    代码有三个版本,initial版本代码只需要跑完少数用例-->后端进行预综合-->进行迭代代码;stable(代码验证比价充分)-->过了95%的测试用例;final版本代码,完成100%的测试用例,此时不可修改RTL,如果需要更改走ECO流程
  • 版权等必要信息



  • 不同公司有自己的代码风格

3.module整体结构

  • 统一的module结构便于项目成员的理解与维护
module module_name(
parameter xxx = xxx,
)(
input [xxx:xxx] reg/wire/logic variable_name,
....
); // Define Parameter // instance module
// ............... //********************************************** // main code
// ...............
endmodule
  • 使用*进行分割区域

4.排版

  1. 缩进
  • Input,output,reg,wire 0缩进
  • always,task,function 0缩进
  • 输入输出信号的宽度定义与关键字之间,信号名与宽度之间要用空格分开;所有宽度定义对所有信号名对齐
  • 每个信号,变量和端口类型的声明占用单独的一行

5.命名风格

简洁\清晰\有效是基本的信号命名规则

  • 端口,信号,变量名的所有字母都小写;函数名,宏定义,参数定义用大写
  • 使用简称,缩略





  • 基于含义命名(避免以数字命名的简单做法),含义可以分段(最多分三段),每一小段之间使用"_"进行分隔,如tx_data_val
  • 命名长度一般限制在20个字符以内
  • 低电平有效,加后缀"_n",比图rst_n
  • 无条件寄存的寄存信号在原信号上加ff1,ff2.....如原信号data_in,寄存一拍data_in_ff1,寄存两拍data_in_ff2
  • 不能用"_reg"作为最后的后缀名,因为综合工具会给寄存器自动加上_reg,如果命名中使用"_reg"作为后缀名则扰乱了网表的可读性

6.表达式书写

  1. 适当使用()

    如果一个表达式的分组情况不是很明显,加上括号有助于理解,提高代码的可读性

  2. 赋值语句

  • 书写变量的时候习惯性加上位宽
  1. 条件完整性
  • 写条件语句的时候不要忘记写else和case语句中的default
  • 如果赋值语句比较复杂,注意条件的拆分



  1. 条件结构书写

  • if-else语句具有优先级,会被综合成多级mux
  • case语句的条件没有优先级,会被综合为平行的mux
  1. 状态机的书写





  2. 阻塞赋值和非阻塞赋值



  3. 赋值唯一性





  • 条件相同的语句写在一个always块中,条件不同写在不同的always块中

  1. 注释书写



7.可重用设计

8.设计规则

15-Verilog Coding Style的更多相关文章

  1. 有限狀態機FSM coding style整理 (SOC) (Verilog)

    AbstractFSM在數位電路中非常重要,藉由FSM,可以讓數位電路也能循序地執行起演算法.本文將詳細討論各種FSM coding style的優缺點,並歸納出推薦的coding style. In ...

  2. (转帖) 有限狀態機FSM coding style整理 (SOC) (Verilog)

    来源:http://www.codesoso.net/Record/101092_95120_21.html 来源:http://www.cnblogs.com/oomusou/archive/201 ...

  3. Linux 内核Coding Style整理

    转载:http://www.cnblogs.com/wang_yb/p/3532349.html 总结linux内核开发的coding style, 便于以后写代码时参考. 下面只是罗列一些规则, 具 ...

  4. linux c coding style

    Linux kernel coding style This is a short document describing the preferred coding style for the lin ...

  5. [中英对照]Linux kernel coding style | Linux内核编码风格

    Linux kernel coding style | Linux内核编码风格 This is a short document describing the preferred coding sty ...

  6. 谈谈Linux内核驱动的coding style【转】

    转自:http://www.cnblogs.com/wwang/archive/2011/02/24/1960283.html 最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代码离 ...

  7. 谈谈Linux内核驱动的coding style

    最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代码离Linux内核的coding style要求还是差很多.当初自己对内核文档里的CodingStyle一文只是粗略的浏览,真正写代 ...

  8. 编码风格——linux内核开发的coding style

    总结linux内核开发的coding style, 便于以后写代码时参考. 下面只是罗列一些规则, 具体说明可以参考: 内核源码(Documentation/CodingStyle) 01 - 缩进 ...

  9. 编程风格(Coding Style)要求

    编程风格(Coding Style)要求2.1.1 文件(1) 每个模块(module)一般应存在于单独的源文件中,通常源文件名与所包含模块名相同.(2) 每个设计文件开头应包含如下注释内容:? 年份 ...

  10. c coding style之学习篇

    1. 使用do-while结构去避免潜在的内存泄漏问题. do {     p1 = malloc(10);     if (null == p1)     {         break;     ...

随机推荐

  1. 华企盾DSC客户端图标不显示常见处理方法

    1.检查是否启用了360桌面.猎豹桌面之类的(兼容腾讯桌面),打强制显示客户端图标的补丁 2.是否被杀毒软件查杀 3.用Autoruns查看explorer项图标那一栏前10个是否有我们图标没有的话把 ...

  2. 【C# 技术】C# 常用排序方式

     前言  在最近的项目中经常会对C#中的数据进行排序,对于基本数据类型,其排序方式比较简单,只需要调用内置算法即可实现,但对于自定义数据类型以及自定义排序规则的情况实现起来就比较麻烦,所以在本文章中将 ...

  3. MySQL|MySQL事物以及隔离级别

    MySQL 事务主要用于处理操作量大,复杂度高的数据.比如开单,需要添加给订单表增加记录,还需要增加订单的各种相关明细,操作复杂度高,这些操作语句需要构成一个事务.在 MySQL 命令行的默认设置下, ...

  4. Pikachu漏洞靶场 敏感信息泄露

    敏感信息泄露 概述 由于后台人员的疏忽或者不当的设计,导致不应该被前端用户看到的数据被轻易的访问到. 比如: 通过访问url下的目录,可以直接列出目录下的文件列表; 输入错误的url参数后报错信息里面 ...

  5. 分享.Net 设计模式大全

    由于最近项目处于维护阶段,工作没有那么匆忙了.于是开始回头整理一下常用设计模式. 虽说设计模式大家都知道,但是在写代码过程中为了抓项目进度有时候写着写着就变成面向过程开发了--后面维护起来将会相当的悲 ...

  6. zabbix常用监控项

    https://blog.csdn.net/xkjcf/article/details/78559273?locationNum=10&fps=1 agent.ping  #agent是否在线 ...

  7. 新版的Django中的path不能使用正则表达式

    新版的path 虽然 取代了 之前的url,但是在写路由的时候不能在路由中直接写正则表达式,不然会找不到页面. 解决方法使用 re_path from django.urls import re_pa ...

  8. Blazor快速开发框架Known-V2.0.0

    Known2.0 Known是基于Blazor的企业级快速开发框架,低代码,跨平台,开箱即用,一处代码,多处运行. 官网:http://known.pumantech.com Gitee: https ...

  9. 2023-11-04:用go语言,如果n = 1,打印 1*** 如果n = 2,打印 1*** 3*** 2*** 如果n = 3,打印

    2023-11-04:用go语言,如果n = 1,打印 1*** 如果n = 2,打印 1*** 3*** 2*** 如果n = 3,打印 1*** 3*** 2*** 4*** 5*** 6*** ...

  10. GaussDB(for MySQL) RegionlessDB发布:全球数据库技术

    本文分享自华为云社区<GaussDB(for MySQL) RegionlessDB发布:全球数据库技术>,作者: GaussDB 数据库. 1.技术背景 对于一些典型行业,如跨境电商和大 ...