verilog的代码规范和coding风格

合集下载

企业用verilog 代码风格规范

企业用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代码编写风格的必要性。

强调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

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编程规范(华为)

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

华为fpga设计规范(Verilog Hdl)

华为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编码规范

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代码规范

硬件描述语言篇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代码编写注意事项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读取下一个字节数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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语法并不复杂,只是初
学者容易犯一些&ldquo;类C&rdquo;错误,总会不经意
间将verilog写
成了C语言,或者是没有使用并行思想,或者就是多处
赋值等等问题。

如果我们克服了之前的一些小毛病,在

些之外,我们想更近一步提升自己的写代码水平、研发
水平,而不是只做一个码农的话那么我们要做的就是:
第一步:提高代码规范性,每个企业、研究所可能都有
自己的一套代码书写规范,但是总的来说都有一些共性,而且往往这些共性的地方还特别多,一个没有代码规范
的程序员不可能写出非常漂亮和优秀的程序,当然有了

范的代码后也不一定就能写出漂亮和优秀的程序,这是
两码事。

代码规范之后的一个境界我觉得是优良的编程

格,编程风格不同于代码规范,编程风格在verilog中
特别指代那些逻辑上的风格,同样的功能,使用不同的

程风格,代码综合面积可能是几倍的关系,这一点我深
有体会,另外,人们不经意间的编码习惯可能会导致许

冗余代码,在verilog综合之后,这些冗余就会成为实
实在在多出来的不必要的电路,他们或者是寄存器或者

没用的组合逻辑,虽然往往DC一类的综合工具会对代码综合进行优化,并且会根据综合脚本进行最大化的优化计
算,但是工具毕竟是工具,他不可代替人类,很多冗余电路综合工具并没有办法进行优化,因为工具并不知道你
的本意,也不可完全进行语意预测,而不必要的电路意味着更多的流片成本,更低的work效率和更多的功耗消耗,这些都不是我们想看到的,所以一个好的coding风格本身对于企业来说就是非常大的价值!!!
当然我认为要培养良好的coding风格并不是一件容易的事,本身 verilog design == 电路设计,透过代码看电路这个能力并不是一蹴而就的,这需要我们的长期的学习和思考总结,就像模拟设计一样,往往这是一种经验!。

相关文档
最新文档