第八章_EDA设计优化分解.ppt

  1. 1、本文档共64页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
近年来VHDL设计方法正越来越广泛地被采用。但是VHDL设计是行为级的设计,所带来的问题是设计者的设计思考与电路结构相脱节。设计者主要是根据VHDL的语法规则 对系统目标的逻辑行为进行描述,然后通过综合工具进行电路结构的综合、编译、优化,通过仿真工具进行逻辑功能仿真和系统时延的仿真。实际设计过程中,由于每个工程师对语言规则、对电路行为的理解程度不同,每个人的编程风格不同,往往同样的系统功能,描述的方式是不一样的,综合出来的电路结构更是大相径庭。因此,即使最后综合出的电路都能实现相同的逻辑功能,其电路的复杂程度和时延特性都会有很大的差别,甚至某些臃肿的电路还会产生难以预料的问题。从这个问题出发,我们就很有必要深入讨论在VHDL设计中如何简化电路结构,优化电路设计的问题。 ??? 用VHDL进行设计,其最终综合出的电路的复杂程度除取决于设计要求实现的功能的难度外,还受设计工程师对电路的描述方法和对设计的规划水平的影响。最常见的使电路复杂化的原因之一是设计中存在许多本不必要的类似LATCH的结构。而且由于这些结构通常都由大量的触发器组成,不仅使电路更复杂,工作速度降低,而且由于时序配合的原因而导致不可预料的结果。例如对于同一译码电路有不同VHDL描述: 1: IF INDEX=″00000″ THEN ???? STEPSIZE<=″0000111″; ???? ELSIF INDEX=″00001″ THEN ???? STEPSIZE<=″0001000″; ???? ELSIF INDEX=″00010″ THEN ???? STEPSIZE<=″0001001″; ???? …… ???? ELSE ??????? STEPSIZE<=″0000000″; ???? END IF; 2:STEPSIZE<=″0000111″ WHENINDEX=″00000″ ELSE ??????????? ″0001000″ WHEN INDEX=″00001″ELSE ??????????? ″0001001″WHEN INDEX=″00010″ ELSE ???? …… ?????????? ″0000000″; 以上两段程序描述了同一个译码电路。第二段程序由于WHEN......ELSE的语句不能生成锁存器的结构且ELSE后一定要有结果,所以不会有问题,而第一个程序如果不加ELSESTEPSIZE〈=“0000000”这句,则会生成一个含有7位寄存器的结构,虽然都能实现相同的译码功能。但是电路复杂度会大增。而由于每个工程师的写作习惯不同,有的喜欢用IF....ELSE的语句,有的喜欢用WHEN....ELSE的方式,而用IF....ELSE时,如稍不注意,在描述不需要寄存器的电路时没加ELSE,则会引起电路不必要的开销。所以在VHDL设计中要慎用IF....ELSE这类能描述自身值代入的语句。 If 和case语句是VHDL里边两个非常重要的语句,如何用好她们来描述逻辑电路和时序电路是学会VHDL编程重要的一步。if 和 case语句有一定的相关性,也有一定的区别。相同的地方是他们可以实现几乎一样的功能。下面主要介绍一下她们之间的区别。 If 语句每个分支之间是有优先级的,综合得到的电路是类似级联的结构。Case语句每个分支是平等的,综合得到的电路则是一个多路选择器。因此,多个if elseif语句综合得到的逻辑电路延时往往比case语句要大。一些初学者在一开始往往喜欢用if elsif语句,因为这种语法表达起来更加直接,但是在运行速度比较关键的项目中,使用case语句的效果会更好。 顺序语句“if_then_else_end if”是放在由“ process_end process”引导的语句中的。在VHDL中,所有合法的顺序语句必须放在进程语句中。这里的顺序是从仿真软件的运行和顺应VHDL语法的编程逻辑思路而言的,其相应的硬件逻辑工作方式未必如此。应该注意区分VHDL语言的软件行为与描述综合后的硬件行为的差异。 同样是a = b的赋值语句,会形成什么电路,起关键作用的是敏感信号。 a) 如果a = b是在进程之外,那么隐含的敏感信号就是b,那么,这个赋值语句就形成一条连线。 b) 如果是在一个同步进程中,如if (rising_edge(CLK)) then a = b,这时候,就会形成一个触发器,因为敏感信号是时钟边沿。 c) 如果敏感信号是一个电平信号,那么会形成一个锁存器。如一个不完整的if条件:if (cond = 1) then a = b; 几个简化和优化电路设计值得注意的方面: (1)在用VHDL进行设计中要注意避免不必要的寄存器描述。 (2)在编写程序前要先对整

您可能关注的文档

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档