找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 1|回复: 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). N5 N/ b9 c* w5 J+ F# ]

4 s- ?6 j$ }1 m5 J同步设计,异步设计,以及metastability
8 g% o3 H7 d4 }( G+ E. c # [2 z& H0 m- ?  ?1 C% Q# R4 u; Y
数字电路设计一般是采用同步设计技术。除非在某些特殊的局部场合,有人用时钟延时的补偿达到更高的处理速度。但在大多数情况下,应该遵循同步设计的理念。所谓同步设计指的是对于所设计的一个电路而言,所有logic在一个时钟的domain。这点很重要,因为大量复杂的logic不能靠人工或者工具一点点的验证。靠得是遵循一些统一的timing约束。而这样的约束在同一个时钟domain内描述出来比较容易。所以如果在一个设计中最好用一个统一的时钟。如果有不同的电路运行在不同的时钟速率怎么办?一般有以下几个办法
" Y  |: M! @, F5 H0 j " E2 {4 a  S+ |; \
1)采用通用的时钟,对需要不同时钟速率的电路使用同步使能控制。比如memory的处理,MCU的bus,等等# {! }$ g( Y2 [1 Z
0 x6 w+ r& h+ K2 I; y
2)对于同源的不同速率的数据间的转换,尤其是对于同速率不同相位的,采用FIFO来处理。这在采用总线背板的多插件系统中,同步不同linecard来的数据中很是普遍。比如光通信系统的设计,SDH/SONET的phase alignment/pointer processing经常用这种方式。
$ N8 x' G7 K, R- w3 j, s1 w4 D
. l1 f- p. T7 F. e1 e- A. U0 D4 x有时有些简单的电路也可以采用逻辑电路实现,但要十分小心setup时间的保证。一般初学者最容易采用这种方式。但建议在变成中高手后再使用
- g, L# B* Y/ ]9 n* @

2 D" W1 W* G& {3)对于不同源,或者速率不同的数据之间的转换,实现起来比较复杂。这需要采用异步FIFO来做。在下认为异步FIFO的设计,与用RAM的lookup table设计,DRAM做大量独立的buffer/FIFO的设计等一起,构成了数字logic设计的高级境界。) X) R/ [$ c6 y6 \+ D

/ Y; A- ?) P9 Q% J- ?% u' k; `5 T在不同时钟domain间的数据转换,主要考虑的是metastability。假设有两个不同源的时钟A和B,时钟B取样产生于时钟A的数据。总有可能会取样在数据的变化沿,这就可能产生取样结果的不确定性。解决这一问题的方式有几个(也可能有别的方法,请有经验的DX分享一下)
/ ^* U6 I& |% b8 ` 9 o" L+ T) ?; u
i)如果被取样的数据是一个bit,可采用如下的double clock的方式去除metastability; a0 C% R6 ?( T1 L( d" w
. p: O1 B' J% B7 E! J1 o
  
1 A& b9 P+ c- }3 H+ x5 kii) 如果被取样的数据多于一个bit,以上所述的方式不能完全消除metastability。因为如果有两个bit同时在switching时被另一个domain的时钟取样,即使double clock也有一个时钟的不确定性的可能。这时异步FIFO是最好的选择。
( ]$ f. e% A* L" I! d8 o+ ?5 B

4 d% M2 q( }2 M& Q( r+ X在异步FIFO设计中需要对read和write的地址进行比较,以产生Full和empty的指示。一个可能的方法是采用GRAY编码的方式解决。这种编码的特点是每个时钟周期只有一个bit发生变化。这时再采用double clock技术就不会产生metastability了。- \8 X  h  r3 ?
注意GRAY编码其实是在时钟domain变换中的一个接口。数据转变到新的domain中后还要转换为正常的binary。
) `3 E* U5 X5 U6 O3 e一个4-bit GRAY编码的例子:  0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1010 1011 1001 1000
. c5 y2 S# i# Z( I- L7 N* {; j% N7 o+ K" \$ O2 i' K
所以利用double clock和GRAY编码的方法先设计AFIFO,然后就可在不同timing domain之间转换任意宽度的数据。
' h' s& \, H# M* A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-4-7 09:25 , Processed in 0.052368 second(s), 32 queries , Gzip On.

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

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

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