当前位置:文档之家› 数字电路设计中需要考虑的问题

数字电路设计中需要考虑的问题

数字电路设计中需要考虑的问题a.FPGA内部资源要比较清楚b.FPGA型号1)竞争与冒险在组合逻辑电路中,某个输入变量通过两条或两条以上的途径传到输出端,由于每条途径延迟时间不同,到达输出门的时间就有先有后,这种现象称为竞争。

同一信号经过不同路径所需时间不同正是竞争产生的原因,如果没有传输及门延时,就没有逻辑冒险了,那么(~A)A = 0就没有毛刺了但是F = AB 完全按照真值表,A与B几乎同时变化的话,还是会有毛刺的表达式出现L = (~A)A (偏0冒险)或者L = (~A) + A ,(偏1冒险)则称出现A 冒险,其他信号取特定稳定值时(比如B=1,C=0)解决办法:a.消除互补项,(通过增加冗余)或者根据卡诺图,出现相切的圈,增加圈使其相交即可b.输出端加滤波电容c.加选通控制,使得输出在输入稳定后才有效F = AB + (~A)C,当B = C = 1时,可改写为F = (~A) + A,为1冒险,可以加上1电平,故可以加BC项,且不会影响逻辑F = AB + (~A)C + BCF = (A + B)((~A) + C),当B = C = 0时,F = (~A)A ,为0冒险,可以乘上(B + C),不会改变其逻辑F = (A + B)((~A) + C)(B + C)L = A(~C) + (~A)B + (~A)C上述L,不会出现B冒险和C冒险功能冒险的判断:功能冒险是当多个输入信号同时变化的瞬间,由于变化快慢不同而引起的冒险。

F=AC+(~B)C中,当ABC:000 -> 001 -> 011 则F:0 -> 1 -> 0 (偏0冒险)F = A + B 当AB 01 ->00 ->10竞争冒险的危害:使对脉冲敏感的系统出现误动作,如时钟端口、清零和置位端口对毛刺信号十分敏感,任何一点毛刺都可能会使系统出错但是D触发器对毛刺不敏感,除非毛刺出现在时钟上升沿,且满足建立时间和保持时间才会影响系统通常毛刺都比较短几ns,一般不满足建立时间和保持时间才会影响系统故用D触发器读取组合逻辑的输出信号,可以大大减少毛刺,类似于将异步电路转化为同步电路2)TTL(Transistor-Transistor Logic)TTL电路是电流控制器件,TTL电路的速度快,传输延迟时间短(5-10ns),但是功耗大; TTL 电路额定高电平和低电平分别是2.4v和0.4v,最小可识别电平(即临界可识别电平)是2v和0.8v。

即系统本身高电平识别是2.4v,但若一个信号受噪声叠加后呈现是2v的电压,此时也可识别为高电平;低电平额定识别是0.4v,若一个信号受噪声叠加后呈现0.8v的电压时,也可以识别出是低电平。

噪声容限是0.4v,就是说可以容许信号电平上有叠加上小于0.4v裕度的噪声CMOS芯片的噪声容限比TTL通常大,因为VOH是离电源电压较近,并且最小值是离零较近。

(VOH可以认为是额定高电平,类似于TTL的2.4V)数字电路中,由TTL电子元器件组成电路使用的电平。

电平是个电压范围,规定输出高电平>2.4V,输出低电平<0.4V。

在室温下,一般输出高电平是3.5V,输出低电平是0.2V。

最小输入高电平和低电平:输入高电平>=2.0V,输入低电平<=0.8V,噪声容限是0.4V。

CMOS电路:1逻辑电平电压接近于电源电压,0 逻辑电平接近于0V。

而且具有很宽的噪声容限。

通常TTL与CMOS都是指Vcc = 5V时的情况,对于Vcc = 3.3V时的情况,是LVTTL 和LVCMOS ,其实还有Vcc = 2.5V时的LVCMOS CMOS : Vcc:5V;VOH>=4.45V;VOL<=0.5V;VIH>=3.5V;VIL<=1.5V。

噪声容限接近1VLVCMOS : Vcc:3.3V;VOH>=3.2V;VOL<=0.1V;VIH>=2.0V;VIL<=0.7V。

LVCMOS : Vcc:2.5V;VOH>=2V;VOL<=0.1V;VIH>=1.7V;VIL<=0.7V。

TTL :Vcc:5V;VOH>=2.4V;VOL<=0.5V;VIH>=2V;VIL<=0.8V。

LVTTL:Vcc:3.3V;VOH>=2.4V;VOL<=0.4V;VIH>=2V;VIL<=0.8V。

LVTTL:Vcc:2.5V;VOH>=2.0V;VOL<=0.2V;VIH>=1.7V;VIL<=0.7V。

从以上数据可以看出LVTTL与LVCMOS是可以相互驱动的,是兼容的,但是: TTL不能驱动CMOS,虽然CMOS可以驱动TTLVcc= 5V时,TTL电路驱动COMS电路时加上拉电阻1.5K - 4.7K,这样就没有问题了(只要拉高原先的2.4V到3.5V就可以啦!)另外3.3V LVCMOS 可以直接驱动5V的TTL电路1)TTL电路是电流控制器件,而CMOS电路是电压控制器件。

2)TTL电路的速度快,传输延迟时间短(5-10ns),但是功耗大。

CMOS电路的速度慢,传输延迟时间长(25-50ns),但功耗低。

CMOS电路本身的功耗与输入信号的脉冲频率有关,频率越高,芯片集越热,这是正常现象。

3)单片机I/O电路结构:51单片机P1.0 -- P1.7为准双向端口(内置了上拉电阻)作为输出口时,如果内部没有上拉,且外部悬空,则该管脚悬空,电平未定,如果内部未上拉,外部下拉,则改端口始终输出低电平作为输入时,应先在P1口写入1,使得端口内部与地间的开关管断开(因为写0时,P1输出就为0,就是输入为高也会被拉低的)OC门电路集电极开路,输出(通常)接电源Vcc'及上拉电阻,这样可以实现线与逻辑,而且可以实现电平转换,输出的电平由Vcc'决定,输入端电源VCC线与逻辑是两个输出信号相连可以实现与的功能。

在硬件上,要用oc门来实现,由于不用oc门可能使灌电流过大,而烧坏逻辑门对与IC的驱动管脚,从该脚流出的是source current(拉电流),流入的是sink current (灌电流)4)同步电路与异步电路:同步电路是由时序电路(寄存器和各种触发器)和组合逻辑电路构成的电路,所有操作都是在严格的时钟控制下完成的,这些时序电路共享同一个时钟clk,所有状态的变化都是在时钟的上升沿完成的;异步电路主要是组合逻辑电路,其逻辑输出与任何时钟信号都没有关系;异步电路也用在时序电路中,此时它没有统一的时钟,状态变化的时刻是不稳定的,一个时刻允许一个输入发生变化,以避免输入信号之间造成竞争冒险(似乎异步逻辑更合适),电路的稳定需要可靠的建立时间和保持时间;同步逻辑是时钟之间有固定的因果关系。

异步逻辑是各时钟之间没有固定的因果关系。

5)建立时间、保持时间和亚稳态建立时间:触发器在时钟沿来到前,其数据输入端的数据必须保持不变的时间;保持时间:触发器在时钟沿来到后,其数据输入端的数据必须保持不变的时间因为触发器内部数据的形成是需要一定的时间的,如果不满足建立和保持时间,触发器将进入亚稳态,进入亚稳态后触发器的输出将不稳定,在0和1之间变化,这时需要经过一个恢复时间,其输出才能稳定,但稳定后的值并不一定是你的输入值。

这就是为什么要用两级触发器来同步异步输入信号。

这样做可以防止由于异步输入信号对于本级时钟可能不满足建立保持时间而使本级触发器产生的亚稳态传播到后面逻辑中,导致亚稳态的传播。

两级触发器可防止亚稳态传播的原理:假设第一级触发器的输入不满足其建立保持时间,它在第一个脉冲沿到来后输出的数据就为亚稳态,那么在下一个脉冲沿到来之前,其输出的亚稳态数据在一段恢复时间后必须稳定下来,而且稳定的数据必须满足第二级触发器的建立时间,如果都满足了,在下一个脉冲沿到来时,第二级触发器将不会出现亚稳态,因为其输入端的数据满足其建立保持时间。

同步器有效的条件:第一级触发器进入亚稳态后的恢复时间+ 第二级触发器的建立时间< = 时钟周期。

考虑D1、D2及其之间的组合逻辑详细分析参考百度文库《建立时间与保持时间》第一种情况:忽略时钟clk延时情况下,可以不考虑保持时间通常不用考虑D1、D2共用时钟clk的延时,FPGA全局时钟网络可以保证延时可以忽略,通常也不用考虑D2的保持时间,这个是因为通常数据都保持一个时钟,同时又有线路的延时,故到达D2的信号相对于时钟会后移一点,这样自动就满足保持时间的要求了T - Tco - Tdelay > T3 T:时钟周期,Tco:寄存器输出延迟时间:时钟沿后多长时间输出有效(稳定),Tdelay:组合逻辑延时或D1 输出端到D1输入端间信号传输延时T3: D2的建立时间D2的建立时间与保持时间与D1的建立时间与保持时间是没有任何关系的,而只与D2前面的组合逻辑延时和D1的输出延时有关系skew是指时钟偏移,同样的时钟产生的多个子时钟信号之间的延时差异。

它表现的形式是多种多样的,既包含了时钟驱动器的多个输出之间的偏移,也包含了由于PCB走线误差造成的接收端和驱动端时钟信号之间的偏移6) IC设计中同步复位与异步复位的区别。

(南山之桥)解答:1)同步复位和异步复位在FPGA的实现与所选的器件有关。

有些器件里的触发器本身就具有同步/ 异步复位端,在这样的器件中,异步复位和同步复位在走线上是没有区别的。

区别只在于是否与时钟有关。

在这样的器件中,只要不是在复位一结束信号(例如多位的计数器)的值就发生跳变,应该是没有影响的。

2)如果器件只能完成异步复位,那同步复位实际上是由逻辑完成的。

在这种情况下,有可能增加你的逻辑资源。

3)如果想采用异步复位,又想避免复位结束时,有些触发器处于复位状态,有些触发器处于工作状态的情况(由于skew造成),可以在复位输入的起始路径上加入一级D触发器。

并限制同步后复位信号的max_delay。

总之,需要根据你的应用情况选用不同的复位形式。

7)异步复位,同步释放module Reset_Synchronizer(input clk,input asyncrst_n,output reg rst_n);always @(posedge clk or negedge asyncrst_n)if(!asyncrst_n){rst_n,rff1} <= 2'b0;else{rst_n,rff1} <= {rff1,1'b1};endmodule//分析:异步复位信号变为低电平,则rst_n 也会变低以复位后继系统,当异步复位信号变高后,当clk上升沿到来时,rst_n不是立刻变为高,//rst_n还要持续有效一个时钟,这样rst_n就与时钟clk同步了,这就是所谓的异步复位,同步释放!或者直接将asyncrst_n 通过D触发器寄存一次,该输出作为后继系统的复位信号,效果一样吗?效果不一样吧!由于asyncrst_n释放时可能不满足D1的建立时间,这样一级寄存输出是会出现亚稳态的,需要二级寄存输出的。

相关主题