找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 2|回复: 0
打印 上一主题 下一主题

[硬件] 电路设计漫谈之 - 同步/异步设计及metastability

[复制链接]

551

主题

1470

帖子

3万

积分

EDA365管理团队

Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

积分
39487
跳转到指定楼层
1#
发表于 2019-9-27 15:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
(信息来源:EETOP BBS  作者:sun_ic)9 q2 ~: E9 N1 {& Z  X* |
7 U, }7 R0 U. v) U+ P8 s6 M
同步设计,异步设计,以及metastability' s  O" a  d2 a0 n7 R% E
. Z  P3 x8 ^+ I0 X
数字电路设计一般是采用同步设计技术。除非在某些特殊的局部场合,有人用时钟延时的补偿达到更高的处理速度。但在大多数情况下,应该遵循同步设计的理念。所谓同步设计指的是对于所设计的一个电路而言,所有logic在一个时钟的domain。这点很重要,因为大量复杂的logic不能靠人工或者工具一点点的验证。靠得是遵循一些统一的timing约束。而这样的约束在同一个时钟domain内描述出来比较容易。所以如果在一个设计中最好用一个统一的时钟。如果有不同的电路运行在不同的时钟速率怎么办?一般有以下几个办法
' \, z& b3 o) f! K& W" F" { * R# l, W% E, Q
1)采用通用的时钟,对需要不同时钟速率的电路使用同步使能控制。比如memory的处理,MCU的bus,等等: i( q" [, x* e- a' h2 t" v

( s3 }# H* d# \2 b# C2)对于同源的不同速率的数据间的转换,尤其是对于同速率不同相位的,采用FIFO来处理。这在采用总线背板的多插件系统中,同步不同linecard来的数据中很是普遍。比如光通信系统的设计,SDH/SONET的phase alignment/pointer processing经常用这种方式。
- r! [, ]1 b2 B1 V) c) d- D! \- {+ o) }* D
有时有些简单的电路也可以采用逻辑电路实现,但要十分小心setup时间的保证。一般初学者最容易采用这种方式。但建议在变成中高手后再使用

( A0 a/ j( q3 e ( f; R# E- }8 i6 S: L1 m, @
3)对于不同源,或者速率不同的数据之间的转换,实现起来比较复杂。这需要采用异步FIFO来做。在下认为异步FIFO的设计,与用RAM的lookup table设计,DRAM做大量独立的buffer/FIFO的设计等一起,构成了数字logic设计的高级境界。
, Y$ W9 I. g  P6 ?. j0 D 4 H6 a& f/ j, L" \. v
在不同时钟domain间的数据转换,主要考虑的是metastability。假设有两个不同源的时钟A和B,时钟B取样产生于时钟A的数据。总有可能会取样在数据的变化沿,这就可能产生取样结果的不确定性。解决这一问题的方式有几个(也可能有别的方法,请有经验的DX分享一下)
5 Q5 b! p, _1 x4 @& G ' q: t' W, J$ T7 @% `* {, `& p$ i
i)如果被取样的数据是一个bit,可采用如下的double clock的方式去除metastability
+ y5 K( |3 u  p
1 I  p3 j# X, B! G# {  W: p5 S1 k. Y
  
! v3 }* m% u: w. Tii) 如果被取样的数据多于一个bit,以上所述的方式不能完全消除metastability。因为如果有两个bit同时在switching时被另一个domain的时钟取样,即使double clock也有一个时钟的不确定性的可能。这时异步FIFO是最好的选择。3 h0 E4 a6 _. {6 s2 L8 R2 U$ N

- O0 q2 i1 r. I' E在异步FIFO设计中需要对read和write的地址进行比较,以产生Full和empty的指示。一个可能的方法是采用GRAY编码的方式解决。这种编码的特点是每个时钟周期只有一个bit发生变化。这时再采用double clock技术就不会产生metastability了。! i2 k0 G  D8 f
注意GRAY编码其实是在时钟domain变换中的一个接口。数据转变到新的domain中后还要转换为正常的binary。& t" m1 F1 F' ]
一个4-bit GRAY编码的例子:  0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1010 1011 1001 10006 G9 i) X: }. b  j* z* E
* B* m" k8 G7 f8 ^
所以利用double clock和GRAY编码的方法先设计AFIFO,然后就可在不同timing domain之间转换任意宽度的数据。

% X" @" L* l& ^' c
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-4-11 22:54 , Processed in 0.084575 second(s), 32 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表