15-Verilog Coding Style
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.排版
- 缩进
- 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.表达式书写
适当使用()
如果一个表达式的分组情况不是很明显,加上括号有助于理解,提高代码的可读性
赋值语句
- 书写变量的时候习惯性加上位宽
- 条件完整性
- 写条件语句的时候不要忘记写else和case语句中的default
- 如果赋值语句比较复杂,注意条件的拆分
- 条件结构书写
- if-else语句具有优先级,会被综合成多级mux
- case语句的条件没有优先级,会被综合为平行的mux
状态机的书写
阻塞赋值和非阻塞赋值
赋值唯一性
- 条件相同的语句写在一个always块中,条件不同写在不同的always块中
- 注释书写
7.可重用设计
8.设计规则
15-Verilog Coding Style的更多相关文章
- 有限狀態機FSM coding style整理 (SOC) (Verilog)
AbstractFSM在數位電路中非常重要,藉由FSM,可以讓數位電路也能循序地執行起演算法.本文將詳細討論各種FSM coding style的優缺點,並歸納出推薦的coding style. In ...
- (转帖) 有限狀態機FSM coding style整理 (SOC) (Verilog)
来源:http://www.codesoso.net/Record/101092_95120_21.html 来源:http://www.cnblogs.com/oomusou/archive/201 ...
- Linux 内核Coding Style整理
转载:http://www.cnblogs.com/wang_yb/p/3532349.html 总结linux内核开发的coding style, 便于以后写代码时参考. 下面只是罗列一些规则, 具 ...
- linux c coding style
Linux kernel coding style This is a short document describing the preferred coding style for the lin ...
- [中英对照]Linux kernel coding style | Linux内核编码风格
Linux kernel coding style | Linux内核编码风格 This is a short document describing the preferred coding sty ...
- 谈谈Linux内核驱动的coding style【转】
转自:http://www.cnblogs.com/wwang/archive/2011/02/24/1960283.html 最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代码离 ...
- 谈谈Linux内核驱动的coding style
最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代码离Linux内核的coding style要求还是差很多.当初自己对内核文档里的CodingStyle一文只是粗略的浏览,真正写代 ...
- 编码风格——linux内核开发的coding style
总结linux内核开发的coding style, 便于以后写代码时参考. 下面只是罗列一些规则, 具体说明可以参考: 内核源码(Documentation/CodingStyle) 01 - 缩进 ...
- 编程风格(Coding Style)要求
编程风格(Coding Style)要求2.1.1 文件(1) 每个模块(module)一般应存在于单独的源文件中,通常源文件名与所包含模块名相同.(2) 每个设计文件开头应包含如下注释内容:? 年份 ...
- c coding style之学习篇
1. 使用do-while结构去避免潜在的内存泄漏问题. do { p1 = malloc(10); if (null == p1) { break; ...
随机推荐
- 文心一言 VS 讯飞星火 VS chatgpt (167)-- 算法导论13.1 7题
七.用go语言,试描述一棵含有 n 个关键字的红黑树,使其红色内部结点个数与黑色内部结点个数的比值最大.这个比值是多少? 该比值最小的树又是怎样呢?比值是多少? 文心一言: 红黑树是一种自平衡的二叉查 ...
- 文件不落地上线sliver
接着二开sliver,给他添加一个生成powershell payload上线的功能,生成并复制到剪切板. 准备 首先,先开启监听,不多说直接mtls默认的就行,sliver可以生成配置文件来实现 ...
- C realloc(): invalid next size错误
C realloc(): invalid next size 问题代码 #include <stdio.h> #include <stdlib.h> int *getNumbe ...
- HDU 4705 立方和拆解
HDU 4705 立方和拆解 题意 给一棵树,找出所有的(A,B,C)三元组的数量,满足ABC不能同时被一条路径覆盖 思路 首先可以明确的是,对于每个入度大于等于3的点(也就是有两个或以上儿子的节点) ...
- JavaScript异步编程3——Promise的链式使用
目录 概述 详论 1️⃣回调地狱 2️⃣Promise实现 参考 概述 在上一篇文章<JavaScript异步编程2--结合XMLHttpRequest使用Promise>中,简要介绍了A ...
- MES/MOM国内市场现状趋势与新生态模式参考
本文分享自华为云社区<工业互联网系列(七)MES/MOM国内市场现状趋势与新生态模式参考>,作者:云起MAE . 国内工业互联网平台服务整体围绕数字化及数据价值挖掘的底层逻辑没有变,变的是 ...
- GaussDB(for Redis)双活容灾支持4大应用场景,为业务安全保驾护航
摘要:GaussDB(for Redis)的双活解决方案,支持同域主备.同域双主.异地主备.异地双主四大应用场景,提供了安全可靠的容灾能力. 一场火灾引发的思考 2021年3月10日,欧洲某云服务提供 ...
- 当你运行npm run命令时,会发生什么?
摘要:今天我们来聊一聊运行npm run命令之后会发生什么. 本文分享自华为云社区<运行npm run命令的时候会发生什么?>,作者:gentle_zhou . 先前发了一篇"运 ...
- 华为云企业级Redis揭秘第15期:Redis为什么需要强一致?
摘要:其实开源Redis的弱一致性已经不满足很多应用场景的诉求.怎么,不信? 本文分享自华为云社区<华为云企业级Redis揭秘第15期:Redis为什么需要强一致?>,作者: GaussD ...
- vue2升级vue3: TSX Vue 3 Composition API Refs
在vue2时代,$refs 直接操作子组件 this.$refs.gridlayout.$children[index]; 虽然不推荐这么做,但是确实非常好用.但是vue2快速迁移到vue3,之前的这 ...