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. 川普真会说中文?连嘴型都同步,用VideoReTalking一键生成你的AI播报员

    你能想到这种画面吗?霉霉在节目中用普通话接受采访,特朗普在老家用中文脱口秀,蔡明老师操着一口流利的英文调侃潘长江老师.. 这听起来似乎很魔幻,可如今全部由VideoReTalking实现了 你只需要传 ...

  2. VSFTPD2.3.4(笑脸漏洞)复现

    vsftpd2.3.4笑脸漏洞复现 目标服务器:metasploitable2(192.168.171.11) 渗透机:Kali(192.168.171.21) 方法一:手动复现 首先用kali扫描一 ...

  3. JavaFx之触发激发鼠标事件(二十三)

    JavaFx之触发激发鼠标事件(二十三) 有时候,我们不能直接触发/激发某个按钮的点击事件,因为发起方可能是子线程.使用屏幕点击又不优雅,javafx已经提供了事件的激发,即使在子线程中也能激发某个按 ...

  4. ubuntu frame 个人开发心得

    引言 有一次我在树莓派上安装 Ubuntu Core 我给创新创业项目开发一个可视化 gui 看板,用于展示数据. 然后我就找到了我需要的工具 Ubuntu Frame 初次尝试使用 Ubuntu F ...

  5. Kubernetes常见错误总结

    1.屏幕持续打印Pod日志报error: unexpected EOF错误 Kubernetes: requesting flag for "kubectl logs" to av ...

  6. Typecho 反向代理 http 访问强制启用生成 https 链接

    问题描述 微酷是使用Nginx反向代理内网的Typecho站点,为了效率内网访问不需要使用https,这样Typecho接收到的请求是http协议的,于是网站内部资源链接被修改成了http. 解决方案 ...

  7. 在线编辑Word——插入内容控件

    内容控件是可添加和自定义的以在模板.窗体和文档中使用的单个控件.Word中支持添加多种类型的控件用于不同文档的设计需求.本文,将通过在线编辑的方式展示如何在Word中插入内容控件,这里使用的在线编辑器 ...

  8. 介绍3种ssh远程连接的方式

    摘要:SSH(安全外壳协议 Secure Shell Protocol,简称SSH)是一种加密的网络传输协议,用于在网络中实现客户端和服务端的连接,典型的如我们在本地电脑通过 SSH连接远程服务器. ...

  9. 架构解读丨Volcano作业资源预留设计原理

    摘要:本文重点讲解了基于v1.1.0的目标作业资源预留特性的设计和最佳实践.讲解过程中,全面介绍了特性设计过程中的考量因素和算法设计. 资源预留(Reservation)是批处理系统的一类常见需求,也 ...

  10. 教你如何在Python中读,写和解析CSV文

    摘要:在这篇文章中关于"在Python如何阅读CSV文件"中,我们将学习如何读,写和解析的CSV文件的Python. 您知道将表格数据存储到纯文本文件背后的机制是什么吗?答案是CS ...