verilog编程规范 致远电子
Verilog编码规范
![Verilog编码规范](https://img.taocdn.com/s3/m/eeee6bc851e2524de518964bcf84b9d529ea2c52.png)
Verilog编码规范Verilog语⾔编码规范维护⼈:赵⽂哲E-mail:venturezhao@/doc/cb240dc489eb172ded63b717.html1.关于verilog语⾔编码规范本编码规范由西安交通⼤学⼈机所电视组全体学⽣和创芯公司全体员⼯共同编写和维护。
以此来维护DTV系列芯⽚的verilog源码的可读性,健壮性和易维护性。
该⽂档主要致⼒于verilog语⾔的编码标准化,同时也适⽤于其他相似的硬件描述语⾔,如VHDL等。
使代码易于管理的⽅法之⼀是增强代码的⼀致性,让别⼈读懂⾃⼰的代码是⾮常重要的事情。
因此,保持⾃⼰的代码符合统⼀的规范是⼀个编码者的基本素质。
如果⾃⼰的编码风格与本⽂档的规定实在不同,⽆法忍受,请与维护者联系,在组内会议上统⼀讨论解决⽅案。
此外,如其他⼈对该编码规范有任何建议和批评,欢迎联系该规范的维护者。
维护者的联系⽅式详见⾸页的维护列表。
关于本⽂档读者,⽂档主要规范了verilog语⾔的写法和格式,并不介绍verilog语⾔的语法。
请读者⾃⼰学习verilog语⾔的基础知识。
2.项⽬⽂件组织形式⼀般⽽⾔,项⽬的⽂件需要统⼀的存放在⼀个统⼀的⽂件夹下。
根据各⾃功能不同,分门别类的存放。
以项⽬proj-xx为例,其⽂件存储⽅式如表1所⽰。
表1 项⽬⽂件组织proj-xx|--doc|--datasheet|--specification|--inc|--ip|--sim_utility|--altera_utility|--xilinx_utility|--dc_utility|--rtl|--sim|--proj_sim|--subproj_sim|--adc|--dac|--ddr|--probe|--dc|--pt|--fp|--pr|--synplifydoc:存放项⽬相关的⽂档,包括该项⽬⽤到的datasheet,芯⽚规格书(specification)等等。
VerilogHDL程序编写规范2
![VerilogHDL程序编写规范2](https://img.taocdn.com/s3/m/dc8012f2770bf78a652954a8.png)
文档控制表
文档
编辑工具 作者情况
标题: 版本号: 发行号:
实行日期: 关键词
名称 模板:
原作者: 协作者: 校对: 审核:
表1 文档控制表VeFra bibliotekilogHDL程序编写规范 V1.0
2008年6月1日
Microsoft® Office Word 2003
刘兆庆 罗杰俊
I
哈尔滨工业大学自动化测试与控制研究所技术规范
4 可综合性编码规范........................................................................................................................18 4.1 寄存器描述.........................................................................................................................18 4.2 避免产生锁存器.................................................................................................................18 4.3 避免产生组合电路反馈。................................................................................................ 19 4.4 完整的敏感量列表.............................................................................................................20 4.5 阻塞和非阻塞赋值.............................................................................................................21 4.6 case 语句和 if-else 语句.....................................................................................................23 4.7 时序逻辑电路的描述.........................................................................................................24 4.8 对关键信号的描述.............................................................................................................25 4.9 避免使用延时语句.............................................................................................................25
Verilog程序编写规范
![Verilog程序编写规范](https://img.taocdn.com/s3/m/4eb8ea651ed9ad51f01df297.png)
Verilog程序编写规范在满足功能和性能目标的前提下,增强代码的可读性、可移植性,首要的工作是在项目开发之前为整个设计团队建立一个命名约定和缩略语清单,以文档的形式记录下来,并要求每位设计人员在代码编写过程中都要严格遵守。
良好代码编写风格的通则概括如下:一、命名规则(1)对所有的信号名、变量名和端口名都用小写,这样做是为了和业界的习惯保持一致;对参数名、常量名和用户定义的类型用大写;(2)使用有意义的信号名、端口名、函数名和参数名;(3)信号名长度不超过20个字符;(4)对于时钟信号使用clk 作为信号名,如果设计中存在多个时钟,使用clk作为时钟信号的前缀;(5)对来自同一驱动源的信号在不同的子模块中采用相同的名字,这要求在芯片总体设计时就定义好顶层子模块间连线的名字,端口和连接端口的信号尽可能采用相同的名字;(6)对于低电平有效的信号,应该以一个下划线跟一个小写字母b 或n 表示。
注意在同一个设计中要使用同一个小写字母表示低电平有效;(7)对于复位信号使用reset 作为信号名,如果复位信号是低电平有效,建议使用reset_n;(8)当描述多比特总线时,使用一致的定义顺序,采用从高到低的定义顺序。
对于verilog 建议采用bus_signal[x:0]的表示;(9)尽量遵循业界已经习惯的一些约定。
如*_r 表示寄存器输出,*_a 表示异步信号,*_pn 表示多周期路径第n 个周期使用的信号,*_nxt 表示锁存前的信号,*_z 表示三态信号等;二、文档结构(10)在源文件、批处理文件的开始应该包含一个文件头、文件头一般包含的内容如下例所示:文件名,作者,模块的实现功能概述和关键特性描述,文件创建和修改的记录,包括修改时间,修改的内容等;// +FHDR-------------------------------------------------------------------// Copyright @ 2008, State Key Laboratory of Advanced Optical Communication Systems & Networks, PKU // ----- -----------------------------------------------------------------------// FILE NAME:// AUTHOR:// DATA OF CREATION:// -----------------------------------------------------------------------------// PURPOSE://// --- -----------------------------------------------------------------------// RELEASE HISTORY:// DATA AUTHOR DESCRIPTION//// --- -----------------------------------------------------------------------// -FHDR-------------------------------------------------------------------//(11)使用适当的注释来解释所有的进程、函数、端口定义、信号含义、变量含义或信号组、变量组的意义等。
Verilog编码规范
![Verilog编码规范](https://img.taocdn.com/s3/m/50e1dcd5195f312b3069a505.png)
ASIAN MICROELECTRONICS CO.LTDVerilog编码规范From:项目管理部文档编号:AM-PMD038本规范规定了Verilog编码规范,即采用Verilog设计时的代码书写规范,本规范适用于逻辑芯片开发中使用Verilog语言作为RTL级设计语言电路描述规则(注释部分)关键词:Verilog HDL、注释摘要:本文档规定了在用Verilog HDL描述电路时注释要求。
一、在使用Verilog HDL描述电路时,为了增加电路的可读性,必须在电路中加入注释。
为了统一和规范设计,制定该规则。
二、Verilog HDL 模块结构:在用Verilog HDL描述电路时,基本结构如下:{注释1}module [模块名(端口名列表)][参数定义] //{注释2}[端口类型说明]//{注释3}[数据类型说明]//{注释4}{注释5}[描述体部]//{注释6}endmodule三、各部分注释具体要求:1. 注释1:在module 语句以前;建立时间和设计人;ASIAN MICROELECTRONICS CO.LTD修改时间和修改人列表;描述模块的功能;仿真文件名;2. 注释2:参数定义以后。
每行只能定义一个参数;参数的含义;正常情况的取值;3. 注释3:端口类型说明以后。
每行只能说明一个端口;端口的信号含义;4. 注释4:数据类型说明以后。
每行只能说明一个数据;数据的具体含义;修改时间和修改人列表;5. 注释5:在每个always前;描述该块语句完成的功能;6. 注释6:关键的判断语句后;简单描述语句的功能;四、说明:1. 不得使用中文注释;2. 需要时使用参数化设计;3. 模块、端口和变量命名尽可能统一,且意义明确;4. 各描述体功能尽可能明确和单一;5. 对任何需存档的修改必须记录在设计文挡中。
ASIAN MICROELECTRONICS CO.LTD 电路描述规则(代码部分) 大类 编号规则要素 1低电平有效的信号,信号名后缀“_n ” 2模块名小写 // 对AM0202不作要求。
VerilogHDL编码规范
![VerilogHDL编码规范](https://img.taocdn.com/s3/m/d27e1a6dcc22bcd127ff0c73.png)
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)——必须遵守。
关于VerilogHDL编写规则的说明
![关于VerilogHDL编写规则的说明](https://img.taocdn.com/s3/m/7022306925c52cc58bd6be65.png)
关于V erilogHDL编写规则的说明摘自“Comprehensive SRS V3 Standards—Semiconductor Reuse Standard”7 V erilog HDL 编码7.1 前言V erilog HDL编码标准属于虚拟部件生成一部分,用于对编码中的命名习惯、代码文档和代码格式风格的说明。
对相应规则的遵从能够简化重用,并从代码中抽象出其精华,使得代码可读性增强且兼容大多数工具。
除特别声明,任何与标准不一致的地方必须纠正而且以文档说明。
该标准确保在各种应用中代码的高度适应性,以此提升了重用性。
本文档的目的就是确保门级实现与标准的V erilog仿真器一致。
分割会影响针对应用的适应性。
建模实践小节处理在综合环境中很难描述清楚而又必须确保前后综合的一致性结构。
该标准可应用于行为和综合代码。
而且,还可以应用于其它的V erilog代码中如测试台、监视器等。
某些标准明确说明其应用代码的类型,如有例外会标出。
所描述的规则肯定是在快速Soc设计、集成、生产及维护过程中必须的要求项。
注意到在许多情况下,简单的介绍也能适应要求,但是,介绍会带来大量的例外、工具限制或一些深度的使用习惯,而这些与规则相悖。
7.1.1可交付的列表在第2部分VC块可交付列表已经定义了IP库形式。
包括:可综合的RTL源代码(L1)测试台(V1)驱动(V2)监视器(V3)详细行为建模(V4)短小模型(V6)形式模型验证(V12)7.2参考信息7.2.1参考文档略7.2.2术语基地址:偏移量相对的地址HDL:硬件描述语言屏蔽拴:物理上,屏蔽拴指一条连接到VDD或VSS,或者二个输入的选择输出线,用于对模块的配置而不会影响模块内部。
该设置能够在更改配置时避免重综合。
PLL:锁相环RTL:文本宏顶层模块:在VC设计层次中最高模块。
UDP:用户定义原语7.3命名规则7.3.1文件命名R7.3.1 一个文件一个模块一个文件最多可以有一个模块。
2024版年度Verilog编程规范(华为)
![2024版年度Verilog编程规范(华为)](https://img.taocdn.com/s3/m/0c08faa380c758f5f61fb7360b4c2e3f56272576.png)
通过定期的培训、分享和宣传活动,提高开 发人员对Verilog编程规范的认识和重视程度。
引入自动化检查工具
建立持续改进机制
研究和引入自动化检查工具,对Verilog代码 进行静态分析和规范检查,进一步提高代码 质量和开发效率。
建立规范的持续改进机制,收集开发人员的 反馈和建议,及时调整和优化规范内容。
同步/异步通信
根据实际需求选择同步或异步通信方式,确保子模块间的协同工 作。
20
时钟域划分及时序收敛策略
时钟域划分
根据系统时钟需求,将设计划分为不同的时钟域, 避免跨时钟域操作带来的问题。
时序收敛策略
采用合适的时序收敛方法,如时钟同步、异步 FIFO等,确保数据在不同时钟域间正确传输。
时序约束与验证
2024/2/2
01 注释应清晰明了,准确描述代码的功能和 实现方法。
02 注释应与代码同步更新,避免注释与代码 不一致。
03
注释应使用中文或英文,避免使用其他语 言。
04
对于重要的函数、模块和算法,应在文件 开头添加注释说明。
14
空格和换行使用原则
关键字与括号之间应加空 格,如`if (`、`for (`等。
开发效率提高
规范的编码风格使得开发人员能够更快速地理解和修改代码,提高 了开发效率。
团队协作更加顺畅
统一的编程规范促进了团队成员之间的协作,减少了因代码风格不同 而产生的沟通成本。
2024/2/2
31
未来改进方向
持续优化规范内容
加强规范培训和宣传
根据业界最佳实践和团队实际经验,持续优 化Verilog编程规范的内容,以适应新的技术 和应用场景。
一种硬件描述语言 (Hardware Description Language,HDL),用于 描述数字电路和系统。
VERILOG语言编写规范
![VERILOG语言编写规范](https://img.taocdn.com/s3/m/88a96443a1c7aa00b42acb66.png)
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编码要求规范
![Verilog编码要求规范](https://img.taocdn.com/s3/m/13024399581b6bd97e19ea7c.png)
Verilog编码规(仅供部使用)拟制: xxx 日期:xxx审核: 审核者日期:yyyy-mm-dd 批准: 批准者日期:yyyy-mm-dd所有侵权必究修订记录目录1命名规 (8)2代码编写规 (11)2.1 版面 (11)2.2 编写代码规 (12)3电路设计规则 (26)3.1 时钟 (26)3.2 复位 (27)3.3 避免LATCH (28)3.4 避免组合反馈 (29)3.5 赋值语句 (29)3.6 case语句和if-then-else语句 (29)3.7 状态机 (30)3.8 异步逻辑 (33)4模块划分 (33)5提高可移植性的编码风格 (34)5.1 采用参数化设计 (34)5.2 采用独立于工具平台和工艺库的设计 (35)5.3 尽量使用已经得到验证的IP (36)6其他一些设计建议 (36)7附件 (39)8参考文档: (46)基本原则:简单,一致,可重用。
●简单指尽量使用简单的语句,尽量使用简单的设计,尽量使用简单的时钟,尽量使用简单的复位。
●一致指尽量保持代码风格一致,尽量保持命名一致。
●可重用指有成熟的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编码规范
![Verilog编码规范](https://img.taocdn.com/s3/m/a1abb92384254b35effd349d.png)
Verilog编码规范(仅供内部使用)拟制 :xxx日期:xxx审查 :审查者日期:yyyy-mm-dd 同意 :同意者日期:yyyy-mm-dd版权全部侵权必究订正记录订正日期订正版本描绘订正者目录基来源则:简单,一致,可重用。
简单指尽量使用简单的语句,尽量使用简单的设计,尽量使用简单的时钟,尽量使用简单的复位。
一致指尽量保持代码风格一致,尽量保持命名一致。
可重用指有成熟的IP 尽量使用IP ,设计的代码要尽量可重用。
1命名规范给信号命名就像给孩子取名字相同,有差异,有本源,有深度,还有一点,要简单,别冗长。
有差异指取名字不要相同,若是大家只有一个手机号码,那这个号码还可以有什么用途有本源指取名字要能象姓氏相同,让人一看就直到是张家的后辈而不是李家的。
有深度就是取名字要有涵义,张一 , 张二 , 张三固然也是名字,可是请考虑一下被取名字人的感觉。
简单点,几十个字母长的名字,打字的和看字的都累。
大小写规则:只有parameter , `define和module名称才能享受大写。
Module 名应与文件名保持一致(文件名是小写),若是不想在设计后边碰到麻烦的话。
不要试试使用任何保存字,由于他们已经被保存了。
不要重复使用相同的名字去命名不一样的数据。
(建议)对module 名加” _LVx”的后缀,加强module 名称的构造层次含义如:设计顶层为TOP LEVEL,即 LEVEL1,命名为QTRxxxx_LV1;时钟模块, IO_PAD, CORE,为 LEVEL2,命名为CLK_PROC_LV2等等;CORE内子模块为LEVEL3,而后以此类推。
关于来自同一驱动源的全部时钟信号使用相同的名字。
关于低电平有效的信号,应当以_n 结尾。
模块间相连端口名称要一致。
(建议)使用下表所列的命名缩写方式。
全称名称clock Clkreset rstclear clraddress addrdata_in dindata_out doutinterrupt request intread enable rdenwrite enable wrencount cntrequest req全称名称control ctrlarbiter arbpointer ptrsegment segmemory memregister reg(建议)使用以下后缀命名方式全称增添后缀active low_nenable_enselect_selflag_flgdelay_dly信号命名的两个词之间用下划线间隔,如ram_addr ,cnt_ctrl等等信号命名尽量不要使用孤立的、小写的英文字母L2代码编写规范2.1 版面语句独立成行,增添可读性和可保护性。
Verilog编码要求规范
![Verilog编码要求规范](https://img.taocdn.com/s3/m/d1bcc772f90f76c661371aef.png)
Verilog编码规范(仅供内部使用)拟制: xxx 日期:xxx审核: 审核者日期:yyyy-mm-dd 批准: 批准者日期:yyyy-mm-dd版权所有侵权必究修订记录目录1命名规范 (8)2代码编写规范 (11)2.1 版面 (11)2.2 编写代码规范 (12)3电路设计规则 (26)3.1 时钟 (26)3.2 复位 (27)3.3 避免LATCH (28)3.4 避免组合反馈 (29)3.5 赋值语句 (29)3.6 case语句和if-then-else语句 (29)3.7 状态机 (30)3.8 异步逻辑 (33)4模块划分 (33)5提高可移植性的编码风格 (34)5.1 采用参数化设计 (34)5.2 采用独立于工具平台和工艺库的设计 (35)5.3 尽量使用已经得到验证的IP (36)6其他一些设计建议 (36)7附件 (39)8参考文档: (46)基本原则:简单,一致,可重用。
●简单指尽量使用简单的语句,尽量使用简单的设计,尽量使用简单的时钟,尽量使用简单的复位。
●一致指尽量保持代码风格一致,尽量保持命名一致。
●可重用指有成熟的IP尽量使用IP,设计的代码要尽量可重用。
1命名规范给信号命名就像给孩子取名字一样,有区别,有根源,有深度,还有一点,要简单,别冗长。
有区别指取名字不要一样,假如大家只有一个手机号码,那这个号码还能有什么用处?有根源指取名字要能象姓氏一样,让人一看就直到是张家的后代而不是李家的。
有深度就是取名字要有涵义,张一,张二,张三虽然也是名字,但是请考虑一下被取名字人的感受。
简单点,几十个字母长的名字,打字的和看字的都累。
♦大小写规则:只有parameter,`define和module名称才能享受大写。
♦Module 名应与文件名保持一致(文件名是小写),假如不想在设计后面遇到麻烦的话。
♦不要尝试使用任何保留字,因为他们已经被保留了。
♦不要重复使用同样的名字去命名不同的数据。
Verilog编码规范
![Verilog编码规范](https://img.taocdn.com/s3/m/559464938762caaedd33d437.png)
Verilog编码规范(仅供内部使用)拟制: xxx 日期:xxx审核: 审核者日期:yyyy-mm-dd 批准: 批准者日期:yyyy-mm-dd版权所有侵权必究修订记录目录1命名规范 (6)2代码编写规范 (8)2.1 版面 (8)2.2 编写代码规范 (8)3电路设计规则 (16)3.1 时钟 (16)3.2 复位 (17)3.3 避免LATCH (18)3.4 避免组合反馈 (18)3.5 赋值语句 (18)3.6 case语句和if-then-else语句 (18)3.7 状态机 (19)3.8 异步逻辑 (20)4模块划分 (21)5提高可移植性的编码风格 (21)5.1 采用参数化设计 (21)5.2 采用独立于工具平台和工艺库的设计 (22)5.3 尽量使用已经得到验证的IP (22)6其他一些设计建议 (22)7附件 (24)8参考文档: (28)基本原则:简单,一致,可重用。
●简单指尽量使用简单的语句,尽量使用简单的设计,尽量使用简单的时钟,尽量使用简单的复位。
●一致指尽量保持代码风格一致,尽量保持命名一致。
●可重用指有成熟的IP尽量使用IP,设计的代码要尽量可重用。
1命名规范给信号命名就像给孩子取名字一样,有区别,有根源,有深度,还有一点,要简单,别冗长。
有区别指取名字不要一样,假如大家只有一个手机号码,那这个号码还能有什么用处?有根源指取名字要能象姓氏一样,让人一看就直到是张家的后代而不是李家的。
有深度就是取名字要有涵义,张一,张二,张三虽然也是名字,但是请考虑一下被取名字人的感受。
简单点,几十个字母长的名字,打字的和看字的都累。
♦大小写规则:只有parameter,`define和module名称才能享受大写。
♦Module 名应与文件名保持一致(文件名是小写),假如不想在设计后面遇到麻烦的话。
♦不要尝试使用任何保留字,因为他们已经被保留了。
♦不要重复使用同样的名字去命名不同的数据。
verilog编程规范
![verilog编程规范](https://img.taocdn.com/s3/m/ad67dc4be518964bcf847c89.png)
用于命名的字符集为:字母A ~Z 和a ~z,数字0~9以及下划线组成。
例如:data_busdata_widthclk_48M48M_clkdata__busdata*bus 命名字符集名称不能以数字开头数据总线48M 时钟信号数据位宽不能连续使用下划线不能包含非字母符号*使用有意义的名字,以利于望文生义参数(parameter )、常量(constant )和块标号(block label )名必须一致采用大写;而信号,变量和结构名(construct )以及实例标号(instance )必须一致采用小写。
有利于在仿真时,区分不变和变化的数据。
大小写规则module display_led(clk_48M,//时钟ledout//LED 输出);input clk_48M;//48M 系统时钟output [7:0] ledout;//LED 输出控制reg [22:0] count;//计数器reg [7:0] led_reg;//LED 输出缓存区wire led_clk;//LED 显示时钟控制parameter COUNTER=100;assign led_clk = count[22]; //LED 显示时间控制模块标号小写变量小写常量大写在不区分大小写的情况下,名字必须唯一。
例如,名字state和State不能同时出现在同一设计中,这是因为有的EDA工具不区分大小写。
名字必须唯一module casestatement (a,State,state,dout);input a;input State;input [2:0] state;output dout;reg dout; parameter STATE = 3'bx11; always @(a or b or state)case(state & State)3'b001: dout=a&b;3'b010: dout=a|b;endcaseendmodule 输入信号参数输入信号不同类型的信号命名习惯如果一个名字由多个字组成,则使用下划线连接,用以增加名字的可读性。
Verilog语言编程规范
![Verilog语言编程规范](https://img.taocdn.com/s3/m/f21fdc06cc175527072208e6.png)
前言 (IV)1范围 (1)2术语 (1)3代码标准 (1)3.1命名规范 (1)3.1.1文件命名 (1)3.1.2HDL代码命名总则 (2)3.2注释 (4)3.2.1文件头 (4)3.2.2其它注释 (5)3.3编程风格 (7)3.3.1编写代码格式要整齐 (7)3.3.2使用二到四个空格符缩排 (7)3.3.3一行一条Verilog语句 (7)3.3.4一行一个端口声明 (7)3.3.5在定义端口时,按照端口类型或端口功能定义端口顺序。
(8)3.3.6保持端口顺序一致。
(8)3.3.7声明内部net (8)3.3.8在一个段内声明所有内部net (8)3.3.9每行长度不超过80字符....................... 错误!未定义书签。
3.3.10代码流中不同结构之间用一空行隔开 (8)3.4模块划分和重用 (10)3.4.1不能访问模块外部的net和variable (10)3.4.2不使用`include编译指令 (10)3.4.3建议模块的端口信号尽可能少。
(10)3.4.4时钟产生电路单独构成一个模块 (10)3.4.5划分时钟域 (10)3.4.6物理和逻辑边界的匹配 (10)3.4.7特定应用代码要单独划分出来 (10)3.4.8关键时序逻辑划分 (10)3.4.9数据流逻辑划分 (11)3.4.10异步逻辑划分 (11)3.4.11状态机划分 (11)3.4.12控制逻辑和存储器划分 (11)3.5逻辑设计经验 (11)3.5.1时钟域要尽可能少,所用时钟尽可能加全局BUFF (11)3.5.2异步接口信号同步化 (11)3.5.3避免寄存器的数据与时钟异步 (11)3.5.4使用无毛刺的门控时钟使能信号 (11)3.5.5直接作用信号无毛刺 (11)3.5.6初始化控制存储元件 (12)3.5.7使用同步设计 (12)3.5.8避免组合反馈环 (12)3.6常用编程技巧 (12)3.6.1条件表达式的值必须是一个单bit值 (12)3.6.2总线位顺序按高到低保持一致 (12)3.6.3不要给信号赋x值 (12)3.6.4寄存器变量只能在一个always语句中赋值 (12)3.6.5对常量使用参数而不使用文本宏 (12)3.6.6不能重复定义参数 (12)3.6.7不能重复定义文本宏 (12)3.6.8保持常量之间的联系 (12)3.6.9状态编码的参数使用 (13)3.6.10`define、`undef配合使用 (13)3.6.11用基地址+地址偏移量生成地址 (13)3.6.12使用文本宏表示寄存器字段位置和值 (13)3.6.13`ifdef的嵌套限制在三层以内 (13)3.6.14操作数的位宽必须匹配 (13)3.6.15模块调用时端口要显式引用 (14)3.6.16矢量端口和net/variable声明的位宽要匹配 (14)3.6.17避免inout类型的端口 (14)3.6.18在复杂的表达式中使用括号 (14)3.7常用综合标准 (14)3.7.1always 的敏感列表要完整 (14)3.7.2一个 always 的敏感列表中只能有一个时钟 (14)3.7.3只使用可综合的结构 (15)3.7.4组合逻辑的条件需完备 (15)3.7.5循环结构中禁用disable语句 (15)3.7.6避免无界循环 (15)3.7.7端口连接禁用表达式 (15)3.7.8禁用Verilog primitive (15)3.7.9边沿敏感结构中使用非阻塞赋值(<=) (15)3.7.10Latch使用非阻塞赋值 (15)3.7.11模块闲置的输入端不要悬空 (15)3.7.12连接模块闲置的输出端 (16)3.7.13函数中不要使用锁存器 (16)3.7.14禁用casex (16)3.7.15多周期路径的信号使用单周期使能信号 (16)3.7.16三态元件建模 (16)3.7.17避免顶层胶合逻辑 (16)3.7.18在case语句中使用default赋值语句 (16)3.7.19full_case综合命令的使用 (16)附录1 HDL编译器不支持的Verilog结构 (18)附录2 Verilog和VHDL关键词列表 (19)前言编写本标准的目的是为了统一部门内部FPGA\EPLD设计用verilog语言编程风格,提高Verilog设计源代码的可读性、可靠性和可重用性,减少维护成本,最终提高产品生产力;并且以此作为代码走查的标准。
verilog编程规范
![verilog编程规范](https://img.taocdn.com/s3/m/c8f1c52f0066f5335a81212c.png)
例如:
data_bus data_width clk48M 48M_clk
数据总线 使用有意义的名 字,以利于望文 数据位宽 生义 48M时钟信号 名称不能以数字开头 不能连续使用下划线 不能包含非字母符号*
data__bus
data*bus
版板所有 © 广州周立功单片机发展有限公司 2007
大小写则
底纹使用-10%灰底,必须以“程序清单”为题注并置于程
序上方。
版板所有 © 广州周立功单片机发展有限公司 2007
命名规则 注释 代码格式
版板所有 © 广州周立功单片机发展有限公司 2007
端口的申明及注释
必须明确地表明端口类型,每行中只有一个端口申明。
module buzzer (
clk_48M, beep, key, ledout ); input input output output . . . endmodule [3:0] [7:0] //时钟输入 //蜂鸣器控制输出 //按键输入 //LED显示控制信号 clk_48M; key; beep; ledout; 最好在同一行上,每 个端口列表后面紧跟 一个描述性的注释
版板所有 © 广州周立功单片机发展有限公司 2007
多个后缀的信号名的优先权
对于包含多个后缀的信号,建议采用下面的优先权, 从高到低。 最高的优先权建议从信号名的最后一个后缀 获得,多个后缀的信号名的优先权: 1. _n //低电平有效信号
ram _z data1 2.
3. 4. _clk _next
模块标号小写
//时钟 //LED输出 //48M系统时钟 //LED输出控制 //计数器 //LED输出缓存区
input output reg reg wire
verilog编写规范_2003
![verilog编写规范_2003](https://img.taocdn.com/s3/m/311377755acfa1c7aa00cc62.png)
在模块中增加注释 对信号参量、引脚、模块、函数及进程等加以说 明便于阅读与维护 Module 名要用大写标示且应与文件名保持一致 如Module DFF_ASYNC_RST( Reset, Clk, Data, Qout );
模块输出寄存器化 对所有模块的输出加以寄存如图1 使得输出的 驱动强度和输入的延迟可以预 测从而使得模块的综合过程更简单
Modules 顶层模块应只是内部模块间的互连 尽量避免再做逻辑,如不能再出现对reg变量 赋值等 这样做的目的是为了更有效的综合
/* ==============================*\ Filename ﹕ xxxxx.v Author ﹕ Description ﹕ Called by ﹕Top module Revision History ﹕ Revision 1.0 Email ﹕ Company ﹕ Copyright(c) reserved \*================================== */
避免使用LATCH
不完整的if和case语句导致不必要的latch的产生 下面的语句中DataOut会被综合成 锁存器如果不希望在电路中使用锁存器它就是错 误 always @(Cond) begin if (Cond) DataOut <= DataIn end
避免使用门控时钟
等效于
for ( i=0; i<=3; i = i + 1) c[i] = a[i] & b[i]; 可以选择简洁的写法.
避免点到点的例外
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
版板所有 广州周立功单片机发展有限公司 2007
在一个 区域中申明所有的内部连线
在模块顶部内部连线申明应紧跟在I/O端口申明的后面. 在模块顶部内部连线申明应紧跟在I/O端口申明的后面. I/O端口申明的后面
module lcd_top ( clk_48M, //系统时钟 rst, //rst为全局复位信号 lcd_en, //LCD使能信号 data_bus //8位指令或数据总线 ); clk_48M; rst; lcd_en; [7:0] data_bus; 用于将 链接两个模块的时钟
变量小写
//LED显示时钟控制
parameter
常量大写
//LED显示时间控制
assign led_clk = count[22];
版板所有 广州周立功单片机发展有限公司 2007
名字必须唯一 在不区分大小写的情况下,名字必须唯一.例如,名字 state和State不能同时出现在同一设计中,这是因为有的EDA state和State不能同时出现在同一设计中,这是因为有的EDA 工具不区分大小写. 工具不区分大小写.
版板所有 广州周立功单片机发展有限公司 2007
多个后缀的信号名的优先权
对于包含多个后缀的信号,建议采用下面的优先权, 从高到低. 最高的优先权建议从信号名的最后一个后缀 获得,多个后缀的信号名的优先权: 获得,多个后缀的信号名的优先权: 1. 2. 3. 4. _n _z _clk/低电平有效信号 //三态信号 //三态信号 //时钟信号 //时钟信号 //状态机信号 //状态机信号
版板所有 广州周立功单片机发展有限公司 2007
每行有一个Verilog语句 每行有一个Verilog语句
每行只有一个Verilog语句,应该保持每行不超过80 每行只有一个Verilog语句,应该保持每行不超过80个字符: Verilog语句 80个字符
不要在同一条线上使用多个分号连接的分开的Verilog语句. 不要在同一条线上使用多个分号连接的分开的Verilog语句 Verilog语句 对于长的语句可以使用回车和缩进方法,表示成连续的语句行. 对于长的语句可以使用回车和缩进方法,表示成连续的语句行.
module casestatement ( a, State, state, dout ); input a; input State; input [2:0] state; output dout; reg dout; parameter STATE = 3'bx11; always @(a or b or state) case(state & State) 3'b001: dout=a&b; 3'b010: dout=a|b; endcase endmodule
版板所有 广州周立功单片机发展有限公司 2007
多个后缀的信号名的优先权
对于包含多个后缀的信号,建议采用下面的优先权, 从高到低. 最高的优先权建议从信号名的最后一个后缀 获得,多个后缀的信号名的优先权: 获得,多个后缀的信号名的优先权: 1. 2. 3. 4. _n _z _clk _next //低电平有效信号 //低电平有效信号 //三态信号 //三态信号 //时钟信号 //时钟信号 //状态机信号 //状态机信号
版板所有 广州周立功单片机发展有限公司 2007
命名规则
注释 代码格式
版板所有 广州周立功单片机发展有限公司 2007
命名规则
注释 代码格式
版板所有 广州周立功单片机发展有限公司 2007
命名字符集 用于命名的字符集为:字母A 用于命名的字符集为:字母A~Z和a~z, 数字0~9以及下划 数字0 线组成. 例如: data_bus data_width clk48M 48M_clk data__bus data*bus
数据总线 使用有意义的名 字,以利于望文 数据位宽 生义 48M时钟信号 名称不能以数字开头 不能连续使用下划线 不能包含非字母符号*
版板所有 广州周立功单片机发展有限公司 2007
大小写规则
参数(parameter),常量(constant)和块标号(block label)名必 参数(parameter),常量(constant)和块标号(block label)名必 须一致采用大写;而信号,变量和结构名(construct)以及实例标号 须一致采用大写;而信号,变量和结构名(construct)以及实例标号 (instance)必须一致采用小写.有利于在仿真时,区分不变和变化的 instance)必须一致采用小写.有利于在仿真时,区分不变和变化的 数据.
版板所有 广州周立功单片机发展有限公司 2007
模块注释模板
模块注释
进程注释
模块结束
版板所有 广州周立功单片机发展有限公司 2007
注释规则(文档版) 注释规则(文档版)
要特别说明的就是,为了排版好看, 要特别说明的就是,为了排版好看,我们采用首行缩进 0.74厘米,字体小五,宋体( ),Courier New( 0.74厘米,字体小五,宋体(中),Courier New(英), 厘米 底纹使用-10%灰底,必须以"程序清单" 底纹使用-10%灰底,必须以"程序清单"为题注并置于程 灰底 序上方. 序上方.
作 者:
日 期:2008-7-2 期:2008-
版板所有 广州周立功单片机发展有限公司 2007
简介 规范的重要性: 规范的重要性: 1. 良好的编程风格有利于减少消耗的硬件资源, 良好的编程风格有利于减少消耗的硬件资源, 提高设计的工作频率. 提高设计的工作频率. 2. 提高系统的可移植性和可维护性. 提高系统的可移植性和可维护性. 3. 程序的格式化能体现程序员的基本素质和整个 团队的风貌. 团队的风貌.
module display_led( clk_48M, ledout ); clk_48M; ledout;
模块标号小写
//时钟 //LED输出 //48M系统时钟 //LED输出控制 //计数器 //LED输出缓存区
input output reg reg wire
[7:0]
[22:0] count; [7:0] led_reg; led_clk; COUNTER=100;
// 时钟节拍计数器
// 计数器加一
注释对齐 语句对齐
注释有两种形式,必须 使用一行注释(//),不 要使用多行注释 (/*…*/),不利于代 码的屏蔽.
版板所有 广州周立功单片机发展有限公司 2007
使用4 使用4个空格进行代码缩进
为了提高程序的可读性,必须使用4个空格(建议使用 为了提高程序的可读性,必须使用4个空格( TAB键以空格代替,详见TAB制表符的设置) TAB键以空格代替,详见TAB制表符的设置)和换行来实 TAB制表符的设置 键以空格代替 现缩进对齐,不要直接使用Tab制表符.因为不同的编辑 Tab制表符 现缩进对齐,不要直接使用Tab制表符. 系统的Tab制表符间距可能不同. 系统的Tab制表符间距可能不同. Tab制表符间距可能不同 例如:使用Notepad++编辑器显示的结果,图中橙色箭头 Notepad++编辑器显示的结果 例如:使用Notepad++编辑器显示的结果, 表示TAB制表. 表示TAB制表. TAB制表
版板所有 广州周立功单片机发展有限公司 2007
ram
data1
z
n
低电平有效信号 三态信号 数据类型
操作对象
版板所有 广州周立功单片机发展有限公司 2007
文件名格式
文件名的格式为:<设计模块名>.<扩展名> 文件名的格式为:<设计模块名>.<扩展名>,从而使文件与设计模块 相对应.例如文件名为counter.v表明该文件中有一个用Verilog HDL语言 相对应.例如文件名为counter.v表明该文件中有一个用Verilog HDL语言 描述的counter模块.以Libero8.0环境为例: 描述的counter模块.以Libero8.0环境为例:
版板所有 广州周立功单片机发展有限公司 2007
命名规则 注释 代码格式
版板所有 广州周立功单片机发展有限公司 2007
端口的申明及注释
必须明确地表明端口类型,每行中只有一个端口申明. 必须明确地表明端口类型,每行中只有一个端口申明.
module buzzer ( clk_48M, beep, key, ledout ); input input output output . . . endmodule [3:0] [7:0] //时钟输入 //蜂鸣器控制输出 //按键输入 //LED显示控制信号 clk_48M; key; beep; ledout; 最好在同一行上,每 个端口列表后面紧跟 一个描述性的注释 端口的申明顺序与端 使用: 使用 口列表的顺序相同 input a; intput b; 不使用: 不使用 input a , b; 和 input a, b;
版板所有 广州周立功单片机发展有限公司 2007
使用4 使用4个空格进行代码缩进
为了提高程序的可读性,必须使用4个空格(建议使用 为了提高程序的可读性,必须使用4个空格( TAB键以空格代替,详见制表符的设置) TAB键以空格代替,详见制表符的设置)和换行来实现缩 键以空格代替 进对齐,不要直接使用Tab制表符.因为不同的编辑系统 Tab制表符 进对齐,不要直接使用Tab制表符. 的Tab制表符间距可能不同. Tab制表符间距可能不同. 制表符间距可能不同 例如:使用记事本打开显示的结果,对比两个图可以看出 例如:使用记事本打开显示的结果, 用不同的编辑器打开差异性很大. 用不同的编辑器打开差异性很大.
版板所有 广州周立功单片机发展有限公司 2007