1、第7章 可综合设计与优化,7.1 可综合设计 RTL综合是Verilog HDL转化为硬件电路的过程。并不是所有的Verilog HDL程序都可以对应生成硬件电路结构,所以在进行Verilog HDL程序设计的时候一定要注意设计的可综合性。,7.1.1 综合的概念及其过程 1、 逻辑(RTL)综合概述 RTL综合就是在给定标准元件库和一定的设计约束条件下,把用硬件描述语言描述的电路模型转换成门级网表的过程。要进行RTL综合需要三种输入:RTL 级描述、约束条件和工艺库。 2、 RTL 级描述 RTL 级描述是以寄存器形式对规定设计进行描述,然后在寄存器之间插入组合逻辑,其可以用如图7.1.1所示的“寄存器和组合逻辑”方式来表示。,3、 约束条件 为了控制优化输出和映射工艺要用到约束条件,它为优化和映射试图满足的工艺约束提供了目标,并且它们控制设计的结构实现方式。 4、 工艺库 按照所希望的逻辑行为功能和有关的约束建立设计的网表时,工艺库持有综合工具必须的全部信息。,5、 综合过程 将RTL 级描述转换成门级描述一般有3个步骤: (1)将RTL 级描述转换成未优化的门级布尔描述(通常为原
2、型门,如与门、或门、触发器和锁存器),这一步称为“展平”。 (2)执行优化算法,化简布尔方程,产生一个优化的布尔方程描述,这一步称为“优化”。 (3)按半导体工艺要求,采用相应的工艺库,把优化的布尔描述映射成实际的逻辑电路,称为“设计实现”。,具体的综合过程如图7.1.2所示:,6、 综合涉及的两个领域 从代码到门级电路的“翻译”是通过RTL综合工具内部的映射机制实现的,其中涉及的两个领域之间的映射机制如图7.1.3所示。,7.1.2 可综合模型的设计 Verilog HDL 这种硬件描述语言允许用户在不同的抽象层次上对电路进行建模,这些层次从门级、寄存器传输级、行为级直至算法级。因此,同一个电路就可以有多种不同的描述方式,但不是每一种描述都是可综合的。图7.1.4中使用Verilog HDL 以不同的方式描述了同一个电路。某综合系统支持对方式A 和方式B 的综合,但可能不支持对方式C 的综合。而方式D 可能根本就不可综合。,1、可综合模型的结构 如果程序只用于仿真,那么几乎所有的语法和编程语句都可以使用。但如果程序是用于硬件实现,那么我们就必须保证程序的可综合性,即所编写的程序能被综
3、合器转化为相应的电路结构。,虽然不同的综合工具对Verilog HDL 语法结构的支持不尽相同,但Verilog HDL 中某些典型的结构是很明确地被所有综合工具支持或不支持的。 (1)所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,supply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter。,(2)所有综合工具都不支持的结构:time,defparam,$finish,fork,join,initial,delays,UDP,wait。 (3)有些工具支持有些工具不支持的结构:casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,
4、repeat,task,while。,2、 建立可综合模型的原则 要保证Verilog HDL 赋值语句的可综合性,在建模时应注意以下要点: (1)不使用初始化语句。 (2)不使用带有延时的描述。 (3)不使用循环次数不确定的循环语句,如forever、while 等。 (4)不使用用户自定义原语(UDP 元件)。 (5)尽量使用同步方式设计电路。,(6)除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。 (7)用always 过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号。 (8)所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。 (9)对时序逻辑描述和建模,应尽量使用非阻塞赋值方式。对组合逻辑描述和建模,既可以用阻塞赋值,也可以用非阻塞赋值。但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。,(10)不能在一个以上的always 过程块中对同一个变量赋值。而对同一个赋值对象不能既使用阻塞式赋值,又使用非阻塞式赋值。 (11)如果不打算把变量综合成锁存器,那么必须在if语句或
5、case 语句的所有条件分支中都对变量明确地赋值。 (12)避免混合使用上升沿和下降沿触发的触发器。 (13)同一个变量的赋值不能受多个时钟控制,也不能受两种不同的时钟条件(或者不同的时钟沿)控制。 (14)避免在case 语句的分支项中使用x 值或z 值。,7.1.3 综合结果的验证 对综合后的网表进行功能验证的方法是将在设计模型的仿真过程中使用的那组激励拿来对网表进行仿真,将仿真结果保存在结果文件中,然后比较两者的仿真结果是否完全相同。,下面介绍一些由于综合时采用了不同的解释而导致功能不一致的情况。 1、 赋值语句中的延迟 综合系统通常会忽略模型中的延迟,从而导致综合出的网表的仿真结果与设计模型的仿真结果存在相位差,或者在某一时刻的结果与原来设计的完全不一致。 如下面的模型:,设计者的意图是在Q 为真的情况下,P 的值先为1,延迟5ns 后其值再变为0。而综合系统由于忽略了延迟,当Q为真时,P 始终为0,中间不会出现跳变,导致与原设计不符。,2、 事件表不完整 综合系统在综合时常常会忽略某个always 语句的事件表,而按照always 语句块中的语句产生相应的硬件。如下面的模型:
6、 always (Read) P = Read&Write;,综合出的网表是对Read 信号和Write 信号都敏感的一个与门,Read 和Write 中任何一个发生变化,都会执行语句“P = Read&Write”,使P 发生变化。而原模型仿真出来的结果则是P 只受Read 信号的触发,只有Read 信号发生变化,才会执行语句“P = Read&Write”。,3、 锁存器 综合系统综合出锁存器的规则是: (1)变量在条件语句(if 或case 语句)中被赋值。 (2)变量未在条件语句的所有分支中都被赋值。 (3)在always 语句的多次调用之间需要保存变量值。 必须同时满足以上3 个条件,才会将变量推导成锁存器。,4 、阻塞与非阻塞 建议在时序逻辑建模时使用非阻塞式赋值。因为对于阻塞式赋值来说,赋值语句的顺序对最后的综合结果有着直接的影响,设计者稍不留意就会使综合结果与设计本意大相径庭。而如果采用非阻塞式赋值,则可以不考虑赋值语句的排列顺序,只需将其连接关系描述清楚即可。如下面的模型:,7.2 Verilog HDL 语言设计优化 这一小节来介绍Verilog HDL 语言的代码
7、优化技巧。熟练运用这些技巧可以用来减少关系运算符或算术运算符的数量,从而能够提高整个系统的工作效率、减少硬件资源的开销。 7.2.1公因子和公因子表达式 尽可能的找到表达式中相同的部分,我们称之为公因子。在计算过程中我们应当尽量多的重复利用这些公因子,这在实践中往往是很有用的。,比如:,在这两个式子中,如果综合工具不能找出公因子表达式,那么对于这两个表达式就会产生三个加法器。但是如果sum2语句变成sum2 = sum1 + c,则会减少一个加法器。 公因子的提取是从if语句(else语句)的互斥分支中提取的公因子表达式,比如: 在这两个分支中都计算了a+b,因此将该表达式作为公因子提取出来放在if语句之前,这样可以减少一个加法器的使用,修改后:,重复利用公因子表达式的好处是:综合器综合出的逻辑变少,有利于优化器的优化。,7.2.2算术表达式优化 算术表达式的优化主要是利用交换律和结合律对Verilog代码进行整理,从而有利于其它阶段的使用。例如,有利于公因子表达式的提取,举例:,7.2.3运算符优化 运算符优化是指避免使用复杂的运算符,尽可能的用简单的运算符来代替。例如,如果设计中用
8、到乘法或除法,则可以用移位操作来代替(乘法用左移,除法用右移)。这是因为移位运算在速度和面积上都优于乘法运算。例如:,y=3*x; 如果用位移运算代替乘法,则程序代码改写为 temp=x1; y=x+temp; 显然,如果使用移位加运算替代乘法运算后,缩减了运算符的强度,从而达到了优化的目的。,7.2.4循环语句的优化 在for循环语句中,有时候会存在某个表达式的值在每次循环中都不变的情况。而综合工具通常按照指定的循环次数来展开for循环语句,即将该无变化表达式重复复制,这样就造成了代码的冗余。举例:,这个循环语句会被综合成下面三条语句: x=a+b; x=a+b; x=a+b; 由此可见,每次迭代都执行了(a+b)运算,并且(a+b)的值和运算次数没有关系,这段代码会生成3个加法器的综合。解决这种情况的最好办法是将循环语句不随循环次数变化的值的表达式移至循环之外。修改后的程序如下所示:,7.3 面积与速度的折衷 在可编程逻辑器件设计领域,面积通常指的是可编程逻辑器件的芯片资源,包括逻辑资源和I/O资源等。速度一般指可编程逻辑器件工作的最高频率。可编程逻辑器件和MCU系统不同的是,其设
9、计的工作频率不是固定的,而是和设计本身的延迟紧密相关。在实际设计中,使用最小的面积设计出最高速度当然是每一个开发者追求的目标。但往往面积和速度是不可兼得的,所以只有兼顾面积和速度,在成本和性能之间有所取舍,才能达到设计中的产品需求。在实际工作中我们经常会采用速度换面积、面积换速度两种相反的方法。,7.3.1 速度换面积 速度换面积是指速度优势可以换取面积的节约,即可以以降低系统工作速度为代价换取硬件资源的节约。举例来说明,在流水线设计设计中,每一级流水线常常有同一个算法被重复使用,但是使用的次数不一样。在正常设计中,这些被重复使用,但是使用次数不同的模块将会占用大量的可编程逻辑器件资源。这时,我们可以对可编程逻辑器件的设计进行一些改造,将被重复使用的算法模块提炼出最小的复用单元,并利用这个最小的高速单元代替原设计中被重复不同次数的模块。,例如一个流水线有n个步骤,每个步骤都相应的运算一个重复次数不同的算法,每个算法都占用独立的资源,其所占资源由面积表示,如图7.3.1所示:,假设这些算法中有可以重复的基本单元,我们可以利用某些模块的速度优势,通过配合算法次数计数器及流水线的输入输出选择开关,重复利用这些基本单元模块。速度换面积的关键就是高速基本单元的复用。使用速度换面积的流水线算法如图7.3.2所示。,7.3.2 面积换速度 在这种方法中,面积的增大可以换取速度的提高。我们首先使用简单的串/并联转换实现多路的速度降频,如图7.3.3所示,300Mbit/s的频率分为3路,每路100Mbit/s,之后在每一路上使用相同算法设计处理模块进行低频的处理,最后将每一路的处理结果进行并/串转换成为高频的输出数据。,7.4 有限状态机设计 有限状态机(FSM:Finite State Machine)通常又称为状态机,是为时序逻辑电路设计创建的特殊模型,这种模型在设计某些类型的系统时非常有用,特别是对那些操作和控制流程非常明确的电路更是如此。,有限状态机是由寄存器组和组合逻辑构成的硬件时序电路,其状态(即由寄存器组的1和0的组合状态所构成的有限个状态)只可能在同一个时钟跳变的情况下从一个状态转向另一个状态。如果状态机的当前输出仅由当前状态决定,则我们称之为摩尔(Moore
《eda技术与应用 教学课件 ppt 作者 陈海宴 第7章 可综合设计与优化》由会员繁星分享,可在线阅读,更多相关《eda技术与应用 教学课件 ppt 作者 陈海宴 第7章 可综合设计与优化》请在金锄头文库上搜索。