Verilog+HDL+代码风格规范
2024版Verilog编程规范(华为)
实现自动化测试流程,提高测试 效率和准确性。
06
代码审查与质量保证
代码审查流程介绍
提交代码
开发人员将代码提交到代码审查 系统中。
分配审查任务
系统或审查组长将审查任务分配 给审查人员。
代码审查
审查人员对代码进行逐行审查, 检查是否符合编程规范和质量要
求。
审查通过
经过多轮反馈和整改后,代码符 合要求,审查通过。
通过定期的培训、分享和宣传活动,提高开 发人员对Verilog编程规范的认识和重视程度。
引入自动化检查工具
建立持续改进机制
研究和引入自动化检查工具,对Verilog代码 进行静态分析和规范检查,进一步提高代码 质量和开发效率。
建立规范的持续改进机制,收集开发人员的 反馈和建议,及时调整和优化规范内容。
可重用性原则
模块应具有高内聚、低耦 合的特点,便于在不同项 目中重用。
可维护性原则
模块应易于理解、测试和 修改,以降低维护成本。
顶层结构设计方法
自顶向下设计
从系统整体需求出发,逐 步细化到各个模块的设计 和实现。
模块化设计
将系统划分为多个独立的 模块,每个模块承担一定 的功能,便于并行开发和 维护。
减少错误和提高代码质量
02
规范的编程习惯有助于减少编码过程中的错误,提高代码的稳
定性和可靠性。
促进知识共享和传承
03
统一的编程规范有利于知识的积累和传承,降低新人学习成本,
提高团队整体技术水平。
适用范围及对象
适用范围
本规范适用于使用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
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语言良好的代码编写格式Verilog 及VHDL良好的代码编写风格良好代码编写风格可以满足信、达、雅的要求。
在满足功能和性能目标的前提下,增强代码的可读性、可移植性,首要的工作是在项目开发之前为整个设计团队建立一个命名约定和缩略语清单,以文档的形式记录下来,并要求每位设计人员在代码编写过程中都要严格遵守。
良好代码编写风格的通则概括如下:(1)对所有的信号名、变量名和端口名都用小写,这样做是为了和业界的习惯保持一致;对常量名和用户定义的类型用大写;(2)使用有意义的信号名、端口名、函数名和参数名;(3)信号名长度不要太长;(4)对于时钟信号使用clk 作为信号名,如果设计中存在多个时钟,使用clk 作为时钟信号的前缀;(5)对来自同一驱动源的信号在不同的子模块中采用相同的名字,这要求在芯片总体设计时就定义好顶层子模块间连线的名字,端口和连接端口的信号尽可能采用相同的名字;(6)对于低电平有效的信号,应该以一个下划线跟一个小写字母b 或n 表示。
注意在同一个设计中要使用同一个小写字母表示低电平有效;(7)对于复位信号使用rst 作为信号名,如果复位信号是低电平有效,建议使用rst_n;(8)当描述多比特总线时,使用一致的定义顺序,对于verilog 建议采用bus_signal[x:0]的表示;(9)尽量遵循业界已经习惯的一些约定。
如*_r 表示寄存器输出,*_a 表示异步信号,*_pn 表示多周期路径第n 个周期使用的信号,*_nxt 表示锁存前的信号,*_z 表示三态信号等;(10)在源文件、批处理文件的开始应该包含一个文件头、文件头一般包含的内容如下例所示:文件名,作者,模块的实现功能概述和关键特性描述,文件创建和修改的记录,包括修改时间,修改的内容等;(11)使用适当的注释来解释所有的always 进程、函数、端口定义、信号含义、变量含义或信号组、变量组的意义等。
注释应该放在它所注释的代码附近,要求简明扼要,只要足够说明设计意图即可,避免过于复杂;(12)每一行语句独立成行。
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代码书写规范
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;
6 Verilog hdl设计的层次与风格
26
基本时序设计例子
D-FF designs(基本D触发器)
module DFF(Q, D, CLK); output Q; input D, CLK; reg Q; always @(posedge CLK) begin Q <= D; end endmodule
27
设计一个基本的D触发器,JK触发器 用行为描述设计一个4选1选择器
10
数据流描述
数据流描述方式主要使用持续赋值语句,多用 于描述组合逻辑电路,其格式为: assign LHS_net=RHS_expression; 右边表达式中的操作数无论何时发生变化,都 会引起表达式值的重新计算, 并将重新计算后 的值赋予左边表达式的net型变量。
Verilog HDL 设计的层次与风格
1
行为描述方式
过程块
连续赋值语句 模块实例语句
模块
结构描述方式
基本原语实例语句
数据流描述方式
2
结构描述
在Verilog程序中可通过如下方式描述电路的结构
◆ 调用Verilog内置门元件(门级结构描述) ◆ 调用开关级元件(晶体管级结构描述) ◆ 用户自定义元件UDP(也在门级)
6
练习
用结构描述设计一个基本的D触发器,JK触发器 用结构描述设计一个4选1选择器
7
行为描述
就是对设计实体的数学模型的描述,其抽象程度 远高于结构描述方式。行为描述类似于高级编程 语言,当描述一个设计实体的行为时,无需知道 具体电路的结构,只需要描述清楚输入与输出信 号的行为,而不需要花费更多的精力关注设计功 能的门级实现。
3
Verilog的 内置门元件
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 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
VerilogHDL编码规范
VerilogHDL编码规范VerilogHDL编码规范目录Table of Contents1 范围 (3)2 综述 (3)3 详述 (4)3.1基本格式 (4)3.1.1标准文件头 .......................................................................... 错误!未定义书签。
3.1.2 include (4)3.1.3缩进格式 (4)3.1.4注释 (4)3.1.5保留字 (4)3.2模块与端口 (4)3.2.1模块命名 (4)3.2.2模块例化 (4)3.2.3端口定义 (4)3.2.4输入与输出寄存 (4)3.3信号与变量 (5)3.3.1信号命名 (5)3.3.2向量 (5)3.3.3数据流向 (5)3.3.4 Integer类型 (5)3.3.5位宽匹配 (5)3.3.6内部寄存 (5)3.4时钟与复位 (5)3.4.1时钟复位命名 (5)3.4.2时钟可见性 (6)3.4.3时钟不可做数据输入 (6)3.4.4门控时钟和门控复位 (6)3.4.5全局复位 (6)3.4.6时钟产生 (6)3.5设计风格 (6)3.5.1 if与case (6)3.5.2调试寄存器 (6)3.5.3异步复位 (7)3.5.4时钟事件 (7)3.5.5顶层 (7)3.5.6电路分级 (7)3.5.7资源共享 (7)3.5.8 for语句 (7)3.5.9标准模块 (7)3.5.10参数使用 (7)3.5.11避免SnakePath (8)3.6状态机 (8)3.6.1状态机命名 (8)3.6.2初始状态 (8)3.6.3双进程 (8)3.6.4状态分配 (8)3.6.5无效状态 (8)3.6.6状态机编码 (8)3.7赋值 (8)3.7.1阻塞与非阻塞赋值 (8)3.7.2避免Latch (8)3.7.3一个信号对应一个always (9) 3.8 always (9)3.8.1敏感变量 (9)3.8.2边沿触发 (9)3.8.3单时钟(沿) (9)3.8.4避免Latch (9)3.8.5单(组)信号 (9)3.9可靠性 (9)3.9.1异步处理 (9)3.9.2亚稳态 (9)3.9.3异步反馈环路 (9)3.9.4避免Lacth (10)3.10综合 (10)3.10.1综合器开关 (10)3.10.2 for语句 (10)3.10.3运算符 (10)3.10.4移位变量 (10)3.10.5 PLI和TASK (10)3.10.6不可综合的语句 (10)参考文献............................................................................................ 错误!未定义书签。
EDA 第5章verilogHDL语法规范2
为了对存储器的某个字赋值,需要为该字指定数组索引。 该索引可以是一个表达式。该表达式中含有其他的变量 或网络数据,通过对该表达式的运算,得到一个结果值, 从而定位存储器中的某个字。
Verilog HDL数据类型
其中:
net_kind 是上述网络类型的一种。 msb和lsb 用于定义网络范围的常量表达式。其范围定义是可选的。 如果没有定义范围,默认的网络类型为1位。
Verilog HDL数据类型
--网络类型
wire和tri网络类型
用于连接单元的连线是最常见的网络类型。连线(wire) 网络与 三态(tri)网络语法和语义一致。
// 16位三态总线网络类型
wire [0: 31] w1, w2; bit0
// 两个32位网络类型,MSB为
Verilog HDL数据类型
--网络和变量
变量是对数据存储元件的抽象。
从当前赋值到下一次赋值之前,变量应当保持当前的值不 变。
注:
对于reg,time和integer这些变量类型数据,它们的初始值应当是x。 对于real和realtime变量类型数据,默认的初始值是0.0。 在变量数据类型中,只有reg和integer变量型数据类型是可综合的,其
Verilog HDL数据类型
--整数、实数、时间和实时时间
实数型变量声明 real
在机器码表示法中,实数型数据是浮点型数值。该变量 类型可用于对延迟时间的计算。
实数型变量是不可综合的。对于实数来说: 不是所有的Verilog HDL操作符都能用于实数值。 实数变量不使用范围声明。 实数变量默认的初始值为0。
企业用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+HDL代码书写规范
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 用最右边的字符下划线表示低电平有效,高电平有效的信号不得以下划线表示,短暂的引擎信号建议采用高有效。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
读使能 读
准备好 接收 请求 复位
片段 节 源 统计 定时 转换
临时的 发送 有效
写使能 写操作
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
2) 仿真验证.........................................................................................................................17
2014-11-29
版权所有 侵权必究
3
本规范读者含概 FPGA 设计人员、验证人员和其他与 FPGA 开发相关人员。
3. 定义
Verilog HDL FSM RM BFM
Verilog 硬件描述语言 有限状态机 参考模型 总线功能模型
4. 规范内容
1) 可综合设计
确保代码能被绝大多数综合工具所接受,且能无歧义快速综合,现制定可综合代码规范。
receive request
reset segment source statistics
timer switch temporary transmit valid write anable write
rden rd rdy rx req rst seg scr stat tmr sf tmp 或者 temp tx vld wren wr
造成设计错误。
10. 全局信号名字中应包含信号来源的一些信息。系统信号应加上 sys。 比如:adc2378_sdo 、sys_clk。
11. 添加有意义的后缀使信号名更加明确常用的后缀。
如表 1 表格 1 常用信号后缀表:
信号后缀
意义
_clk
时钟
_n
低有效
2014-11-29
版权所有 侵权必究
5
XXX Verilog HDL 代码规范
XXXX Verilog HDL 代码规范
FPGA 组
Verilog HDL 代码规范
文档作者: frwfpga 审 批:
日期: 2014-03-07 日期:
XXX Verilog HDL 代码规范
修订记录
日期 2013-8-5 2013-9-27
修订版本 1.00 1.01
描述 初稿完成 1、命名规范中函数 名、模块名大写修改 为小写。 2、增加模块规范中条 件判断算式表达式部 分。
信号命名过长对设计带来麻烦,缩写就是为了简洁、清晰,所有缩写要求能基本表明本
单词的含义。常用信号缩写见表格 2,其它信号名一般取其前三个字母。信号名长度在 20 个字母内,词与词之间用下划线连接。 3. 使用规范的大小写。 端口、信号、变量、函数名、模块名所有st; parameter CLK_PERIOD = 20。 4. 总线命名规则。 总线宽度的语句必须用 [N:0], 而不能用 [0:N],标记 0 表示 LSB, 标记 N 表示 MSB。 5. 低有效信号名加 _n。 比如:
sys_rst_n。 6. 信号打拍加 _Xd,打 1 拍加 _d 或者 _1d,打 2 拍加 _2d。 比如:
sck_ctrl_d,
sck_ctrl_2d。
7. 避免使用数字和 reg 作为后缀。 综合工具会给寄存器自动加上_reg,如果自己加上_reg,网表可读性变差。多 bit 信号
综合后可能会改名成 bit 数后缀的单 bit 信号,造成网表理解困难。 比如:ctrl_reg 改为 reg_ctrl, 8. 避免使用关键字。 比如:in out case 等不能够做为变量端口或模块。 9. 同一信号在不同层次应保持一致性。 层次化设计中,同一信号相同名称可以确保不同层次信号处理正确,避免因为名称不同
1) 可综合设计.......................................................................................................................4 a) 命名规范...................................................................................................................4 b) 模块规范...................................................................................................................7 c) Net and Register......................................................................................................13 d) Expressions..............................................................................................................13 e) For 语句 ..................................................................................................................13 f) If 语句 .....................................................................................................................14 g) Case 语句 ...............................................................................................................14 h) Writing functions.....................................................................................................14 i) 使用可综合的语句.................................................................................................14 j) Comments ...............................................................................................................15 k) FMS..........................................................................................................................15
a) 命名规范
命名要做到简洁、清晰、有效,尽可能做到见名知意。 1. 使用有意义的名字。 使用有意义的的名字,使设计者更容易理解信号意义,理解模块功能,发现设计错误, 修改错误,同时方便成员间交流。 2. 使用规范的缩写。