1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,电子科技大学,*,高级VHDL设计,可靠设计与高速设计,学时分配:6,1,电子科技大学,进度,1.,绪论,。,2.,设计流程,。,3.,模块化硬件与进程模型,。,4.,信号传输模型,。,5.,核心语法与基础电路设计,。,6.,状态机设计,。,8.可编程逻辑器件。,7.,可靠设计与高速设计,。,9.,数字信号处理的,fpga,实现,。,10.,数字系统的,RTL,设计,。,2,电子科技大学,声明,本部分内容是数字电子系统的芯片级设计中要遇到的特殊问题,虽不是考试重点,但却是实际设计中的关键注意事项。,精选自一部分
2、出版书籍、网络资料以及个人的一些设计经验,仅仅是众多设计原则和设计技巧中的沧海一粟,并且错误在所难免。,艺无止境,讲授本部分的目的仅仅是带领入门,修行仍靠自身。要熟练使用这些技巧,并且有进一步的提高,必须经过大量的项目实践去积累。,3,电子科技大学,OUTLINE,正确设计,同步设计,异步设计,高速设计的其他手段,增加设计稳定性和工作速率的方法掺杂在这几部分内容中,不根据本部分的题目做硬性的划分。,4,电子科技大学,OUTLINE,正确设计,同步设计,异步设计,高速设计的其他手段,VHDL,结构体描述风格,rtl,风格注意事项,敏感信号的问题,条件判断语句的注意事项,多驱动与总线复用,毛刺的消
3、除,5,电子科技大学,OUTLINE,正确设计,同步设计,异步设计,高速设计的其他手段,VHDL,结构体描述风格,rtl,风格注意事项,敏感信号的问题,条件判断语句的注意事项,多驱动与总线复用,毛刺的消除,6,电子科技大学,VHDL,结构体描述风格,行为描述风格,可进行系统仿真,少数可用于综合。,RTL,描述风格,寄存器传输级描述,也能为数据流描述风格。一般可被综合器综合。,结构描述风格,多用于顶层的模块连接。,7,电子科技大学,行为描述风格,这种风格的描述往往以以下语句为主要特征:,使用延时语句,包括惯性延时和传输延时;,在多驱动的处理上采取判决函数;,使用,Generic,语句对时序参数建
4、模;,使用其它具备行为级特性的语句如,wait for,等语句。,这部分属于高级仿真内容,在此不作讲述。,8,电子科技大学,结构体描述风格,特征语句:,PORT MAP;,GENERIC MAP。,不作详细讲述。,9,电子科技大学,RTL,描述风格,面向可综合的设计,处于抽象设计与门级设计之间的层次。,其对应的硬件层次为寄存器云图,10,电子科技大学,OUTLINE,正确设计,同步设计,异步设计,高速设计的其他手段,VHDL,结构体描述风格,rtl,风格注意事项,敏感信号的问题,条件判断语句的注意事项,多驱动与总线复用,毛刺的消除,11,电子科技大学,RTL,描述风格注意事项,“X”,状态的传
5、递,时钟沿描述限制,关联性强的信号应该放在一个进程中,12,电子科技大学,1.“,X”,状态的传递(1),不确定态“,X”,在前仿真中经常会出现。当然综合以后的时序仿真中一般是不会出现的。,在,RTL,级的描述中,要做好“,X”,状态的处理,以使得前仿真和后仿真的结果一致。,13,电子科技大学,1.“,X”,状态的传递(2),例子:,if(,sel,=1)then,y=0;,else,y=1;,end if;,从门级的观点看,该分支隐含的条件为:,If(,sel,=0)。,因此在后仿真时没问题,因为,sel,一般不会出现,X。,但是前仿真时,当,sel,=X,时,会得出,y=1,的结果,违反了
6、电路原理。,14,电子科技大学,1.“,X”,状态的传递(3),例子:,if(,sel,=1)then,y=0;,elsif,(,sel,=0)then,y=1;,else,y=X;,end if;,加上,X,状态的处理。,15,电子科技大学,1.“,X”,状态的传递(4),实际上,第一种描述方式在设计中也是很经常见的,但是这个时候要尽力避免不确定态的出现:,电路初始化要完善,特别是时序电路中要有可靠的复位描述;,尽量少用组合回环或反馈;,测试矢量要完善。,16,电子科技大学,1.“,X”,状态的传递(5),时序电路的复位例子:时钟处理模块(2分频),Process(,clk,),Begin,
7、If(,clkevent,and,clk,=1)then,clk2d=not din;,End if;,End process;,17,电子科技大学,1.“,X”,状态的传递(5),时序电路的复位例子:时钟处理模块(2分频),Process(,clk,reset_n,),Begin,if(reset_n=0)then clk2d=0;,els,If,(,clkevent,and,clk,=1)then,clk2d=not din;,End if;,End process;,注:时序电路的复位是强烈推荐使用的,但是在某些情况下,复位电路会稍微降低系统的工作速率。是否取消复位电路,要看具体的目标芯
8、片和系统的速率需求。,18,电子科技大学,1.“,X”,状态的传递(6),组合回环的避免,组合电路,这种组合回环,用,VHDL,的逻辑运算语句来描述,会无法通过综合;用,port map,语句来描述可通过综合。,RTL,级别描述的组合回环很少使用(并且不推荐使用),一般仅用在一些特殊场合中(比如多时钟切换中的毛刺避免等),但是这在仿真时,dout,往往会出现不确定态,这是必须要注意的。,dout,19,电子科技大学,2.时钟沿描述限制(1),一个进程中,只能有一个时钟沿判断语句!,Process(clk1,clk2),Begin,if(clk1event and clk1=1)then,end
9、 if;,if(clk2event and clk2=1)then,end if;,End process;,20,电子科技大学,2.时钟沿描述限制(2),一个进程中,只能有一个时钟沿判断语句!,Process(clk,),Begin,if(,clkevent,and,clk,=1)then,end if;,if(,clkevent,and,clk,=1)then,end if;,End process;,21,电子科技大学,2.时钟沿描述限制(3),所以,不能在一个进程中判断两次或以上的时钟沿,甚至是判断同一个时钟的同一个沿也不行。,22,电子科技大学,OUTLINE,正确设计,同步设计,异
10、步设计,高速设计的其他手段,VHDL,结构体描述风格,rtl,风格注意事项,敏感信号的问题,条件判断语句的注意事项,多驱动与总线复用,毛刺的消除,23,电子科技大学,敏感信号的问题(1),敏感信号表只对,前仿真引擎,起作用,对,综合器,不起作用,而综合后生成的仿真模型是保证不遗漏敏感信号的,因此设计者不小心造成的敏感信号表的遗漏往往会导致,前仿真,和,后仿真,的不一致。,24,电子科技大学,敏感信号的问题(2),引起硬件动作的被读信号应该都放在敏感信号表中,纯组合电路描述中的所有被读的信号都必须放在敏感信号表中,这些信号包括:,组合电路描述中,所有被读取的信号;,时序电路中的时钟信号,异步控制
11、信号。,敏感信号遗漏的后果可参考,的,p.22 p.27。,25,电子科技大学,敏感信号的问题(3),敏感信号表遗漏情况下,前仿真的波形看起来很像锁存,因此这种错误在某些资料中也称为“仿真锁存器”。,26,电子科技大学,OUTLINE,正确设计,同步设计,异步设计,高速设计的其他手段,VHDL,结构体描述风格,rtl,风格注意事项,敏感信号的问题,条件判断语句的注意事项,多驱动与总线复用,毛刺的消除,27,电子科技大学,条件判断语句的注意事项,锁存的避免,无关态的使用,优先级问题,28,电子科技大学,锁存的避免,冗余锁存器的其他例子,可参考,的条件判断语句部分。这里只做补充。,例子:设计一个状
12、态机,一共有两个状态,s0,s1。,输入信号为一个比特的,din。,当,din=1,时,状态机进行状态翻转;当,din=0,时,状态保持为当前态。,描述方法1:可以将,din,当成状态机时钟,clk,的使能;本方法在此不再讲述。,描述方法2:按照状态机描述的三进程模板进行描述,以下是状态寄存器和次态译码进程。译码输出进程省略。,29,电子科技大学,状态寄存器进程:,Process(,clk,reset),Begin,if(reset=1)then,Pst,=s0;,elsif,(,clkevent,and,clk,=1)then,pst,if(din=1)then,Nst,=s1;,else,
13、Nst,.,End process;,在,din=0,时,初学者往往认为状态机不翻转,则可不必再对,Nst,赋值,因为此时,Nst,和,Pst,的值一样,都为,s0,,再赋值一次显得多余。,31,电子科技大学,事实上,这个“多余”的赋值非常致命,少了这一句,电路将出现惊人的复杂化,并且工作不正常。因为次态译码从纯组合电路变成了锁存电路。,思考:上一页中,初学者思路的漏洞在哪里?,解答:在初始时刻,也就是在,reset,之后,如果,din=0,,则,Nst,没有获得明确的值。它只好“保持原来状态”。上述思路的漏洞在于没有考虑到初始时刻的情况,而是假定电路已经发生状态翻转之后再作分析。,32,电子
14、科技大学,锁存的避免 总结,组合电路描述中,条件判断语句必须指明所有条件分支情况下,被赋值信号的值。,分支不完整,意味着电路需要在某种电平状态下,让被赋值的信号“保持原值”,这只能使用锁存电路实现。,33,电子科技大学,无关态的使用,代码段1:,Case,sel,is,when“000”=,dout,dout,dout,dout,dout,dout,=;,End case;,35,电子科技大学,代码段1的综合结果:,MUX,dout,dina,dinb,Sel(0),Sel(1),Sel(2),36,电子科技大学,代码段2的综合结果:,MUX,dina,dinb,dout,Sel(1),37,
15、电子科技大学,无关态的使用 总结,对比以上两段代码的综合结果,可以发现,善于使用无关态-来填补分支,可以引导综合工具生成很优化的电路。,无关态-在本质上时起了冗余电路删简的作用。,38,电子科技大学,优先级问题,Case,语句无优先级,,if,语句有优先级。,Multiple if statement,和,single if statement,具有两种不同的优先级顺序。,39,电子科技大学,Single if,Process(a),Begin,if (a(0)=1)then b=“001”;,elsif,(a(1)=1)then b=“010”;,elsif,(a(2)=1)then b=“
16、100”;,else b=“000”;,end if;,End process;,40,电子科技大学,Multiple if,Process(a),Begin,b=“000”;,if(a(0)=1 )then b=“001”;end if;,if(a(1)=1 )then b=“010”;end if;,if(a(2)=1 )then b=“100”;end if;,End process;,41,电子科技大学,OUTLINE,正确设计,同步设计,异步设计,高速设计的其他手段,VHDL,结构体描述风格,rtl,风格注意事项,敏感信号的问题,条件判断语句的注意事项,多驱动与总线复用,毛刺的消除,
17、42,电子科技大学,多驱动与总线复用,当多个信号源同时去驱动同一个负载,就会形成多驱动。可暂且简单称为,输出碰撞,。,没有处理好多驱动,不但会造成逻辑混乱,而且容易损坏器件。具体原理可参考,中关于高阻态的内容。,43,电子科技大学,多驱动与总线复用,多驱动处理的要点:,行为级思维,硬件思维;,总线复用;,线与;,双向端口中的高阻态;,44,电子科技大学,多驱动与总线复用,多驱动处理的要点:,行为级思维,硬件思维;,总线复用;,线与;,双向端口中的高阻态;,45,电子科技大学,例子:任天堂游戏机的游戏卡(省略去游戏进度存储模块)内部的电路框图为:,Flash,存储器,存储接口控制,Addr(23
18、0),cs,rd,wr,Ad(15:0),A(23:16),Data(15:0),46,电子科技大学,为了研究日本游戏技术,现在要求盗版该游戏卡,其中用,CPLD,代替接口控制芯片。请写出,CPLD,中,低16位地址控制部分的代码。,读数据,时低16位地址的控制协议:当,cs,=0,时,,Addr(15:0),即初始化为,Ad(15:0),的值。,Cs,上升后,,Addr(15:0),即被锁住,不再受,Ad(15:0),的影响;在,cs,=1,的期间,每一个,rd,上升沿均导致,Addr(15:0),进行加一计数。,写数据,时的控制也差不多,只需要将上面的,rd,换成,wr,即可。,47,电
19、子科技大学,Addr(15:0),cs,rd,读数据时的低16位地址控制时序图,N,N+1,N+2,写数据的时序图基本上一样,只是,rd,与,wr,互换,wr,48,电子科技大学,代码实现方法1,包括读控制进程和写控制进程:,Rd,proc,:Process(,cs,rd,),Begin,if(,cs,=0)then,Addr,(15,downto,0)=Ad(15,downto,0);,elsif,(,rd,event and,rd,=1)then,Addr,(15,downto,0)=,Addr,(15,downto,0)+1;,end if;,End process;,49,电子科技大学
20、Wr,proc,:Process(,cs,wr,),Begin,if(,cs,=0)then,Addr,(15,downto,0)=Ad(15,downto,0);,elsif,(,wr,event,and,wr,=1)then,Addr,(15,downto,0)=,Addr,(15,downto,0)+1;,end if;,End process;,50,电子科技大学,以上代码的描述实际上“照搬”控制协议中的描述,并且符合人的“直觉思维”。从“软件”的角度来看,确实没有任何算法上的错误。,但是综合时,出现了多驱动的错误。,原因:代码被综合成如下形式:,Rd,模块,Wr,模块,Addr(1
21、5:0),51,电子科技大学,这是典型的“直觉”描述,没能生成正确的电路。,修正方法如下:,52,电子科技大学,rw,proc,:Process(,cs,wr,rd,),Begin,cclk,=,wr,and rd;,if(,cs,=0)then,Addr,(15,downto,0)=Ad(15,downto,0);,elsif,(,cclk,event,and,cclk,=1)then,Addr,(15,downto,0)=,Addr,(15,downto,0)+1;,end if;,End process;,53,电子科技大学,软件思维,硬件思维 的转变,在电路描述时,必须摒弃软件思维方式
22、一切从硬件的角度去思考代码的描述。,在具体的项目实践中,必须先画好模块的接口时序图,然后画出或者在脑子里形成模块的内部原理框图,最后才是代码实现。,企图一开始就依靠“软件算法”思维进行代码实现,最后才分析时序和电路图,是非常不可取的。,硬件思维的形成,需要一定的硬件设计训练才能达到,熟练了之后才可能科学地在初始阶段完成模块划分和时序设计。,54,电子科技大学,多驱动与总线复用,多驱动处理的要点:,行为级思维,硬件思维;,总线复用;,线与;,双向端口中的高阻态;,55,电子科技大学,总线复用,两个模块输出数据给同一个负载模块的设计中,必须处理好总线复用。,数据源,a,数据源,b,负载,sel,
23、56,电子科技大学,加上,sel,的实质就是:,数据源,a,数据源,b,负载,sel,douta,doutb,dout,57,电子科技大学,或者,数据源,a,数据源,b,负载,douta,doutb,dout,MUX,sel,58,电子科技大学,代码描述:,If(,sel,=1)then,dout,=,douta,;,Else,dout,=,doutb,End if;,另外:尽量不要在芯片内部使用三态,某些,FPGA,不支持这种特性,在,ASIC,设计中也会带来一些测试上的问题。,59,电子科技大学,多驱动与总线复用,多驱动处理的要点:,行为级思维,硬件思维;,总线复用;,线与;,双向端口中的
24、高阻态;,60,电子科技大学,CMOS,工艺中只有漏极开路输出(,Open drain),的电路才能实现线与;,对应于,TTL,工艺,则为集电极开路(,Open)collector)。,有部分,FPGA,可以将引脚设置为,OD,门输出,这个时候可以实现正常的线与逻辑;但是有部分,FPGA,没有这种输出逻辑,这时候可以用高阻输出或者直接切换到输入模式来代替,OD,模式,以实现安全的线与功能。当然这个时候要在芯片外部使用上下拉电阻来代替线与情况下的弱输出。,61,电子科技大学,典型案例:,I2C,控制模块。,I2C,模块,S,I2C,模块,M,假设某时刻,模块,M,需要检测到线上电平为高,才会放心
25、地向该信号线输出有效串行数据,返回给模块,S(fpga,)。,fpga,带,I2C,接口的,asic,其他,I2C,模块,S,62,电子科技大学,多驱动与总线复用,多驱动处理的要点:,行为级思维,硬件思维;,总线复用;,线与;,双向端口中的高阻态;,63,电子科技大学,描述全双向端口,当,dir=1,时,数据从,da,流向,db;dir=0,时,数据从,db,流向,da,。,双向,dir,da,db,64,电子科技大学,双向端口代码实现:分两个方向分别描述,-,da,db:,If(dir=1)then,db=,da,;,Else,db=“ZZZZ”;,End if;,-db,da,:,If(d
26、ir=0)then,da,=db;,Else,da,d,q,q,vec,110,111,000,d,clk,vec,001,clk,75,电子科技大学,时钟使能吸收,计数器,计数器,clk2,vec,clk,计数器,计数器,ce,vec,clk,注意这里,ce,宽度为,clk,的一个周期,76,电子科技大学,OUTLINE,正确设计,同步设计,异步设计,高速设计的其他手段,同步设计的概念,时钟质量的保证,路径延迟及其优化,时钟驱动的,TestBench,77,电子科技大学,OUTLINE,正确设计,同步设计,异步设计,高速设计的其他手段,同步设计的概念,时钟质量的保证,路径延迟及其优化,时钟驱
27、动的,TestBench,78,电子科技大学,同步设计的概念,整个系统有一个时钟,最多还有一些派生(分频,倍频等,保证与源时钟有确定的相位关系)时钟。,系统中的主要存储元件大都是时钟沿敏感的元件(即寄存器),而不是电平敏感的元件(即锁存器)。,79,电子科技大学,数字系统设计中,应该尽量地采用纯粹的同步系统(单时钟系统)设计。,异步设计会给电路带来很多不安全的因素。,80,电子科技大学,同步系统的时序特点,信号变化都是发生在时钟沿(之后的微小时间处),即系统中的动作基本上都是“,绑定,”在时钟沿上。,信号在敏感的时钟沿之后可能会有一段不稳定时间,随后将保持一段时间的稳定,等待下一个敏感的时钟沿
28、的,采样,。,111,000,001,81,电子科技大学,OUTLINE,正确设计,同步设计,异步设计,高速设计的其他手段,同步设计的概念,时钟质量的保证,路径延迟及其优化,时钟驱动的,TestBench,82,电子科技大学,时钟质量的保证,时钟,Skew,的最小化;,PLL,的使用;,门控时钟与时钟使能;,派生时钟与派生使能;,其他,减少时钟的,skew,避免时钟毛刺,83,电子科技大学,时钟质量的保证,时钟,Skew,的最小化;,PLL,的使用;,门控时钟与时钟使能;,派生时钟与派生使能;,其他,84,电子科技大学,同步系统中的时钟,skew,时钟的,skew(,偏移,偏斜,抖动),d q
29、d q,din,q1,q2,clk,clkd,din,clk,clkd,q1,q2,错误,正确,skew,85,电子科技大学,同步系统设计中应该使时钟的,skew,最小化,使用快速的导线类型来对时钟布线(如在,fpga,中,采用全铜层工艺来实现全局通道)。,使用时钟树(,Distribution Tree),在前端设计上,应遵循一定的设计原则来避免时钟的过分偏移(接下去一部分内容中讲述)。,86,电子科技大学,时钟质量的保证,时钟,Skew,的最小化,;,PLL,的使用;,门控时钟与时钟使能;,派生时钟与派生使能;,其他,目前所使用的中、高端,FPGA,内部均集成了,DPLL,,甚至模拟锁相
30、环。,这些锁相环提供对时钟的分频、倍频以及移相功能,并且保证,skew,最小。,87,电子科技大学,时钟质量的保证,时钟,Skew,的最小化,;,PLL,的使用;,门控时钟与时钟使能;,派生时钟与派生使能;,其他,88,电子科技大学,门控时钟(,gated,clk,),计数,器,clk,sw,dout,clko,clk,clko,sw,dout,如果将,sw,输入给寄存器的时钟使能端,en,,就可以基本上避免这个误触发,skew,89,电子科技大学,Gated,clk,的危害,容易导致时序电路的误触发;,增大了,clk,的,skew。,因此在设计中,尽量避免时钟通过组合电路,避免使用组合电路来
31、产生时钟。,Gated,Clk,也不是绝对不可用的,在某些情况下,它可以作为低功耗设计的手段。,90,电子科技大学,时钟质量的保证,时钟,Skew,的最小化,;,PLL,的使用;,门控时钟与时钟使能;,派生时钟与派生使能;,其他,91,电子科技大学,例1:设计一个计数器系统,该系统包含两个计数器,其中一个计数器以系统时钟,clk,频率计数;另一个计数器以,clk,的1/4频率计数。,两个计数器同时复位。假设仅要求两个计数器速度满足4倍关系,对相位无任何要求。,92,电子科技大学,传统设计思路(暂省略复位信号):,Couter_a,Counter_b,4分频,clk,clk4d,douta,do
32、utb,clk,clk4d,93,电子科技大学,优化设计思路,Couter_a,Counter_b,4分频,clk,en4d,douta,doutb,clk,en4d,注意,en4d,的脉冲宽度只有一个,clk,的周期。,94,电子科技大学,选择派生使能方案的原因,派生时钟方案增加了全局通道的耗费,这在全局通道比较稀缺的,FPGA,中是相当致命的。,ASIC,实现时导致了时钟树耗费增加。,派生使能不但可以消除以上的缺点,而且其时钟,skew,比派生时钟方案的,skew,更小。,95,电子科技大学,注意派生使能的产生,Process(,clk,reset),Begin,if(reset=1)th
33、en,clk_vec,0);,elsif,(,clkevent,and,clk,=1)then,clk_vec,=,clk_vec,+1;,end if;,End process;,96,电子科技大学,Process(,clk_vec,),Begin,if(,clk_vec,=“00”)then,en4d=1;,else,en4d=0;,end if;,End process;,注意,这里是组合电路输出,en4d,,难免产生毛刺;但是因为,en4d,是使能信号,所以这仍然是安全的。,97,电子科技大学,(时钟质量保证)小结,(以下要点均针对前端设计),时钟的纯净,:时钟最好不要通过任何组合电路
34、或者不要用组合电路产生时钟;,时钟的单一,:数字系统设计时,应该尽量减少时钟的数目,最好整个系统只有一个时钟;当需要派生时钟时,尽量用派生使能去代替。,98,电子科技大学,OUTLINE,正确设计,同步设计,异步设计,高速设计的其他手段,同步设计的概念,时钟质量的保证,路径延迟及其优化,时钟驱动的,TestBench,99,电子科技大学,时序电路的主要时序参数,clk,Din,clk,Din,Th,Tsu,Tco,100,电子科技大学,路径延迟,Din,clk,Din,组合,电路,Tco,Tcom,Tsu,路径延迟,clk,时钟周期不能小于路径延迟,这里,Tcom,包含了网络走线延迟,101
35、电子科技大学,路径的定义,路径:是一系列标识一条电路的逻辑路线的元素;,路径可能包含一个信号网络(,net),或一组信号网络(,net),,以及相关的元件;,当一个元件被包含在一条路径中时,它的输入和输出也包含在这个路径中。,路径从一个,pad,或者一个同步元件(触发器,),的输出端开始,一直到遇到一个,pad,或一个同步元件(触发器)的输入端时终止。,102,电子科技大学,关键路径,一个同步系统中的关键路径,就是它所有的路径中,路径延迟最长的那一条。,显然,这个同步系统的最高工作频率,等于关键路径延迟的倒数。,103,电子科技大学,延时优化的几个要点,长路径的避免,优先级电路的延时优化,数
36、据通路拷贝,数据运算式变换,变量运算优化,组合路径切割,双时钟沿问题,其他,104,电子科技大学,长路径的避免,实际上是一个很泛的技巧,总之,在设计中,时序能走短路径就尽量走短路径;组合电路能缩小就尽量缩小。以下仅举两例来说明。,105,电子科技大学,回忆,中提出过一个问题:,106,电子科技大学,状态机设计中,状态编码采用,Binary,编码和,One-hot,编码对系统会造成什么样的性能影响?这两种编码对,FPGA/CPLD,的适用情况如何?,Binary,One-hot,S0,00,0001,S1,01,0010,S2,10,0100,S3,11,1000,107,电子科技大学,解答:,
37、one-hot,编码方式只用一个,bit,来表示一个状态,这大大缩小了状态译码的组合电路规模,使得路径延时更小,因此状态机的时钟可以运行在更高的频率上。,特例:不妨想象该状态机就是一个循环计数器,如果采用,binary,编码,则该计数器存在明显的组合电路;而如果采用,one-hot,编码,该计数器的综合结果就是一个移位寄存器序列,根本不存在任何组合门!,108,电子科技大学,扇入系数与组合规模,这个例子实际上也说明了一个问题:组合电路的规模往往受影响于其扇入系数:,扇入,组合电路规模,从而路径延时,系统工作速率,减少组合逻辑的扇入是提高系统工作速率的基本手段。,109,电子科技大学,One-h
38、ot,因为寄存器消耗量比较大,所以往往用在寄存器资源比较丰富的,FPGA,中,,CPLD,中使用得比较少。,110,电子科技大学,再回忆,中的另外一个问题,111,电子科技大学,问题:,Mealy,机中,能否用“次态”信号替代“输入”信号,与“现态”信号进行译码输出?,或者,保留,s5,态,然后直接用“次态”信号进行译码输出?,Regs,译码,Clk,Present_state,Q(n),Next_state,Q(n+1),译码,DataOut,Z(n),din,112,电子科技大学,对比原图:,Regs,译码,Clk,Present_state,Q(n),Next_state,Q(n+1),
39、译码,DataOut,Z(n),din,113,电子科技大学,经过对比发现,虽然两者在逻辑上是等效的,并且修改后的方案中似乎减少了输出译码电路的扇入,,但是输出译码和次态译码相粘连,形成了一条很长的路径,导致系统工作速度下降。,114,电子科技大学,反馈多路选择与专用时钟使能,时钟使能的两种实现方式:,寄存器内部的专用时钟使能电路;,反馈多路选择,如下图:,1,0,clk,en,din,dout,因为增加了额外的路径,因此降低了寄存器的最高工作速率。,115,电子科技大学,延时优化的几个要点,长路径的避免,优先级电路的延时优化,数据通路拷贝,数据运算式变换,变量运算优化,组合路径切割,双时钟沿
40、问题,其他,116,电子科技大学,优化时序的设计调整,设计时,往往需要针对具体的情况来进行设计的调整,以使系统的时序得到优化。,时序优化的原则,最主要的还是在保证正确逻辑的基础上,尽量缩小关键路径的延迟。,117,电子科技大学,例:带优先级的多路选择器,假设该选择器的真值表如下:,Sel(0),Sel(1),Sel(2),Sel(3),z,x,x,x,1,d,x,x,1,0,c,x,1,0,0,b,1,0,0,0,a,0,0,0,0,0,a,b,c,d,sel,z,118,电子科技大学,正常的描述方法1:多,if,语句,Process(a,b,c,d,sel,),Begin,z=0;,-,要记
41、得初始化!不推荐此风格。,if(sel(0)=1)then,z=a;end if;,if(sel(1)=1)then z=b;end if;,if(sel(2)=1)then z=c;end if;,if(sel(3)=1)then z=d;end if;,End process;,119,电子科技大学,正常的描述方法2:单,if,语句,Process(a,b,c,d,sel,),Begin,if (sel(3)=1)then,z=d;,elsif,(sel(2)=1)then z=c;,elsif,(sel(1)=1)then z=b;,elsif,(sel(0)=1)then z=a;,e
42、lse z=0;,end if;,End process;,120,电子科技大学,综合后的电路图,1,0,1,0,1,0,1,0,0,a,Sel(0),b,c,d,z,Sel(1),Sel(2),Sel(3),可以发现这样的规律:,这种简单,if,语句描述生成的,硬件中,条件优先级别越高,的模块往往越靠近输出端。,121,电子科技大学,调整情况1:数据到达延迟(,b,b_late),1,0,1,0,1,0,1,0,0,a,Sel(0),c,d,z,Sel(1),Sel(2),Sel(3),b,假设分析发现,,b,到达多路选择器的时间比,a,c,d,晚,那么如何改变设计,以使得时序更加优化?,1
43、22,电子科技大学,调整情况1:数据到达延迟(,b,b_late),1,0,1,0,1,0,1,0,0,a,Sel(0),b_late,c,d,z,Sel(1),Sel(2),Sel(3),假设分析发现,,b,到达多路选择器的时间比,a,c,d,晚,那么如何改变设计,以使得时序更加优化?,123,电子科技大学,优化目标,1,0,1,0,1,0,1,0,0,a,Sel(0),b_late,c,d,z,Sel(1),Sel(2),Sel(3),优化目标:针对,b_late,进行优化,减小该信号到达,z,的延迟。,124,电子科技大学,优化思路,1,0,1,0,1,0,1,0,0,a,Sel(0),
44、b_late,c,d,z,Sel(1),Sel(2),Sel(3),125,电子科技大学,优化后的电路图,如何在保证优先级不变的基础上,修改代码的描述?,1,0,1,0,1,0,1,0,0,a,Sel(0),c,d,b_late,z,Sel(2),Sel(3),Sel(3:1),控制,逻辑,zt,126,电子科技大学,优化描述方法1:多,if,语句,Process(a,b,c,d,sel,),Begin,zt,=0;,if(sel(0)=1)then,zt,=a;end if;,if(sel(2)=1)then,zt,=c;end if;,if(sel(3)=1)then,zt,=d;end
45、if;,if(sel(1)=1)and(sel(2)=0)and(sel(3)=0)then z=b_late;,else z=,zt,;,end if;,End process;,127,电子科技大学,优化描述方法2:双,if,语句,Process(a,b,c,d,sel,),Begin,if (sel(3)=1)then,zt,=d;,elsif,(sel(2)=1)then,zt,=c;,elsif,(sel(0)=1)then,zt,=a;,else,zt,=0;,end if;,if (sel(1)=1)and(sel(2)=0)and(sel(3)=0)then z=b_late;
46、else z=,zt,;,end if;,End process;,128,电子科技大学,!,优化描述方法3:单,if,嵌套,case,Process(a,b,c,d,sel,),Begin,if (sel(1)=1)then,case.End case;,elsif,(sel(3)=1)then,z,=d;,elsif,(sel(2)=1)then,z,=c;,elsif,(sel(0)=1)then,z,=a;,else,z,z z z z Sel(1)_late),1,0,1,0,1,0,1,0,0,a,Sel(0),c,d,z,Sel(1),Sel(2),Sel(3),b,假设分析发
47、现,,Sel(1),到达多路选择器的时间比其他,Sel,(,n),晚,那么如何改变设计,以使得时序更加优化?,132,电子科技大学,优化思路,1,0,1,0,1,0,1,0,0,a,Sel(0),c,d,z,Sel(1)_late,Sel(2),Sel(3),b,优化思路仍然和,b_late,的情况,一样,因此可以用前述的代码,进行优化。,133,电子科技大学,带优先级的电路优化方法总结,对于带有优先级别的电路,在进行延时优化时,要兼顾好延时和优先级。,对于单纯的,if,语句描述(,single if statement OR multiple if statement),,一般,生成的硬件都
48、是,越高优先级条件判断对应的,模块,越靠近输出端,。但这,不,意味着对应的,单个控制信号,(如,Sel(1),的优先级越高。,134,电子科技大学,带优先级的电路优化方法总结(续),如果到达比较,晚,(即延时较大)的信号(不管是,data,信号还是,control,信号)所对应的硬件模块,并不是处于最高优先级处时,那么就应该想办法将该模块向靠近输出端的位置,搬移,,以减小该信号所在的路径(很可能成为关键路径)的延迟。,可以通过搬移,if,条件模块的方法搬移需要移动的模块;,搬移之后,要调整,if,条件判断式,保证原来的优先级不变。,135,电子科技大学,1,0,1,0,1,0,1,0,0,a,
49、Sel(0),c,d,b_late,z,Sel(2),Sel(3),Sel(3:1),控制,逻辑,zt,不被搬移的部分保持不动。显然他们之间的优先级关系也不会被改变。,为保持不动的部分的输出定义一个信号。,因优化而被搬移的部分。,记得调整条件判断式,保证整体优先级不变。,136,电子科技大学,代码结构,Process(),Begin,-,固定不动部分的代码描述(对,zt,赋值);,-,被搬移部分的代码描述(对,z,赋值);,End process;,137,电子科技大学,延时优化的几个要点,长路径的避免,优先级电路的延时优化,数据通路拷贝,数据运算式变换,变量运算优化,组合路径切割,双时钟沿问
50、题,其他,138,电子科技大学,例:数据通路复用,考虑下面的代码:,If(CONTROL=1)then,PTR:=PTR1;,else,PTR:=PTR2;,end if;,OFFSET:=BASE-PTR;,ADDR:=ADDRESS-OFFSET;,COUNT=ADDR+B;,139,电子科技大学,综合后的电路图,PTR,PTR1,PTR2,CONTROL,BASE,ADDRESS,OFFSET,ADDR,B,COUNT,140,电子科技大学,优化目标,PTR,PTR1,PTR2,CONTROL,BASE,ADDRESS,OFFSET,ADDR,B,COUNT,假设,CONTROL,是一个






