verilog的代码规范和coding风格
企业用verilog 代码风格规范

技术报告名称:V erilog代码风格规范编号:版本号:作者项目部门产品中心日期2006-6-9制度规范目录前言 (2)1总则 (3)2职责 (3)3目的 (3)4内容 (3)4.1 基本原则 (3)4.1.1RTL级代码风格 (3)4.1.2组合时序电路分开原则 (4)4.1.3复位 (5)4.2 命名规则 (5)4.2.1基本命名标准 (5)4.2.2命名准则 (5)4.3 VERILOG HDL源代码文件结构 (8)4.3.1VERILOG HDL 代码文件文件头 (8)4.3.2VERILOG HDL 代码文件宏定义 (10)4.3.3VERILOG HDL 代码文件模块名及端口信号 (10)4.3.4VERILOG HDL 代码文件信号、变量及参数 (10)4.3.5VERILOG HDL 代码文件设计主体 (11)4.3.6VERILOG HDL 代码文件注释行 (14)4.3.7VERILOG HDL 代码文件独立Include.v (14)5VERILOG HDL代码范例 (14)5.1 复用器表达方式 (14)前言为了更好地规范团队成员在研发项目时VERILOG硬件描述语言的撰写,以达到代码规范化和标准化的目的,特制定本规范。
1总则本规范规定了IC设计项目开发过程中VERILOG HDL 源代码的编写总则、要求及模板文件。
本规范适用于信息安全团队及IPTV项目各IC产品在设计开发过程中源代码的编写。
2职责各模块设计成员负责根据本规范的要求编写VERILOG HDL 源代码。
系统组成员负责本规范对各项目的VERILOG HDL 源代码进行规范化格式审查及管理。
3目的制定本规范的目的:3.1 便于项目组成员之间对源代码的理解、交流及相互检查;3.2 便于设计者本人在项目开发之后或产品升级过程中利用源代码很快理解原有设计;3.3 便于模块开发过程中不同版本源代码的管理;3.4 便于模块仿真过程中很快发现问题的出处;3.5 便于模块整合时各子模块的链接。
Verilog代码编写风格

一. 强调Verilog代码编写风格的必要性。
强调Verilog代码编写规范,经常是一个不太受欢迎的话题,但却是非常有必要的。
每个代码编写者都有自己的编写习惯,而且都喜欢按照自己的习惯去编写代码。
与自己编写风格相近的代码,阅读起来容易接受和理解。
相反和自己编写风格差别较大的代码,阅读和接受起来就困难一些。
曾有编程大师总结说,一个优秀的程序员,能维护的代码长度大约在1万行数量级。
代码的整洁程度,很大程度上影响着代码的维护难度。
遵循代码编写规范书写的代码,很容易阅读、理解、维护、修改、跟踪调试、整理文档。
相反代码编写风格随意的代码,通常晦涩、凌乱,会给开发者本人的调试、修改工作带来困难,也会给合作者带来很大麻烦。
(实际上英文Coding Style有另一层涵义,更偏重的是,某一个电路,用那一种形式的语言描述,才能将电路描述得更准确,综合以后产生的电路更合理。
本文更偏重的是,编写Verilog代码时的书写习惯。
)二. 强调编写规范的宗旨。
缩小篇幅提高整洁度便于跟踪、分析、调试增强可读性,帮助阅读者理解便于整理文档便于交流合作三. 变量及信号命名规范。
1. 系统级信号的命名。
系统级信号指复位信号,置位信号,时钟信号等需要输送到各个模块的全局信号;系统信号以字符串Sys开头。
2. 低电平有效的信号后一律加下划线和字母n。
如:SysRst_n;FifoFull_n;3. 经过锁存器锁存后的信号,后加下划线和字母r,与锁存前的信号区别。
如CpuRamRd 信号,经锁存后应命名为CpuRamRd_r。
低电平有效的信号经过锁存器锁存后,其命名应在_n后加r。
如CpuRamRd_n信号,经锁存后应命名为CpuRamRd_nr多级锁存的信号,可多加r以标明。
如CpuRamRd信号,经两级触发器锁存后,应命名为CpuRamRd_rr。
4. 模块的命名。
在系统设计阶段应该为每个模块进行命名。
命名的方法是,将模块英文名称的各个单词首字母组合起来,形成3到5个字符的缩写。
verilog_coding_style

verilog_coding_style湖北光华电子有限公司1/21Verilog coding styleRevision historyVersion Author Date noteV1.0 shangrongjun 2011-3-23 Initial version湖北光华电子有限公司2/21本文是针对编写verilog HDL 代码提出的一些需要遵循的规范,在满足功能和性能的前提下,增强代码的可读性和可移植性等。
目的:1. 不依赖个人的技术水平,确保电路可靠性和稳定性。
2. verilog 描述正确,确保综合后的电路与预期的功能一致,防止由于不正确的语句使用导致功能错误。
3. 提高自己或其他人维护或调试代码的效率。
如果写了风格差的代码,不符合上述三点,则会:1. 如果rtl 描述的电路稳定性不好,则会(1)增加了不必要的设计、验证周期。
(2)为了达到稳定电路,重新设计浪费时间。
2. 如果rtl 描述风格不好,则会(1) 综合出错,需要重新修改,综合的时间浪费,eda 工具的使用时间浪费(正版)。
(2) 用lint 工具检查时warning 以及error 很多,可能掩盖了真正的错误,而去掉这些warning 和error 信息还需要修改代码。
(3) 仿真的时间浪费,Eda 工具的使用时间浪费。
3. 调试或维护时:(1) 个人风格导致其他人没法看懂,很难维护,发现维护代码还不如重新写一遍。
(2) 代码难看懂,很难调试,基本上只能编写人自己调试。
湖北光华电子有限公司3/211. 命名规则(1)在module 名和文件名的开始标明该module 和文件上层模块的功能或名字。
这样的目的是为了整个项目合成时不同模块的名字有冲突,即使单个模块仿真通过,总体连接到一块时仍会出错。
例:codec 项目中有adc 和dac ,均有各自cic 模块,则需要在相应的cic 前加上各自的模块名,如:adc_cic.v, dac_cic.v 。
2024版Verilog编程规范(华为)

实现自动化测试流程,提高测试 效率和准确性。
06
代码审查与质量保证
代码审查流程介绍
提交代码
开发人员将代码提交到代码审查 系统中。
分配审查任务
系统或审查组长将审查任务分配 给审查人员。
代码审查
审查人员对代码进行逐行审查, 检查是否符合编程规范和质量要
求。
审查通过
经过多轮反馈和整改后,代码符 合要求,审查通过。
通过定期的培训、分享和宣传活动,提高开 发人员对Verilog编程规范的认识和重视程度。
引入自动化检查工具
建立持续改进机制
研究和引入自动化检查工具,对Verilog代码 进行静态分析和规范检查,进一步提高代码 质量和开发效率。
建立规范的持续改进机制,收集开发人员的 反馈和建议,及时调整和优化规范内容。
可重用性原则
模块应具有高内聚、低耦 合的特点,便于在不同项 目中重用。
可维护性原则
模块应易于理解、测试和 修改,以降低维护成本。
顶层结构设计方法
自顶向下设计
从系统整体需求出发,逐 步细化到各个模块的设计 和实现。
模块化设计
将系统划分为多个独立的 模块,每个模块承担一定 的功能,便于并行开发和 维护。
减少错误和提高代码质量
02
规范的编程习惯有助于减少编码过程中的错误,提高代码的稳
定性和可靠性。
促进知识共享和传承
03
统一的编程规范有利于知识的积累和传承,降低新人学习成本,
提高团队整体技术水平。
适用范围及对象
适用范围
本规范适用于使用Verilog语言进 行硬件描述和设计的所有场景,包 括但不限于数字电路设计、验证、 仿真等。
端口名应避免与模块内部变量名冲突。
华为fpga设计规范(Verilog Hdl)

FPGA设计流程指南前言本部门所承担的FPGA设计任务主要是两方面的作用:系统的原型实现和ASIC的原型验证。
编写本流程的目的是:●在于规范整个设计流程,实现开发的合理性、一致性、高效性。
●形成风格良好和完整的文档。
●实现在FPGA不同厂家之间以及从FPGA到ASIC的顺利移植。
●便于新员工快速掌握本部门FPGA的设计流程。
由于目前所用到的FPGA器件以Altera的为主,所以下面的例子也以Altera为例,工具组合为modelsim + LeonardoSpectrum/FPGACompilerII + Quartus,但原则和方法对于其他厂家和工具也是基本适用的。
目录1. 基于HDL的FPGA设计流程概述 (1)1.1 设计流程图 (1)1.2 关键步骤的实现 (2)1.2.1 功能仿真 (2)1.2.2 逻辑综合 (2)1.2.3 前仿真 (3)1.2.4 布局布线 (3)1.2.5 后仿真(时序仿真) (4)2. Verilog HDL设计 (4)2.1 编程风格(Coding Style)要求 (4)2.1.1 文件 (4)2.1.2 大小写 (5)2.1.3 标识符 (5)2.1.4 参数化设计 (5)2.1.5 空行和空格 (5)2.1.6 对齐和缩进 (5)2.1.7 注释 (5)2.1.8 参考C语言的资料 (5)2.1.9 可视化设计方法 (6)2.2 可综合设计 (6)2.3 设计目录 (6)3. 逻辑仿真 (6)3.1 测试程序(test bench) (7)3.2 使用预编译库 (7)4. 逻辑综合 (8)4.1 逻辑综合的一些原则 (8)4.1.1 关于LeonardoSpectrum (8)4.1.1 大规模设计的综合 (8)4.1.3 必须重视工具产生的警告信息 (8)4.2 调用模块的黑盒子(Black box)方法 (8)参考 (10)修订纪录 (10)1. 基于HDL的FPGA设计流程概述1.1 设计流程图说明:●逻辑仿真器主要指modelsim,Verilog-XL等。
VerilogHDL编码规范

VerilogHDL编码规范1 目的为了FPGA、芯片IP核开发设计和验证人员之间更好地进行交流,提高代码的可读性,可维护性,特制定本规范,作为程序编写的指导文件。
本规范包括强制性规范和推荐性规范。
2 适用范围FPGA、芯片IP核逻辑设计和仿真验证。
编程语言采用Verilog语言。
3 相关规定1.本规范内容为逻辑设计岗位、仿真验证岗位员工必备基础知识,新员工入职时必须通过参加相关培训掌握本规范。
2.本规范的掌握、执行情况是新员工转正考核的重要内容。
在新员工见习阶段,其内部导师每月须抽查代码并将审核结果填入代码审查表。
3.项目经理应不定期抽查项目成员的代码,并将编程规范执行情况填入代码审查表作为项目成员考核依据。
4.本规范为内部职称晋升考试内容。
1目录1. 严格级别定义 (4)2. 工程规则 (5)2.1. 工程规则表 (5)2.2. 工程规则详细说明 (5)3. 命名规则 (6)3.1. 命名规则表 (6)3.2. 命名规则详细说明 (6)4. 文件头规则 (10)4.1. 文件头规则表 (10)4.2. 文件头示例 (10)4.3. 结构头示例 (12)5. 注释规则 (14)5.1. 注释规则表 (14)5.2. 注释规则详细说明 (14)6. 编码规则 (16)6.1. 编码规则表 (16)6.2. 编码规则详细说明 (16)7. 综合规则 (23)7.1. 综合规则表 (23)7.2. 综合规则详细说明 (23)8. 静态时序分析规则 (27)8.1. 静态时序分析规则表 (27)8.2. 静态时序分析规则详细说明 (27)9. 仿真规则 (31)9.1. 仿真规则表 (31)9.2. 仿真规则详细说明 (31)10. 设计风格规则 (34)210.1. 设计风格规则表 (34)10.2. 设计风格规则详细说明 (34)11. 重用化设计 (38)11.1. 层次设计和模块划分 (38)11.2. 参数化 (40)12. 常用缩写表 (42)31.严格级别定义⏹Mandatory 1(M1)——必须遵守。
硬件描述语言篇Verilog HDL代码规范

手把手教你学习FPGA系列教程硬件描述语言篇之Verilog HDL代码规范1.代码规范目的本规范的目的是提高书写代码的可读性、可修改性、可重用性,优化代码综合和仿真的结果,指导设计工程师使用VerilogHDL规范代码和优化电路,规范可编程技术的VerilogHDL设计输入,从而做到:1.逻辑功能正确,2.提高整洁度,3.便于跟踪、分析、调试,4.增强可读性,帮助阅读者理解,5.便于程序维护,6. 便于整理文档,7. 便于交流合作。
2.代码规范范围本规范涉及Verilog HDL编码风格,编码中应注意的问题,Testbench的编码等。
本规范适用于Verilog model的任何一级(RTL,behavioral, gate_level),也适用于出于仿真、综合或二者结合的目的而设计的模块。
3.代码规范内容3.1标准的文件头在每一个版块的开头一定要使用统一的文件头,其中包括作者名,模块名,创建日期,所属项目,概要,更改记录,版权等必要信息。
3.2标准的module 格式(1)module例化名用xx_u标示(多次例化用次序号0,1,2…)。
(2)建议每个模块加timescale。
(3)不要书写空的模块,即一个模块至少要有一个输入一个输出。
(4)为了保持代码的清晰、美观和层次感,一条语句占用一行,每行限制在80个字符以内,如果较长则要换行。
(5)采用基于名字(name_based)的调用而非基于顺序的(order_based)的调用。
(6)模块的接口信号按输入、双向、输出顺序定义。
(7)使用降序定义向量有效位顺序,最低位是0。
(8)管脚和信号说明部分,一个管脚和一组总线占用一行,说明清晰。
(9)在顶层模块中,除了内部的互联和module的例化外,避免再做其他逻辑。
(10)为逻辑升级保留的无用端口以及信号要注释。
(11)建议采用层次化设计,模块之间相对独立。
3.3命名规则(1)每个文件只包含一个module,module名要小写,并且与文件名保持一致。
verilog代码编写注意事项

verilog代码编写注意事项Verilog 代码编写注意事项1、for 循环:虽然for 是可以综合的,但是在写代码时一般不用,因为会占用很多硬件资源,而且一般我们设计的是时序逻辑设计,用到for循环的地方很少。
2、代码风格:代码风格不是一层不变的,要具体逻辑具体分析。
对于同一个逻辑问题,if…else 和case 只不过是形式上的不同,综合工具优化功能足够强的话,就会看穿这个形式上的不同,实现逻辑上的相同。
3、inout 端口的使用:当inout 作为输入端口使用时,一定要把它置为高阻态,当inout端口作为输出口使用时,直接对输出信号赋值即可。
例如:inout wire io_data ; //inout 端口。
input reg out_data ; //需要向io_data 输出的数据。
input reg io_link ; //inout 口方向控制。
Assign io_data = io_lin k ? out_data : 1’bz ; /*这步是关键,inout作为输入端口使用时,io_link=0 , 必须把io_data 置为高阻态。
当inout 端口作为输出口使用时,将io_link=1 ,将out_data赋值给io_data就可以了。
*/4、注释:代码注释时一个最大的共同错误是,注释描述的只是代码本身所实现的功能。
正确的注释写法是,应该假定读者是一个有经验的工程师,他熟悉verilog语言本身,但对于该工程并不熟悉。
注释的最高境界是:抛开源代码,单从注释就明白设计者所要实现的功能。
例如:错误的注释:addr <= addr + 1’b1 ; //addr自增1.这句注释不会给读者提供任何有用的信息。
正确的注释,(假定该工程是FPGA与MCU通信)addr<= addr + 1’b1 ; //在MCU写入一个字节数据后,addr自增1 ,以供MCU读取下一个字节数据。
VerilogHDL代码书写规范

Revision History ﹕99-08-01
Revision 1.0 Email ﹕ M@ Company ﹕ swip Technology .Inc
Copyright(c) 1999, swip Technology Inc, All right reserved
\*
y 用连贯的缩写
1
长的名字对书写和记忆会带来不便 甚至带来错误 采用缩写时应注意同一信号在模 块中的一致性 缩写的例子如下
Addr address Pntr pointer Clk clock Rst reset
y 用最右边的字符下划线表示低电平有效 高电平有效的信号不得以下划线表示 短暂
的引擎信号建议采用高有效 如 Rst_ Trdy_, Irdy_ Idsel.
Sun Microsystems Revision 1.0
5 规范内容 5.1 Verilog 编码风格
本章节中提到的Verilog编码规则和建议适应于 Verilog model的任何一级 RTL behavioral, gate_level) 也适用于出于仿真 综合或二者结合的目的而设计的模块
5.1.1 命名的习惯
FSM 有限状态机
伪路径 静态时序分析 STA 认为是时序失败 而设计者认为是正确的路径
4 引用标准和参考资料
下列标准包含的条文 通过在本标准中引用而构成本标准的条文 在标准出版时 所示版本
均为有效 所有标准都会被修订 使用本标准的各方应探讨 使用下列标准最新版本的可能性
Verilog Style and Coding Guidelines Actel HDL Coding Style Guider
Input [199:0] Vector1, Vector2;
Verilog 代码风格总结-供参考

[转]Verilog 代码风格-供参考Description本文主要是收集一些重要的Verilog coding style。
一个好的coding style可以减少错误的发生,增加电路的效能,以及较好的可读性。
TextThe order of module signals一个module signal顺序如下(由左至右):Inputclock signals(clk_*)set/reset signals(set_*, rst_*)enable/disble signals(en_*, dis_*)read/write enable signals(we_*, re_*, rw_*)control signals(i_*)address signals(i_*)data signals(i_*)Outputclock signals(o_clk_*)set/reset signals(o_set_*, o_rst_*)enable/disable signals(o_en_*, o_dis_*)control signals(o_*)address signals(o_*)data signals(o_*)In/Outcontrol signals(io_*)address signals(io_*)data signals(io_*)Naming Rule以下的namign rule为个人使用的规则。
命名方式分类底线分隔型:xxx_yyy_zzz大写底线分隔型:XXX_YYY_ZZZ首字大写型:AbcDefGhi首字小写型:avcDefGhi各种元素所使用的命名文件名称:底线分隔型, Ex: xxx_yyy_zzz.vmodule名称:底线分隔型, Ex: xxx_yyy_zzzmodule instance名称:底线分隔型, Ex: xxx_yyy_zzzlocal wire名称:底线分隔型:Ex: xxx_yyy_zzzlocal reg名称:底线分隔型, Ex: xxx_yyy_zzzinput signal名称:前置i_的底线分隔型, Ex: i_xxx_yyy_zzzoutput signal名称:前置o_的底线分隔型, Ex: o_xxx_yyy_zzzinput/output signal名称:前置io_的底线分隔型, Ex: io_xxx_yyy_zzz常数名称:大写底线分隔型, `XXX_YYY_ZZZparameter参数名称:大写底线分隔型, Ex: XXX_YYY_ZZZblock名称:大写底线分隔型, Ex: XXX_YYY_ZZZ特殊讯号名称单一的clock signal: clk多个clock signal: clk_xxx负缘触发的clock signal: clk_n, clk_xxx_n单一的reset signal: rst多个reset signal: rst_xxx负缘触发的reset signal: rst_n , rst_xxx_n单一的set signal: set多个set signals: set_xxx负缘触发的set signals: set_n, set_xxx_n致能讯号: en_xxx除能讯号: dis_xxxProcedural Assignments使用指引在撰写sequential logic时,使用nonblocking assignment。
verilogcoding_style建议

verilogcoding_style建议Verilog coding style建议1.设计必须采用同步设计;同步设计就是保证电路中所有的寄存器都在同一个clock的控制下变化。
因为目前的EDA工具并不能很好的支持异步电路的分析,用同步设计加上良好的编码规范得到的电路仿真结果就等同于实际电路的运行结果,若是异步电路,仿真结果与实际电路的结果可能不相同。
异步电路的核心逻辑是用组合电路来实现的,电路的输出,主要信号等变化并不依赖于任何一个时钟,所有验证、调试都是相当繁琐而有难度的,所有建议采用同步设计。
2. 宏定义利于仿真的角度出发,应该设置一个user delay(UD),即宏定义`define UD #1,对没有时序逻辑寄存器都延时一个单位,默认是1ps,这样就可以模拟FPAG内部的延时;仿真结果更接近实际电路,值得一提的是,它是不被综合的,就是对电路的运行没有一点影响,仅仅只是为了仿真的方便才定义的。
3. 时序与组合电路分开描述这是IC设计最基本的一个coding style,因为这样有利于debug。
一般来说,时序电路是非常难以debug的,所有设计的话,时序电路尽量简单,而要完成的功能通过组合电路去完成,时序电路只设置为一个简单的D触发器。
这样的话,进行debug 的时候,看源码就可以只看组合模块,忽略时序电路(D flip_flop),既方便又节省时间。
组合描述的敏感链表用always @ (*)来描述。
其中*代表组合逻辑模块中影响输出的所有信号,这是verilog2001的新语法规定,大家不熟悉的话可以查一下。
4. 信号的赋值建议一个信号只在一个always 块里面进行赋值,而一个always 块也只对一个信号进行赋值;时序设计采用非阻塞赋值,组合电路采用阻塞赋值,这样做又以下几个好处:首先,可以很好的避免多驱动源的发生,减少这种错误发生的概率;其次,debug的时候若是发现该信号有错误,就可以进行很简单的定位,因为这个信号只是这一个always里面赋值,非常有利于debug;最后,时序采用非阻塞赋值,组合设计采样阻塞赋值,因为这样做最符合信号的实际情况;5. 避免非目的的latch的产生Latch对电路的危害:首先它是电平触发的,不能被同步,容易产生冒险-竞争现象,对电路造成一定的危害;其次,FPGA设计资源中,大部分器件没有latch这个资源,而需要一个门电路和一个触发器(FF)来构成,这样就造成资源浪费。
verilog代码编写注意事项

Verilog 代码编写注意事项1、for 循环:虽然for 是可以综合的,但是在写代码时一般不用,因为会占用很多硬件资源,而且一般我们设计的是时序逻辑设计,用到for循环的地方很少。
2、代码风格:代码风格不是一层不变的,要具体逻辑具体分析。
对于同一个逻辑问题,if…else 和case 只不过是形式上的不同,综合工具优化功能足够强的话,就会看穿这个形式上的不同,实现逻辑上的相同。
3、inout 端口的使用:当inout 作为输入端口使用时,一定要把它置为高阻态,当inout端口作为输出口使用时,直接对输出信号赋值即可。
例如:inout wire io_data ; //inout 端口。
input reg out_data ; //需要向io_data 输出的数据。
input reg io_link ; //inout 口方向控制。
Assign io_data = io_link ? out_data : 1’bz ; /*这步是关键,inout作为输入端口使用时,io_link=0 , 必须把io_data 置为高阻态。
当inout 端口作为输出口使用时,将io_link=1 ,将out_data赋值给io_data就可以了。
*/4、注释:代码注释时一个最大的共同错误是,注释描述的只是代码本身所实现的功能。
正确的注释写法是,应该假定读者是一个有经验的工程师,他熟悉verilog语言本身,但对于该工程并不熟悉。
注释的最高境界是:抛开源代码,单从注释就明白设计者所要实现的功能。
例如:错误的注释:addr <= addr + 1’b1 ; //addr自增1.这句注释不会给读者提供任何有用的信息。
正确的注释,(假定该工程是FPGA与MCU通信)addr<= addr + 1’b1 ; //在MCU写入一个字节数据后,addr 自增1 ,以供MCU读取下一个字节数据。
5、状态机:verilog描述的电路大都是并行实现的,但是对实际的工程应用,往往需要让硬件来实现一定具有一定顺序的工作,这就要用到状态机的思想,构成状态机的基本要素是状态机的输入(如SRAM的wr_req ,rd_req)、输出(状态变化后引起的变化)、状态(如SRAM的IDLE、WR_S1、RD_S1等等),状态机分为有限状态机和无限状态机,实际设计中一般都指有限状态机。
Verilog编码规范标准

Verilog编码规〔仅供部使用〕拟制: xxx 日期:xxx审核: 审核者日期:yyyy-mm-dd 批准: 批准者日期:yyyy-mm-dd所有侵权必究修订记录目录1命名规32代码编写规52.1版面52.2编写代码规53电路设计规那么133.1时钟133.2复位143.3防止LATCH153.4防止组合反应153.5赋值语句153.6case语句和if-then-else语句153.7状态机163.8异步逻辑174模块划分185提高可移植性的编码风格185.1采用参数化设计185.2采用独立于工具平台和工艺库的设计195.3尽量使用已经得到验证的IP196其他一些设计建议207附件218参考文档:25根本原那么:简单,一致,可重用。
●简单指尽量使用简单的语句,尽量使用简单的设计,尽量使用简单的时钟,尽量使用简单的复位。
●一致指尽量保持代码风格一致,尽量保持命名一致。
●可重用指有成熟的IP尽量使用IP,设计的代码要尽量可重用。
1命名规给信号命名就像给孩子取名字一样,有区别,有根源,有深度,还有一点,要简单,别冗长。
有区别指取名字不要一样,假设大家只有一个手机,那这个还能有什么用处?有根源指取名字要能象姓氏一样,让人一看就直到是家的后代而不是家的。
有深度就是取名字要有涵义,一,二,三虽然也是名字,但是请考虑一下被取名字人的感受。
简单点,几十个字母长的名字,打字的和看字的都累。
♦大小写规那么:只有parameter,`define和module名称才能享受大写。
♦Module 名应与文件名保持一致〔文件名是小写〕,假设不想在设计后面遇到麻烦的话。
♦不要尝试使用任何保存字,因为他们已经被保存了。
♦不要重复使用同样的名字去命名不同的数据。
♦〔建议〕对module名加〞_LVx〞的后缀,增强module名称的结构层次含义如:设计顶层为TOP LEVEL,即LEVEL1,命名为QTRxxxx_LV1;时钟模块,IO_PAD,CORE,为LEVEL2,命名为CLK_PROC_LV2等等;CORE子模块为LEVEL3,然后以此类推。
Verilog代码规范

switcher
sf
Switch fabric
temporary transmit
tmp
临时
tx
发送(帧数据)相关
Valid wr enable
write
vld(v) wen wr
有效、校验正确 写使能 写操作
a. 端口、信号、变量名的所有字母小写:函数名、宏定义、参数定义用大写 b. 使用简称、缩略词(加上列表) c. 基于含义命名(避免以数字命名的简单做法),含义可分段(最多分三段),每一小
端口定义按照输入,输出,双向的顺序: 模块名、模块例化名统一,例化名前加大写 U_以区分 ( 多次
例化另加标识 ),三者关系: 文件名 :xxx .v (小写)
模块名 :XXX (大写) 例化名 :U_XXX (大写) IP 内 部 所 有 的 模 块 名 都 要 加 IP 名 或 者 IP 名 简 称 作 前 缀 , 如 USB_CTRL 、 USB_TX_FIFO。
// Full name : complete Emglish nme of this abbreviated
//
// Author
: Athor/ID
: Author’s email
// Data
:
// Version
: V 1.0
//
//Abstract
:
// Called by
C. 赋值要指明比特宽度 赋值或者条件判断时要注明比特宽度,注意表达式的位宽匹配。如:
VERILOG语言编写规范

VERILOG语⾔编写规范VERILOG语⾔编写规范1 ⽬的本规范的⽬的是提⾼书写代码的可读性可修改性可重⽤性,优化代码综合和仿真结果,指导设计⼯程师使⽤VerilogHDL规范代码和优化电路,规范化公司的ASIC设计输⼊从⽽做到1. 逻辑功能正确2.可快速仿真3. 综合结果最优如果是hardware model)4. 可读性较好。
2 范围本规范涉及Verilog HDL编码风格,编码中应注意的问题, Testbench的编码等。
本规范适⽤于Verilog model的任何⼀级( RTL behavioral, gate_level),也适⽤于出于仿真,综合或⼆者结合的⽬的⽽设计的模块。
3 定义Verilog HDL : Verilog 硬件描述语⾔FSM :有限状态机伪路径:静态时序分析( STA)认为是时序失败,⽽设计者认为是正确的路径4 引⽤标准和参考资料下列标准包含的条⽂通过在本标准中引⽤⽽构成本标准的条⽂在标准出版时所⽰版本均为有效所有标准都会被修订使⽤本标准的各⽅应探讨使⽤下列标准最新版本的可能性Actel HDLCoding Style GuiderSun MicrosystemsRevisionVerilogStyle and Coding Guidelines5 规范内容Verilog 编码风格本章节中提到的Verilog编码规则和建议适应于 Verilog model的任何⼀级( RTL behavioral,gate_level) 也适⽤于出于仿真,综合或⼆者结合的⽬的⽽设计的模块。
命名规范选择有意义的信号和变量名,对设计是⼗分重要的。
命名包含信号或变量诸如出处,有效状态等基本含义下⾯给出⼀些命名的规则。
1. ⽤有意义⽽有效的名字有效的命名有时并不是要求将功能描述出来如For ( I = 0; I < 1024; I = I + 1 )Mem[I]<= #1 32’b0;For 语句中的循环指针I 就没必要⽤loop_index作为指针名。
高通的绝密Verilog编码规范(中文版)verilogco

Verilog编码规范2.编写可综合的RTL级Verilog 模块代码时必须遵守的要点:2.1 不允许在代码中出现的语句要点:⚫不允许在可综合的设计代码中使用`Define 来定义参数, 应该使用参数Parameter来定义。
`Define只用于编写不可综合的仿真测试模块。
⚫不允许使用UDP ( 用户定义的原语元件)⚫不允许在可综合代码中出现逻辑反馈环路,否则会生成不可预知的逻辑电路。
⚫只允许用Verilog2001 中的always (*) 来生成组合逻辑,其他Verilog 2001语法在可综合模块中目前都不建议采用。
2.2 建议尽量采用的要点⚫用高电平有效的硬件异步复位reset。
⚫用高电平有效的同步软件复位reset。
⚫尽可能使用高电平有效信号,不使用低电平有效信号(除某些总线、器件有特殊要求外)。
只有复位信号reset 在特定情况下可以设置为低电平有效信号。
⚫尽可能使用assign语句设计组合逻辑。
⚫模块之间数据交换总线应该尽量用多路器实现。
尽量不使用三态总线。
三态总线只用于对外接口或者顶层内部总线。
⚫模块中的每个输出信号原则上必须通过寄存器输出。
任何不通过寄存器输出的信号必须加以注释,注意防止出现反馈回路。
⚫尽量合并源代码,使其简洁明了,不要试图依靠综合器的功能。
⚫case语句和if else语句必须保证其完整性,即所有分支项应该完全列出,case语句应该加缺省项(default),if语句应该有对应的else项。
⚫使用参数(parameter)作为可变化的常数,例如总线的位宽。
⚫端口声明的顺序--在保证先输入再输出的基础上按如下顺序clocks,resets,control signals,address bus,data bus⚫端口和连接端口的信号尽量同名。
⚫注释应尽量靠近被注释的语句。
大段的注释必须用由注释符号组成的边框/////////////// 围绕。
⚫代码中的所有常数都应该使用参数(parameter),将这些参数的定义放在一个独立的文件中,然后在设计模块中用`include 宏命令将其包含。
verilog HDL 代码风格规范

命名要做到简洁、清晰、有效,尽可能做到见名知意。 1. 使用有意义的名字。 使用有意义的的名字,使设计者更容易理解信号意义,理解模块功能,发现设计错误, 修改错误,同时方便成员间交流。 2. 使用规范的缩写。
2013-08-05
版权所有 侵权必究
4
领步电气 Verilog HDL 代码规范
1) 可综合设计.......................................................................................................................4 a) 命名规范...................................................................................................................4 b) 模块规范...................................................................................................................7 c) Net and Register......................................................................................................12 d) Expressions..............................................................................................................13 e) For 语句 ..................................................................................................................13 f) If 语句 .....................................................................................................................13 g) Case 语句 ...............................................................................................................14 h) Writing functions.....................................................................................................14 i) 使用可综合的语句.................................................................................................14 j) Comments ...............................................................................................................15 k) FMS..........................................................................................................................15
讲义-Verilog Coding Style

Verilog Coding Styles For RTL Synthesis本培训课程的目标是让新员工了解在作设计中编写Verilog代码时应该使用规范的、能综合的、高效率的代码风格,并且通过上机练习实践。
本培训课程采用Synopsys公司出的针对Design Complier的培训教材,分为三个部分•第一部分它介绍了RTL综合的含义,并分别讲述了组合电路设计和时序电路设计的常见编码风格;•第二部分介绍了资源块和资源块的共享、一些综合工具不支持的代码及其解决方法、仿真和综合电路的不匹配情况、高效的编码风格等内容;•第三部分讲述在数字电路设计中的一些经验、设计重用的编码风格和一些常会犯的编码错误(部分内容为前两部分的总结)。
第一部分1、RTL综合的概述综合(synthesis):根据约束条件,从抽象层次高的领域(级)到抽象层次低的领域(级)的等价变换,变换的同时对描述进行优化。
综合分翻译、优化、映射3个过程2、组合电路本单元的目标是让设计人员了解从所给的代码会综合出怎样的组合电路以及为得到想要的组合电路应如何较快地编写正确的verilog描述。
•连续性赋值语句、程序块(包括其事件列表规则);•if、case(full_case、parallel_case)、for循环和function、task以及三态驱动器等编码风格。
2.1 连续性赋值语句module Cont_Assignment(A, B ,C, D);input A, B, C;output D;assign D = (A & B) | C;endmoduleps: 有可能选用与非门或者附加buffer2.2 程序块语句module Always_Statement(A, B ,C, D);input A, B, C;output D;reg D;always @(A or B or C)D = (A & B) | C;endmodule2.3 事件表规则•用always描述一个组合电路时,那么在always块中用到的每一个变量必须出现的always描述的事件表里,否则会出现综合前后仿真结果不一致。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
verilog的代码规范和coding风格
想要成为一名优秀的数字IC设计工程师需要哪些基本的专业知识呢?如下:
1.半导体物理学、半导体器件物理学、基本的固体物理、半导体工艺与制造等物理学知识;
2.电路分析、模拟电子线路、COMS模拟集成电路、专用
集成电路基础等模拟IC知识;
3.信号系统、数字信号处理、信道编码、通信原理等通
信知识;
4.C语言、汇编、C++、脚本(shell、tcl、perl)、Linux(我觉得如果懂kernel那就更好了)、体系结构、组成原理等计算机知识;
5.各种EDA和编程调试工具的使用Modelsim、Debussy、quartus ii、Cadence、DC、vim等等(就数字方向而言
用的最多的5种左右,模拟另当别论);另外虚拟机什么的总得玩得转吧!
6.当然最重要的还是我们亲爱的--verilog,不会
verilog(当然VHDL也是一样的)那你会别的也算不上优秀的
Digital IC Engineer!verilog语法并不复杂,只是初
学者容易犯一些“类C”错误,总会不经意
间将verilog写
成了C语言,或者是没有使用并行思想,或者就是多处
赋值等等问题。
如果我们克服了之前的一些小毛病,在
这
些之外,我们想更近一步提升自己的写代码水平、研发
水平,而不是只做一个码农的话那么我们要做的就是:
第一步:提高代码规范性,每个企业、研究所可能都有
自己的一套代码书写规范,但是总的来说都有一些共性,而且往往这些共性的地方还特别多,一个没有代码规范
的程序员不可能写出非常漂亮和优秀的程序,当然有了
规
范的代码后也不一定就能写出漂亮和优秀的程序,这是
两码事。
代码规范之后的一个境界我觉得是优良的编程
风
格,编程风格不同于代码规范,编程风格在verilog中
特别指代那些逻辑上的风格,同样的功能,使用不同的
编
程风格,代码综合面积可能是几倍的关系,这一点我深
有体会,另外,人们不经意间的编码习惯可能会导致许
多
冗余代码,在verilog综合之后,这些冗余就会成为实
实在在多出来的不必要的电路,他们或者是寄存器或者
是
没用的组合逻辑,虽然往往DC一类的综合工具会对代码综合进行优化,并且会根据综合脚本进行最大化的优化计
算,但是工具毕竟是工具,他不可代替人类,很多冗余电路综合工具并没有办法进行优化,因为工具并不知道你
的本意,也不可完全进行语意预测,而不必要的电路意味着更多的流片成本,更低的work效率和更多的功耗消耗,这些都不是我们想看到的,所以一个好的coding风格本身对于企业来说就是非常大的价值!!!
当然我认为要培养良好的coding风格并不是一件容易的事,本身 verilog design == 电路设计,透过代码看电路这个能力并不是一蹴而就的,这需要我们的长期的学习和思考总结,就像模拟设计一样,往往这是一种经验!。