verilog语言代码设计规范

合集下载

Verilog编码规范

Verilog编码规范

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)等等。

Verilog程序编写规范

Verilog程序编写规范

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

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不作要求。

硬件描述语言篇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名要小写,并且与文件名保持一致。

2024版年度Verilog编程规范(华为)

2024版年度Verilog编程规范(华为)

通过定期的培训、分享和宣传活动,提高开 发人员对Verilog编程规范的认识和重视程度。
引入自动化检查工具
建立持续改进机制
研究和引入自动化检查工具,对Verilog代码 进行静态分析和规范检查,进一步提高代码 质量和开发效率。
建立规范的持续改进机制,收集开发人员的 反馈和建议,及时调整和优化规范内容。
同步/异步通信
根据实际需求选择同步或异步通信方式,确保子模块间的协同工 作。
20
时钟域划分及时序收敛策略
时钟域划分
根据系统时钟需求,将设计划分为不同的时钟域, 避免跨时钟域操作带来的问题。
时序收敛策略
采用合适的时序收敛方法,如时钟同步、异步 FIFO等,确保数据在不同时钟域间正确传输。
时序约束与验证
2024/2/2
01 注释应清晰明了,准确描述代码的功能和 实现方法。
02 注释应与代码同步更新,避免注释与代码 不一致。
03
注释应使用中文或英文,避免使用其他语 言。
04
对于重要的函数、模块和算法,应在文件 开头添加注释说明。
14
空格和换行使用原则
关键字与括号之间应加空 格,如`if (`、`for (`等。
开发效率提高
规范的编码风格使得开发人员能够更快速地理解和修改代码,提高 了开发效率。
团队协作更加顺畅
统一的编程规范促进了团队成员之间的协作,减少了因代码风格不同 而产生的沟通成本。
2024/2/2
31
未来改进方向
持续优化规范内容
加强规范培训和宣传
根据业界最佳实践和团队实际经验,持续优 化Verilog编程规范的内容,以适应新的技术 和应用场景。
一种硬件描述语言 (Hardware Description Language,HDL),用于 描述数字电路和系统。

Verilog HDL编程规范

Verilog HDL编程规范

注意: 顶层文件名为:“模块名_top(_文件类型)”; 仿真测试的文件名字与被测试的模块名字一致,并且后面加上后缀 “_tb”,即 “模 块名(_top)_tb(_文件类型)”;
3、 每个设计的源文件,其开头部分应包含如下注释内容: 1) 年份及公司名称; 2) 3) 4) 5) 作者; 文件名; 所属项目; 顶层模块;
每行只有一个端口定义或说明,并加注释,注释放在同一行; 例如: module Prescaler ( core_32m_clk, system_clock, div16_clk, div16_clk_b,
reset_b, scan_mode_test ); input core_32m_clk; input system_clk; output div16_; output div16_clk_b; // 32 MHz clock // system clock // input clock divided by 16 // input clock divided by 16 and inverted
6) 模块名称及其描述; 7) 修改纪录; 例如: 文件头部分: (英文) ///////////////////////////////////////////////////////////////// // Copyright (c) 2004 Freescale Semiconductor, Inc. All rights reserved // Freescale Confidential Proprietary // ----------------------------------------------------------------// FILE NAME : // DEPARTMENT : // AUTHOR : // AUTHOR’S EMAIL : //

VerilogHDL代码书写规范

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

Verilog代码书写规范2.5.1 信号命名规则信号命名规则在团队开发中占据着重要地位,统一、有序的命名能大幅减少设计人员之间的冗余工作,还可便于团队成员代码的查错和验证。

比较著名的信号命名规则当推Microsoft 公司的“匈牙利”法,该命名规则的主要思想是“在变量和函数名中加入前缀以增进人们对程序的理解”。

例如所有的字符变量均以ch为前缀,若是常数变量则追加前缀c。

信号命名的整体要求为:命名字符具有一定的意义,直白易懂,且项目命名规则唯一。

对于HDL设计,设计人员还需要注意以下命名规则。

1.系统级信号的命名系统级信号指复位信号,置位信号,时钟信号等需要输送到各个模块的全局信号。

系统信号以字符串sys或syn开头;时钟信号以clk开头,并在后面添加相应的频率值;复位信号一般以rst或reset开头;置位信号为st或set开头。

典型的信号命名方式如下所示:wire [7:0] sys_dout, sys_din;wire clk_32p768MHz;wire reset;wire st_counter;2.低电平有效的信号命名低电平有效的信号后一律加下划线和字母n。

如:wire SysRst_n;wire FifoFull_n;3.过锁存器锁存后的信号经过锁存器锁存后的信号,后加下划线和字母r,与锁存前的信号区别。

如:信号CpuRamRd信号,经锁存后应命名为CpuRamRd_r。

低电平有效的信号经过锁存器锁存后,其命名应在_n后加r。

如:CpuRamRd_n信号,经锁存后应命名为CpuRamRd_nr多级锁存的信号,可多加r以标明。

如:CpuRamRd信号,经两级触发器锁存后,应命名为CpuRamRd_rr。

2.5.2 模块命名规则HDL语言的模块类似于C语言中的函数,可采用C语言函数的大多数规则。

模块的命名应该尽量用英文表达出其完成的功能。

遵循动宾结构的命名法则,函数名中动词在前,并在命名前加入函数的前缀,函数名的长度一般不少于2个字母。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

verilog语言代码设计规范2011年12月目录一、规范适用范围 ------------------------------------------------------------------------ 41.1项目适用范围------------------------------------------------------------------------------------- 41.2人员适用范围------------------------------------------------------------------------------------- 41.3编码设计的成果形式 --------------------------------------------------------------------------- 4二、代码书写规范 ------------------------------------------------------------------------ 52.1模块说明书写规范------------------------------------------------------------------------------- 52.1模块注释书写规范------------------------------------------------------------------------------- 52.3变量名称书写规范------------------------------------------------------------------------------- 62.4代码结构书写规范------------------------------------------------------------------------------- 7三、使用verilog语言的语法范围----------------------------------------------------- 83.1设计RTL代码的语法范围 -------------------------------------------------------------------- 83.2设计仿真代码的语法范围 -------------------------------------------------------------------- 10四、使用verilog语言的结构范围---------------------------------------------------- 114.1系统设计文件的形式与使用方法----------------------------------------------------------- 114.2模块结构划分的标准 -------------------------------------------------------------------------- 124.3组合逻辑的代码风格 ------------------------------------------------------------------------ 134.4时序逻辑的代码风格 -------------------------------------------------------------------------- 214.5仿真代码的代码风格 -------------------------------------------------------------------------- 27五、使用受限范围内的语法或结构要进行的申请过程-------------------------- 325.1受限的语法与结构------------------------------------------------------------------------------ 325.2批准使用的程序--------------------------------------------------------------------------------- 32二、代码书写规范2.1模块说明书写规范在开始子模块设计时,必须对子模块的基本信息给予说明。

说明的位置一般在设计的开头,使用注释的形式用(/* */)说明该设计的作者、编写日期、版本号、在系统中的层次位置、基本功能描述等。

其形式如下所示:说明的内容要简洁清晰。

使用/* */对将说明部分括起来是为了与普通注释相区别。

2.1模块注释书写规范注释对项目团队关于设计的交流至关重要,好的设计总是会在恰当的地方对语句或变量予以说明,没有注释的设计不是真正的工业级设计,通篇的注释同没有注释一样糟糕,会将代码淹没在无用的注释之中。

这一节给出书写注释的规范。

如果设计中出现了一个新的变量,那么必须对这个新变量给予注释,对变量的注释应该放在变量的定义之前,注释应该说明变量的物理意义或作用。

其形式如下:如果设计中的某块结构属于作者的创新或设计中很关键的部分,作者应该对这种结构的物理含义予以简要说明。

注释在语句或结构的前一行开始写如:2.3变量名称书写规范verilog语言规定了各种类型的标志符的格式,作为规范我们对用户自定义的各种变量的命名方法及书写格式加以约束。

变量一般指模块(或设计)名、端口名、连线名、参照名、单元名以及内部寄存器名。

首先变量名必须能表达实际的物理意义,如果需要几个单词来表示,那么单词之间用一个“_”分隔。

变量名不宜过长,一般不要超过16个字符否则书写的效率会下降,因此变量名应该尽量使用单词的缩略写法,完整的含义应在注释中给予说明。

我们规定常量参数一律使用大写字母表示,变量的名称一律用小写字母a~z、数字0~9或下划线_表示,变量首字符一律用字母。

模块名(或设计名)应该与文件名一致,一个文件只应包含一个模块。

它是模块功能的缩略表达。

端口名应与该端口实际的物理意义相一致。

连线是对内部单元(实例)引脚间进行连接的物理线或是对组合逻辑输出端口、组合逻辑单元输出端进行赋值运算的输入线。

连线名应该有确定的连接对象或是有确定的信号物理意义,所以针对单元引脚连接的连线它的名称应该表明所连接单元的名称,如timing_alu表示时序发生器发出的控制信号连接ALU部件的控制端。

针对为输出端做赋值运算的输入连线它的名字应该表达相应的物理意义,绝不要使用通用名如:a,b,c这样的名字。

这类连线适当的名称如:add_a,add_b。

参照名就是一个单元或实例参考的库标准单元或原始设计名,所以它的名字与库单元或模块名相同。

单元与实例在synopsys的DC工具中是不加区分的,这里也等同看待,它的名字可以用参照名为头后加数字予以标识。

如alu1、acc1等。

如果设计的内部有中间级寄存器,那么寄存器以实际的物理意义进行命名,比如在乘法器中为分割关键路径引入的中间级寄存器可以命名为pipeline1_out等。

2.4代码结构书写规范好的代码结构可以清晰的看出设计的层次关系,进而使结构与设计者所要表达的逻辑意图一致,方便纠错和交流。

代码最基本的结构有平行结构和层次结构,他们反映了代码的隶属关系,我们规定注释语句与语句块是一个层次的,这意味着对模块的注释行(以//开头)必须在一行的顶头开始写。

其他语句的层次低于模块定义和注释,那么其他语句至少要向后缩退四个空格。

语句块中的语句低于语句块的定义,例如:always @(posedge clk)beginout <= in;end//end always语句块中的语句块和其他语句是同级的。

语句块结束应该有注释说明结束的语句块的名称例如:always @(posedge clk1 negedge clear)beginif(!clear)beginout <= 6'b000000;endelsebegincase(addr)`SFR_A:beginout <= in;end……endcaseendend三、使用verilog语言的语法范围3.1设计RTL代码的语法范围verilog语言是一种通用的HDL(硬件描述语言),它的语法范围包括了用户各种设计层级的需求,虽然语言本身对这种层级并没有细致的区分,但因为设计者编写的代码最终要使用具体的综合工具综合成实际电路,所以语言层级的划分不可避免的具有针对某种工具的特点,我们这里的划分依据是根据DesignCompile综合工具来定的。

在论述的过程中我们常使用左值和右值的称谓,一般我们将赋值运算符左侧的变量称作左值,右侧的变量称作右值,因此左值具有位置属性而右值具有数值属性。

右值的任何地方禁止出现“x”,左值在任何情况下不可以为常量。

在有些环境中也将左值称做写数据,右值称做读数据。

在一个语句块中不可对同一个左值赋两次值,因为这样会引起数据冲突(三态门除外)。

verilog语言可以描述四个设计层级的语法范畴,依次是:系统行为级、模块寄存器传输级(RTL)、电路门级、晶体管开关级。

层级之间的转换我们称之为综合。

目前业界的流行的做法是前端设计将RTL级综合为门级网表。

行为级到门级的直接综合还不成熟,另外,数字电路中的晶体管我们一般当作开关来对待,因此对它们具体的器件特性描述,并不是针对数字电路设计的verilog语言所能及的。

系统行为级描述一般作为系统设计的辅助手段或建立系统仿真环境的语言实现手段,在系统设计时,设计人员一般使用行为级描述来建立系统数据流的直观表述,以助选定设计方案,划分系统层次、确定模块接口等。

这个级别是设计的最高抽象层,它不考虑设计的具体实现,只是确定实现的可行性,和估计实现的规模,因此系统设计时系统行为级描述不限制语言的种类,可以用verilog也可用System C甚至C语言,它们只是帮助系统设计人员最终得到系统各个模块的端口列表和层级子模块明确的功能定义。

有些项目使用层级关系的原理图来说明系统结构,子模块使用黑盒来代替。

一些小项目这个过程可以省略直接由编码人员来实现。

行为级描述也可以建立系统的仿真环境,它也是实际工作中行为级最重要的作用。

这时一般将被仿真的模块作为实例,仿真环境为实例提供各种输入向量,设计人员观察输出结果分析被测实例的功能正确与否,如有错误可以定位错误以便修正。

HDL的寄存器传输级(RTL)一般用于对电路子模块的描述,它一般由四种基本结构组成:寄存器、计数器、选择器、算术逻辑运算单元。

相关文档
最新文档