您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 基于Verilog-HDL的通信系统设计-第11章
china_54@tom.com基于VerilogHDL的通信系统设计第3部分技巧和实验篇第11章FPGA设计指导原则和代码规范china_54@tom.com基于VerilogHDL的通信系统设计在FPGA/设计过程中常常会遇到各种问题,对于各种问题的解决办法不可能完全相同。本章旨在总结一些常见的设计技巧、原则,希望能够帮助读者在实际的设计过程中找到解决问题的关键。一段好的代码并不是简单的实现程序功能即可,而一定是清晰、规范、可读性很强的,在代码编译综合的时候经常会遇到一些问题而又找不到解决办法,所以本章的后半部分内容旨在培养好的代码编写习惯。总之本章内容的指导性作用很强。china_54@tom.com基于VerilogHDL的通信系统设计11-1FPGA设计指导原则11-1-1深入理解阻塞赋值和非阻塞赋值阻塞与非阻塞赋值是VerilogHDL语言的难点之一,在使用中容易出错,因此在程序的设计中,必须对阻塞赋值和非阻塞有深入的理解。在前文提过如下两条原则:在描述组合逻辑的“always”块中用阻塞赋值,综合后成为组合逻辑电路。在描述时序逻辑的“always”块中用非阻塞赋值,综合后成为时序逻辑电路。china_54@tom.com基于VerilogHDL的通信系统设计11-1-2组合逻辑设计注意事项几乎所有的编码指导手册都有关于信号敏感表的描述。时序逻辑的信号敏感表比较好写,只要在信号敏感表中写明时钟信号的正负触发沿即可。信号敏感表的主要问题集中在组合逻辑信号敏感表的写法上。同步时序设计要尽量慎用“Latch”,需要注意的是,如果综合出与设计意图不一致的锁存器(Latch),则将导致仿真和设计错误。对于一定要使用“Latch”的特定设计,设计者必须明确该“Latch”是否为有意设计的。综合出与设计意图不吻合的“Latch”结构的主要原因在于:在设计组合逻辑时使用不完全的条件判断语句,如有“if”而没有“else”,使用不完整的“case”语句,或者设计中有组合逻辑的回馈环路等异步逻辑。相对复杂一些的设计都是由两部分组成:时序逻辑和组合逻辑。同步时序逻辑设计系统中并不是不包含组合逻辑,而是要更加合理地设计和划分组合逻辑,下面介绍其中的一些主要问题。china_54@tom.com基于VerilogHDL的通信系统设计11-1-3时序逻辑设计注意事项时钟是同步设计的基础,在同步设计中,所有操作都是基于时钟沿触发的,所以时钟的设计对于同步时序电路来说非常重要,在ASIC设计中,常会用到各种各样的组合逻辑所产生的时钟,但是如果将这些设计直接移植到同步时序电路中,则将带来各种各样的问题,下面将进行介绍。如果需要使用内部逻辑产生时钟,则必须要在组合逻辑产生的时钟后插入寄存器。如果直接使用组合逻辑产生的信号作为时钟信号或者异步置位/复位信号,则将使设计不稳定。china_54@tom.com基于VerilogHDL的通信系统设计11-1-4可综合状态机的指导原则用Verilog语言描述有限状态机可使用多种风格,不同的风格会极大地影响电路性能。通常有三种描述方式:单“always”块、双“always”块和三“always”块。在硬件描述语言中,如果要最终实现硬件设计,必须写出可以综合的程序。综合的一般原则为:综合前必须进行仿真。布线后都要进行仿真。用VerilogHDL描述的异步状态机是不能综合的。状态机应有一个异步或同步复位端。时序逻辑电路建模时,用非阻塞赋值。“always”块中应该尽量避免组合反馈回路。china_54@tom.com基于VerilogHDL的通信系统设计11-1-5面积与速度互换原则在介绍面积和速度互换原则之前应该先要了解面积和速度的含义。“面积”是指消耗的FPGA/CPLD的逻辑资源的数量,一般通过消耗的触发器(FF)和查找表(LUT)来衡量,也可以通过所消耗的逻辑门的数量来衡量。“速度”是指芯片正常运行状况下的最高运行速率,这个速率由设计的时序状态来衡量。面积(area)和速度(speed)贯穿设计的时钟,是大多数设计者首先要考虑的问题。china_54@tom.com基于VerilogHDL的通信系统设计11-1-6同步设计原则在数字电路中,以电路动作的方式区分,可以将其粗略区分为同步设计与异步设计。同步设计是指所有的电路动作的切换,是在某一个信号的上升沿或下降沿切换,而非在其它任意时刻切换,此信号即为时钟信号。严格地说,只要数字电路不属于同步设计,即归类于异步设计。同步设计的优点是分析容易,也几乎没有毛刺的困扰,所以在时序的分析、可靠度、可测试性上面临的问题,同步电路都要较异步电路简单。在异步电路中,如异步的FIFO/RAM读写信号,地址译码等电路的核心逻辑都用组合逻辑电路实现。电路的主要信号、输出信号等不是由时钟信号驱动FIFO产生的。异步时序电路就是容易产生毛刺。china_54@tom.com基于VerilogHDL的通信系统设计11-1-7乒乓操作“乒乓操作”是一个常常应用于数据流控制的处理技巧,典型的乒乓操作方法如图11-7所示。图11-7典型的乒乓操作示意图输入数据流选择单元MUX2选1输出数据流选择单元MUX2选1数据缓冲模块1数据缓冲模块2数据流运算处理模块china_54@tom.com基于VerilogHDL的通信系统设计11-1-8串并转换串并转换是FPGA设计的一个重要技巧,从小的着眼点讲,它是数据流处理的常用手段;从大的着眼点讲它是面积与速度呼唤思想的直接体现。根据资料的排序和数量的要求,串并转换的实现方法可选用寄存器、RAM等来实现。对于数量比较小的设计可以采用寄存器来完成串并转换。11-1-9流水线操作流水线设计的结构示意图如图11-9所示。其基本结构为:将适当划分的n个操作步骤单流向串联起来。图11-9流水线设计示意图步骤1步骤2步骤n......china_54@tom.com基于VerilogHDL的通信系统设计11-1-10“Testbench”的编写方法一般来说,完成设计的硬件都有一个顶层模块,此模块定义了所设计硬件的所有对外接口,并示例化各底层模块,将其进行正确的连接,以实现层次式的硬件模块结构开发。要对所涉及的硬件进行功能验证,就是要对其顶层模块的各个对外接口提供符合设计规范要求的测试激励,并观察其输出和中间结构是否符合设计规范的要求。在具体功能验证实现中,一般都是提供一个“Testbench”,即测试平台。此“Testbench”模块负责示例化所设计硬件的顶层模块,并负责对待测试的模块提供激励信号,监视输出结果,并与理想结果进行比较。china_54@tom.com基于VerilogHDL的通信系统设计11-2VerilogHDL代码编写规范编写本部分的内容旨在达到以下几个目的:规范整个设计流程,实现开发的合理性、一致性、高效性。便于开发人员形成风格良好和完整的文档。增加程序的可读性和可移植性。china_54@tom.com基于VerilogHDL的通信系统设计命名宜望文生义,并应用下划线分开多个单词。一行一个端口/信号声明。端口声明或者变数声明后面要加注释。测试信号的后缀应为_test。禁止使用VHDL的保留字。禁止仅通过大小写来区分命名。状态机状态信号命名方法。文件名应由字母、数字元及下划线组成。文件名的首字符应为字母。常量应用大写字母表示。时钟信号的命名应包括clock或clk。信号名最长为32个字符。11-2-1命名规则china_54@tom.com基于VerilogHDL的通信系统设计11-2-2代码风格编写代码格式要整齐。使用四个空格符缩排。一行一条“verilog”语句。模块调用时保持模块端口顺序一致。“`define”、“`undef”配合使用。模块调用时端口要显式引用。在复杂的表达式中使用括号。一个档一个“module”。“module”名与文件名一致。“else”与“if”的配对要明确。禁止存在多个对象采用相同的名字。保持常量之间的联系。使用参数枚举方法将状态机编码成不同状态。加法或减法运算避免丢失进位或错位。建议状态机编写时把状态转换和组合逻辑电路分开。china_54@tom.com基于VerilogHDL的通信系统设计11-2-3语法结构避免按位运算时位宽不匹配。避免分号使用不当。避免“case”标号超界。禁止使用表达式作为时钟。避免条件赋值中分支的位元宽不一致。位拼接符的操作数不能使用整数。11-2-4设计风格禁止阻塞和非阻塞赋值混用。混合同步与异步“reset”的语句。不使用完整的敏感列表。没有初始状态的程序状态机。china_54@tom.com基于VerilogHDL的通信系统设计11-2-5仿真部分代码中使用常数条件表达式。函数分支没有返回值。“always”块内被赋值的信号不应列入敏感表。禁止信号给自身赋值。移位操作中所有位都移出。“default”不是“case”的最后一个条件。避免敏感信号列表不完整。避免敏感信号列表中存在冗余信号。时序逻辑中存在竞争。避免组合逻辑中的竞态条件。china_54@tom.com基于VerilogHDL的通信系统设计11-2-6综合部分一个“always”的敏感列表中只能有一个时钟。可综合代码禁止使用“wait”等语句。可综合代码禁止使用“initial”语句。循环结构中禁用“disable”语句。埠连接禁止使用表达式。边沿敏感结构中要使用非阻塞赋值。“always”块产生组合逻辑要使用阻塞赋值。禁用“casex”。china_54@tom.com基于VerilogHDL的通信系统设计11-2-7VerilogHDL代码规范范本这里附上一个VerilogHDL代码规范模板,其中的格式已经按照要求调整规范,希望读者能够模仿。下面这个代码档不能通过“nLint”检查(主要是功能方面),原因有些信号是随便添加的,仅仅为表示一种编写风格。模板的整体理念要求主要体现在。整齐,风格一致。可能还存在应该说明而没有说明的地方,请大家遵循一个原则让代码工整!china_54@tom.com基于VerilogHDL的通信系统设计11-3本章小结本章前半部分内容重点介绍了FPGA/CPLD设计指导性原则,比如FPGA设计的基本原则、FPGA设计的基本思想以及测试程序(Testbench)的编写方法。对于FPGA设计的基本原则、FPGA设计的基本思想涉及面广,本章不可能面面俱到,只能考虑到一些实际开发中常用的解决办法。如果读者有意识的在实际的设计过程中实践积累这些原则和思想会取得事半功倍的效果。本章的后半部分内容重点介绍了VerilogHDL的代码编写规范。或许不同开发人员有不同的代码编写习惯,但是有一条原则必修遵循:好的代码一定是清晰、规范、可读性强的代码。
本文标题:基于Verilog-HDL的通信系统设计-第11章
链接地址:https://www.777doc.com/doc-6699251 .html