可靠设计与高速设计.ppt

上传人:sh****n 文档编号:12817564 上传时间:2020-05-26 格式:PPT 页数:194 大小:1.02MB
返回 下载 相关 举报
可靠设计与高速设计.ppt_第1页
第1页 / 共194页
可靠设计与高速设计.ppt_第2页
第2页 / 共194页
可靠设计与高速设计.ppt_第3页
第3页 / 共194页
点击查看更多>>
资源描述
1,可靠设计与高速设计学时分配:6,声明,本部分内容是数字电子系统的芯片级设计中要遇到的特殊问题,虽不是考试重点,但却是实际设计中的关键注意事项。精选自一部分出版书籍、网络资料以及个人的一些设计经验,仅仅是众多设计原则和设计技巧中的沧海一粟,并且错误在所难免。艺无止境,讲授本部分的目的仅仅是带领入门,修行仍靠自身。要熟练使用这些技巧,并且有进一步的提高,必须经过大量的项目实践去积累。,3,OUTLINE,正确设计同步设计异步设计高速设计的其他手段,增加设计稳定性和工作速率的方法掺杂在这几部分内容中,不根据本部分的题目做硬性的划分。,4,OUTLINE,正确设计同步设计异步设计高速设计的其他手段,VHDL结构体描述风格rtl风格注意事项敏感信号的问题条件判断语句的注意事项多驱动与总线复用毛刺的消除,5,OUTLINE,正确设计同步设计异步设计高速设计的其他手段,VHDL结构体描述风格rtl风格注意事项敏感信号的问题条件判断语句的注意事项多驱动与总线复用毛刺的消除,6,VHDL结构体描述风格,行为描述风格可进行系统仿真,少数可用于综合。RTL描述风格寄存器传输级描述,也能为数据流描述风格。一般可被综合器综合。结构描述风格多用于顶层的模块连接。,7,行为描述风格,这种风格的描述往往以以下语句为主要特征:使用延时语句,包括惯性延时和传输延时;在多驱动的处理上采取判决函数;使用Generic语句对时序参数建模;使用其它具备行为级特性的语句如waitfor等语句。这部分属于高级仿真内容,在此不作讲述。,8,结构体描述风格,特征语句:PORTMAP;GENERICMAP。不作详细讲述。,9,RTL描述风格,面向可综合的设计,处于抽象设计与门级设计之间的层次。其对应的硬件层次为寄存器云图,10,OUTLINE,正确设计同步设计异步设计高速设计的其他手段,VHDL结构体描述风格rtl风格注意事项敏感信号的问题条件判断语句的注意事项多驱动与总线复用毛刺的消除,11,RTL描述风格注意事项,“X”状态的传递时钟沿描述限制关联性强的信号应该放在一个进程中,12,1.“X”状态的传递(1),不确定态“X”在前仿真中经常会出现。当然综合以后的时序仿真中一般是不会出现的。在RTL级的描述中,要做好“X”状态的处理,以使得前仿真和后仿真的结果一致。,13,1.“X”状态的传递(2),例子:if(sel=1)theny=0;elsey=1;endif;,从门级的观点看,该分支隐含的条件为:If(sel=0)。因此在后仿真时没问题,因为sel一般不会出现X。但是前仿真时,当sel=X时,会得出y=1的结果,违反了电路原理。,14,1.“X”状态的传递(3),例子:if(sel=1)theny=0;elsif(sel=0)theny=1;elsey=X;endif;,加上X状态的处理。,15,1.“X”状态的传递(4),实际上,第一种描述方式在设计中也是很经常见的,但是这个时候要尽力避免不确定态的出现:电路初始化要完善,特别是时序电路中要有可靠的复位描述;尽量少用组合回环或反馈;测试矢量要完善。,16,1.“X”状态的传递(5),时序电路的复位例子:时钟处理模块(2分频)Process(clk)BeginIf(clkeventandclk=1)thenclk2d=notclk2d;Endif;Endprocess;,17,1.“X”状态的传递(5),时序电路的复位例子:时钟处理模块(2分频)Process(clk,reset_n)Beginif(reset_n=0)thenclk2d=0;elsIf(clkeventandclk=1)thenclk2d=notclk2d;Endif;Endprocess;,注:时序电路的复位是强烈推荐使用的,但是在某些情况下,复位电路会稍微降低系统的工作速率。是否取消复位电路,要看具体的目标芯片和系统的速率需求。,18,1.“X”状态的传递(6),组合回环的避免,这种组合回环,用VHDL的逻辑运算语句来描述,会无法通过综合;用portmap语句来描述可通过综合。RTL级别描述的组合回环很少使用(并且不推荐使用),一般仅用在一些特殊场合中(比如多时钟切换中的毛刺避免等),但是这在仿真时dout往往会出现不确定态,这是必须要注意的。,dout,19,2.时钟沿描述限制(1),一个进程中,只能有一个时钟沿判断语句!Process(clk1,clk2)Beginif(clk1eventandclk1=1)thenendif;if(clk2eventandclk2=1)thenendif;Endprocess;,20,2.时钟沿描述限制(2),一个进程中,只能有一个时钟沿判断语句!Process(clk)Beginif(clkeventandclk=1)thenendif;if(clkeventandclk=1)thenendif;Endprocess;,21,2.时钟沿描述限制(3),所以,不能在一个进程中判断两次或以上的时钟沿,甚至是判断同一个时钟的同一个沿也不行。,22,OUTLINE,正确设计同步设计异步设计高速设计的其他手段,VHDL结构体描述风格rtl风格注意事项敏感信号的问题条件判断语句的注意事项多驱动与总线复用毛刺的消除,23,敏感信号的问题(1),敏感信号表只对前仿真引擎起作用,对综合器不起作用,而综合后生成的仿真模型是保证不遗漏敏感信号的,因此设计者不小心造成的敏感信号表的遗漏往往会导致前仿真和后仿真的不一致。,24,敏感信号的问题(2),引起硬件动作的被读信号应该都放在敏感信号表中,纯组合电路描述中的所有被读的信号都必须放在敏感信号表中,这些信号包括:组合电路描述中,所有被读取的信号;时序电路中的时钟信号,异步控制信号。敏感信号遗漏的后果可参考的p.22p.27。,25,敏感信号的问题(3),敏感信号表遗漏情况下,前仿真的波形看起来很像锁存,因此这种错误在某些资料中也称为“仿真锁存器”。,26,OUTLINE,正确设计同步设计异步设计高速设计的其他手段,VHDL结构体描述风格rtl风格注意事项敏感信号的问题条件判断语句的注意事项多驱动与总线复用毛刺的消除,27,条件判断语句的注意事项,锁存的避免无关态的使用优先级问题,28,锁存的避免,冗余锁存器的其他例子,可参考的条件判断语句部分。这里只做补充。例子:设计一个状态机,一共有两个状态s0,s1。输入信号为一个比特的din。当din=1时,状态机进行状态翻转;当din=0时,状态保持为当前态。描述方法1:可以将din当成状态机时钟clk的使能;本方法在此不再讲述。描述方法2:按照状态机描述的三进程模板进行描述,以下是状态寄存器和次态译码进程。译码输出进程省略。,29,状态寄存器进程:Process(clk,reset)Beginif(reset=1)thenPstdoutdoutdoutdoutdoutdout=;Endcase;,35,代码段1的综合结果:,MUX,dout,dina,dinb,Sel(0),Sel(1),Sel(2),36,代码段2的综合结果:,MUX,dina,dinb,dout,Sel(1),37,无关态的使用总结,对比以上两段代码的综合结果,可以发现,善于使用无关态-来填补分支,可以引导综合工具生成很优化的电路。无关态-在本质上时起了冗余电路删简的作用。,38,优先级问题,Case语句无优先级,if语句有优先级。Multipleifstatement和singleifstatement具有两种不同的优先级顺序。,39,Singleif,Process(a)Beginif(a(0)=1)thenb=“001”;elsif(a(1)=1)thenb=“010”;elsif(a(2)=1)thenb=“100”;elseb=“000”;endif;Endprocess;,40,Multipleif,Process(a)Beginb=“000”;if(a(0)=1)thenb=“001”;endif;if(a(1)=1)thenb=“010”;endif;if(a(2)=1)thenb=“100”;endif;Endprocess;,41,OUTLINE,正确设计同步设计异步设计高速设计的其他手段,VHDL结构体描述风格rtl风格注意事项敏感信号的问题条件判断语句的注意事项多驱动与总线复用毛刺的消除,42,多驱动与总线复用,当多个信号源同时去驱动同一个负载,就会形成多驱动。可暂且简单称为输出碰撞。没有处理好多驱动,不但会造成逻辑混乱,而且容易损坏器件。具体原理可参考中关于高阻态的内容。,43,多驱动与总线复用,多驱动处理的要点:行为级思维硬件思维;总线复用;线与;双向端口中的高阻态;,44,多驱动与总线复用,多驱动处理的要点:行为级思维硬件思维;总线复用;线与;双向端口中的高阻态;,例子:任天堂游戏机的游戏卡(省略去游戏进度存储模块)内部的电路框图为:,Flash存储器,存储接口控制,Addr(23: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,Addr(15:0),cs,rd,读数据时的低16位地址控制时序图,N,N+1,N+2,写数据的时序图基本上一样,只是rd与wr互换,wr,48,代码实现方法1,包括读控制进程和写控制进程:Rdproc:Process(cs,rd)Beginif(cs=0)thenAddr(15downto0)=Ad(15downto0);elsif(rdeventandrd=1)thenAddr(15downto0)=Addr(15downto0)+1;endif;Endprocess;,49,Wrproc:Process(cs,wr)Beginif(cs=0)thenAddr(15downto0)=Ad(15downto0);elsif(wreventandwr=1)thenAddr(15downto0)=Addr(15downto0)+1;endif;Endprocess;,50,以上代码的描述实际上“照搬”控制协议中的描述,并且符合人的“直觉思维”。从“软件”的角度来看,确实没有任何算法上的错误。但是综合时,出现了多驱动的错误。原因:代码被综合成如下形式:,Rd模块,Wr模块,Addr(15:0),51,这是典型的“直觉”描述,没能生成正确的电路。修正方法如下:,52,rwproc:Process(cs,wr,rd)Begincclk=wrandrd;if(cs=0)thenAddr(15downto0)=Ad(15downto0);elsif(cclkeventandcclk=1)thenAddr(15downto0)=Addr(15downto0)+1;endif;Endprocess;,软件思维硬件思维的转变,在电路描述时,必须摒弃软件思维方式,一切从硬件的角度去思考代码的描述。在具体的项目实践中,必须先画好模块的接口时序图,然后画出或者在脑子里形成模块的内部原理框图,最后才是代码实现。企图一开始就依靠“软件算法”思维进行代码实现,最后才分析时序和电路图,是非常不可取的。硬件思维的形成,需要一定的硬件设计训练才能达到,熟练了之后才可能科学地在初始阶段完成模块划分和时序设计。,54,多驱动与总线复用,多驱动处理的要点:行为级思维硬件思维;总线复用;线与;双向端口中的高阻态;,55,总线复用,两个模块输出数据给同一个负载模块的设计中,必须处理好总线复用。,数据源a,数据源b,负载,56,加上sel的实质就是:,数据源a,数据源b,负载,douta,doutb,dout,57,或者,数据源a,数据源b,负载,douta,doutb,58,代码描述:If(sel=1)thendout=douta;Elsedout=doutbEndif;,另外:尽量不要在芯片内部使用三态,某些FPGA不支持这种特性,在ASIC设计中也会带来一些测试上的问题。,59,多驱动与总线复用,多驱动处理的要点:行为级思维硬件思维;总线复用;线与;双向端口中的高阻态;,CMOS工艺中只有漏极开路输出(Opendrain)的电路才能实现线与;对应于TTL工艺,则为集电极开路(Open)collector)。有部分FPGA可以将引脚设置为OD门输出,这个时候可以实现正常的线与逻辑;但是有部分FPGA没有这种输出逻辑,这时候可以用高阻输出或者直接切换到输入模式来代替OD模式,以实现安全的线与功能。当然这个时候要在芯片外部使用上下拉电阻来代替线与情况下的弱输出。,典型案例:I2C控制模块。,I2C模块S,I2C模块M,假设某时刻,模块M需要检测到线上电平为高,才会放心地向该信号线输出有效串行数据,返回给模块S(fpga)。,fpga,带I2C接口的asic,其他I2C模块S,62,多驱动与总线复用,多驱动处理的要点:行为级思维硬件思维;总线复用;线与;双向端口中的高阻态;,63,描述全双向端口,当dir=1时,数据从da流向db;dir=0时,数据从db流向da。,双向,dir,da,db,64,双向端口代码实现:分两个方向分别描述,-dadb:If(dir=1)thendb=da;Elsedb=“ZZZZ”;Endif;,-dbda:If(dir=0)thenda=db;Elseda=“ZZZZ”;Endif;,65,双向端口设计时序,时序为:,da,db,dir,ZZZZ,ZZZZ,双向端口的测试矢量时序,TestBench时序正好与RTL相反!,da,db,dir,ZZZZ,ZZZZ,双向端口设计和仿真总结,双向的设计和描述对于初学者来说是比较难以理解的。总之其设计时序规律为:可分为两个方向分别描述,对于作为被赋值者的任何一个端口,当它作为输出时,就被赋给输入的值;当它作为输入时,就被赋给高阻态;其仿真时序规律为:对于任意一个端口,作为输出时,强行赋值高阻态。以上规律的实质就是避免输出碰撞。(请自行画出双向口的内部电路图-事实上就是两个三态buffer反向并行,这就是以上描述方法的原因。),68,OUTLINE,正确设计同步设计异步设计高速设计的其他手段,VHDL结构体描述风格rtl风格注意事项敏感信号的问题条件判断语句的注意事项多驱动与总线复用毛刺的消除,69,毛刺的消除,毛刺产生的机理竞争和冒险延时不平衡线间干扰毛刺消除的方法竞争冒险的避免GrayCoding寄存器消除其他,时序电路中,异步复位、时钟等输入端出现毛刺时,都会引起系统的误动作。,70,毛刺产生的机理,毛刺产生的机理竞争和冒险(请参考数字逻辑设计课程的教材)导致毛刺。组合延时,布线延时的不平衡,导致译码输出毛刺。线间的信号耦合,导致毛刺的产生。,实际上可以认为,不管是否出现竞争冒险,只要是纯组合译码输出的电路,就可能会产生毛刺。,71,延时不平衡导致的毛刺:,计数器,正常信号变化:“011”“100”实际信号变化:“011”“111”“100”,导致dout输出毛刺,dout,clk,72,毛刺消除的方法(1),竞争与冒险的避免(略)Gray编码方法计数器(状态机)电路中,采用Gray编码可以避免总线上的多个bit同时在一个时钟周期内翻转而导致毛刺。如上一页图中的计数器即可采用这种编码。(附:Gray码在任何相邻的两组代码中,仅有一位数码不同)注:Gray码方法也是降低设计功耗的一个常用手段,因为它降低了寄存器的电平翻转率。,73,毛刺消除的方法(2),寄存器消除:寄存器的数据输入端D和时钟使能端EN对毛刺不敏感,因此可以利用D和EN来吸收毛刺信号。,寄存器采样(利用D端),计数器,d,q,q,vec,clk,75,时钟使能吸收,计数器,计数器,clk2,vec,clk,注意这里ce宽度为clk的一个周期,76,OUTLINE,正确设计同步设计异步设计高速设计的其他手段,同步设计的概念时钟质量的保证路径延迟及其优化时钟驱动的TestBench,77,OUTLINE,正确设计同步设计异步设计高速设计的其他手段,同步设计的概念时钟质量的保证路径延迟及其优化时钟驱动的TestBench,78,同步设计的概念,整个系统有一个时钟,最多还有一些派生(分频,倍频等,保证与源时钟有确定的相位关系)时钟。,系统中的主要存储元件大都是时钟沿敏感的元件(即寄存器),而不是电平敏感的元件(即锁存器)。,79,数字系统设计中,应该尽量地采用纯粹的同步系统(单时钟系统)设计。异步设计会给电路带来很多不安全的因素。,80,同步系统的时序特点,信号变化都是发生在时钟沿(之后的微小时间处),即系统中的动作基本上都是“绑定”在时钟沿上。信号在敏感的时钟沿之后可能会有一段不稳定时间,随后将保持一段时间的稳定,等待下一个敏感的时钟沿的采样。,111,000,001,81,OUTLINE,正确设计同步设计异步设计高速设计的其他手段,同步设计的概念时钟质量的保证路径延迟及其优化时钟驱动的TestBench,82,时钟质量的保证,时钟Skew的最小化;PLL的使用;门控时钟与时钟使能;派生时钟与派生使能;其他,减少时钟的skew避免时钟毛刺,83,时钟质量的保证,时钟Skew的最小化;PLL的使用;门控时钟与时钟使能;派生时钟与派生使能;其他,同步系统中的时钟skew,时钟的skew(偏移,偏斜,抖动),错误,正确,85,同步系统设计中应该使时钟的skew最小化,使用快速的导线类型来对时钟布线(如在fpga中,采用全铜层工艺来实现全局通道)。,使用时钟树(DistributionTree),在前端设计上,应遵循一定的设计原则来避免时钟的过分偏移(接下去一部分内容中讲述)。,86,时钟质量的保证,时钟Skew的最小化;PLL的使用;门控时钟与时钟使能;派生时钟与派生使能;其他,目前所使用的中、高端FPGA内部均集成了DPLL,甚至模拟锁相环。这些锁相环提供对时钟的分频、倍频以及移相功能,并且保证skew最小。,87,时钟质量的保证,时钟Skew的最小化;PLL的使用;门控时钟与时钟使能;派生时钟与派生使能;其他,88,门控时钟(gatedclk),计数器,clk,sw,dout,clko,clk,clko,sw,dout,如果将sw输入给寄存器的时钟使能端en,就可以基本上避免这个误触发,89,Gatedclk的危害,容易导致时序电路的误触发;增大了clk的skew。因此在设计中,尽量避免时钟通过组合电路,避免使用组合电路来产生时钟。,GatedClk也不是绝对不可用的,在某些情况下,它可以作为低功耗设计的手段。,90,时钟质量的保证,时钟Skew的最小化;PLL的使用;门控时钟与时钟使能;派生时钟与派生使能;其他,91,例1:设计一个计数器系统,该系统包含两个计数器,其中一个计数器以系统时钟clk频率计数;另一个计数器以clk的1/4频率计数。两个计数器同时复位。假设仅要求两个计数器速度满足4倍关系,对相位无任何要求。,92,传统设计思路(暂省略复位信号):,Couter_a,Counter_b,4分频,clk,clk4d,douta,doutb,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)Beginif(reset=1)thenclk_vec0);elsif(clkeventandclk=1)thenclk_vec=clk_vec+1;endif;Endprocess;,96,Process(clk_vec)Beginif(clk_vec=“00”)thenen4d=1;elseen4d=0;endif;Endprocess;,注意,这里是组合电路输出en4d,难免产生毛刺;但是因为en4d是使能信号,所以这仍然是安全的。,97,(时钟质量保证)小结,(以下要点均针对前端设计)时钟的纯净:时钟最好不要通过任何组合电路,或者不要用组合电路产生时钟;时钟的单一:数字系统设计时,应该尽量减少时钟的数目,最好整个系统只有一个时钟;当需要派生时钟时,尽量用派生使能去代替。,98,OUTLINE,正确设计同步设计异步设计高速设计的其他手段,同步设计的概念时钟质量的保证路径延迟及其优化时钟驱动的TestBench,99,时序电路的主要时序参数,clk,Din,clk,Din,100,路径延迟,Din,clk,Din,组合电路,Tco,Tcom,Tsu,路径延迟,clk,时钟周期不能小于路径延迟,这里Tcom包含了网络走线延迟,101,路径的定义,路径:是一系列标识一条电路的逻辑路线的元素;路径可能包含一个信号网络(net)或一组信号网络(net),以及相关的元件;当一个元件被包含在一条路径中时,它的输入和输出也包含在这个路径中。路径从一个pad或者一个同步元件(触发器)的输出端开始,一直到遇到一个pad或一个同步元件(触发器)的输入端时终止。,102,关键路径,一个同步系统中的关键路径,就是它所有的路径中,路径延迟最长的那一条。显然,这个同步系统的最高工作频率,等于关键路径延迟的倒数。,103,延时优化的几个要点,长路径的避免优先级电路的延时优化数据通路拷贝数据运算式变换变量运算优化组合路径切割双时钟沿问题其他,104,长路径的避免,实际上是一个很泛的技巧,总之,在设计中,时序能走短路径就尽量走短路径;组合电路能缩小就尽量缩小。以下仅举两例来说明。,105,回忆,中提出过一个问题:,状态机设计中,状态编码采用Binary编码和One-hot编码对系统会造成什么样的性能影响?这两种编码对FPGA/CPLD的适用情况如何?,107,解答:one-hot编码方式只用一个bit来表示一个状态,这大大缩小了状态译码的组合电路规模,使得路径延时更小,因此状态机的时钟可以运行在更高的频率上。特例:不妨想象该状态机就是一个循环计数器,如果采用binary编码,则该计数器存在明显的组合电路;而如果采用one-hot编码,该计数器的综合结果就是一个移位寄存器序列,根本不存在任何组合门!,108,扇入系数与组合规模,这个例子实际上也说明了一个问题:组合电路的规模往往受影响于其扇入系数:扇入组合电路规模从而路径延时系统工作速率减少组合逻辑的扇入是提高系统工作速率的基本手段。,109,One-hot因为寄存器消耗量比较大,所以往往用在寄存器资源比较丰富的FPGA中,CPLD中使用得比较少。,110,再回忆,中的另外一个问题,问题:Mealy机中,能否用“次态”信号替代“输入”信号,与“现态”信号进行译码输出?,或者,保留s5态,然后直接用“次态”信号进行译码输出?,112,对比原图:,113,经过对比发现,虽然两者在逻辑上是等效的,并且修改后的方案中似乎减少了输出译码电路的扇入,但是输出译码和次态译码相粘连,形成了一条很长的路径,导致系统工作速度下降。,114,反馈多路选择与专用时钟使能,时钟使能的两种实现方式:寄存器内部的专用时钟使能电路;反馈多路选择,如下图:,clk,en,din,dout,因为增加了额外的路径,因此降低了寄存器的最高工作速率。,115,延时优化的几个要点,长路径的避免优先级电路的延时优化数据通路拷贝数据运算式变换变量运算优化组合路径切割双时钟沿问题其他,116,优化时序的设计调整,设计时,往往需要针对具体的情况来进行设计的调整,以使系统的时序得到优化。时序优化的原则,最主要的还是在保证正确逻辑的基础上,尽量缩小关键路径的延迟。,117,例:带优先级的多路选择器,假设该选择器的真值表如下:,a,b,c,d,sel,z,118,正常的描述方法1:多if语句,Process(a,b,c,d,sel)Beginz=0;-要记得初始化!不推荐此风格。if(sel(0)=1)thenz=a;endif;if(sel(1)=1)thenz=b;endif;if(sel(2)=1)thenz=c;endif;if(sel(3)=1)thenz=d;endif;Endprocess;,119,正常的描述方法2:单if语句,Process(a,b,c,d,sel)Beginif(sel(3)=1)thenz=d;elsif(sel(2)=1)thenz=c;elsif(sel(1)=1)thenz=b;elsif(sel(0)=1)thenz=a;elsez=0;endif;Endprocess;,120,综合后的电路图,0,a,Sel(0),b,c,d,z,Sel(1),Sel(2),Sel(3),可以发现这样的规律:这种简单if语句描述生成的硬件中,条件优先级别越高的模块往往越靠近输出端。,121,调整情况1:数据到达延迟(bb_late),0,a,Sel(0),c,d,z,Sel(1),Sel(2),Sel(3),b,假设分析发现,b到达多路选择器的时间比a,c,d晚,那么如何改变设计,以使得时序更加优化?,122,调整情况1:数据到达延迟(bb_late),0,a,Sel(0),b_late,c,d,z,Sel(1),Sel(2),Sel(3),假设分析发现,b到达多路选择器的时间比a,c,d晚,那么如何改变设计,以使得时序更加优化?,123,优化目标,0,a,Sel(0),b_late,c,d,z,Sel(1),Sel(2),Sel(3),优化目标:针对b_late进行优化,减小该信号到达z的延迟。,124,优化思路,0,a,Sel(0),b_late,c,d,z,Sel(1),Sel(2),Sel(3),125,优化后的电路图,如何在保证优先级不变的基础上,修改代码的描述?,126,优化描述方法1:多if语句,Process(a,b,c,d,sel)Beginzt=0;if(sel(0)=1)thenzt=a;endif;if(sel(2)=1)thenzt=c;endif;if(sel(3)=1)thenzt=d;endif;if(sel(1)=1)and(sel(2)=0)and(sel(3)=0)thenz=b_late;elsez=zt;endif;Endprocess;,127,优化描述方法2:双if语句,Process(a,b,c,d,sel)Beginif(sel(3)=1)thenzt=d;elsif(sel(2)=1)thenzt=c;elsif(sel(0)=1)thenzt=a;elsezt=0;endif;if(sel(1)=1)and(sel(2)=0)and(sel(3)=0)thenz=b_late;elsez=zt;endif;Endprocess;,128,!优化描述方法3:单if嵌套case,Process(a,b,c,d,sel)Beginif(sel(1)=1)thencase.Endcase;elsif(sel(3)=1)thenz=d;elsif(sel(2)=1)thenz=c;elsif(sel(0)=1)thenz=a;elsezzzzzSel(1)_late),0,a,Sel(0),c,d,z,Sel(1),Sel(2),Sel(3),b,假设分析发现,Sel(1)到达多路选择器的时间比其他Sel(n)晚,那么如何改变设计,以使得时序更加优化?,优化思路,0,a,Sel(0),c,d,z,Sel(1)_late,Sel(2),Sel(3),b,优化思路仍然和b_late的情况一样,因此可以用前述的代码进行优化。,133,带优先级的电路优化方法总结,对于带有优先级别的电路,在进行延时优化时,要兼顾好延时和优先级。对于单纯的if语句描述(singleifstatementORmultipleifstatement),一般生成的硬件都是越高优先级条件判断对应的模块越靠近输出端。但这不意味着对应的单个控制信号(如Sel(1)的优先级越高。,134,带优先级的电路优化方法总结(续),如果到达比较晚(即延时较大)的信号(不管是data信号还是control信号)所对应的硬件模块,并不是处于最高优先级处时,那么就应该想办法将该模块向靠近输出端的位置搬移,以减小该信号所在的路径(很可能成为关键路径)的延迟。可以通过搬移if条件模块的方法搬移需要移动的模块;搬移之后,要调整if条件判断式,保证原来的优先级不变。,0,a,Sel(0),c,d,b_late,z,Sel(2),Sel(3),Sel(3:1),控制逻辑,zt,不被搬移的部分保持不动。显然他们之间的优先级关系也不会被改变。,为保持不动的部分的输出定义一个信号。,因优化而被搬移的部分。,记得调整条件判断式,保证整体优先级不变。,136,代码结构,Process()Begin-固定不动部分的代码描述(对zt赋值);-被搬移部分的代码描述(对z赋值);Endprocess;,137,延时优化的几个要点,长路径的避免优先级电路的延时优化数据通路拷贝数据运算式变换变量运算优化组合路径切割双时钟沿问题其他,例:数据通路复用,考虑下面的代码:If(CONTROL=1)thenPTR:=PTR1;elsePTR:=PTR2;endif;OFFSET:=BASE-PTR;ADDR:=ADDRESS-OFFSET;COUNT=ADDR+B;,139,综合后的电路图,140,优化目标,假设CONTROL是一个latearrivinginputsignal。现在要对该信号进行优化,减小该信号到达COUNT的延时。,141,优化思路,142,优化后的电路图,143,Data-PathDuplication方法代码实现,在此略去,请自行完成该代码的编写。,性能对比,传统方法:,数据通路复用方法:,注:这里的DataArrivalTime指的是CONTROL到达输出端COUNT的延时。,可见,逻辑复用方法在提高时序性能的同时,引起资源耗费增大。,145,延时优化的几个要点,长路径的避免优先级电路的延时优化数据通路拷贝数据运算式变换变量运算优化组合路径切割双时钟沿问题其他,146,例:if条件判断式中的数据运算,考虑下面的代码:if(A+B24)thenZ=C;elseZ=D;endif;,综合后的电路图如下:,147,优化目标,假设A为latearrivalsignal。则考虑如何针对A进行优化,减小A到达Z的延时。,148,优化思路,If(A+B24),If(A24-B),关键:尽量减小A”穿过”的运算步骤(级数)!,149,优化思路,24,B,A,C,D,Z,If(A+B24),If(A24-B),关键:尽量减小A”穿过”的运算步骤(级数)!,150,优化后的代码,if(A24-B)thenZ=C;elseZ=D;endif;,151,阶段性总结,以上“优先级电路的延时优化”、“数据通路拷贝”和“数据运算式变换”三种方法实际上都属于“信号搬移”方法。其要点是想办法把形成关键路径的“迟到”信号尽量往路径输出端(路径末端)搬移,以减少路径延时。,152,延时优化的几个要点,长路径的避免优先级电路的延时优化数据通路拷贝数据运算式变换变量运算优化组合路径切割双时钟沿问题其他,153,注意这里所说的“变量”指的是“非常量”,其包含VHDL中的“变量”和“信号”。变量计算和常量计算的综合结果在组合逻辑规模上有着天壤之别。,154,例:变量乘法与常量乘法,假设a,b均为3bit信号(变量),则y=a*b的结果可能为(假设a,b,y均为无符号数):,155,假如在硬件运行的过程中,a始终为一个常数100,则可以将代码改成y=b*“100”。此时综合得到的电路为:,左移2bit,b,y,156,可见,如果能够用常量运算,就尽量用常量运算表达式。误用变量表达式虽然在逻辑上并没有错误,但是会导致组合电路规模过大,不但浪费芯片资源,而且降低系统工作速率。,157,延时优化的几个要点,长路径的避免优先级电路的延时优化数据通路拷贝数据运算式变换变量运算优化组合路径切割双时钟沿问题其他,158,组合路径切割,常用手段有:状态机拆分;流水线技术;其它等。,159,状态机拆分,经典案例:预定标计数器。设计一个32bit的计数器,采用binary编码。按照常规的设计:If(reset=1)thendout0);Elsif(clkeventandclk=1)thendout=dout+1;Endif;,160,综合后的速度,用MentorGraphicsLeonadoSpectrum针对SCL05uASIC库进行综合,得出关键路径延时为约14.07ns,则clk的最高工作频率约为69.6MHz。为了提高该设计的最高工作频率,修改方案:,161,Counter(9:0),Counter(23:10),clk,en,Dout(23:10),Dout(9:0),162,注意上图中en的高脉冲宽度为一个clk时钟周期。综合后,其关键路径延时为6.40ns,clk的最高工作频率可达140.8MHz!可见,进行状态机拆分后,各状态机的状态译码的组合电路规模都比原来小,从而减小了关键路径的延时。,163,流水线技术,流水线技术几乎是最常用的提供系统工作速率的强有力手段。,164,流水线设计例子,设计din1+din2+din3+din4结果输出给dout。,din1,din2,din3,din4,dout,165,流水线技术,其思想是利用寄存器将一条长路径切分成几段小路径,从而达到提高工作速率的作用。假设原路径延时为t,加入2级流水线并且假设路径切割均匀,则路径延时可以减少到约t/3,从而系统速率可以提高到原来的3倍左右。当然要注意的是输出同时会往后推迟3个时钟周期。所以采用流水线技术时,要记得进行时序调整。,166,关于寄存输入和寄存输出,数字系统中,各模块应采取(寄存输入和)寄存输出,这样做有如下优点:模块化清晰(特别是寄存输出);提高系统最高工作速率;有利于整个系统和单个模块分别进行静态时序分析。,167,延时优化的几个要点,长路径的避免优先级电路的延时优化数据通路拷贝数据运算式变换变量运算优化组合路径切割双时钟沿问题其他,思考,clk,有人认为,以上系统可以设计为上升沿和下降沿都使用的系统,这样可以增大时钟沿的使用率,并且可以使得第二个寄存器能在数据稳定中间采样,从而保证数据的安全。这个说法对吗?为什么?,Tco,Tcom,Tsu,路径延迟,clk,169,OUTLINE,正确设计同步设计异步设计高速设计的其他手段,同步设计的概念时钟质量的保证路径延迟及其优化时钟驱动的TestBench,170,TestBench,TestBench是用行为风格的代码来设计的,所以很多初学者喜欢用一堆after语句来生成同步系统所用的输入数据。实际上,应该将TestBench当成一个也受同步系统时钟驱动的元件。,171,以下TestBench的写法一般情况下不可取:Datain;endif;,被测模块,TestBench,datain,clk,172,OUTLINE,正确设计同步设计异步设计高速设计的其他手段,173,异步系统,异步系统包括:全异步系统:硬件的行为不受时钟绑定,完全由自定时技术来完成信号的交互和握手。异步多时钟系统:系统的行为由多个异步的时钟来驱动。可包含“全局同步,局部异步”和“全局异步,局部同步”等。,174,异步设计,全异步设计的特点:由于系统的行为不绑定在时钟上,因此不用考虑同步系统难度很大的全局时钟同步问题;避免了由时钟信号造成的连续漏电,以及为负责的功率管理系统而付出的开销。没有全局同步产生的电流瞬变,因此在低功耗设计方面有先天的优势。能达到的处理速度比同步系统高,因为它不用考虑最坏情况下的所谓“关键路径”。采用自定时技术,设计难度过高,在FPGA中无法实现。,异步多时钟系统设计简介,如果一个系统中存在多个独立(异步)时钟,并且存在多时钟域(clockdomain)之间的信号传输,那么电路会出现亚稳态。,din,aclk,bclk,adat,bdat,Sync_a2b,消除亚稳态-同步化,bdat1,bdat2,aclk,adat,bclk,bdat1,bdat1,异步多时钟系统模型,aClkLogic,bClkLogic,Sync_a2b,aSig,aClk,bClk,aClkDomain,bClkDomain,bSig,178,注意其信号命名和模块划分方法,这种信号命名和模块划分的方法有如下优点:有利于检查信号所通过的时钟域;有利于各模块进行单独的静态时序分析;有利于在静态时序分析中快速地设定falsepath;,异步信号穿越时钟域时,这些信号与异步时钟之间的相位关系数是无穷的,所以在整个系统静态时序分析时必须忽略这些信号路径。,179,多时钟域系统设计的经典案例:异步FIFO,数字系统设计当中,应该尽量避免使用异步多时钟,否则会带来很多潜在的问题(不仅仅是亚稳态的问题)。关于多时钟域数字系统设计的方法,可以参考SynthesisandScriptingTechniquesforDesigningMulti-AsynchronousClockDesigns,CliffordE.Cummings。以下只给出大概的结论。,180,异步设计的注意事项小结,注意使用同步化电路来对异步信号进行同步;进行科学的模块划分和信号命名;尽量减少握手控制信号的数目,以避免同步化造成的信号拉伸而破坏控制信号之间的相位关系;快时钟域信号进入慢时钟域时,要注意信号丢失的避免和检测;计数器要尽量采用Gray编码,以避免同步化造成的信号拉伸。,181,附:GrayBin,gray0=bin0bin1;gray1=bin1bin2;gray2=bin2bin3;gray3=bin3;bin0=gray3gray2gray1gray0;bin1=gray3gray2gray1;bin2=gray3gray2;bin3=gray3;,182,OUTLINE,正确设计同步设计异步设计高速设计的其他手段,串转并,183,例:cascadeTree(for循环的优化),设计奇偶校验位生成电路:对数据data(3:0)生成校验位c。一种思路如下:result:=0;forIindataRANGEloopresult:=resultXORdata(I);endloop;C=result;,184,综合后的电路图,Data(e),Data(2),Data(1),Data(0),0,c,Data(3),185,改进思路(目标电路图),Data(2),Data(1),Data(0),c,Data(3),186,改进的描述方法,Sig1=Data(3)xorData(2);Sig2=Data(1)xorData(0);C=sig1xorsig2;,问题:对于Data(n:0),代码该如何设计?,注:在串转并中,适当地使用平衡的二叉树结构,不但可以减少延时,而且有利于方便地引入流水线结构。,187,小结,正确设计:VHDL结构体有三种描述风格:行为描述风格,RTL描述风格和结构描述风格;RTL风格的描述中,要注意一个进程里只能判断一次时钟沿;注意避免X状态的传递;敏感信号表不完整,往往会造成前仿真和后仿真结果不一致;条件判断语句中,要注意对所有分支进行输出信号的赋值,以避免锁存;,188,巧妙地使用无关态,可以引导综合器综合出优化的电路;case无优先级;singleif和multipleif语句的优先级顺序;硬件描述中,应加强硬件思维,打破软件思维;注意要正确地使用多路开关或者三态缓冲来进行总线复用,避免总线冲突;,189,双向端口描述中,注意高阻态的赋值;注意其测试矢量生成时,也要注意设置高阻态;毛刺消除的要点:竞争和冒险的避免;Gray编码;寄存器消除方法(数据输入吸收,时钟使能吸收)。,190,同步设计尽量避免使用门控时钟,应以时钟使能来代替;尽量避免使用派生时钟,应以派生使能来代替;路径与路径延时的含义;路径延时与系统工作时钟的最高频率的关系;缩小组合电路的规模,可以降低系统的路径延时从而提高最高工作速率;,191,善于使用“信号搬移技术进行延时优化,可以提高系统速度;手段包括优先级别电路中的模块搬移、数据通路拷贝、数据运算式变换等;在优先级别电路中进行信号搬移时,要注意修正条件判断式,使得优先级别不变;可能的情况下,应该尽量使用常量运算来代替变量(信号)运算;,192,可以使用状态机拆分、流水线等技术进行路径切割,达到延时优化的目的;(寄存器输入和)寄存输出不仅可以提高系统工作速率,而且有利于模块和整体进行分别的静态时序分析;,193,异步设计尽量避免使用异步设计;异步多时钟系统中,注意做好时钟域之间的同步;引入时钟域同步后,容易造成信号相位拉伸;为避免矢量拉伸对数据矢量的破坏,可以考虑采用Gray码进行计数器编码;为了在静态时序分析中快速地进行falsepath的设置,最好根据时钟域来进行信号命名。,194,高速设计的其他手段串转并不但可以降低系统的延时,而且可以大幅度提高系统的数据吞吐率。二叉树结构可以有助于引入平衡的流水线。其他安全的状态机描述:注意使用others分支,并且该分支不能以null来规定其行为,以处理状态机的“跑飞”。具体可参考.,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!