经典Verilog代码标准_第1页
经典Verilog代码标准_第2页
经典Verilog代码标准_第3页
经典Verilog代码标准_第4页
经典Verilog代码标准_第5页
已阅读5页,还剩11页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、工程建立规范1、工程的组成(1)一个顶层文件夹(2)顶层文件夹下,至少包括以下四个子文件夹APROJECT文件夹存放ISE工程文件,包括ISE、BIT、MAC等文件BSOURCE文件夹存放VERILOG源文件CEXPLAIN文件件存放注释说明文档DTEST文件夹存放测试程序代码,可进一步分为软件调试程序、硬件调试程序2、工程的命令(3)定层文件夹命令为TOP_XXX,XXX为工程的识别名称(4)顶层文件夹的子文件夹分别命名为PROJECT、SOURCE、EXPLAIN、TEST二、RTLCODE规范1标准的文件头在每一个版块的开头一定要使用统一的文件头,其中包括作者名,模块名,创建日期,概要,更改记录,版权等必要信息。统一使用以下的文件头/COPYRIGHTC2005,HISLICONTECHNOLOGIESCO,LTD/ALLRIGHTSRESERVED/IPLIBINDEXIPLIBINDEXJUSTSAUTOPIA_B/IPNAMETHETOPMODULE_NAMEOFTHISIP,USUALLY,ISSAME/ASTHESMALLIPCLASSIFIEDNAMEJUSTASUTOPIA/FILENAMEFILE_NAMEOFTHEFILEJUSTAS“TX_FIFOV”/MODULENAMEMODULE_NAMEOFTHISFILEJUSTAS“TX_FIFO”/FULLNAMECOMPLETEEMGLISHNMEOFTHISABBREVIATED/AUTHORATHOR/ID/EMAILAUTHORSEMAIL/DATA/VERSIONV10/ABSTRACT/CALLEDBYFATHERMODULE/MODIFICATIONHISTORY/LOG/2标准的MODULE格式MODULE整体结构对于模块的书写采用统一的格式便于项目内部成员的理解和维护,我们用批处理建立了一个MODULE模块,其内容解释如下端口定义按照输入,输出,双向的顺序模块名、模块例化名统一,例化名前加大写U_以区分(多次例化另加标识),三者关系文件名XXXV小写模块名XXX(首字母大写)例化名U1_XXX首字母大写IP内部所有的模块名都要加IP名或者IP名简称作前缀,如USB_CTRL、USB_TX_FIFO。/DEFINEMODULEPORT/MODULEMODULE_NAME/INPUTINPUT_PORT_1,INPUT_PORT_M,/OUTPUTOUTPUT_PORT_1,OUTPUT_PORT_M,/DEFINEPARAMETER/PARAMETER/DEFINEINPUT/INPUTRST_N/RESET,ACTIVELOWINPUTCLK_/CLOCKSIGNAL,50MINPUTN0A_DIN/INPUTK0B_DIN/DEFINEOUTPUT/OUTPUTM0A_DOUT/OUTPUTI0B_DOUT/OUTPUTATRRIBUTE/REGSREGM0A_DOUT/WIRESWIREI0B_DOUT/INSTSNCEMODULE/MODULE_NAME_AU_MODULE_NAME_AAA,BB,CC,/MAINCODE/ENDMODULE3一致的排版A一致的缩排统一的缩排取4个空格宽度输入输出信号的宽度定义与关键字之间,信号名与宽度之间要用空格分开;所有宽度定义对所有信号名对齐,代码风格统一如下INPUT30INPUT_A/INPUTINPUT_B/OUTPUT1280OUTPUT_AOUTPUT150OUTPUT_BOUTPUTOUTPUT_CB一致的BEGINEND书写方式ALWAYS中,一定要用BEGINEND区分,格式和代码风格统一如下ALWAYSPOSTEDGECLKORNEGEDGERST_N)BEGINIFRST_N1B0SYN_RSTDLY1B0ELSEBEGINIFABSYN_RSTDLY1B1ELSESYN_RSTDLY1B0ENDENDIFELSE中仅有一个语句行时,不要使用BEGINEND如果有多个语句行时,BEGINEND和IF()或ELSE()空四个格。格式如下IFELSEIFELSEIFELSEIFBEGINENDELSE4一致的信号命名风格简洁,清晰,有效是基本的信号命名规则,详见命名规范。全称缩写中文含义ACKNOWLEDGEACK应答ADRESSADDRAD地址ARBITERARB仲裁CHECKCHK校验,如CRC校验CLOCKCLK时钟CONFIGCFGCONFIGURATION,装置CONTROLCTRL控制COUNTCNT计数DATAINDINDI数据输入DATAOUTDOUTDO数据输出DECODEDE译码DECREASEDEC减一DELAYDLYDISABLEDIS不使能ERRORERR错误(指示)ENABLEEN使能FRAMEFRM帧GENERATEGEN生成,如CRC生成GRANTGNT申请通过INCREASEINC加一INPUTINILENGTHLEN(帧、包)长NMPORTNM网管相关OUTPUTOUTOPACKET不推荐PACKETPKT与帧相同PRIORITYPRI优先级POINTERPTR指针RDENABLEREN读使能READRD读(操作)READYRDY应答信号或准备好RECEIVERX(帧数据)接收REQUESTREQ(服务、仲裁)请求RESETRSTSEGMENTSEGSOUCESCR源(端口)STSTISTICSSTAT统计TIMERTMR定时器SWITCHERSFSWITCHFABRICTEMPORARYTMP临时TRANSMITTX发送(帧数据)相关VALIDVLDV有效、校验正确WRENABLEWEN写使能WRITEWR写操作A端口、信号、变量名的所有字母小写函数名、宏定义、参数定义用大写B使用简称、缩略词(加上列表)C基于含义命名(避免以数字命名的简单做法),含义可分段(最多分三段),每一小段之间加下划线”_”,如TX_DATA_VAL命名长度一般限制在20个字符以内。D低电平有效信号,加后缀”_N”,如RST_NE无条件寄存的寄存信号在原信号上加FF1、FF2如原信号DATA_IN,寄存一拍DATA_IN_FF1,寄存两拍DATA_IN_FF2F不能用”REG”,作为最后的后缀名,因为综合工具会给寄存器自动加上_REG,如果命名里就用_REG作为后缀名则扰乱了网表的可读性。5统一的表达式书写A括号的使用如果一个表达式的分组情况不是很明显时,加上括号有助于理解。例如下面的代码加上括号就清晰很多。IF(错误1SIGNAL_A52IFSIGNAL_A53SIGNAL_ASIGNAL_B304正确1SIGNAL_A5D52IFSIGNAL_A5D53SIGNAL_A1B0,SIGNAL_B305D4因为工具默认是32位宽,如果不注明位宽,工具检查会报WARNING,而且这样增加了设计的严谨性。6统一的语句书写条件判断结构书写方式A条件的完整性IFELSE搭配使用,对于缺省的条件要写”ELSE;”;IFELSED条件判别式要全面,比如IF(A1B0)CASE中的缺省条件要写”DEFAULT”;B”IFELSE”结构适用于复杂条件判断的语句但对于复杂的条件判断,使用如果不仔细分析条件的每一条路径,就让读代码搞不清它是到底要做什么。例如CICELSEIFIC1CRCELSECICEND即使是简单的条件判断,我们也必须使用IFELSE,当涉及复杂的条件判断,使用IFELSE结构以获得清晰的结构便于理解和维护。因此必须使用IFELSE。C”IFELSE”结构VS”CASE”结构IFELSE结构综合的结构可能是与或非门构成的,也可能是一组多路选择器,而CASE结构综合结果一般会是多路选择器,但对于可以优化的CASE综合工具会综合出更简单的结构。所有对于可以写出平行结构的条件,优先写成CASE结构,例如地址译码等,条件之间有重复和嵌套的情况则是写成IFELSE结构。DFINITESTATEMACHINE不允许有模糊不清的状态机模式,所有的状态机必须清晰明了。我们要求将状态机的时序部分和组合逻辑部分分开。例如MODULESTATE4CLOCKRESETOUTINPUTRESETINPUTCLOCKOUTPUT10OUTPARAMETER10STATEA2B00PARAMETER10STATEB2B01PARAMETER10STATEC2B10PARAMETER10STATED2B11REG10STATEREG10NEXTSTATEREG10OUTALWAYSPOSEDGECLOCKBEGINIFRESET1,0B0STATESTATEAELSESTATENEXTSTATEENDALWAYSSTATEBEGINCASESTATESTATEABEGINNEXTSTATESTATEBENDSTATEBBEGINNEXTSTATESTATECENDSTATECBEGINNEXTSTATESTATEDENDSTATEDBEGINNEXTSTATESTATEAENDENDCASEENDALWAYSPOSTDGECLOCKORNEGEDGERESETBEGINIFRESET1B0OUT2B0ELSEBEGINIFSTATEOUTELSEOUTENDENDENDMODULE7统一格式的ALWAYS程序块的书写AALWAYS中的变量的赋值方式阻塞与非阻塞赋值当进行时序逻辑建模时,ALWAYS块中使用非阻塞赋值NON_BLOCKING参加如下代码ALWAYSPOSEDGECLKORNEGEDGERST_NBEGINIFRST_N1B0MYREG1B0ELSEMYREGDLY1B1ENDALWAYS块中使用的NON_BLOCKING赋值时在”前要加上DLY,如上例;当使用ALWAYS语句进行组合逻辑建模时,ALWAYS块中使用阻塞赋值BLOCKING;参见如下代码ALWAYS(ADDR)BEGINCASEADDR2B00CS0_N1B02B01CS0_N1B12B10CS0_N1B02B11CS0_N1B1DEFAULTCS0_N1B1ENDCASEEND如果要使用ALWAYS语句同时进行时序与组合逻辑建模时,一定使用非阻塞赋值;例如/组合逻辑与时序逻辑在同一个ALWAYS块中ALWAYSPOSEDGECLKORNEGEDGERESET_NBEGINIFRESET_N1B0OUT1B0ELSEBEGINCASECOUNT2B00OUTDLYIN_A2B01OUTDLYIN_B2B10OUTDLYIN_C2B11OUTDLYIN_CDEFAULTOUTDLYIN_AENDENDBALWAYS中变量赋值的唯一性组合ALWAYS块一定要注意敏感量列表中的触发项完整且不冗余;如果不是这样,综合的电路会与实际设计不符合,会报WARNING;不要再多个ALWAYS模块中对同一个REG型变量进行赋值;更不能再同一个ALWAYS中随一个变量双重赋值;例如ALWAYSPOSEDGECLKORPOSEDGERESET_NBEGINIFRESET_N1B0OUT1B0ELSEOUTDLY1B1/OUT10OUTDLY1B0END推荐不要在一个ALWAYS块里给多个变量赋值。如果将一组条件相同的变量写在一个ALWAYS块中更有利于可读性的提高和功能的实现时候,可有例外情况,但请尽量多加注释,以增加可读性,并注意在组合ALWAYS块中不要出现LATCH(不如对状态机的组合ALWAYS块及它对条件相似的多个变量赋值);CALWAYS中复位的书写复位的条件表达式及命名要和ALWAYS敏感列表中的描述相统一,并且一定要使用异步复位。所有的复位必须低有效。例如/ALWAYSPOSEDGECLKOTNEGEDGERST_N/BEGINIFRST_N1B0ELSEENDDALWAYS的注释要在每一个ALWAYS块之前加一段注释,增加可读性和便于调试。/CMCARRYCOUNTWHICHALWAYSPOSEDGECLK_XCORNEGEDGERST_NBEGINIFRST_N1B0CM_CARRY_CNT1B0ELSECM_CARRY_CNTDLY1B1END8合理的注释代码中应采用英文作详细的注释,注释量应达到代码总量的50以上。指示应该与代码一致,修改程序的时候一定要修改相应的注释;注释不应重复代码已经表明的内容,而是简介的点明程序的突出特征;注释应该整个一个程序的线索和关键词,它连接整个程序中分散的信息并它帮助理解程序中不能表明的部分。9重用化设计层次结构与模块划分层次设计的原理以简单为主尽量避免不必要的层次;层次结构设计得好,在综合中就不需要太多的优化过程;模块的划分根据层次设计来决定模块化对于布线有很大帮助,模块化的设计中要尽量减少全局信号的使用;通用的部分尽量提取出来作为一个共用模块,同时为了适应需求的更改也应提供用户定制模块入库的方式。参数传递需要传递参数的模块,在多次例化的时候统一都传递参数,不要例化同一个模块,有的传参数,有的不传。模块划分的技巧将不同的时钟域分离开来;按照不同的设计目标划分成块,分块式应在数据流方向上切分;在同一模块中实现逻辑资源和算术资源的共享。二关于REVIEW1REVIEW目的发现缺陷降低成本提高质量2流程1完成第一个字模块时,请提交该模块代码,进行规范检查评审。2CODING期间每两星期提交依次代码和REVIEW报告。REVIEW报告主要包括内容REVIEW工作时,REVIEW的代码模块参与人发现的缺陷和解决情况。REVIEW建议(1)制定REVIEW计划;(2)每次REVIEW代码不超过500行。ANNEXCODESTYLETEMPLATETHISATEMPLATEOFVERILOGCODEFILE,INCLUDINGFILEHEADERANDTHEMAINBODYOFCODEINWHICHSOMECODINGRULESAREDEMONSTRATED/COPYRIGHTC2005,HISILICONTECHNOLOGIESCO,LTD/ALLRIGHTSRESERVED/IPLIBINDEXIPLIBINDEXJUSTASUTOPIA_B/IPNAMETHETOPMODULE_NAMEOFTHISIP,USUALLY,ISSAMEASTHESMALLIPCLASSIFIEDNAMEJUSTASUTOPIA/FILENAMEFILE_NAMEOFTHISFILEJUSTASTX_FIFOV/MODULENAMEMODULE_NAMEOFTHISFILEJUSTASTX_FIFO/FULLNAMECOMPLETEENGLISHNAMEOFTHEABBREVIATEDMODULE_NAME/AUTHORAUTHOR/EMAILAUTHORSEMAIL/DATA2005/07/20/VERSIONCURRENTVERSION,JUSTTHISV10,MUSTSAMEASTHECVSVERSION/ABSTRACT/CALLEDBYFATHERMODULEJUSTASTX_PROC/MODIFICATIONHISTORY/VERSIONDATAYYYY/MM/DDNAME/DESCRIPTION/LOG/DEFINES/DEFINEUDLY1/UNITDELAY,FORNONBLOCKINGASSIGNMENTSINSEQUENTIALLOGIC/DEFINEMODULEPORT/MODULEMODULE_NAME/INPUTREST_N,CLK_,A_DIN,B_DIN,/OUTPUTA_DOUT,B_DOUT/DEFINEPARAMETER/PARAMETERS/DEFINEINPUT/INPUTRST_N/RESET,ACTIVELOWINPUTCLK_/CLOCKSIGNAL,50MINPUTN0A_DIN/INPUTK0B_DIN/DEFINEOUTPUT/OUTPUTM0A_DOUT/OUTPUTI0B_DOUT/OUTPUTATTRIBUTE/REGSREGM0A_DOUT/WIRESWIREI0B_DOUT/INNERSIGNALDECLARATION/REGSREG30COUNTER/WIRESWIRE70TEMP1/INSTANTCEMODULE/INSTANCEOFMODULEMODULE_NAME_AFILENAMEMODULE_NAME_AV/MODULE_NAME_AU_MUDULE_NAME_AAA,BB,CC/MAINCORE/SEQUENTIALLOGICSTYLEALWAYSPOSEDGECLK_ORNEGEDGEREST_NBEGINSEQ_BLOCK_NAMEIFRST_N1B0COUNTER4B0ELSEBEGINIFEXPRESSIONCOUNTERDLYSIGINAL_BELSEENDEND/SEQ_BLOCK_NAME/CO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论