VerilogHDL编码规范_第1页
VerilogHDL编码规范_第2页
VerilogHDL编码规范_第3页
VerilogHDL编码规范_第4页
VerilogHDL编码规范_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1、VerilogHDL编码规范1 目的为了FPGA、芯片IP核开发设计和验证人员之间更好地进行交流,提高代码的可读性,可维护性,特制定本规范,作为程序编写的指导文件。本规范包括强制性规范和推荐性规范。2 适用范围FPGA、芯片IP核逻辑设计和仿真验证。编程语言采用Verilog语言。3 相关规定1. 本规范内容为逻辑设计岗位、仿真验证岗位员工必备基础知识,新员工入职时必须通过参加相关培训掌握本规范。2. 本规范的掌握、执行情况是新员工转正考核的重要内容。在新员工见习阶段,其内部导师每月须抽查代码并将审核结果填入代码审查表。3. 项目经理应不定期抽查项目成员的代码,并将编程规范执行情况填入代码审查

2、表作为项目成员考核依据。4. 本规范为内部职称晋升考试内容。目录1. 严格级别定义52. 工程规则62.1. 工程规则表62.2. 工程规则详细说明63. 命名规则73.1. 命名规则表73.2. 命名规则详细说明74. 文件头规则114.1. 文件头规则表114.2. 文件头示例124.3. 结构头示例145. 注释规则155.1. 注释规则表155.2. 注释规则详细说明156. 编码规则176.1. 编码规则表176.2. 编码规则详细说明177. 综合规则247.1. 综合规则表247.2. 综合规则详细说明248. 静态时序分析规则288.1. 静态时序分析规则表288.2. 静态时

3、序分析规则详细说明289. 仿真规则329.1. 仿真规则表329.2. 仿真规则详细说明3210. 设计风格规则3510.1. 设计风格规则表3510.2. 设计风格规则详细说明3511. 重用化设计3911.1. 层次设计和模块划分3911.2. 参数化4112. 常用缩写表431. 严格级别定义n Mandatory 1(M1)必须遵守。若不能遵守,则修改设计。对于违背其中任何一条的设计,都不予认可。n Mandatory 2(M2)应该遵守。若不能遵守,必须提供说明文档。此类规则影响设计的性能,尽可能遵守。n Recommended(R)建议遵守。此类规则影响代码的可读性和可维护性,允

4、许出现个别例外。对于出现例外的代码,若影响到了代码的可读性,要求重新编写。2. 工程规则2.1. 工程规则表工程规则表:Project Convention Rule Lists。使用PC表示命名规则。表 1工程规则表规则号规则级别PC_1一个顶层文件夹命令为top_xxxM2PC_2顶层文件夹下,至少包括以下四个子文件夹M22.2. 工程规则详细说明PC_1一个顶层文件夹命令为top_xxxM2n 一个顶层文件夹命令为top_xxx,xxx为工程的识别名称PC_2顶层文件夹下,至少包括以下四个子文件夹M2n 顶层文件夹下,至少包括以下四个子文件夹n gen_project文件夹:存放工程文件

5、n src_rtl文件夹:存放verilog源文件n explain文件夹:存放注释说明文档n src_diag文件夹:存放测试程序代码,可进一步分为软件调试程序、硬件调试程序n 与linux服务器上实现的平台架构保持一致3. 命名规则3.1. 命名规则表命名规则表:Naming Convention Rule Lists。使用NC表示命名规则。表 2命名规则表规则号规则级别NC_1一个文件一个moduleM2NC_2文件名与module名相同RNC_3仅可使用字母、数字和下划线M1NC_4以字母开头M2NC_5不能以大小写区分命名M1NC_6缩写间用下划线隔开RNC_7结构体系命名一致M2N

6、C_8参数与宏定义使用大写M2NC_9信号名、任务名、函数名、实例名用小写M2NC_10命名有含义RNC_11一致的时钟信号名M2NC_12一致的复位信号名M2NC_13一致的低有效信号名M2NC_14有限状态机变量,以<fsm_cs>,<fsm_ns>命名RNC_15锁存器变量,加后缀_latRNC_16三态信号,加后缀_zRNC_17异步信号,加后缀_aRNC_18禁止使用Verilog和VHDL关键字M1NC_19所取名称不超过32个字符M2NC_20同一个词的缩写一致RNC_21缩写后见文知意RNC_22实例名由module名衍生M2NC_23描述多位总线时,使

7、用一致的编号顺序M2NC_24输入信号加前缀i_M2NC_25输出信号加前缀o_M2NC_26双向IO信号加前缀b_M2NC_27延迟信号加后缀_dlyM2NC_28专用寄存器信号加前缀r_M2NC_29不能用 ”reg”,作为最后的后缀名M2NC_30状态机的各状态名,加后缀_SR3.2. 命名规则详细说明NC_1一个文件一个moduleM2n 一个文件一个module,不同module设计在不同的文件中。module与文件一一对应。NC_2文件名与module名相同Rn 如果module名是design_unit_name,那么存储文件名应为design_unit_name.v。NC_3仅

8、可使用字母、数字和下划线M1n A to Z,a to z,0 to 9,_。注意,不可使用连续下划线。NC_4以字母开头M1n 以下划线开始,可能导致语法错误。在一些EDA工具中,不允许以下划线开始。NC_5不能以大小写区分命名M1n 不要使用ABC,abC,abc代表三个不同的命名。n Verilog HDL大小写敏感,VHDL大小写不敏感。n 为移植性考虑,必须遵守这条规则。NC_6缩写词间用下划线隔开Rn 例如:RAM 地址可命名为ram_addr。NC_7结构体系命名一致M2图 1结构体系命名规则n 实例化时,与rst_n相连的信号应命名为rst_n,不推荐使用异于端口名的命名方式。

9、如此一来,从上到下,一些层层相连的端口会有相同的命名,左图所示为建议用法。n 考虑到端口定义会区分端口类别,如i_addr和o_addr,这两者相连时采用共同的部分,即addr。NC_8参数与宏定义使用大写M2图 2定义参数与宏NC_9信号名、任务名、函数名、实例名用小写M2图 3接口、信号、任务、函数和实例命名NC_10使用有含义的命名Rn 命名应表征该信号的用途。NC_11一致的时钟信号名M2n 推荐使用clk作为时钟信号的前缀。时钟频率确定的,用频率作为后缀如clk_sys_25m表示25M的系统时钟。NC_12一致的复位信号名M2n 推荐使用rst作为复位信号的前缀。NC_13一致的低

10、有效信号名M2n 推荐使用_n作为低有效信号的后缀。NC_14有限状态机变量,以<fsm_cs>,<fsm_ns>命名Rn fsm_cs:finite state machine_current state,有限状态机当前状态。n fsm_ns:finite state machine_next state,有限状态机下一状态。n 多个状态机时,在fsm后加后缀。后缀名必须言简意赅。例如,有两个状态机,一个用于串行接收,另一个用于串行发送,可这样命名:fsm_recv_cs,fsm_recv_ns;fsm_send_cs,fsm_send_ns.NC_15锁存器变量,加

11、后缀_latRNC_16三态信号,加后缀_zRNC_17异步信号,加后缀_aRNC_18禁止使用Verilog和VHDL关键字M1NC_19所取名称不超过32个字符M2n 三态:高电平、低电平、高阻。NC_20同一个词的缩写一致RNC_21缩写后见文知意Rn RAM地址,使用缩写ram_addr,不使用缩写ra。n 参考常用缩写表。NC_22实例名由module名衍生M2n 仅一个实例时,可使用<module_name>_inst。n 多个实例时,采取见名知意的命名方式。NC_23描述多位总线时,使用一致的编号顺序M2n 推荐使用x - 1 : 0,不推荐使用x : 1。x表示宽度

12、。NC_24输入信号加前缀i_M2n 如input 21 : 0 i_addr.NC_25输出信号加前缀o_M2n 如output 15: 0 o_data.NC_26双向IO信号加前缀b_M2n 如b_data.NC_27延迟信号加后缀_dlyM2n 多级延迟时,加后缀_dly1(一级延迟)、_dly2(两级延迟)。NC_28专用寄存器信号加前缀r_M2n 专用寄存器信号加前缀r_,以区别普通输出信号。NC_29不能用 ”reg”,作为最后的后缀名M2n 因为综合工具会给寄存器自动加上_reg, 如果命名里就用_reg作为后缀名则扰乱了网表的可读性。NC_30状态机的各状态名,加后缀_SRn

13、 状态机的各状态名,加后缀_S,与其他信号进行区分,增加可读性。4. 文件头规则4.1. 文件头规则表文件头规则表:File Header Rule Lists。使用FH表示文件头规则。表 3文件头规则表规则号规则级别FH_1每个文件必须包含一个文件头M1FH_2文件头的始末都要有文件头标志M1FH_3文件头参数FH_3.1文件名M2FH_3.2作者及其联系方式M2FH_3.3发布版本及版本描述M2FH_3.4发布日期M2FH_3.5功能段M2FH_3.6参数描述M2FH_4其他信息RFH_4.1复位策略描述RFH_4.2时钟策略描述RFH_4.3重要时序描述RFH_4.4测试特性描述RFH_

14、4.5如果存在异步接口,提供异步接口描述RFH_4.6查看方法描述RFH_5其他结构也要有头信息M2FH_6结构头的始末都要有结构头标志M2FH_7结构头参数FH_7.1结构名及返回数据类型M2FH_7.2结构类型M2FH_7.3功能段M2FH_7.4参数描述M24.2. 文件头示例图 4文件头示例一n “+FHDR”和“-FHDR”是文件头标志,“+”表示开始,“-”表示结束。n FILE NAME:文件名。n AUTHOR:作者。n CONTACT INFOMATION:作者联系方式。n RELEASE VERSION:发布版本。n VERSION DESCRIPTION:对该版本的描述。

15、n RELEASE DATE:发布日期。n PURPOSE:本文件的功能。n PARAMETERS:本文件中定义的参数。图 5文件头示例二n Error! Reference source not found. 所示文件头包含最基本的文件信息,是最简文件头。n Error! Reference source not found. 所示文件头包含比Error! Reference source not found. 所示文件头更多的信息。n 任何文件头不能比Error! Reference source not found. 所示文件头更简单。n 文件头应包含尽可能多的信息,使文件更容易理解、使

16、用和维护。n 修改部分在文件头末尾续上。n 添加Notes,强调需要注意的地方。4.3. 结构头示例图 6结构头n 结构头,用于对函数或任务进行说明,置于函数或任务前。n “+CHDR”和“-CHDR”是结构头标志,“+”表示开始,“-”表示结束。我们使用“+CHSC”和“-CHSC”。n CONSTRUCT NAME & RETURN VALUES:结构名和返回值。n TYPE:类型。函数和任务的其中一种。n PURPOSE:本结构头的功能。n PARAMETERS:本结构中定义的参数。结构中定义的参数无需在文件头中列出。5. 注释规则5.1. 注释规则表注释规则表:Comments

17、 Rule Lists。用CT表示注释规则。表 4注释规则表规则号规则级别CT_1注释接口声明M1CT_2注释内部信号声明RCT_3注释功能块RCT_4使用/,不使用/*/RCT_5注释实例化语句M2CT_6删除不必要的代码RCT_7注释“综合指令”RCT_8注释条件编译指令R注释的作用:n 帮助代码使用者理解设计者的设计思路。n 提高代码的可读性和可移植性。n 便于维护和管理。5.2. 注释规则详细说明CT_1注释接口声明M1图 7接口声明注释CT_2注释内部信号声明Rn 内部信号,如reg型和wire型,要有描述性注释。在描述性注释中,应该表明被注释者的用途或功能。CT_3注释功能块Rn

18、always块和assign语句要有描述性注释。CT_4使用/,不使用/*/Rn 使用/,不使用/*/。CT_5注释实例化语句M2图 8实例化语句注释CT_6删除不必要的代码Rn 不必要的代码:旧代码,未使用的代码。n 尽可能保持代码整洁。CT_7注释“综合指令”R图 9综合指令n 综合指令有:full_case,parallel_case,async_set_reset and so on。n 避免使用综合指令,如果用到,要对综合指令给出详细的注释。CT_8注释条件编译指令R图 10条件编译指令注释6. 编码规则6.1. 编码规则表编码规则表:Coding Style Rule Lists。

19、使用CS表示编码规则。表 5编码规则表规则号规则级别CS_1按列表方式对齐M2CS_2使用空格缩进,不用Tab缩进M2CS_3每行一条语句M1CS_4每行声明一个接口M1CS_5保持接口顺序M2CS_6集中声明内部信号RCS_7每行不超过72个字符RCS_8不可重定义参数RCS_9保持常数间的关系RCS_10实例化时,使用接口映射,不使用位置映射M1CS_11接口连接中避免表达式M1CS_12有限状态机使用参数编码M1CS_13复杂等式中使用圆括号M2CS_14显式声明wire类型变量M1CS_15操作数宽度必须匹配M1CS_16条件表达式应该是1位的数值RCS_17一个always块操作一个

20、寄存器RCS_18有限状态机编码风格RCS_19if-else if-else结构中,尽量提炼共同条件RCS_20非行末分号、逗号后加一空格RCS_21双目运算符前后各加一空格RCS_22除缩进外,不出现连续空格RCS_23位拼接符的前括号后、后括号前不加空格RCS_24复杂的条件判断,用if-else代替?:RCS_25if-else嵌套不超过三级RCS_26条件判断语句的与或个数尽量少RCS_27条件表达式必须是充分条件M1CS_28if-else 与 case 语句的选择R6.2. 编码规则详细说明CS_1按列表方式对齐M2n module与endmodule,always块中的begi

21、n与end、if与else、case与endcase,成对出现,且这四对关键字之间的代码要对齐。CS_2使用空格缩进,不用Tab缩进M1n 不同的编辑环境下,Tab代表的空格数可能不一致。缩进一次,使用空格键往右移四个空格。CS_3每行一条语句M1图 11 每行一条语句CS_4每行声明一个接口M1图 12 每行声明一个接口CS_5保持接口顺序M2n 接口声明顺序与module接口列表中的顺序一致。n input wire i_A,wire不省略。n 按功能集中。建议顺序:时钟、复位、地址、数据。n 建议在module接口列表中直接声明接口。CS_6集中声明内部信号Rn 内部信号声明放在接口声明

22、之后,且集中声明。CS_7每行不超过72个字符Rn 除了空格,每行不超过72个字符。CS_8不可重定义参数Rn 'define与'undef成对使用,以避免参数重定义。CS_9保持常数间的关系R图 13保持常数间的关系n 如果常数间存在关系,如倍数关系,应该在定义时予以保持。如上图所示,若定义WORD等于32,则无法表达它与HALFWORD的倍数关系。当改变了HALFWORD的值,却忘了相应地修改WORD的值,这便会破坏他们之间的倍数关系,产生意想不到的结果。CS_10实例化时,使用接口映射,不使用位置映射M1图 14接口映射与位置映射n 左图为接口映射,右图为位置映射。接口映

23、射根据接口连线对应另一个接口,而位置映射紧紧根据接口在接口列表的位置对应相连,容易出错。CS_11接口连接中避免表达式M1图 15接口连接中避免表达式CS_12有限状态机使用参数编码M1图 16有限状态机使用参数编码CS_13复杂等式中使用圆括号M2图 17复杂等式中使用圆括号CS_14显式声明wire类型变量M1图 18显式声明wire类型变量n 不能依赖语法的隐式声明。n 严格的类型检测原则下,必须显示声明。CS_15操作数宽度必须匹配M1图 19操作数宽度必须匹配CS_16条件表达式应该是1位的数值R图 20条件表达式应该是1位的数值CS_17一个always块操作一个寄存器Rn 一个a

24、lways块只对一个变量赋值。n 简化代码,增加可读性,方便修改与维护。CS_18有限状态机编码风格Rn Mealy状态机,使用两段式编码风格。Mealy状态机,输出是当前状态和所有输入信号的函数。n 摩尔状态机,使用三段式编码风格。摩尔状态机,输出是当前状态的函数。n FSM将时序部分(状态转移部分)和组合部分(判断状态转移条件和产生输出)分开,写为两个always语句,即为两段式有限状态机。将组合部分中的判断状态转移条件和产生输出再分开写,则为三段式有限状态机。n 区别:二段式在组合逻辑特别复杂时适用,但要注意需在后面加一个触发器以消除组合逻辑对输出产生的毛刺。三段式没有这个问题,因为第三

25、个always会生成触发器。触发器是由两个锁存器构成的一个主从触发器,输出对输入是不透明的,必须在时钟的上升/下降沿才会将输入体现到输出,所以能够消除输入的毛刺信号。n 建议状态机编写采用三段式。图 21三段式编码风格CS_19if-else if-else结构中,尽量提炼共同条件Rn 尽量提炼共同条件,减少分支数,简化代码。CS_20非行末分号、逗号后加一空格RCS_21双目运算符前后各加一空格RCS_22除缩进外,不出现连续空格RCS_23位拼接符的前括号后、后括号前不加空格R图 22空格与缩进CS_24复杂的条件判断,用if-else代替?:R图 23复杂条件判断CS_25if-else

26、嵌套不超过三级M2n 超过三级时,建议重新分析该语句段结构,改写代码。n if-else if-else的分支数应尽可能少。参考CS-19。CS_26条件判断语句的与或个数尽量少Rn 两个时,放在同一行。n 超过两个时,分行写,且逻辑运行符放在前一行的行末位置。CS_27条件表达式必须是充分条件M1n 条件表达式必须是充分条件,若不然,存在设计缺陷。CS_28if-else 与 case 语句的选择Rn 平行结构的条件,优先写成case结构,例如地址译码等n 条件之间有优先级、重复和嵌套的情况则是写成if else结构7. 综合规则7.1. 综合规则表综合规则表:Synthesis Rule

27、Lists。使用SS表示综合规则。表 6综合规则表规则号规则级别SS_1仅使用可综合语句M1SS_1.1Waveform statement are prohibitedM1SS_1.2禁止使用系统任务和函数(如,$display)M1SS_1.3禁止使用#延时语句M1SS_1.4禁止使用real和event数据类型M1SS_1.5每个always敏感列表仅包含一个时钟信号M1SS_1.6Loop must be in a static rangeM1SS_2避免内嵌任何综合脚本M2SS_3避免full_case和parallel_case综合指令M2SS_4完整的组合逻辑代码段M2SS_5禁

28、止使用verilog原语M1SS_6未使用的输入接口必须驱动M1SS_7未使用的输出接口要连线RSS_8顶层模块避免胶连逻辑M2SS_9未尽case语句段应有default分支M2SS_10在default语句中回到状态机RSS_11一个寄存器只能在一个always块中赋值M1SS_12if语句后要有else语句M17.2. 综合规则详细说明SS_1仅使用可综合语句M1n 可综合代码中不使用casex.n 尽量不用casez.n 设计人员遵守。SS_2避免内嵌任何综合脚本M2SS_3避免full_case和parallel_case综合指令M2图 24 full_case与parallel_c

29、asen 尽量不使用full_case和parallel_case.n 若使用,则可能会给仿真工具和综合工具提供不一致的信息。n 若使用,可能会导致前仿真与后仿真不一致。n 若使用,可能会形成不正确的逻辑。n 增加使用形式验证工具的难度。图 25 full_case错误应用例n full_case覆盖初始缺省赋值。n en信号在优化过程中被去除。n 形成与设计初衷不同的逻辑。SS_4完整的组合逻辑代码段M2图 26组合逻辑语句段n Missing condition:只考虑到a = 1'b1的情况,未考虑到a = 1'b0的情况。n Missing assignment:2&#

30、39;b11后应该有赋值语句。2'b01后可能丢失了赋值语句。SS_5禁止使用verilog原语M1n Verilog User-Defined-Primitive(UDP),用户自定义原语,可以使用。n Verilog built-in primitive,verilog固有原语,禁止使用。SS_6未使用的输入接口必须驱动M1n 避免任何不确定输入。不确定输入可能导致芯片出现致命错误。SS_7未使用的输出接口要连线Rn 不连线时,不影响功能,但可能让使用者糊涂。图 27未使用的输出接口连线规则SS_8顶层模块避免胶连逻辑M2图 28顶层模块避免胶连逻辑n 胶连逻辑,是连接复杂逻辑电路

31、的简单逻辑电路的统称。n 顶层模块应该只包含结构树上的叶层次。n 顶层模块中的胶连逻辑不能与任何模块中的组合逻辑合并,从而限制了综合优化。SS_9未尽case语句段应有default分支M2n case语句段没有default分支,同时状态未尽,则会产生意料之外的锁存器。n 对于有限状态机,若状态未尽,必须加default分支;若状态已尽,不加default分支。图 29 case语句段的default分支SS_10在default语句中回到状态机Rn 防止状态机跑飞,陷入混乱,应在default中回到状态机。SS_11一个寄存器只能在一个always块中赋值M1n 当一个寄存器在多个alwa

32、ys块中被赋值,综合时会出问题。SS_12if语句后要有else语句M1n 必须加else,否则会生成锁存器。8. 静态时序分析规则8.1. 静态时序分析规则表静态时序分析规则表:Static Timing Analysis Rule Lists。使用STA表示静态时序分析规则。表 7规则号规则级别STA_1避免组合环路M2STA_2使用同步设计M2STA_3简化寄存器时钟源M2STA_4避免多周期路径和伪路径M2STA_5避免将时钟信号用作数据M2STA_6避免使用锁存器M28.2. 静态时序分析规则详细说明STA_1避免组合环路M2图 30 组合回路图 31 组合逻辑环n 图中a、b、c构

33、成了组合逻辑环。STA_2使用同步设计M2n 仅在无法避免时使用异步设计,且与同步设计分开。n 一些静态时序分析工具不能恰当处理异步设计。n 须仔细验证异步设计的功能和时序。图 32异步设计STA_3简化寄存器时钟源M2n 避免给寄存器提供内部生成时钟和门控时钟。门控时钟,指用使能信号打开或关闭的时钟信号。n 若内部生成时钟或门控时钟无法避免(例如,低功耗设计),将这部分线路放在顶层的一个单独模块中。n 为防止寄存器保存数据时出现稳定性问题,应提供尽可能简单的时钟信号。图 33 简单时钟STA_4避免多周期路径和伪路径M2n 时序例外是指路径需要不止一个时钟周期。n 时序例外应标明路径的始末位

34、置。n 时序例外会增加编译时间,尽量减少时序例外。图 34 多周期路径STA_5避免将时钟信号用作数据M2n 将时钟信号直接或间接连至寄存器的数据输入端,会导致时序扰乱或竞争。图 35时钟信号连至寄存器数据输入端STA_6避免使用锁存器M2n 在设计中,不推荐使用锁存器。n 如果在设计中出现了不可避免的锁存器,则必须提供文档,说明每个锁存器的特殊时序要求。9. 仿真规则9.1. 仿真规则表仿真规则表:Simulation Rule Lists。使用SIM表示仿真规则。表 8仿真规则表规则号规则级别SIM_1在时序always块中使用非阻塞赋值M1SIM_2在组合always块中使用阻塞赋值M1

35、SIM_3组合always块的敏感列表必须完备M1SIM_4避免冗余敏感列表M1SIM_5初始化控制存储单元M2SIM_6不可对信号赋不定值xM1SIM_7避免使用延迟赋值M29.2. 仿真规则详细说明SIM_1在时序always块中使用非阻塞赋值M1图 36时序always块SIM_2在组合always块中使用阻塞赋值M1n 在always块中使用阻塞赋值,用于产生组合逻辑。n 在组合always块中使用非阻塞赋值,可能导致人为竞争。综合后,这种竞争会消失。即使竞争消失,也不允许在组合always块中使用非阻塞赋值。n 阻塞赋值可使电路被正确分析,防止RTL级与门级电路仿真结果不一致。SIM

36、_3组合always块的敏感列表必须完备M1n 敏感列表不完备,将导致前仿真与后仿真不一致。n 当敏感列表包含所有敏感变量,一律用“*”代替。图 37敏感列表不完备SIM_4避免冗余敏感列表M1n 仿真时,敏感列表中多余的信号,会产生不必要的分析计算,增加仿真时间。图 38敏感列表冗余SIM_5初始化控制存储单元M2n 所有控制存储单元,包括控制路径中的所有锁存器和寄存器,都应该在初始时刻复位或置位。n 控制路径是指,信号从寄存器出来,贯穿整个控制条件逻辑。n 未赋初值的锁存器或寄存器,其初值(0或x)与仿真工具有关。不同的仿真工具,初值可能不同。SIM_6不可对信号赋不定值xM1n 防止不定

37、值x在电路中蔓延,尤其是在控制路径中。n 仿真时,如果控制路径中存在不定值x,它可能使所有相关电路产生不明状态链。图 39赋不定值xSIM_7避免使用延迟赋值M2n Avoid using both inter- and intra-assignment delay.n 目前的综合工具忽略赋值延迟,因此,赋值延迟可能使RTL级与门级仿真结果不一致。图 40赋值延迟10. 设计风格规则10.1. 设计风格规则表设计风格规则表:Design Style Guidelines Rule Lists。使用DS表示设计风格。 表 9设计风格规则表规则号规则级别DS_1IP接口设计规则DS_1.1输出信号

38、应为寄存器型M2DS_1.2寄存器应在时钟信号的单个沿触发RDS_1.3IP接口应连至总线RDS_1.4提供输入输出相对时钟的延迟的详细信息M1DS_2同步设计IPM2DS_3提供时钟策略文档M1DS_4避免手动时钟门控M2DS_5复位规则DS_5.1IP必须可以复位M2DS_5.2提供复位策略文档M1DS_6避免任何工艺依赖单元M1DS_7提供额外的功能行为模型R10.2. 设计风格规则详细说明DS_1.1输出信号应为寄存器型M2n IP输出为寄存器类型时,因为寄存器只有在时钟的上升/下降沿才会将数据输出,使得输入延迟和输出强度更可预计。n 在always块中赋值的信号。图 41 IP输出信

39、号为寄存器型DS_1.2寄存器应在时钟信号的单个沿触发Rn 简化与之交互的电路的设计。DS_1.3IP接口应连至总线Rn IP应通过多路复用总线与系统剩余组件相连。n 当点对点方案不可行时,应使用工业标准。DS_1.4提供输入输出相对时钟的延迟的详细信息M1n 必须以文档或文字模板的形式,将输入输出相对时钟的延迟的详细信息提交给IP综合者。n 对于软核,可以采用该软核输入时钟百分比的形式提供这类信息。n 软核:功能经过验证的、可综合的、实现后电路结构总门数在5000门以上的Verilog HDL模型。n 固核:在某一种FPGA器件上实现的、经验证是正确的、总门数在5000门以上的电路结构编码文

40、件。n 硬核:在某一种专用集成电路工艺的器件上实现的、经验证是正确的、总门数在5000门以上的电路结构版图掩膜。图 42 detail information of delayDS_2同步设计IPM2n 尽管异步设计在能耗方面有优势,但它会产生一些问题,如稳定性方面。DS_3提供时钟策略文档M1n 有哪些时钟?相互之间什么关系?分别有何用途?图 43时钟策略DS_4避免手动时钟门控M2n 设计者必须避免插入任何手动门控时钟单元来门控时钟信号。n 如果设计者需要在IP中使用门控时钟,应该让电源优化工具代为处理。图 44门控时钟DS_5.1IP必须可以复位M2n 必须设计复位机制,以使IP回到初始

41、状态。n 控制单元必须可以复位,以确保IP的正确性。n 考虑到存储区,数据路径不必复位。DS_5.2提供复位策略文档M1n 文档应包含必需信息。DS_6避免任何工艺依赖单元M1n 软核不应像硬核或特殊工艺单元那样包含工艺依赖单元。n 如果软核包含工艺依赖单元,当使用不同工艺时,会出现问题,从而难以复用。DS_7提供额外的功能行为模型Rn 鼓励IP提供者开发更高抽象层次的功能模型。例如,总线功能模型。n 在这些模型的基础上,IP验证人员可以高效地在更高抽象层次上进行功能验证。11. 重用化设计11.1. 层次设计和模块划分 SOC设计是由多个模块组成,对于设计复杂规模又大的电路,我们需要对它进行划分(Partitioning),然后

温馨提示

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

评论

0/150

提交评论