关于VerilogHDL编写规则的说明
- 格式:doc
- 大小:141.00 KB
- 文档页数:10
关于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 一个文件一个模块一个文件最多可以有一个模块。
原因:简化设计修改。
R7.3.2 文件命名规则文件名必须用下列方式命名:<design unit name>[<_file type].<ext><design unit name>表示一个设计单元的名,如子模块或顶层模块。
<_file type>表示文件的类型(可选项):_task 文件包含任务_func 文件包含函数_defines 文件包含文本宏_disc V erilog规则文件_connect V erilog 连接规则和模块文件<ext>扩展名.v或.vaR7.3.3 分离模拟、数字和混合信号的V erilog文件这三类文件必须单独形成。
原因:各种编译器不能互相编译各种结构。
7.3.2 HDL代码项命名往往一个有意义的名字会比几条注释更加有用。
因此,名称必须具有相关意义。
(即对象名称的属性和目的必须明显的无混淆的)。
下列的命名习惯不能用于第三方PLI任务R7.3.4文字和数字以及下划线组成的符合集名称必须有文字数字或下划线组成[A-Z,a-z,0-9,_]。
不允许采用双下划线。
R7.3.5名称的首字符必须是字母R7.3.6避免使用转义名称转义名不能使用,也不能用于区分信号。
R7.3.7用下划线分割单词对于由多个单词组成的名称,用下划线分割。
理由:这样可以提升代码在修改、验证和调试过程中的可读性。
R7.3.8信号名称拼写和风格一致在整个设计的层次中,必须对线和变量采用一致的拼写和命名风格。
这也包含一些命名习惯。
理由:可以立即识别信号类型(如低电平有效信号、时钟)方便调试R7.3.9 V erilog名称与文档名称相同所有在文档中引用的V erilog RTL级代码的信号和模块名称必须与文档中的名称保持一致。
V erilog RTL代码中关于信号与模块名称注释的引用也必须保持一致。
理由:这样做可以使文档和代码之间交叉参考。
例外:终端用户文档可以不保持一致。
R7.3.10 表示常量的名称采用大写常量名必须一致的采用大写拼写方式。
因此,对于参数名、文本宏名必须采用大写方式。
理由:立即识别在配置和仿真中会改变的对象。
R7.3.11 线、变量、构造、和实例名采用小写方式与建模电路有紧密相关的硬件结构必须采用一致的小写方式。
因此,下列情况必须采用小写:线、变量、构造(如函数、任务,命名的块、模块或者UDP等)、实例(如门、模块和UDP)理由:这样能够在仿真过程中从不变的对象中区分信号,保持在不同设计之间的一致的形式。
一致的大小写能够防止混淆和错误。
例外:在功能验证中的普通CMD任务不需要遵从。
R7.3.12 无论何种方式,所有的名称必须唯一大小写方式不能用于区分构造名、线名和变量。
理由:某些工具不能够以大小写区分各种名称。
在将V erilog(大小写敏感)转换为VHDL (大小写不敏感)设计中能够用大小写不敏感的设计风格促进。
(即应该采用大小写不敏感的方式命名)R7.3.13 使用有意义的名称名称必须描述该项的目的用途。
项的名称应该根据其做什么而不是怎么做来命名。
这些项包括:线、变量、参数、实例和构造。
需采用英文命名。
理由:支持可维护性。
对是什么而不是怎么样的描述能帮助理解设计。
怎么做能出代码中得到,而是什么却不是能立即理解。
例:set_priority 对线或变量SBUS_DA TA_BITS对参数ram_addr_p3 可选的流水阶段表示。
命名习惯应该以文档形式说明。
R7.3.14 名称不应包括V erilog 和VHDL的关键字语言的关键字不能用作信号和其他代码项的命名。
理由:方便定位到VHDL和在混合语言环境中使用。
R7.3.15 全局文本宏包括模块名由’define定义的全局文本宏必须在前面加上顶层模块名。
如:<top level module name>_<text macro name>理由:在SoC级避免无意的宏重定义。
例:’define SPOOLER_ADDR_BUS_WIDTH 32 //定义SPOOLER模块的地址总线位宽例外:如果在相同模块文本宏没有定义情况下可以不遵从。
R7.3.16 受限使用后缀在本标准中所列的后缀仅能在R7.3.18到G7.3.26中描述情况使用。
理由:一致的命名习惯有利理解设计。
R7.3.17低电平有效信号必须以_b结尾在信号使用低电平极性时,必须用后缀_b。
而且仅低电平信号可以用该后缀。
理由:有含义且一致的命名有助于设计的理解例如:enable_data_b,reset_bR7.3.18 时钟信号以_clk结尾表示时钟的信号如果本身没有clock或clk名,就必须以_clk结尾。
理由:有含义且一致的命名有助于设计的理解例如:fifo_transmit_clk例外:已经明显表明时钟的信号名可以例外,即system_clock或clk32m等。
G7.3.19 未连接的输出信号以_nc结尾推荐在未连接使用的模块输出信号以_nc结尾。
例如:blockx blockx(.result({result[15:3],result_nc[2:0]}),…); 或blockx blockx(.result(result[15:0]),…);wire result_nc[2:0]=result[2:0];理由:当关于未连接信号的警告出现时,如果以_nc结尾,就可以明显知道信号是未连接的而不是错误。
G7.3.20 三态信号以_z结尾推荐三态信号用_z结尾理由:有含义且一致的命名有助于设计的理解例如:ram_data1_zG7.3.21 状态机的下一个状态名用_next或_ns结尾推荐采用_next或_ns结尾状态机的下一个状态信号。
理由:有含义且一致的命名有助于设计的理解。
例如:tx_fsm_state_next,tx_fsm_state_nsG7.3.22 测试信号以_test结尾推荐采用_test结尾测试信号。
理由:有含义且一致的命名有助于设计的理解。
例如:parallel_clk_testG7.3.23 扫描使能信号以_se结尾推荐在没有scan_enable,scan_en,或se命名的扫描使能信号以_se结尾。
理由:有含义且一致的命名有助于设计的理解。
G7.3.24模拟信号以_ana结尾推荐在数字边界的模拟信号采用_ana结尾。
理由:当模拟信号区别时,有助于理解设计。
当使用图形界面时非常有用。
G7.3.25寄存器输出名以_reg结尾G7.3.26多个后缀名的顺序当信号包含多个后缀时,采用以下顺序:1._next,_ns2._reg3. _clk4. _z5. _b6. _nc例如:ram_data1_z_b,receive_clk_b,branch_taken_reg_bG7.3.27信号名长度不超过32字符G7.3.28避免使用不常用的简写建议简写特别是一个字母的简写不要采用,除非是通用的简写符号。
理由:使用有意义的名称。
例外:通用的简写如RAM,循环变量等可以使用。
循环计数器由于表示索引可以用单个字母命名如i,n等。
一些后端工具会将所有层次的名称连接起来,而设置一个长度限制。
这种情况下,就需要简写表示层次名。
简写应采用注释说明。
G7.3.29文档简写和其他命名习惯任何用到的简写应该以文档说明。
除了本文档说明的习惯外,其他的命名习惯也应该说明。
头文件中的关键字部分应该用于对简写和其他命名习惯的说明,或者指出这些说明文件。
理由:当模块重用时,对原始作者很清楚的简写却对其他人造成了困难。
G7.3.30 在层次结构中保持一致的名称推荐在整个设计层次中信号名保持一致。
例外:乘法理论模块和向量部分选择例如:reg[7:0] status_reg;wire int_pend;int_pend = status_reg[1];G7.3.31 实例名与模块名相同推荐实例名与模块名相同。
多个相同模块的实例用整数检索。
理由:增加可读性,减少二义。
例如:blockx blockx_1 (…);blockx blockx_2 (…)例外:仅应用于V erilog源级,且不包括封装。
7.4 注释对HDL代码的功能描述采用注释的形式。
特别,注释必须提供局部不可见的上下文信息。
7.4.1 文件头每个RTL和行为级V erilog文件可以采用下图给出头形式。
头的格式必须和图中的一致以确保软件工具能够分析该头。
大写的关键字可以用作类型信息的检索点。
该模板确保一致。
该头格式给出了必须项,附加内容可以在REUSE ISSUES部分之后增加。
此外,版权和公司密级信息可以在头的前面给出。
R7.4.1每个文件必须有文件头每一个文件必须有上图给出的头。