数字电路设计经典课件.ppt
数字电路设计,内容提要,绪论电路设计规则电路设计流程电路验证方法电路实现结束语,绪论,认清数字电路设计电路设计的三个层次正确的入门方法数字电路的基本参数同步数字电路设计,认清数字电路设计,电路设计是一门艺术象艺术技巧一样,深不可测,奥妙无穷;电路设计工程师和艺术家一样,有发挥创造性的无限空间;电路设计所使用的“原料”和艺术作品一样,简单而且为所有人共知;电路的表现形式和艺术作品一样,相同的内容,相同的目的,可能会有不同的表现形式。,认清数字电路设计,因为电路设计是一门艺术,所以它不可以速成;必须正确的入门方法;必须经常重复练习;在实现以前必须有完整的构思。,认清数字电路设计,举例:设计一个电路完成以下波形描述的功能。,Clk,0,1,2,3,D0,Q,D0,D1,D2,D3,D1,D2,D3,D0,D1,D2,D3,D0,D1,D2,D3,D0,D1,D2,D3,0,1,2,3,0,1,2,3,0,1,2,3,Cnt1.0,认清数字电路设计,利用选择器完成电路功能,Mux,Cnt,Clk,D0,Q,D1,D2,D3,Sel,认清数字电路设计,利用移位寄存器完成电路功能,Carry,Shift,Cnt,Clk,D0,Q,D1,D2,D3,Load,电路设计的三个层次,完成功能能够完成电路要求完成的功能工作可靠电路的工作对外围环境要求最低;电路不受温度、工艺等因数的影响可重用(可移植)能方便的在别的电路中使用,电路设计的三个层次,举例设计一个UART的接收电路波特率19.2,偶校验,1位停止位,起始位,数据,Uart_Rx,D7,D6,D5,D4,D3,D2,D1,D0,C,D0,校验位,停止位,电路设计的三个层次,定义输入输出端口输入:UartRx、SysClk、Read输出:Data、New、Err,Uart,Data,UartRx,SysClk,New,Read,Err,电路设计的三个层次,功能实现(框图),下降沿检测,接收定时控制,采集时钟生成,移位寄存,奇偶/停止位,标志产生,UartRx,SysClk,Read,Err,Data,New,电路设计的三个层次,完成功能(电路图),电路设计的三个层次,该电路能完成要求的功能,我们的设计已经结束我们来看下面情况:发送的时钟和接收的时钟源不同步传输中出现干扰读信号和接收时钟不同步接收电路伪同步,这些都是可靠性问题,电路设计的三个层次,我们修改了电路,电路工作已经十分可靠,现在我们可以说设计结束了。如果我们我们接到另一个项目需要做一个URAT,要求有些不同:波特率、校验位、停止位可变;CPU中断响应慢,这么办?,电路设计的三个层次,所以我们在设计电路时,最好能使电路可重用,或尽可能简单的修改原设计的情况下对电路进行移植。,数字电路基本参数,无时钟信号的电路(组合逻辑),In1,In2,In3,Out,对于组合逻辑的电路,在电路分析时只有输入到输出的延时(Tdelay),由于电路实现的原因,不同的输入到输出的延时不同,不同的工艺产生的延时不同,不同的温度会导致延时不同。,数字电路基本参数,有时钟信号的电路(时序电路),Clk,Q,D,D,D,Q,Tsu:建立时间,表示在时钟有效沿前数据维持不变的时间Th:保持时间,表示在时钟有效沿后数据维持不变的时间Tco:输出延时,表示在时钟有效沿后数据输出的时间,数字电路基本参数,Tsu、Th是对输入信号中数据和时钟相位的表征,通常我们提及这两个参数时,一般是指器件对输入的要求,即要求输入的最小建立时间( Tsu )和最小保持时间( Th );触发器的这两个参数只与器件的工艺和温度有关当我们的输入的相位要求不能满足该要求时,触发器的值将不能达到预期结果(即我们常说的不确定)。,数字电路基本参数,对于一个触发器来说, Tsu +Th为一个常量。由于有外围电路的作用,我们所看到的最小建立时间( Tsu )和最小保持时间( Th )可能有变化。例如:,数字电路基本参数,触发器的Tco参数只与器件的工艺和温度有关由于时钟输入或数据输出电路上的延时, 器件或模块的Tco可能会有变化,例如:,数字电路基本参数,我们现在已经学习了数字电路的基本参数:,TDelay,Tsu,Th,Tco,fmax ?,数字电路基本参数,我们在电路中,实际上触发器和组合逻辑是以以下结构存在的:,T = Tco + TDelay + Tsu,当时钟沿有效时,经过时间T,信号传达到第二个寄存器。要使电路能可靠工作,必须Tclk T,如果满足此要求,时钟频率为fClk 1/T ;则fmax = 1/T 。,同步数字电路设计,在数字电路中为什么要使用同步数字电路?,可靠性处理速度,同步数字电路设计,异步电路(组合逻辑电路):,C0,C1,C2,C3,Cn,TDelay = T0 + T1 + T2 + T3 + + Tn,同步数字电路设计,同步电路(时序电路):,C0,C1,C2,C3,Cn,DFF,DFF,DFF,DFF,T0,T1,T3,Tn,T2,TDelay,Clk,TDelay = n TClk + Tco,同步数字电路设计,Tdelay与组合逻辑的延时(Tn)无关,TDelay = n TClk + Tco,因为fmax = 1/( Tco + Tn + Tsu),Tn为触发器间的组合逻辑的最大的延时由于Tco 和 Tsu在同一芯片中基本上是个常数,所以Tn直接影响fmax。当TClk Tn,组合逻辑的延时与TDelay 无关。,是?,否?,同步数字电路设计,假设因为温度、工艺或布线改变,造成电路的延时改变了t,对于异步电路:,T= (T1+ t)+( T2+ t)+(T3+ t)+(T4+ t) +(Tn+ t)= T1+ T2+ T3+ T4 +Tn+ t n = TDelay + t n,变化引起的延时为t n,同步数字电路设计,对于同步数字电路,T= n TClk +(Tco+ t)= ( n TClk +Tco ) + t= TDelay + t,变化引起的延时为t,所以同步数字电路的可靠性和移植性明显优于异步电路,同步数字电路设计,另外,由于同步数字电路只对在时钟有效沿附近的数据“感兴趣”,所以它可以将由于干扰造成的数据干扰和由于电路竞争冒险产生的毛刺“过滤”掉,从而大大的提高了电路的可靠性。,同步数字电路设计,同步电路使电路的速度是提高了还是降低了?,快?,慢?,同步数字电路设计,变慢了,为什么?,异步电路:TDelay = T0 + T1 + T2 + T3 + + Tn,同步电路:TDelay = n TClk + Tco,为了使同步电路的触发器工作稳定,必须保证Tclk Tmax,其中Tmax为T0 、 T1 、 T2 、 T3 Tn中最大的一个,同步数字电路设计,变快了,为什么?同步数字电路每间隔一个TClk可以处理一个数据,而异步电路需要每间隔Tdelay才能处理一个数据。就单位时间内处理的数据量而言,同步数字电路可以远远大于异步电路。所以我们说,使用同步数字电路的可以提高电路的运行速度。,正确的入门方法,从电路图设计入手可以很清楚电路是如何实现的;可以很清楚电路结构,或会有意识的对电路的模块进行划分;如果从语言入手必须熟悉电路,能很容易的读懂电路;对电路的不同描述方式,要清楚综合工具的综合结果,正确的入门方法,规范设计是入门的基础规范设计可以避免一些电路不可靠因素;真正可重用的电路绝对是规范的;电路的功能实现不是最有价值的东西,最有价值的是电路实现的思路;如果你的电路大家都看不懂,那绝对是“垃圾”;,正确的入门方法,注重仿真所有的电路都是调试出来的,不是设计出来的;不懂仿真,则永远无法成为电路设计高手;测试向量的完整性可以大大缩短硬件的调试时间。,电路设计规则,命名规则注释规则电路描述规则,命名规则(1),名字必须有确定意义,且具有可读性。如:SysClk、Reset、SecondCnt、CnlAData不能取如下名字:X、A、B,命名规则(2),名字之间的单词的第一个字母使用大写。如:TotalNumber、CalcError、FramerSearch、InputDataCounter不要将名字中全部取为大写或小写,如:CPUADDRESS、ramreaddata、fifoemptyTotalnumber、calcerror、framersearch、inputdatacounter、BASEADDR,命名规则(3),在命名中使用_N的后缀表示低电平有效信号或下降沿有效的时钟,没有_N的信号均表示高电平有效或上升沿有效如:Reset_N,TxClk_NSyncLos= ! FramerSync,命名规则(4),在命名中使用_C的后缀或全部大写表示常量。如:DataWidth_C、DATAWIDTHBuffDepth_C、BUFFDEPTH,命名规则(5),在命名中使用_B的后缀表示双向的变量或信号。如:CpuData_B表示CPU数据总线是双向的。,命名规则(6),使用恰当的缩写,缩短名字的长度,同时不降低名字的可读性如:Rd ReadWrWriteEn EnableAva AvailableAddrAddressAlm AlarmClkClockRstResetInInputOutOutput,命名规则(7),名字中尽可能不出现数字,除非必须出现。如:E1Framer,命名规则(8),避免单独使用以下字母和数字,更不允许在同一文件中的名字中使用以下字母和数字区别变量或信号名:I、l、1O、0、oS、5G、6如:RdCnt1、RdCntl、RdCntI,命名规则(9),当文件中只包含一个模块时,文件名和模块名保持一致。当文件中有多个相关模块且没有顶层模块,模块名须与各模块的功能相关当一个模块中的子模块在别的电路中不会使用时,可以将子模块和顶层模块放置在一起,文件名和顶层模块名相同。,注释规则,代码注释是为了增强代码的可读性,注释的内容要求言简意赅。注释分为:文件或模块注释变量或信号注释电路注释特殊功能注释其他注释,数字电路设计流程,功能分析和模块定义确定重要信号传递方案代码设计和验证,功能分析和模块定义,自顶向下设计;对项目的各功能进行系统的分析,列出数字电路需要完成的各个功能;按以下原则划分各功能模块:功能确定接口最简成对原则模块最少定义模块间的接口;再将每个模块按以上原则和方法划分功能子模块,直到模块最小化,功能分析和模块定义,举例:设计一个SDH的四路E1映射的电路;电路接收信号为SDH开销处理后的并行数据和定时信号;上行总线接口为两条,每条的信号完全一样:输入:CLK19、SPE、C1J1V1输出:ADD 、 DATA7:0、PAR下行总线接口为两条,每条的信号全是输入且完全一样:CLK19、SPE、C1J1V1、DATA7:0、PAR,功能分析和模块定义,设计一个SDH的四路E1映射的电路;(续)CPU总线用于电路设置和告警处理输入:ADDR7:0、RD、WR、CE双向:DATA7:0E1接口为4条相同的接口信号输入:RPO(PCO)、RNO(RDO)输出:TPI(TCI)、TNI(TDI)要求完成以下功能:每个E1可以在任意的TU12位置分插上行时序可以在上行和下行四个时序中任意选择,功能分析和模块定义,设计一个SDH的四路E1映射的电路;(续)要求完成以下功能: (续)E1接口可选正/负双轨模式和NRZ/时钟模式根据下行总线工作状态实现倒换,功能分析和模块定义,SDH介绍,功能分析和模块定义,电路设计框图,定时处理TIMEPOCESS,CPU接口CPUINTERFACE,上总线形成ADDGENERATE,端口映射PORTMAP,端口映射PORTMAP,端口映射PORTMAP,端口映射PORTMAP,下行数据总线,上行和下行控制总线,CPU数据、地址和控制总线,上行数据总线,E1接口,QE1MAP,功能分析和模块定义,各模块功能确定检查模块间接口最简检查成对设计检查模块最少检查定义模块间的接口,确定重要信号传递方案,确定电路的输入输出要求确定模块间的输入输出要求重要信号传递过程定时信号公用信号,确定重要信号传递方案,举例:,代码设计和验证,自底向上设计每一模块根据功能要求、接口定义和重要信号传递方案进行代码设计对每个模块进行仿真对成对模块进行联调将所有模块拼接并进行系统验证,电路验证方法,验证的目的是为了保证电路提供的功能特性的正确性;验证的目标是证明设计没有错误;验证过程需要权衡以下方面:验证时间验证成本验证充分,电路验证方法,验证手段;功能验证的方法;验证计划的建立;,验证手段,功能验证(功能仿真)功能验证是设计验证的主要形式;功能验证需要进行代码覆盖率的检查;静态时序分析检查电路中触发器的建立和保持时间,以及基于路径的时延要求;时序仿真形式验证,功能验证(功能仿真),功能仿真的目的主要是为了保证设计的RTL级的描述和要求的特性一致;,电路设计,功能验证(功能仿真),功能验证策略一:比较法,电路设计(RTL描述),输入激励,比较输出响应,测试平台,电路设计(行为描述),功能验证(功能仿真),举例:设计一个带异步复位的计数器,使用比较法进行仿真,并检查代码覆盖率,功能验证(功能仿真),功能验证策略二:预测法,电路设计,输入激励,比较输出响应,测试平台,预测结果,功能验证(功能仿真),举例:设计一个带异步复位的计数器,使用预测法进行仿真,并检查代码覆盖率,功能验证的方法,黑盒法:不知道实现细节,所有验证内容通过对设计对外接口完成的;白盒法:对设计内部结构和细节非常清楚,并可以进行完全的控制和观察;灰盒法:知道细节的情况下,进行黑盒验证。,功能验证的方法,一般情况,对模块测试进行白盒测试或灰盒测试;系统测试使用黑盒测试或灰盒测试。,TestBench简介,描述TestBench流程产生输入激励例化测试对象检查测试对象输出输出测试结果,验证计划的建立,一个验证计划一般需要具备:明确验证目标;确定验证手段、方法和策略;结果检查手段;验证结果的质量标准;验证进度安排和管理;验证小组成员的职责和分工。,电路实现,数字电路中时钟处理方法接口电路运算电路数据流处理电路,数字电路中时钟的处理方法,数字电路中时钟是所有信号的参考,没有时钟,所有的数字信号都没有意义;一个数字电路中时钟的处理方案直接影响数字电路的功能实现和可靠性;一般情况,我们在同一个设计中使用唯一的系统时钟(除接口电路);当系统中多个时钟时,我们必须对有些时钟进行处理。,数字电路中时钟的处理方法,当有多个时钟数字电路,且有一个时钟(假设为CLKA)的速率大于其他时钟两倍以上,我们在接口部分就必须对其他时钟进行同步化处理,将其他时钟信息转换为和CLKA同步的允许信号。这样处理的好处:便于处理电路内部时序;时钟间边界条件只在接口部分电路进行处理;,数字电路中时钟的处理方法,同步化处理电路(时钟沿提取电路):,其输出波形:,数字电路中时钟的处理方法,这么会这样?问题出在哪?,MAX7000,MAX300A,FLEX1K,对CLKEN和CLK分别进行计数,比较计数的值便能知道CLKEN是否能真实反映CLK。输入的激励:SysClk周期为20ns;Clk周期为58ns。,数字电路中时钟的处理方法,当TaTb,SysClk不能采集到ClkEn;当TbTa,SysClk可能会两次采集ClkEn。,组合逻辑,Ta,Tb,Clk,SysClk,Clk,D,Q,D,Q,数字电路中时钟的处理方法,解决方法?,对于非同源时钟,为了保证电路的可靠性和移植性必须做如上处理。,数字电路中时钟的处理方法,前面电路是对时钟的上升沿进行同步化处理,如果是下降沿呢?,数字电路中时钟的处理方法,提问:如何取的上升和下降沿,数字电路中时钟的处理方法,当有多个时钟数字电路,但速率最快的时钟(假设为CLKA)的速率没有达到其它时钟频率的两倍,我们在接口部分就必须对其他时钟和数据通过FIFO进行隔离,并将其他时钟信息转换为和CLKA同步的允许信号。,数字电路中时钟的处理方法,异步时钟和数据处理标准电路:,FIFO的深度最小需要3,如果SYSCLKCLK,如何处理?如果内部电路不能运行在CLK时钟频率上,如CLK为200MHz?,数字电路中时钟的处理方法,对于间歇时钟,如果其最高频率小于所选的系统时钟的1/2:用时钟沿提取电路对时钟进行同步化;如果最高频率大于所选的系统时钟的1/2:使用FIFO进行同步;增大FIFO的深度;或通过串并转换将数据转换成并行数据或宽度更宽的数据进行处理;,数字电路中时钟的处理方法,选择系统时钟一般性原则:不大于内部电路能够运行的最高频率的时钟;连续的周期性时钟;在系统中频率最高的时钟;当不能满足第二条时,必须保证时钟的间歇时间小于其他任何时钟的周期;当不能保证第三条时,可以将数据进行串并转换成并行数据或宽度更宽的数据,从而降低非系统时钟的频率。,如果不能满足第一条,怎么办?,数字电路中时钟的处理方法,对于内部的低速时钟,一般常见的方法:,分频器,模块A,模块B,模块C,SysClk,这种结构在很多情况下不会出问题,但如果模块间有数据交换时,其定时特性的评估将比较困难;当时钟很多时,对时钟的布线要求较高;,数字电路中时钟的处理方法,最佳处理方法:,分频器,模块A,模块B,模块C,SysClk,ClkEnA,ClkEnB,ClkEnC,这种结构使电路中的模块间的数据交换非常简单;对电路的静态时序分析变的简单且易于调整;由于对工艺和布线的要求降低,电路的可靠性和移植性大大增加;使内部电路设计更理想化和理论化。,接口电路,接口电路功能和处理原则接口处理电路使用的基本元素输入接口电路输出接口电路双向接口电路举例:CPU接口电路,接口电路功能和处理原则,功能:提供和处理与芯片或FPGA接口的电路时序;对可能有的干扰进行过滤;对非系统时钟进行处理;如果需要提供3态控制;处理原则:统一到一个系统时钟;外围时序和相位关系不变。,接口电路功能和处理原则,接口电路位置示意图:,内部电路,接口电路,外围电路,接口电路隔离了外围电路和内部电路,它不改变外围电路的时序和相位要求;接口电路使内部电路有统一的系统时钟;使内部电路中没有双向变量和三态信号使内部电路接收的信号更稳定;总之,接口电路使内部电路的处理更理想化和理论化。,接口处理电路使用的基本元素,三态门:将外围的双向电路引入内部电路,使内部电路中没有三态电路;输出三态与外围电路中信号进行线或或线与;三态输出在一般情况下输出高阻,只有必须输出时才输出数据,避免与外围电路发生冲突。,接口处理电路使用的基本元素,三态门:,双向接口,线与,线或,接口处理电路使用的基本元素,透明锁存器(Latch):在数字电路设计中,尽可能不使用Latch;Latch以下条件同时存在的情况下使用:要锁存的数据在数据标志(如读信号)的上升沿和下降沿之间可能变化;内部电路在数据标志的上升沿和下降沿之间需要使用要锁存的数据;内部电路在数据标志结束后可能还需要使用要锁存的数据;,0,1,0,0,接口处理电路使用的基本元素,为什么我们需要尽可能不使用Latch?,Latch的波形,1,产生震荡,确认Latch使用条件是否完全具备;如果有任意一条不具备,使用别的电路代替;,如何避免使用Latch?,接口处理电路使用的基本元素,避免使用Latch(1),要锁存的数据在数据有效标志(如读信号)的上升沿和下降沿之间可能变化;,解决办法:使用数据有效标志(Enable)第一个沿进行锁存。,不使用Latch的情况,避免使用Latch(2),内部电路在数据标志的上升沿和下降沿之间需要使用要锁存的数据;,解决办法:使用数据有效标志(Enable)第二个沿进行锁存。,不使用Latch的情况,避免使用Latch(3),内部电路在数据标志结束后可能还需要使用要锁存的数据;,解决办法:使用数据有效标志(Enable)控制数据输入,不使用Latch的情况,确认Latch使用条件是否完全具备;如果有任意一条不具备,使用别的电路代替;如果全部具备,确认系统中是否有比数据有效标志快3倍以上的时钟;如果有,使用该时钟锁存数据;,如何避免使用Latch?,接口处理电路使用的基本元素,接口处理电路使用的基本元素,确认Latch使用条件是否完全具备;如果有任意一条不具备,使用别的电路代替;如果全部具备,确认系统中是否有比数据有效标志快3倍以上的时钟;如果有,使用该时钟锁存数据;,如何避免使用Latch?,接口处理电路使用的基本元素,如果没有,只能用Latch或其替换电路。,接口处理电路使用的基本元素,Latch替换电路,实际波形,实际电路,Latch是否可以不用?,接口处理电路使用的基本元素,移位寄存器:当内部电路的处理速度较慢,通常使用移位寄存器进行速率变换;一般情况下,只有当系统时钟的频率小于数据时钟,才在接口电路中使用移位寄存器,否则,将在内部电路中使用;移位寄存器在接口电路中主要用于串并转换和并串转换。,接口处理电路使用的基本元素,移位寄存器:,并串转换,串并转换,接口处理电路使用的基本元素,滤波器:当输入信号不稳定或有干扰,可以使用滤波器过滤到不需要的信号;滤波器的根据采集时钟和过滤对象的速率倍数,选择不同的滤波器形式;根据输入信号的特点,可以对滤波器进行不同的修改和调整。,接口处理电路使用的基本元素,滤波器(1):,仿真波形,接口处理电路使用的基本元素,滤波器(2):,仿真波形,接口处理电路使用的基本元素,滤波器(3):,仿真波形,接口处理电路使用的基本元素,FIFO(先进先出存储器):FIFO在接口电路中的主要作用是不同时钟间进行隔离;FIFO在接口电路有时也用作速率调整;在接口电路中,FIFO的深度由具体情况而定,一般情况下都比较浅;FIFO工作在非空非满状态,所以电路中基本不需要空满判断,只需对地址相等进行复位即可。,接口处理电路使用的基本元素,FIFO(先进先出存储器):,写地址计数器,RAM,读地址计数器,写时钟,读时钟,复位,复位,读地址,读地址,复位电路,写数据,读数据,接口处理电路使用的基本元素,时钟恢复电路:时钟恢复电路的作用主要是从有时钟信息的串行码流中分离出时钟;一般情况电路需要事先知道串行码流的速率,在接收电路中产生一个与码流速率相同的时钟;再使产生的时钟与输入的码流中的时钟信息同步。,接口处理电路使用的基本元素,时钟恢复电路:,时钟生成器,同步信号,串行数据,系统时钟,恢复的时钟,接口处理电路使用的基本元素,三态门;透明锁存器(Latch);移位寄存器;滤波器;FIFO;时钟恢复电路。,输入接口电路,输入接口的要求:输入接口电路的输入时序和相位关系必须严格满足外围电路的要求;输入接口电路的输出需统一为宽度为一个系统时钟周期的时钟允许信号(ClkEn)和一个数据或数据组输出;输入接口电路必须保证输出的数据可靠和稳定;输入接口电路必须避免过多的处理数据,处理数据的功能有内部电路去完成。,输入接口电路,输入接口的不同型式:,输入接口电路,所有形式我们均可等效为:,为什么?,内部时钟型,隐含定时型,定时产生,数据定时型,所以我们只要讨论如何处理外部时钟型电路即可解决所有输入接口电路的问题,输入接口电路,输入接口电路:,SysClk速率大于Clk的速率2倍以上,SysClk速率大于Clk的速率4倍以上,SysClk速率不小于Clk但小于的速率2倍,SysClk速率小于Clk的速率,输出接口电路,输出接口的要求:输出接口电路的输出时序和相位关系必须严格满足外围电路的要求;输出接口电路的输入需统一为宽度为一个系统时钟周期的时钟允许信号(ClkEn)和一个数据或数据组输入;输出接口电路必须避免过多的处理数据,处理数据的功能有内部电路去完成。,输出接口电路,输出接口电路的不同型式:,所有型式我们均可以把它等效为外部定时型?,输出接口电路,输出接口电路,双向接口电路,双向接口的要求:双向接口电路的输入部分必须满足输入接口要求;双向接口电路的输出部分必须满足输出接口要求;双向接口电路的三态控制部分必须满足输出接口要求;双向接口电路的输入部分须对数据进行“分拣”,只对需要处理的数据“感兴趣”,其他数据一律“视而不见”;双向接口电路的三态控制部分必须掌握“能不输出就不输出”的原则,避免与外围电路冲突;,举例:CPU接口电路,CPU接口电路的波形,CpuWr,CpuALE,CpuAddr,Addr_L,Addr_H,CpuData,Data,CpuRd,Addr_L,Addr_H,写周期,读周期,举例:CPU接口电路,电路框图,举例:CPU接口电路,实际电路图,举例:CPU接口电路,举例:CPU接口电路,实际波形:,运算电路,基本元素简单运算电路乘法器除法器平方根复杂运算电路设计方法,基本元素,加法器加法器由于进位链的存在所以其速度随着位数的增加而减少;加法器可以完成以下基本功能:,基本元素,减法器加适当电路即为比较器:,Overflow = 1: A B,Overflow = 0: A B,C = 0: A = B,基本元素,移位器:在运算电路中它主要完成以下基本功能:,基本元素,移位器电路单元框图:,基本元素,移位器实际电路(4bit):,基本元素,移位器仿真结果:,左移,右移,基本元素,移位寄存器:移位器的特例;是运行速度最快的电路;它可实现连续乘2或除2的运算;实际的运算电路中最常使用;在电路实现过程中,较多的情况是固定的乘以或除以2的N次方,如何实现?,基本元素,选择器:在运算电路中大量使用选择器完成运算功能;由于数字电路的特征,选择器在电路中相当于完成阶越函数的功能;硬件描述语言中的列表、分支语句在电路实现上大部分都翻译成选择器。,基本元素,加法器/减法器/比较器移位器/移位寄存器选择器,简单运算电路,乘法器:A B = C用4bit电路为例,C = A B0 + A 2 B1 + A 4 B2 + A 8 B3,简单运算电路,实际电路:,简单运算电路,实际波形:,简单运算电路,该电路的速度较慢,一般使用时需要多级流水线,我们比较以下使用流水线的对速度的影响:,简单运算电路,循环运算的乘法器:,C = A B0 + A 2 B1 + A 4 B2 + A 8 B3,简单运算电路,实际电路:,简单运算电路,实际波形:,简单运算电路,除法器:是乘法器的逆运算,所以我们从乘法入手分析如何实现;,简单运算电路,实际电路:,简单运算电路,仿真波形:,由于在电路运算时有大量的进位和运算,所以该电路运算速度较慢,一般情况我们可以在每一级的计算过程中加入触发器,以改善电路的运行频率。,简单运算电路,加了触发器的除法器单元电路:,检查仿真波形;如何让电路产生数据计算完成标志;如何加快电路的运算效率;,简单运算电路,除法器:在数字电路的实现中,为了节省资源,除法器一般情况都是使用循环运算法。,简单运算电路,实际电路:,简单运算电路,仿真波形:,简单运算电路,平方根电路:平方根电路是平方电路的逆运算,我们先从一个数的平方入手:,简单运算电路,电路实现:,仿真波形:,简单运算电路,有流水线的平方根电路仿真:,复杂运算电路计算,在电路实现中,可能会遇到一些复杂的运算电路,一般可以采用以下方法:循环运算法;级数分解法;查表法;查表/修正法;,数据流处理,数据流处理基本方法起始位置,数据流处理基本方法,数据流的基本特征是数据结构重复的周期性出现;由于数据结构重复出现,所以每段数据的处理方法均相同,一般都是简单重复;在电路中一般数据流的处理有:数据转换(串并转换、编解码);数据合并/分解;数据流向控制;,数据流处理基本方法,由于数据结构的周期性出现,所以在数据处理是的关键是数据定位;数据定位即是确定当前数据的分组、类型或内容;例如:,数据流处理基本方法,数据定位的关键是起始位置的确定;当起始位置确定后,其他位置根据数据结构就可确定;当起始位置确定后,确定其他数据位置的电路如何实现?,计数器,起始位置,起始位置的定位方式:信号定位(如SPI接口和Utopia接口);循环定位(如E1、SDH);标志定位(如HDLC和以太网);,起始位置,信号定位:信号定位是最基本的也是最直接的起始位置定位方式;由于它需要占用最少一根信号线,所以在长距离或连线比较紧张的情况下很少使用;一般情况下,它用于电路内部连接或芯片间连接(SPI),也有用于板间连接(MII)。在电路实现中,为了方便模块间的信号传递,我们一般将其他定位方式转换为该种方式。,起始位置,循环定位:循环定位在对时间要求较高的场合使用;循环定位遵循严格的时间要求,在确定的时间其数据结构就要重复一次;一般情况下,起始位置循环定位的数据流的起始位置有一固定的帧头,如E1的1B;电路在定位帧头时,只需在数据流中检测到帧头后,计数一个帧间隔,如果发现帧头重复出现,就可确定该位置为起始位置;否则认为是伪定位,需要重新搜索帧头;,起始位置,这样做仍然会搜索到伪帧头,所以在实际应用中,帧头搜索过程都有严格规定;例如E1帧头的搜索流程:在间隔256个时钟的相同位置,连续4帧搜索到帧头,即帧同步;在帧同步状态下,连续3帧没有在0时隙发现帧头,即帧失步,重新搜索帧头;在同步情况下,如果有CRC4校验且CRC4校验在连续2000帧数据中一直有错,也需进入失步状态,并重新搜索帧头;(我记不清具体数据和要求),起始位置,标志定位:在数据流中帧头具有唯一的标志;为了避开有效载荷中的数据和标志相同,一般需要将有效载荷中与标志相同的数据进行转换,保证接收端在识别数据时不会当成帧头;由于数据会因为和帧头相同而进行转换,所以一般使用标志定位的数据流的长度不定,如HDLC;也有采用将所有数据重新编码,帧头使用特有的编码的方式来识别帧头,如4B5B、8B10B编码;,起始位置,当数据的起始位置确定以后,根据起始位置通过计数器,我们就可“解读”数据流中的任何位置的数据;如在E1中,在帧头数据结束后紧跟的8个数据即为1时隙的数据,在其后第84bit至89bit即为16时隙的数据;在如在以太网的数据中,在开始的6个字节即为目标地址,紧接着的6个字节为源地址;,结束语,内容回顾;温馨提示;,内容回顾,设计一个梯形波发生器,内容回顾,设计SPI接口:,写波形,读波形,内容回顾,设计格雷码计数器:,0000010001200113001040110501116010170100,8110091101101111111110121010131011141001151000,内容回顾,这14个LE是如何分配的?,内容回顾,设计一个4路E1的时隙交叉电路;设计FIFO的电路;,内容回顾,温馨提示,电路设计需要经常去思考、编写、仿真和修改,你只有在不断的重复这个过程才能提高;设计思路是电路设计的精髓所在,它靠不断的经验积累和灵感;,往往一个电路的实现方法有多,要试着使用不同方法实现相同功能并进行比较;,