




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1良好代码编写风格可以满足信、达、雅的要求。在满足功能和性能目标的前提下,增强代码的可读性、可移植性,首要的工作是在项目开发之前为整个设计团队建立一个命名约定和缩略语清单,以文档的形式记录下来,并要求每位设计人员在代码编写过程中都要严格遵守。良好代码编写风格的通则概括如下(1)对所有的信号名、变量名和端口名都用小写,这样做是为了和业界的习惯保持一致;对常量名和用户定义的类型用大写;(2)使用有意义的信号名、端口名、函数名和参数名;(3)信号名长度不要太长;(4)对于时钟信号使用CLK作为信号名,如果设计中存在多个时钟,使用CLK作为时钟信号的前缀;(5)对来自同一驱动源的信号在不同的子模块中采用相同的名字,这要求在芯片总体设计时就定义好顶层子模块间连线的名字,端口和连接端口的信号尽可能采用相同的名字;(6)对于低电平有效的信号,应该以一个下划线跟一个小写字母B或N表示。注意在同一个设计中要使用同一个小写字母表示低电平有效;(7)对于复位信号使用RST作为信号名,如果复位信号是低电平有效,建议使用RST_N;(8)当描述多比特总线时,使用一致的定义顺序,对于VERILOG建议采用BUS_SIGNALX0的表示;(9)尽量遵循业界已经习惯的一些约定。如_R表示寄存器输出,_A表示异步信号,_PN表示多周期路径第N个周期使用的信号,_NXT表示锁存前的信号,_Z表示三态信号等;(10)在源文件、批处理文件的开始应该包含一个文件头、文件头一般包含的内容如下例所示文件名,作者,模块的实现功能概述和关键特性描述,文件创建和修改的记录,包括修改时间,修改的内容等;(11)使用适当的注释来解释所有的ALWAYS进程、函数、端口定义、信号含义、变量含义或信号组、变量组的意义等。注释应该放在它所注释的代码附近,要求简明扼要,只要足够说明设计意图即可,避免过于复杂;(12)每一行语句独立成行。尽管VHDL和VERILOG都允许一行可以写多个语句,当时每个语句独立成行可以增加可读性和可维护性。同时保持每行小于或等于72个字符,这样做都是为了提高代码得可读性;(13)建议采用缩进提高续行和嵌套语句得可读性。缩进一般采用两个空格,如西安交通大学SOC设计中心2如果空格太多则在深层嵌套时限制行长。同时缩进避免使用TAB键,这样可以避免不同机器TAB键得设置不同限制代码得可移植能力;(14)在RTL源码的设计中任何元素包括端口、信号、变量、函数、任务、模块等的命名都不能取VERILOG和VHDL语言的关键字;(15)在进行模块的端口申明时,每行只申明一个端口,并建议采用以下顺序输入信号的CLK、RST、ENABLESOTHERCONTROLSIGNALS、DATAANDADDRESSSIGNALS。然后再申明输出信号的CLK、RST、ENALBESOTHERCONTROLSIGNALS、DATASIGNALS;(16)在例化模块时,使用名字相关的显式映射而不要采用位置相关的映射,这样可以提高代码的可读性和方便DEBUG连线错误;(17)如果同一段代码需要重复多次,尽可能使用函数,如果有可能,可以将函数通用化,以使得它可以复用。注意,内部函数的定义一般要添加注释,这样可以提高代码的可读性;(18)尽可能使用循环语句和寄存器组来提高源代码的可读性,这样可以有效地减少代码行数;(19)对一些重要的ALWAYS语句块定义一个有意义的标号,这样有助于调试。注意标号名不要与信号名、变量名重复;(20)代码编写时的数据类型只使用IEEE定义的标准类型,在VHDL语言中,设计者可以定义新的类型和子类型,但是所有这些都必须基于IEEE的标准;(21)在设计中不要直接使用数字,作为例外,可以使用0和1。建议采用参数定义代替直接的数字。同时,在定义常量时,如果一个常量依赖于另一个常量,建议在定义该常量时用表达式表示出这种关系;(22)不要在源代码中使用嵌入式的DC_SHELL综合命令。这是因为其他的综合工2具并不认得这些隐含命令,从而导致错误的或较差的综合结果。即使使用DESIGNCOMPILER,当综合策略改变时,嵌入式的综合命令也不如放到批处理综合文件中易于维护。这个规则有一个例外的综合命令,即编译开关的打开和关闭可以嵌入到代码中;(23)在设计中避免实例化具体的门级电路。门级电路可读性差,且难于理解和维护,如果使用特定工艺的门电路,设计将变得不可移植。如果必须实例化门电路,我们建议采用独立于工艺库的门电路,如SYNOPSYS公司提供的GTECH库包含了高质量的常用的门级电路;(24)避免冗长的逻辑和子表达式;(25)避免采用内部三态电路,建议用多路选择电路代替内部三态电路。3神州龙芯公司VERILOG编码规范软IP重用标准(草案2007110)(仅供公司内部使用)1宗旨本规范为神州龙芯公司内部强制实施的VERILOGHDL编码规范。每个IP设计人员必须严格遵守,以避免不必要的重复劳动,从而提高设计效率。本规范适用于下列三种VERILOG代码文件的编写1)可综合逻辑部件;2)虚拟部件(VIRTUALCOMPONENTVC);3)测试模块(TESTBENCHES)。规范还对模块文件的命名习惯、代码文件的储存、代码文件的编写风格做了强制性的规定。公司内的每个设计人员必须严格遵照本规范来编写代码,以提高代码的可读性。这不仅能提高IP设计人员的工作效率,也能及时帮助系统或者软件设计人员在调试复杂系统时发现和分析IP代码或者自己编写的代码所存在的问题。遵照本规范编写的代码,不但容易理解,也容易修改,而且设计者之间可以互相利用各自拥有的IP设计资源,有的可以直接利用,有的只需要对现成模块的部分参数或接口稍做修改就可以使用,以便于实现IP重用的目标。严格按照本规范编写的代码,可以显著地提高公司整体的设计效率。这种可读性更强的代码,不但能帮助我们达到IP重用的目标,节省人力资源,提高工作质量,而且还能确保编写的代码能被绝大多数仿真和综合工具所接受,大大减少代码在不同设计、综合和仿真平台之间移植的工作量。在IP设计的阶段验收过程中,一旦发现任何不符合本规范的代码,每个负责IP验收的人员有义务向设计者指出不符合规范的地方,令其及时做出修正,然后再进入下一个验收程序。否则即使代码已经通过测试,也没有任何发现问题,验收人员仍有权因为设计者的代码注释不完整或不符合规范拒绝验收,并作出设计工作尚未完成的评价和结论,命令其返工。本规范的目的是1)保证VERILOGRTL模块经综合所产生的门级结构与VERILOG仿真器所理解寄存器传输级的HDL代码的行为是一致的;2)利用参数传递可修改代码中的常数,使可综合模块、虚拟部件或者测试模块的输入/输出信号位宽扩展变得非常容易;3)使模块分割(PARTITIONING)尽量优化,使每个模块都具有可重用的构造,便于以后的扩展。本规范在模块化一节着重阐述了在综合开发环境中难以表达清楚的典型结构,以及如何确保前仿真和后仿真行为一致的代码风格。本规范将可综合代码和行为级代码的编写要点分成两部分,分别予以阐述,而对两者均合适的部分放在规范的后面予以阐述。因而本规范也适用于测试模块、VC模块和监视模块代码的编写。本规范的宗旨是便于软IP模块、虚拟器件和测试模块的扩展和重复使用,方便非原作者对代码进行维护,为各种SOC的快速建模和仿真创造条件;降低系统芯片的设计风险,从而降低设计成本。4需要注意的是原则上本规范是普遍适用的,但在很多场合可能会出现个别意外的情况,例如某工具的局限性,这可能会给本规范中个别条款的实施造成一定的困难。2编写可综合的RTL级VERILOG模块代码时必须遵守的要点21不允许在代码中出现的语句要点任何变量不能赋初始值X,对任何寄存器所赋的初始值必须是确定的。代码语句中不能加时间延迟,不允许出现如下语句4OUTCIN不允许使用门控时钟和门控复位。不允许使用锁存器。(商用综合器可帮助执行这项规范,如使用了锁存器,综合结果会出现LATCHINFERRED)。不允许在可综合的设计代码中使用DEFINE来定义参数,应该使用参数PARAMETER来定义。DEFINE只用于编写不可综合的仿真测试模块。不允许在可综合代码中使用INITIAL、WAIT、FORKJOIN、WHILE。不允许使用UDP用户定义的原语元件不允许在可综合代码中出现逻辑反馈环路,否则会生成不可预知的逻辑电路。不允许在可综合模块中使用CASEX,CASEZ语句,只允许使用CASE和IFELSE语句作条件分支语句。在时序逻辑的设计中不允许用阻塞赋值,只允许用非阻塞赋值。其中,是设计的单元名。标明文件类型(可选)_TASK文件由任务构成,_FUNC文件由函数构成,_PARAMETER文件由参数构成,_DEFINES文件由宏文本构成。_DISC文件是规则文件_CONNECT文件是连接规则和连接模块文件表示是个VERILOG文件V是VERILOG文件VA是VERILOGAMS文件原因从文件名就可以知道设计代码的构成,简化了代码维护人员对设计结构和文件内容的理解例子SPOOLERV是模块SPOOLER的代码。SPOOLER_TASKV是包含SPOOLER模块所用任务的文件。R33用不同的扩展名区分模拟信号、数字信号和混合信号的VERILOG文件。每个文件只能含有(1)单一的数字VERILOG文件(以V后缀)或者(2)单一的模拟VERILOG文件(以VA后缀)或者(3)单一的混合VERILOG文件。(以VAMS后缀)原因数字编译器无法处理模拟结构或混合结构;同时,模拟编译器也无法处理数字结构或混12合结构的文件,所以从文件名就能区分三种不同类型的文件可以减少混乱。32HDL代码部件的命名有含义的名字比几行注释对代码的维护人员更有帮助。因此,名字必须有含义(有含义是指名字所涉及对象的性质和目的可在该名字中清楚地体现)。R34命名必须由字母和数字和下划线构成模块部件的命名必须由字母和数字和下划线构成AZ,09,AZ,不允许使用连续的下划线。原因由下划线分隔的名字,其含义比较容易理解。R35命名必须以字母开头,不能以下划线开头模块部件和信号的命名必须以字母开头,不允许用下划线起头的命名原因综合和仿真工具不支持以下划线起头的文件名。R36名字中不能包含任何转义字符(ESCAPEDNAMES)模块名、信号名和文件名中不能包含转义字符。原因有些工具不允许使用包含转义字符的文件名。R37必须用下划线隔开由几个词组成的部件名对于有几个词组成的命名,应用下划线分开每个词。不允许用头一个字母大写的字来区分字段。原因这样做,不但为了改进名字的可读性,也是为了统一格式。例子RAM_ADDR。R38在整个设计中,命名风格和拼写风格必须保持一致和连贯在整个设计中,线网和变量的命名风格和拼写风格必须保持一致和连贯,这也包括命名习惯。原因一看信号名就可以知道信号的类型(例如分辨出低电平有效信号、时钟、输入、输出、单个信号、总线等),便于调试。R39VERILOG代码中模块的命名要必须与文件名字完全一致(扩展名除外)所有在VERILOGRTL代码中涉及到的模块和信号名必须与技术文档中的名字保持一致。在VERILOGRTL的注释中对信号和模块名的引用也要保持一致。原因确保文挡和代码之间的交叉引用的正确。R310表示常量的命名必须大写表示常量的命名必须全由大写字母组成。这里常量是指参数名和宏名。原因在配置和仿真时,可以立即分辨出哪些对象的值是不会改变的,例如参数值是不变的。例子PARAMETERBYTE_SIZE16,MSB7;R311线网名,变量名,结构名和对象名必须都用小写字母表示与电路结构有密切关系的硬件结构名必须全部都用小写字母表示。这包括线网名、变量13名、结构名(如FUNCTIONS,TASKS,命名的块、模块、或是用户原语)和对象名(如门级电路、模块等)。原因便于将仿真时将值会发生变化的对象和值不会发生变化的对象区分开来。R312每个部件必须有自己独特的名字,绝对不允许用与别的部件相同的名字(不允许用字母大小写来区分不同的名字)绝对不允许用字母的大小来区分结构名、线网名、或变量名原因有的工具不能区分字母的大小写。如,可以把VHDL代码转换到VERILOG代码的工具不能区分字母的大小写。R313必须使用有意义的命名命名必须有含义,以便对命名对象的目的一目了然。应该根据对象的用途进行命名,而不是根据达到目的的手段来命名。这些对象包括线网、变量、参数、对象(诸如FUNCTIONS、MODULE)结构。所有的命名一律采用英语,不允许使用汉语拼音字。原因便于维护。在命名中,根据目的而不根据手段进行命名的方式有助于理解设计。手段可以通过理解代码得到,而目的则不这么明显。例子SET_PRIORITY用于线网名、变量SBUS_DATA_BITS用于参数RAM_ADDR_P3用于可选的流水线级的标志(OPTIONALPIPELINESTAGEINDICATION)。R314不允许使用VERILOG和VHDL的关键词VERILOG和VHDL关键词都不能用作信号名或其他任何命名。原因便于VERILOG和VHDL的混合使用R315宏定义必须放在模块内或者放在专门定义宏的文件中,统一管理由DEFINE定义的宏文本声明语句必须放在模块名后,如_原因放在模块定义语句外的宏定义有可能被其他层次模块的宏定义搞混,从而发生无意中对某个模块外的宏定义进行重新定义的错误。R316对于后缀的使用必须制定严格的规定后缀的使用必须符合本规范从R317节到G326条款的要求。原因连贯一致的命名风格有助于对设计的理解。R317对低电平有效信号进行命名时,必须使用“_N”作为名字的后缀,其他情况一律不允许使用“_N”作为名字的后缀。当且仅当为低电平有效信号命名时,才允许使用“_N”为后缀的信号名。原因有意义的、连贯一致的命名风格有助于对设计的理解。例子ENABLE_DATA_N,RESET_NR318以“_CLK”结尾的信号名时钟信号的名字中若没有“CLOCK或者CLK”时,则必须使用后缀“_CLK”为该时钟信号命名。原因有意义的、连贯一致的命名风格有助于对设计的理解。例子FIFO_TRANSMIT_CLK14例外名字能清楚地表明该信号是时钟信号,例如,SYSTEM_CLOCK或者CLK32M也能清楚地表明是时钟信号G319未连接的输出信号以“_NC”结尾建议未使用的模块输出信号命名以“_NC”结尾NC表示尚未连接例子BLOCKXBLOCKXRESULTRESULT153,RESULT_NC20,BLOCKXBLOCKXRESULTRESULT150,WIRERESULT_NC20RESULT20原因当出现有信号尚未连接的警告时,若信号的命名是以“_NC”结尾的,则可知该信号是设计者故意不连接的,不需要进行修改。G320三态信号名以“_Z“结尾建议三态信号名以“_Z“结尾原因有含义的、连贯一致的命名风格有助于对设计代码的理解。例子RAM_DATA1_ZG321信号名长度不超过32位字符建议信号名长度不超过32位字符。32位字符里不包括层次名原因较短的命名可提高可读性G322避免不容易理解的缩略建议避免使用不容易理解的缩略语,尤其是只有一个字符的缩略语作为信号名称。原因使用有含义的命名,才能帮助代码的设计和维护者理解代码。G323建议引用的实例化模块名与实例名相同,用索引号区别这两者引用的实例化模块的命名应该与被引用的实例名相同,用索引号区别这两者。一个实例模块的多次实例化引用模块用整数索引加以区分。原因可以增进可读性、减少模糊性例子BLOCKXBLOCKX_1BLOCKXBLOCKX_24注释(COMMENTS)注释可用于描述VERILOGHDL代码的功能,特别需要提醒设计者注意的是,只依靠读代码很难理解的设计意图必须在代码中添加注释加以说明。41文件头(FILEHEADERS)每一个可综合的VERILOGRTL级电路模块、虚拟器件和测试模块文件必须具有下面格式的文件15头。设计规范规定文件头的格式必须与下面的格式一致,以便于将来可用软件对模块代码进行分析处理。文件头中大写的关键词可以用来检索。下面的这个模板可以保证文件头的一致性。下面所示的文件头只是最小要求。在“REUSEISSUE”段之后,还可以再添加其他的文件头另外,有关版权的文件头也应该包括在文件头中。/FHEADER/OPTIONALCOPYRIGHTC/OPTIONALCOMPANYCONFIDENTIAL/FILENAME/DEPARTMENT/AUTHOR/AUTHORSEMAIL/RELEASEHISTORY/VERSIONDATEAUTHORDESCRIPTION/10YYYYMMDDNAME/KEYWORDSGENERALFILESEARCHINGKEYWORDS,LEAVEBLANKIFNONE/PURPOSESHORTDESCRIPTIONOFFUNCTIONALITY/PARAMETERS/PARAMNAMERANGEDESCRIPTIONDEFAULTUNITS/EGDATA_WIDTH32,16WIDTHOFTHEDATA32/REUSEISSUES/RESETSTRATEGY/CLOCKDOMAINS/CRITICALTIMING/TESTFEATURES/ASYNCHRONOUSI/F/SCANMETHODOLOGY/INSTANTIATIONS/SYNTHESIZABLEY/N/OTHER/FHEADERR41每个文件必须有文件头(HEADER)每一个文件必须包括如上面代码段所示的文件头。其中,所有的区域都必须包括在内,甚至空的数据段。原因按照规范编写的标准文件头便于建立公司内部的设计信息查询系统。R42使用文件头界标记FHEADER这种情况下的结果1比特表达式,按照规则,直观上很容易阅读。R82按一致的总线比特值排序当描述多比特总线时,必须坚持按照一致的总线比特值排序。原因提高可读性和减少总线间的无意的次序颠倒。例外内部使用一定协议的VC块,在VC块边界却与其他别的协议相接。R83不能将X赋给信号信号值不能赋为X,已知的合法信号值必须赋给所有信号。原因避免X沿着电路传输。例外TESTBENCHESR84REG型不能在两个ALWAYS块中赋值REG型不能在两个分离的ALWAYS块中赋值原因避免内部总线和仿真器依赖执行顺序。例外行为级代码。G85在宏文本上使用参量做常量推荐在指示详细说明的常量的宏定义中使用参量原因定义宏文本的范围是全局量除非明确的没有定义。这会导致编辑次序的依赖和SOC层的冲突。例外全局常量R86参量不可修改参量在仿真时不能被修改或者覆盖,甚至在第一次仿真时前也不能29原因IEEEVERILOG标准禁止这种做法,仿真器可能针对这种情况产生不同的结果。例外参量可以在编辑时被修改或覆盖R87宏文本不能重复定义宏文本不能被重复定义为不同的值,这适用于局部和全局定义的宏原因避免无意中重复定义宏G88保持常量间的关系如果一个常量由另一个常量的值决定,推荐在定义时指明依赖关系。在宏文本定义算法或逻辑表达式的地方,要附上括号。原因增强适应性,因为代码改写所需要的工作量减少。例子PREFERREDDEFINEDATA_WORD8DEFINEDATA_LONG4DATA_WORDVERSUSDEFINEDATA_WORD8DEFINEDATA_LONG32R89使用参量做状态编码在编码明确的状态机中,必须使用列举参量来给不同的状态编码原因使不同状态机的执行RETARGETING,例如,从1HOT码到GRAY码的转换。用形象的命名提高可读性,并为状态改变提供一个单一的点。例子PARAMETER10/SYNTHESISENUMSTATE_INFORESET_STATE2B00,TX_STATE2B01,RX_STATE2B10,ILLEGAL_STATE2B11G810DEFINE和UNDEF的用法如果在设计代码中使用DEFINE声明语句,宏的名字应该没有被同一模块的UNDEF定义见R315原因因为DEFINE没有范围,所以他们必须与已有代码保持联系,在源代码中维持名字的联系,定义宏将使重用简化。例外TESTBENCHESR811使用可编程基地址模块的基地址必须可编程原因简化改变模块内存印象图R812用宏文本赋值给基地址如果在VERILOG代码中出现基地址,必须赋以宏文本原因简化改变模块内存印象图例外基地址在软件中已定义R813用基地址加偏移量来作为地址模块中内部寄存器或存储器的所有路径必须以基地址和与基地址的偏移量的形式表示30原因使不同系统的结构RETARGETINGG814用宏文本来表示寄存器域的位置和值推荐使用宏文本来表示寄存器域的位置和值而能用数字常量。这个域可以是一个或多个比特,或者是整个寄存器原因提高可读性和可维护性,减少使用错误比特和错误值的机会例子DEFINECNT_WHATCNT_CTRL75/WHATTOCOUNTPARAMETERCNT_ADDR2B00/COUNTADDRESSMATCHESPARAMETERCNT_DATA2B01/COUNTDATAMATCHESALWAYSCNT_WHATCASECNT_WHATCNT_ADDRCNT_INCNT_ADDRCNT_DATACNT_INCNT_DATAENDCASE/CNT_WHATALWAYSPOSEDGECLKIFCNT_INBEGINCOUNTERREGIN_USEBEGINIFIN_USE1B1STOPIN_USE1B1XIN_USE1B0ENDENDTASKG822避免使用INOUT类型的端口推荐端口使用输入(INPUT)和输出(OUTPUT),避免使用INOUT(双向)类型的端口原因双向执行可能导致连接问题,避免双向端口也可以简化综合和测试的输入。32G823复杂的等式要使用圆括号推荐使用圆括号以强制按顺序执行原因较长的等式如果没有括号将依赖语言的优先选择顺序决定等式的功能,圆括号明确的规定了等式的操作顺序,清楚的表述了等式的功能G824由时间延迟的代码块不起作用包含有时间延迟的非阻塞赋值的代码块不能作用,以确保仿真结果的一致原因工具处理不确定值结果会不同G821矢量在端口连接时具有宽度推荐所有的矢量在端口连接时具有明确的宽度原因提高代码的可读性,突出矢量端口例子BLOCKBLOCK_1VECTORVECTOR70例外自动生成码9结构测试技术标准这些编码标准是为了获得最大限度的测试覆盖范围。更完整的关于执行扫描和“SCANFRIENDLY”电路的规则在第十章测试设计中详细说明。R91使用附加逻辑扫描三态设计必须使用附加逻辑来避免信号冲突,所有的多源信号/总线在启动和捕捉测试次序上必须用互斥的独热码驱动。(见R10715)原因防止不定态的传输和扫描矢量失谐例子扫描变化时使用独热码驱动三态设计R92允许PLL通过ATPG工具必须有来自输入口的时钟控制器,如果PLL用作ONCHIP时钟的产生,那么使PLL通过或禁止的方法必须纪录(见R101019ANDR10727原因PLL的通过使测试和调试简化,使硬件模块的使用简单G93允许时钟分离器通过推荐使时钟分离器通过方法原因减少仿真和测试的时间R94扫描支持输入输出时钟的逻辑输入输出时钟必须有扫描支持的逻辑原因避免ATPG丢失错误范围R95储存元件的异步复位33当被控经过一个测试模式的输入时,异步复位必须用来设置初值或上电(POWERUP),异步复位必须在内部时钟沿之后同时释放,或者复位必须在模块中重复记时以避免重复复位问题。原因只有当复位信号是同步的或是通过主要输入信号控制的异步信号时,扫描链才能有储存单元生成。R96扫描时锁存器确定如果锁存器与时钟相连,必须在扫描或其他能扫描的情况下保持确定。原因避免由于所存器模块化而溯及的逻辑是扫描范围缩小例子REFERTO图76FORATWOPHASEIMPLEMENTATIONR97主从锁存器的时钟不同步如果在代码中涉及到主从锁存器,定向时钟必须驱动锁存器的相应阶段。在测试模式中,零相位时钟可以校正主从锁存器。原因测试工具无法识别时间,造成测试范围缩小G98隔离反相时钟同时使用时钟正沿和负沿的逻辑推荐使用隔离时钟。(如每个时钟都是单独输入模块)原因简化插入扫描G99同步复位控制存储元件推荐尽可能使用同步复位(见G78ANDR1073)原因使扫描序列的插入和测试简化。10常用的综合标准本节描述了适用于VERILOG的综合标准。为了提供尽可能多的与语言和工具相独立的标准,这里做了极大的努力。综合工具的详细译码规则也要在除本节详述的标准以外以及其他章节中引用。有一点要说明的,以下的标准不适用于那些不是为了综合而设计的模块(如,总线功能模块,总线监测器,数据路径模块,行为逻辑模块,测试模块或者行为模块),除非把它们设计成在仿真时可综合。R101完整的ALWAYS敏感信号列表所有的组合逻辑或锁存的ALWAYS结构必须有敏感信号列表。这个敏感信号列表必须包含所有的输入信号。原因综合过程将产生一个取决于除敏感列表中所有其它值的结构,它将可能在行为仿真和门级仿真见产生潜在的失配。R102每个ALWAYS敏感信号列表对应一个时钟在综合过程中,每个VERILOGALWAYS敏感信号列表只能对应一个时钟。原因这是将每一个过程限制在单一寄存器类型的要求。34R103只能使用可综合的结构只有可综合的VERILOG结构才能使用。不能综合的VERILOG代码必须从可综合的代码中分离出来。HDL允许不能综合的NOWAVES,测时模块或其他任务的与非声明原因可能会由于零售商和工具而影响重用性。例外打印声明可以植入到仅限于仿真的IFDEF中。R104不允许WAIT声明和DELAY声明WAIT声明语句,不论是清楚还是含糊,都不能用于可综合设计。原因从RTL级转换到GATE级的综合工具一般都不支持WAIT声明和DELAY声明,为了有效的综合,这些语句应该避免。例外在不需要进行综合的行为模块中,如测试模块、表示行为的虚拟器件模块中可以使用。R105不能使用INITIAL声明语句在可综合模块的编写中,线网和变量的初始化复位功能必须明确模块化,不能用INITIAL语句。原因不能生成门级网表,初始化语句会造成行为级和逻辑门级模型间的仿真失配。R106详细说明组合逻辑组合逻辑必须完整的详细说明(如,在任何情况下给一个变量或信号赋值)原因若组合逻辑的说明不完整,则综合工具会根据语义生成具有寄存器的电路构造。例子由于声明是完整的,所以综合后生成的是一个纯组合电路,不会产生寄存器。ALWAYSSIGNAL_NAMESCASESIGNAL_NAMES3B000,3B001OUTPUT4B00003B010OUTPUT4B10103B011,3B100,3B101OUTPUT4B01013B110,3B111OUTPUT4B0001ENDCASE下面例子中的IF语句由于没有明确地说明ELSE分支语句,综合器根据语义生成一个存储元件。ALWAYSSIGNALBEGINIFSIGNAL1H1OUTPUT4B0ENDR107在循环结构中不使用DISABLE在循环结构中禁止使用DISABLE命令原因好的程序设计格式应该好定义循环的结束,禁止反复跳到另一个循环。R108避免死循环35可综合代码中循环的次数必须是有限的。原因无限循环的代码不能综合,也不能移植。R109端口连接时不允许用表达式端口连接时不允许用表达式原因可能在模块和综合间引起逻辑混乱例外总线串联允许例外常量R1010禁止使用VERILOG原语VERILOG原语如AND,OR,ORUDPS不能使用例外提高HDL的可读性R1011在边沿敏感结构中使用非阻塞赋值在边沿敏感结构中必须使用非阻塞赋值,不允许使用阻塞赋值原因在边沿敏感连续编码中使用阻塞赋值,将导致前后仿真不一致。例子使用非阻塞赋值的边沿敏感编码ALWAYSPOSEDGECLKREGBREGAALWAYSPOSEDGECLKREGADATA例子可能引起前后仿真不一致的代码ALWAYSPOSEDGECLKREGBREGAALWAYSPOSEDGECLKREGADATA在前仿真中数据会在每个时钟正沿进入寄存器B,将综合成移位寄存器,而在移位寄存器中数据不能在同样的时钟正沿进入寄存器B。R1012非阻塞用于锁存混合LATCH/FF的锁存操作必须用非阻塞赋值原因为了避免依赖执行顺序,当进行锁存时必须注意。例外在纯锁存设计中,可以使用阻塞赋值。R1013驱动所有不用的模块输入说有不用的实例模块的输入必须由其他一些信号或固定逻辑0获1驱动原因所有的端口在模块中都以实例出现,没有隐藏或遗忘的,避免浮点存在。G1014连接所有不用的模块输出推荐将所有的不用的模块实例输出连接到一起原因表明未连接的端口是有用的R1015在函数中不能引用锁存在任何函数中都不能引用锁存36原因函数总是综合成组合逻辑R1016不允许使用CASEX在所有的事件声明中使用CASE和CASEZ原因CASEX在综合时不关心X和Z状态,这将引起行为级的前后仿真不一致。X状态必须是这样产生和处理的,它确定,如果值是真就影响设计的操作,否则忽略这个问题。R1017不能使用植入的综合文本(SCRIPTS)不能使用植入的综合文本(EMBEDDEDSYNTHESISSCRIPTS),如果使用EMBEDDEDSCRIPTS必须注明目的和功能。原因VC块得锁存器重用可能有不同的综合目标,而植入文本可能进一步的综合仍返回旧的结果。另外,更新发布的综合工具可能废弃植入命令。例外灵活的使用综合指令(如,TRANSLATE_OFFANDTRANSLATE_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 男方协议离婚流程范本与财产分割细则
- 离婚协议执行监督与子女抚养权、财产分割服务合同
- 私人房产买卖协议(含贷款利率及还款期限)
- 秦娜与丈夫离婚协议中的房产过户及子女抚养协议
- 财产线索合同4篇
- 人工智能与自动化对就业市场的影响-洞察及研究
- 化学竞赛初试题目及答案
- 2025年河南艺术考试题目及答案
- 中小学竞赛试题及答案
- 会议活动大数据挖掘与应用-洞察及研究
- 2023年二级保密资格评分标准具体操作方法
- 商户收单业务培训
- 无机及分析化学课件(第四版)第一章学习资料
- 26个英文字母书写动态演示课件
- 电路学课件:1-6 电压源和电流源
- 奥的斯GeN2-故障查找手册-1-CN
- 区妇联家庭教育工作的调研报告
- 劳保用品发放表格及管理
- 江苏省盐城市各县区乡镇行政村村庄村名居民村民委员会明细
- Q∕SY 01004-2016 气田水回注技术规范
- TSG Z8002-2022 特种设备检验人员考核规则
评论
0/150
提交评论