原创 CPLD/FPGA亚稳态(网络整理)

2009-1-13 16:45 3275 8 8 分类: FPGA/CPLD

  百度知道对亚稳态的解释:


     某些物质由于其原子内部结构的特殊性,在它们所具有的许多高能态中有少数几个寿命较长的能态。
      在数字电路领域,亚稳态:指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。
       解决方法:
    1 降低系统时钟
    2 用反应更快的FF
    3 引入同步机制,防止亚稳态传播
    4 改善时钟质量,用边沿变化快速的时钟信号
    关键是器件使用比较好的工艺和时钟周期的裕量要大。


现在我们可以知道CPLD里亚稳态的基本情况了。上面的5个解决办法基本上可以可以解决,但按上面5点,真的可以完全避免亚稳态吗?


   我有在另外一个资料里面看到了下面的亚稳态出现的问题:


   如果一个系统中存在多个独立(异步)时钟,并且存在多时钟域(clock domain)之间的信号传输,那么电路会出现亚稳态。 下面是图片


点击看大图

那如何解决这问题呢?


 


点击看大图


 由上图可以知道,解决亚稳态的一个办法是:同步化,就像上面的图一样。


由上图可以知道  Sync_a2b 对输入adat 进行了2次缓存:bdat1,bdat2。且同时使用同一个bclk 时钟(同步);


上次有位朋友无意对我说对信号进行2次缓存消除亚稳态;


现在也是模棱两可,可以和上面的同步2级缓存也是同一个道理把;请大家指点啊! 


点击看大图


多时钟域系统设计的经典案例:异步FIFO


 数字系统设计当中,应该尽量避免使用异步多时钟,否则会带来很多潜在的问题(不仅仅是亚稳态的问题)。


关于多时钟域数字系统设计的方法,可以参考
    《Synthesis and Scripting Techniques for Designing Multi-Asynchronous Clock Designs》,Clifford E. Cummings。
以下只给出大概的结论。


 


?异步设计的注意事项小结

注意使用同步化电路来对异步信号进行同步;
进行科学的模块划分和信号命名;
尽量减少握手控制信号的数目,以避免同步化造成的信号拉伸而破坏控制信号之间的相位关系;
快时钟域信号进入慢时钟域时,要注意信号丢失的避免和检测;
计数器要尽量采用Gray编码,以避免同步化造成的信号拉伸

附:Gray 互转  Bin
gray[0] = bin[0] ^ bin[1];
gray[1] = bin[1] ^ bin[2];
gray[2] = bin[2] ^ bin[3];
gray[3] = bin[3];

bin[0] = gray[3] ^ gray[2] ^ gray[1] ^ gray[0];
bin[1] = gray[3] ^ gray[2] ^ gray[1];
bin[2] = gray[3] ^ gray[2];
bin[3] = gray[3];


?

 

 

 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /3 下一条