《VHDL代码设计规范.docx》由会员分享,可在线阅读,更多相关《VHDL代码设计规范.docx(37页珍藏版)》请在第一文库网上搜索。
1、文件会签页文件标题VHD1编码规范(试用版)文件编号授权分发清单签名签名编制审核部门部门签名签名加盖受控章审核审核部门部门签名签名审核审核部门部门签名签名审核审核部门部门签名签名审核审核部门部门签名签名审核审核部门部门签名签名审核审核部门部门审批签名批准签名生效日期:文件历史记录文件编号现行版本VI.O文件标题VHD1代码设计规范文件履历版次编制日期更改内容(条款)VHD1代码设计规范(评审稿)文件编号:编制:审核:VHD1代码设计规范VHD1代码设计规范(定稿)文件编号:编制:审核:可靠性审核:标准化:批准:1 .目的12 .范围13 .术语说明14 .规范列表15 .规范45.1.书写规范
2、55.11命名规范55.1.2.注释规范85.13.其他书写规范85.2.设计规范95.2.1.复位95.2.2.时钟105.2.3,状态机105.2.4,异步信号115.2.5其他设计规范115 .3.设计常识126 .附录136.1.例子说明(规范详细解释)136.2.代码模板241 .目的规范VHD1的设计风格,保证代码的可读性、重用性与与现有EDA工具的一致性,从而形成对设计代码的标准化管理。2 .范围本标准规定了VHD1代码设计规范。本标准适用于COMBA公司技术中心。3 .术语说明本规范使用的术语解释如下:级别:指该规则遵循的级别,有两个级别,分别为推荐和规定。推荐:表示在一般情况
3、下必须遵循该规则。规定:表示必须严格遵守该规则。明例例例说示正反:对此规则或准则的必要的解释。:对此规则举例进行说明,示例分为正例和反例。:对此规则或准则给出的正确示例。:对此规则或准则给出的反面示例。4 .规范列表级别范规编号相R1.规贝U一个文件只包含一个模块,文件命名、模块命名、实体命名定必须相同。文件名与其后缀必须小写.R2规顶层文件命名方式使用器件型号、工程名与top结合。第二定层文件后缀使用modu1e,第三层文件使用b1ock,第四层之后不做定义。R3规模块使用功能进行划分,第二层文件与下面的模块命名,第定一个单词需要与第二层文件一致。R4推代码编写之前,以文档的方式,进行命名约
4、定荐R5规命名要有实际意义。定R6规命名标识符的首字符必须是字母,包含多个单词的标志符单定词之间使用下划线分开。信号、变量等的命名最后的也一定要求是字母,中间的可以是数字或者其他合法符号。规定推荐推荐 R7.R8R9模块、信号、变量等的命名不大于64个字符实体,结构名用大写标识行为级、结构级的结构体命名分别以“BEH实体名”和“STR实体名”区分。如果是混合使用,或者是分不清使用了那一种结构,那么就是用“ARC实体名”命名.RIO.规定单口RAM模块命名以SPRAM作后缀;双口RAM模块命名以DPRAM作后缀;ROM模块命名以ROM作后缀;FIFO模块命名以FIFO作后缀;数字时钟管理模块命名
5、以DCM作后缀;锁相环模块命名以P11作后缀;乘法模块命名以MU1T作后缀;除法模块命名以DIV作后缀;加法模块命名以ADD作后缀;减法模块命名以SUB作后缀。R11推荐模块实例化时,采用UnXX元件名标识,ce11实例化时使用MnXX元件名标识。R12.规定模块内部定义的信号、变量采用首字母大写命名。首字母符合说明的要求R13.规定非顶层模块端口信号命名方式采用Iportname0portname分别对应输入、输出端口信号。R14.规定顶层模块端口信号命名要求与原理图命名一致或者是相关意义的英文单词或者字母R15.规定时钟信号必须用后缀“e1k”进行命名R16.规定对于微处理器接口的寄存器,
6、必须包含reg标志。用下划线分开该寄存器功能特征R17.规定对于输入管脚时钟采样同步的信号命名要求后缀加“buf”表示、多次采样加数字区分R18.规定一些常用的基本信号按说明统一后缀命名R19.规定多比特信号,应该使用相同的比特顺序,都采用downto描述。R20.规定VHD1的保留字用小写R21.规定调用IEEE标准库时,“IEEE”用大写,其余用小写。R22.规定每个VHD1源文件应该在文件头注释文件的基本信息R23.规定每个信号,变量和端口的定义都要有注释R24.每个进程使用“”隔开。如果一个功能模块由几个进程组成,使用”一*”隔开。R25.推荐对于内部表,注释说明表的组成、表的内容与作
7、用R26.规定用缩进方式使得代码有层次感,缩进不要使用TAB键,缩进为4个空格R27.每行字符数推荐不大于90,最大不能超过120R28.规定模块端口每行定义一个。根据端口功能进行区分,类间用空行分开R29.调用模块使用“二”方式进行端口映射,总线到总线映射时(Xdowntoy)要写全R30.规定调用模块进行端口实例时,一行代码只实例一个信号。顺序必须与原模块保持一致R31.规定功能集中或有很强的相关性的变量信号声明放在一起,类间用空行或注释分开R32.规定端口、信号、变量定义需要对齐,端口实例化需要对齐R33.规定运算符与信号之间必须有空格分开设计规范R34.规定全局复位信号使用器件提供的全
8、局信号管脚R35.当采用异步复位时,推荐使用同步释放的方式R36.规定每个输出管脚和内部定义的信号都应该通过复位信号赋初值R37.全局时钟输入在管脚够用的情况下必须使用器件全局时钟输入管脚R38.尽量不要在设计中对同一时钟的上升沿和下降沿混合使用,建议使用上升沿,可以考虑使用高频时钟替代时钟沿的混用R39.推荐避免使用内部的产生的信号(如分频信号)作为时钟信号R40.规定如果一定使用分频时钟的话,必须使用全局布线资源。R41.规定避免使用门控时钟R42.推荐FPGA的输入时钟至少有一个本地时钟,用作CPU接口或监控时钟。R43.推荐逻辑控制推荐使用状态机实现R44.规定状态机的各个状态,使用参
9、数表示R45.推荐状态机编码:在速度可以满足要求的情况下,不推荐使用onehot编码;进行二进制编码且状态机的处理流程比较单一时,推荐使用格雷码。R46.规定并行信号总线,如果与采样时钟异步,必须进行两次采样比较,才能作为采样的结果使用R47.规定对与时钟异步的信号进行沿检测,需要先采样该信号,再对该信号的采样信号进行沿检测R48.规定对于异步信号,必须先进行同步,不能直接使用。R49.顶层文件只作为内部模块的互联,一般不再包含逻辑R50.内部模块间端口尽量避免使用inout类型端口R51.规定所有端口禁止使用buffer类型端口R52.规定异步进程的敏感列表中一定要列全所有敏感信号R53.使
10、用括号表示优先级R54.使用参数化设计R55.规定所有预留输入管脚与起来送到一个垃圾输出管脚;所有预留输出管脚根据系统要求输出无效电平R56.规定计数器(signa1)按2的整数次募方式定义,使用时,注意对不用状态的处理R57.模块划分应该以功能为原则R58.推荐模块划分区分面积敏感和速度敏感的部分,将它们分在不同模块R59.推荐建议每个进程只处理一个信号或只处理一组时序密切相关的信号R60.规定组合逻辑中,每一个if语句,必须有一个e1se语句。如果E1se不会发生,或不进行操作,e1se条件下加上空语句R61.推荐if嵌套不宜太多设计常识R62.推荐if和CaSe语句R63.推荐状态机的设
11、计R64.推荐流水线操作R65.规定顶层模块的输入输出端口信号的命名采用IOportname的方5.规范本规范分为书写规范、设计规范以与其他设计注意事项,下面分别进行说明。5.1.书写规范5.1.1.命名规范R1.一个文件只包含一个模块,文件命名、模块命名、实体命名必须相同。文件名必须小写。级别:规定说明:文件类型为.vhd。如果文件名与模块名不一致,有些编译器不能识别,而且名字不一致,也不利于将文件与模块对应,不利于文件的管理。示例:请参阅例:文件模块命名。R2.顶层文件命名方式使用器件型号与_top结合。第二层文件后缀使用IodU1e,第三层文件使用)1ock,第四层之后不做定义。级别:规
12、定说明:一般顶层文件命名使用器件名加工程名再加“_top”,如“xc3s1000bga456_rru_top”,第二层文件使用“_modu1e”,如“ad5320_modu1e”,第三层文件使用b1ock”,如“synjcorJbIOCk。如果是最基本的元件,如DPRAM.FIFo等,转照DPRAM、F1FO命Z规则为优先。R3.第二层模块使用功能进行划分,第二层文件下面的文件命名第一个单词需要与第二层文件一致。级别:规定说明:逻辑模块使用功能进行划分,为了每一个模块的文件按照顺序排列在一起,方便文件管理,需要该模块的文件命名全部使用相同的单词作为第一个单词。如R4.代码编写之前,以文档的方式
13、,进行命名约定。级别:推荐说明:命名约定包括模块命名、端口信号命名等。R5.命名要有实际意义。级别:规定说明:具有一定意义的命名比写上好几行的注释要好得多。示例:如同步模块SynCjnodUIe,同步模块中的相关子模块sync_corr_b1ockoR6.命名标识符的首字符必须是字母,包含多个单词的标志符单词之间使用下划线分开。信号、变量等的命名最后字符也一定要求是字母,中间的可以是数字或者其他合法符号。级别:规定说明:由于某些综合工具对于总线类型的信号,综合的结果为总线名加上数字编号。如果信号/变量名最后一个字母也使用数字的话,容易混扰。R7.模块、信号、变量等的命名不大于64个字符级别:规定说明:太长的命名不方便阅读。R8.实体,结构名用大写标识级别:推荐说明:使用大写容易与一般的信号端口区分。R9.行为级、结构级的结构命名分别以“BEH_实体名”和“S