Verilog+HDL代码书写规范
Verilog+HDL+代码风格规范

读使能 读
准备好 接收 请求 复位
片段 节 源 统计 定时 转换
临时的 发送 有效
写使能 写操作
b) 模块规范
模块的命名尽量用英文表达出其完整的功能,长度一般不少于 2 个字母。 1. 每文件最多只能包含一个模块。 每个模块必须用一个文件表示。在一个文件中不允许存在一个以上的模块。(该模块的
作者 frwfpga frwfpga
2014-11-29
版权所有 侵权必究
2
XXX Verilog HDL 代码规范
目录
Verilog HDL 代码规范......................................................................................................................1 修订记录........................................................................................................................................... 2 目录 ..................................................................................................................................................3 1. 目的...........................................................................................................................................4 2. 范围...........................................................................................................................................4 3. 定义...........................................................................................................................................4 4. 规范内容...................................................................................................................................4
verilog语言例化书写格式

verilog语言例化书写格式Verilog语言是一种硬件描述语言(HDL),在数字电路设计、逻辑仿真和综合等领域得到广泛应用。
在Verilog中,实例化是将模块实例化为实体的过程,通过实例化可以在设计中重复使用模块并连接各个模块之间的信号。
Verilog语言的例化书写格式如下:1. 定义模块首先,在设计中需要定义要实例化的模块。
模块定义包括模块名称、输入输出端口和内部信号。
例如,我们定义了一个名为"example_module"的模块,包含三个输入端口(A、B、C)和一个输出端口(D):```verilogmodule example_module(A, B, C, D);input A, B, C;output D;// internal logicendmodule```2. 实例化模块在设计中需要使用该模块时,可以进行实例化。
实例化的格式为:模块名称实例名称 ( .端口名称(信号名称), ... );例如,我们使用上述定义的"example_module"模块进行实例化,假设实例名称为"example_inst",连接的信号为A、B、C、D,实例化代码如下:```verilogexample_module example_inst(.A(signal_A),.B(signal_B),.C(signal_C),.D(signal_D));```在上述实例化代码中,通过"."符号将信号与端口进行连接。
例如,信号signal_A将与输入端口A连接起来。
3. 内部信号的连接在实例化模块时,还可以直接将内部信号连接到其他信号上。
例如,我们在实例化时,将一个内部信号internal_signal直接连接到另一个信号output_signal上:```verilogexample_module example_inst(.A(signal_A),.B(signal_B),.C(signal_C),.D(output_signal));assign internal_signal = output_signal;```通过上述的例化书写格式,我们可以在Verilog设计中有效地实例化模块,并连接各个模块之间的信号。
VerilogHDL程序编写规范2

文档控制表
文档
编辑工具 作者情况
标题: 版本号: 发行号:
实行日期: 关键词
名称 模板:
原作者: 协作者: 校对: 审核:
表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编码规范

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编码规范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编写规则的说明

关于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 一个文件一个模块一个文件最多可以有一个模块。
硬件描述语言篇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语言编写规范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作为指针名。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.目的本规范的目的是提高书写代码的可读性、可修改性、可重用性,优化代码综合和仿真的结果,指导设计工程师使用VerilogHDL规范代码和优化电路,规范化可编程技术部的FPGA设计输入,从而做到:①逻辑功能正确,②可快速仿真,③综合结果最优(如果是hardware model),④可读性较好。
2.范围本规范涉及Verilog HDL编码风格,编码中应注意的问题,Testbench的编码等。
本规范适用于Verilog model的任何一级(RTL,behavioral, gate_level),也适用于出于仿真、综合或二者结合的目的而设计的模块。
3.定义Verilog HDL : Verilog 硬件描述语言FSM :有限状态机伪路径:静态时序分析(STA)认为是时序失败,而设计者认为是正确的路径。
4.规范内容4.1.Verilog 编码风格本章节中提到的Verilog编码规则和建议适应于 Verilog model的任何一级(RTL,behavioral, gate_level),也适用于出于仿真,综合或二者结合的目的而设计的模块。
4.1.1. 命名的习惯选择有意义的信号和变量名,对设计是十分重要的。
命名包含信号或变量诸如出处、有效状态等基本含义,下面给出一些命名的规则。
y用有意义而有效的名字有效的命名有时并不是要求将功能描述出来,如For ( I = 0; I < 1024; I = I + 1 )Mem[I] <= 32’b0;For 语句中的循环指针I 就没必要用loop_index作为指针名。
y用连贯的缩写长的名字对书写和记忆会带来不便,甚至带来错误。
采用缩写时应注意同一信号在模块中的一致性。
缩写的例子如下:Addr addressPntr pointerClk clockresety 用最右边的字符下划线表示低电平有效,高电平有效的信号不得以下划线表示,短暂的引擎信号建议采用高有效。
如: Rst_ ,Trdy_, Irdy_, Idsel.y 大小写原则名字一般首字符大写,其余小写(但parameter, integer 定义的数值名可全部用大写),两个词之间要用下划线连接。
如: Packet_addr, Data_in, Mem_wr Mem_ce_y 全局信号名字中应包含信号来源的一些信息。
如:D_addr[7:2] ,这里的“D ”指明了地址是解码模块(Decoder module)中的地址。
y 同一信号在不同层次应保持一致性。
y 自己定义的常数、类型等用大写标识如:parameter CYCLE=100;y 避免使用保留字如:in ,out ,x ,z 等不能够做为变量、端口或模块名y 添加有意义的后缀,使信号名更加明确,常用的后缀如下:寄存后的信号_reg 芯片的双向信号-xbio芯片的三态输出_xz芯片的漏极开路输出_xod芯片原始输出信号_xo芯片原始输入信号_xi下降沿有效的寄存器_f连到三态输出的信号_z寄存前的信号_next时钟信号_Clk意义后缀y 一个module 一个文件,且文件名能与module 名对应起来4.1.2. Modulesy 顶层模块应只是内部模块间的互连。
Verilog 设计一般都是层次型的设计,也就是在设计中会出现一个或多个模块,模块间的调用在所难免。
可把设计比喻成树,被调用的模块就是树叶,没被调用的模块就是树根,那么在这个树根模块中,除了内部的互连和模块的调用外,尽量避免再做逻辑,如不能再出现对reg 变量赋值等。
这样做的目的是为了更有效的综合,因为在顶层模块中出现中间逻辑,Synopsys 的design compiler 就不能把子模块中的逻辑综合到最优。
y 每一个模块应在开始处注明文件名、功能描述、引用模块、设计者、设计时间及版权信息等。
代码中的所有说明、注释必须均为英文。
需要特别说明的是,必须对Revision History 要格外重视,必须将每次版本修改的信息按照时间一一详加叙述,以保持版本的可读性与继承性。
如: /* ======================== *\Filename ﹕ RX_MUX.vAuthor ﹕Description ﹕Called by ﹕Top moduleRevision History ﹕99-08-01Revision 1.0Email ﹕ M@Company ﹕ Huawei Technology .IncCopyright(c) 1999, Huawei Technology Inc, All right reserved\* ========================= */y不要对Input进行驱动, 在module 内不要存在没有驱动的信号,更不能在模块端口中出现没有驱动的输出信号,避免在elaborate和compile时产生warning,干扰错误定位。
y每行应限制在80个字符以内,以保持代码的清晰、美观和层次感。
一条语句占用一行,如果较长(超出80个字符)则要换行。
y电路中调用的 module名用Uxx标示, Cell名用Vxx标识。
向量大小表示要清晰,采用基于名字(name_based)的调用而非基于顺序的(order_based)。
另外,调用模块时调用关系要写全,否则,在用synplify综合过程会出warning。
Instance UInstance2(.DataOut(DOUT),.DataIn(DIN),.Cs_(Cs_));y用一个时钟的上沿或下沿采样信号,不能一会儿用上沿,一会儿用下沿。
如果既要用上沿又要用下沿,则应分成两个模块设计。
建议在顶层模块中对Clock做一非门,在层次模块中如果要用时钟下沿就可以用非门产生的Posedge Clk_,这样的好处是在整个设计中采用同一种时钟沿触发,有利于综合。
y在模块中增加明了的英文注释。
对信号、参量、引脚、模块、函数及进程等加以说明,便于阅读与维护。
y Module 名要用大写标示,且应与文件名保持一致。
如:Module DFF_ASYNC_RST(Reset,Clk,Data,Qout);y严格芯片级模块的划分只有顶层包括IO引脚(pads),中间层是时钟产生模块、JTAG、芯片的内核(CORE),这样便于对每个模块加以约束仿真,对时钟也可以仔细仿真。
y模块输出寄存器化对所有模块的输出加以寄存(如图1),使得输出的驱动强度和输入的延迟可以预测,从而使得模块的综合过程更简单。
- 输出驱动的强度都等于平均的触发器驱动强度- 输入延迟始终等于通过触发器的路径,近于相等(图 1)y将关键路径逻辑和非关键路径逻辑放在不同模块保证DC可以对关键路径模块实现速度优化,而对非关键路径模块实施面积优化。
在同一模块DC无法实现不同的综合策略。
y将相关的组合逻辑放在同一模块有助于DC对其进行优化,因为DC通常不能越过模块的边界来优化逻辑y ultraedit中的tab键设置为4个空格键y输入输出的端口定义分行写,一行定义一个输入输出,顶格对齐y module头中的括号内的输入输出的定义按输入输出分开,与括号对齐y module用到的变量统一在输入输出的定义之后,按wire和reg型分开定义,并对重要的信号加注释说明y module主体以//module begin作为起始标识y子模块的调用顶格对齐;子模块中的输入输出的端口信号的名字尽量与调用的名字一致y if...else一一对应,若无else时,加一个空语句4.1.3. Net and Registery一个reg变量只能在一个always语句中赋值。
y向量有效位顺序的定义一般是从大数到小数。
尽管定义有效位的顺序很自由,但如果采用毫无规则的定义势必会给作者和读代码的人带来困惑,如Data[-4:0],则LSB[0][-1][-2][-3][-4]MSB,或Data[0:4],则LSB[4][3][2][1][0]MSB,这两种情况的定义都不太好,推荐Data[4:0]这种格式的定义。
y对net和register类型的输出要做声明。
如果一个信号名没做声明,Verilog将假定它为一位宽的wire变量。
y无用信号不要引入module内部,避免在elaborate和compile时产生warningr类型的输出要做声明。
如果一个信号名没做声明,Verilog将假定它为一位宽的wire变量。
4.1.4. Expressionsy用括号来表示执行的优先级尽管操作符本身有优先顺序,但用括号来表示优先级对读者更清晰,更有意义。
If ((alpha < beta) && (gamma >= delta))....比下面的表达更合意If (alpha < beta && gamma >= delta)...y用一个函数(function)来代替表达式的多次重复如果代码中发现多次使用一个特殊的表达式,那么就用一个函数来代替,这样在以后的版本升级时更便利,这种概念在做行为级的代码设计时同样使用,经常使用的一组描述可以写到一个任务(task)中。
4.1.5. IF 语句y向量比较时,比较的向量要相等。
当比较向量时,verilog将对位数小的向量做 0 扩展以使它们的长度相匹配,它的自动扩展为隐式的。
建议采用显示扩展,这个规律同样适用于向量同常量的比较。
Reg Abc [7:0];Reg Bca [3:0];......If (Abc = = {4’b0, Bca})begin.......If (Abc = = 8’b0) beginy每一个If 都应有一个else 和它相对应在做硬件设计时,常要求条件为真时执行一种动作而条件为假时执行另一动作,即使认为条件为假不可能发生。
没有else可能会使综合出的逻辑和RTL级的逻辑不同。
如果条件为假时不进行任何操作,则用一条空语句。
always @(Cond)beginif (Cond)DataOut <= DataIn;Else:;end以上语句DataOut会综合成锁存器.y应注意If ..else if ...else if ...else 的优先级4.1.6 case 语句y case语句通常综合成一级多路复用器(图的右边部分),而if-then-else则综合成优先编码的串接的多个多路复用器,如图的左边部分。
通常,使用case 语句要比if语句快,优先编码器的结构仅在信号的到达有先后时使用。
条件赋值语句也能综合成多路复用器,而case 语句仿真要比条件赋值语句快。
y所有的Case 应该有一个default case ,允许空语句Default : ;4.1.7 Writing functionsy在function的最后给function赋值y函数中避免使用全局变量否则容易引起HDL行为级仿真和门级仿真的差异。