![]() |
|
||||||||||||||
| . 网站首页 . 产品新知 . 业界资讯 . 技术文库 . 下载中心 . 服务导航 . 邮购需知 . 技术论坛 . | ||
|
||
|
|||||
| VHDL设计中的电路简化问题 | |||||
作者:Free 文章来源:电子开发 点击数: 更新时间:2008-4-15 ![]() |
|||||
|
摘 要:从描述方法、设计规则、逻辑函数分析了VHDL设计中容易引起电路复杂化的原因,并提出了相应的解决方法。
近年来,随着集成电路技术的发展,用传统的方法进行芯片或系统设计已不能满足要求,迫切需要提高设计效率。在这样的技术背景下,能大大降低设计难度的VHDL设计方法正越来越广泛地被采用。但是VHDL设计是行为级的设计?熕?带来的问题是设计者的设计思考与电路结构相脱节。设计者主要是根据VHDL的语法规则?煻韵低衬勘甑穆呒?行为进行描述?熑缓笸ü?综合工具进行电路结构的综合、编译、优化,通过仿真工具进行逻辑功能仿真和系统时延的仿真。实际设计过程中,由于每个工程师对语言规则、对电路行为的理解程度不同,每个人的编程风格不同,往往同样的系统功能,描述的方式是不一样的,综合出来的电路结构更是大相径庭。因此,即使最后综合出的电路都能实现相同的逻辑功能,其电路的复杂程度和时延特性都会有很大的差别,甚至某些臃肿的电路还会产生难以预料的问题。从这个问题出发,我们就很有必要深入讨论在VHDL设计中如何简化电路结构,优化电路设计的问题。 1 描述方法对电路结构的影响 用VHDL进行设计,其最终综合出的电路的复杂程度除取决于设计要求实现的功能的难度外,还受设计工程师对电路的描述方法和对设计的规划水平的影响。最常见的使电路复杂化的原因之一是设计中存在许多本不必要的类似LATCH的结构。而且由于这些结构通常都由大量的触发器组成,不仅使电路更复杂,工作速度降低,而且由于时序配合的原因而导致不可预料的结果。例如对于同一译码电路有不同VHDL描述: 1: IF INDEX=″00000″ THEN STEPSIZE<=″0000111″;?? WLSIF INDEX=″00001″ THEN STEPSIZE<=″0001000″;?? LSIF INDEX=″00010″ THEN STEPSIZE<=″0001001″;?? …… ELSE STEPSIZE<=″0000000″;?? END IF; 2:STEPSIZE<=″0000111″ WHEN INDEX=″00000″ ELSE ″0001000″ WHEN INDEX=″00001″ELSE ″0001001″WHEN INDEX=″00010″ ELSE …… ″0000000″;?? 以上两段程序描述了同一个译码电路。第二段程序由于WHEN......ELSE的语句不能生成锁存器的结构且ELSE后一定要有结果,所以不会有问题,而第一个程序如果不加ELSE STEPSIZE〈=“0000000”这句,则会生成一个含有7位寄存器的结构,虽然都能实现相同的译码功能。但是电路复杂度会大增。而由于每个工程师的写作习惯不同,有的喜欢用IF....ELSE的语句,有的喜欢用WHEN....ELSE的方式,而用IF....ELSE时,如稍不注意,在描述不需要寄存器的电路时没加ELSE,则会引起电路不必要的开销。所以在VHDL设计中要慎用IF....ELSE这类能描述自身值代入的语句。 2 设计规划的优劣直接影响电路结构 另一主要引起电路复杂化的原因是对设计规划的不合理。虽然VHDL语言能从行为描述生成电路,但一个完整的设计一般来说都不可能由直接描述设计的目标功能来实现的。总要把设计分成若干部分,每一部分再分别描述其行为。这就涉及到如何划分功能模块的问题,要求对设计了解的较深入,才能使划分更有效,才能降低电路的复杂程度。例如我们设计一个时钟源为1kHz,每32秒发出一组信号(共八组)的简单的控制器来说。下面有两种实现方法: (1)用15位的记数器实现把输入1kHz的时钟分频为1/32Hz,然后用这个作为时钟驱动一个3位的记数器,这个记数器的八个状态分别通过一个3-8译码器发出所要求的信号。 ?煟病≈苯佑?18位的记数器把输入的1kHz时钟进行分频,再利用记数器的八个相距32秒的状态来推动一个12-8译码器来实现。 对于如此的设计要求,VHDL程序分别如下所示: 1. 第一种设计方法的VHDL源程序 process(clk,cclk,count2) begin if??(clk='1' and clk'event)then count2<=count2 + 1;?? if(count2=″000000000000000″)then cclk<='1';?? else cclk<='0';?? end if;?? end if;?? end process;?? process(cclk,count3,ctemp) begin if(cclk='1' and cclk'event)then count3<=count3 +1;?? if(count3=″000″)then ctemp<=″00000001″;?? elsif(count3=″001″)then ctemp<=″00000010″;?? elsif(count3=″010″)then ctemp<=″00000100″;?? elsif(count3=″011″)then ctemp<=″00001000″;?? elsif(count3=″100″)then ctemp<=″00010000″;?? elsif(count3=″101″)then ctemp<=″00100000″;?? elsif(count3=″110″)then ctemp<=″01000000″;?? elsif(count3=″111″)then ctemp<=″10000000″;?? else ctemp<=″00000000″;?? end if;?? end if;?? end process;?? 2. 第二种设计方法的VHDL源程序 process(clk,ctemp,count) begin if(clk='1' and clk'event)then count<=count + 1;?? if(count=″00000000000000000″)then ctemp<=″00000001″;?? elsif(count=″001000000000000000″)then ctemp<=″00000010″;?? elsif(count=″010000000000000000″)then ctemp<=″00000100″;?? elsif(count=″011000000000000000″)then ctemp<=″00001000″;?? elsif(count=″100000000000000000″)then ctemp<=″00010000″;?? elsif(count=″101000000000000000″)then ctemp<=″00100000″;?? elsif(count=″110000000000000000″)then ctemp<=″01000000″;?? elsif(count=″111000000000000000″)then ctemp<=″10000000″;?? end if;?? end if;?? end peocess;?? 对于第一种的程序可以综合出的电路如图1所示。 该电路用一个15位的加法器和寄存器组成一个15位的记数器。在记数器记完一周回到“000000000000000”时,通过后面的15输入的与非门和一位的触发器就可以实现同步的进行215次分频,同步输出32Hz的时钟CCLK。CCLK再驱动一8位的移位寄存器,便可实现每32秒输出一信号。 而用第二种的程序设计综合出的电路如图2所示。 图片如下: 以上两种方法都能实现相同的逻辑功能,但图2所示的方法由于运用了较少位数的记数器,所用的逻辑门也较简单,而且还少用了多路选择器和锁存器资源,所以综合出来的电路较简单,以XILINX Spartan S05 -3 芯片为例。第一种方法占用芯片CLB的12%,其中FMAPS为9%,最高工作速度为82Hz。而第二种方法占用了15%的CLB,FMAPS占用 15%,最高工作速度只有69.9MHz。在这一个简单的设计之中就能省20%的电路,提高12.1MHz的工作速度,由此可见科学的划分设计对降低电路复杂程度的重要意义。 3 逻辑设计对电路结构的影响 还有一个使电路复杂化的原因是逻辑电路的输入项太多以致需占用过多的面积。我们从图3和图4两个相同功能的逻辑电路和他们对应的VHDL描述来分析。 比较两图可知,图3是二级逻辑门,每个输入信号与不只一个逻辑门相连,图4是三级的逻辑门,每个输入信号只与一逻辑门相连。由于级数少,延时也较少,因此图3的速度要比图4快。然而,由于图3的输入项要比图4大的多(10:5),因此,占用的面积必然也比图3大。图4是图3通过提取公因数(例中是B和C)得来的,这是 通过以上简单、初步的探讨,我们可以知道,用VHDL进行集成电路的设计,牵涉到对VHDL语言的使用方法和对设计的理解程度。本文讨论了以下几个简化和优化电路设计的3个值得注意的方面:
|
|||||
| 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 没有相关文章 |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | | |||
|