在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: wangxuede220

[求助] 关于一个异步电路的问题

[复制链接]
发表于 2011-3-18 21:04:33 | 显示全部楼层
设cpu的时钟域为tc,timer的时钟域为tt。
cpu读的时候,把读信号同步到tt域,当timer检测到读请求的时候,把timer值保存到一个寄存器里面,同时产生ready信号,把ready信号同步到tc域作为cpu的data ready信号。
cpu写timer的时候,把写数据先存在寄存器里面,同时把写信号同步到tt域,当timer检测到写信号时此时写数据一定是稳定的。
多bit数据的跨时钟域传递的方法有三种,异步fifo,格雷码(有局限性)和握手协议。
 楼主| 发表于 2011-3-18 21:39:41 | 显示全部楼层
回复 12# hover99


    谢谢你,可是这个同步没这么简单,我的TIMER1时钟不知道什么时候来,因为他异步时工作在计数模式,要用它去同步内部时钟怎么同步呢。还有,我这个时钟周期送读信号,下个周期或隔一个周期我就要读过来,但是如果外边一直没有脉冲来的话怎么同步啊。
 楼主| 发表于 2011-3-18 21:41:22 | 显示全部楼层
回复 11# zhinvxing


    谢谢你,可是我还是不懂,预设值是16位数,如何做使能呢,麻烦你再说的清楚些,谢谢了。
发表于 2011-3-18 23:02:26 | 显示全部楼层
慢速往快速传输可以用握手协议来保证确定的传送。
发表于 2011-3-20 22:51:30 | 显示全部楼层
回复 13# wangxuede220


    如果是固定复位值的计数器(比如时钟)可以考虑格雷码计数器。

如果计数器的时钟很慢,可以用一个t触发器来标志时钟沿(每个时钟沿到来状态反转),然后把t触发器的状态同步到cpu时钟域用异或逻辑做时钟沿检测,在检测到状态变化的那个时钟周期是不能做读操作的(有读操作延迟一拍送出数据)。cpu的时钟频率至少是timer时钟的四倍以上。
发表于 2011-3-21 10:47:48 | 显示全部楼层
学习了
发表于 2011-3-21 11:32:59 | 显示全部楼层
回复 6# wangxuede220


    打两拍消除单个位的亚稳态是可以的,关键是快速时钟域多个位不是同时变化的,如果采样正好碰在数据变化的时刻,打两拍后的数据可能某些位会出错。

    怎么做要照设计要求来了,比如慢时钟域先发个握手信号,快时钟将这个握手信号同步为快时钟域的一个脉冲,快时钟根据同步后的握手信号把当前计数值送到慢时钟要读的寄存器上,这里寄存器是快时钟控制的,cpu去读就行了。这是个笨办法啦,就是说cpu读快时钟域这个寄存器时,寄存器一定是静止的,缺点是读出的数值有延时。
   
    个人之见了,参考请慎重
发表于 2011-3-21 12:44:41 | 显示全部楼层
其实就是一个使能信号和多位数据的异步传输问题。
 楼主| 发表于 2011-3-22 20:49:43 | 显示全部楼层
本帖最后由 wangxuede220 于 2011-3-22 21:00 编辑

回复 18# pengyoust


    谢谢,你的意思我懂了,可是我是快时钟域读慢时钟域,还会出现各个位不一样的情形吗?
    我们现在初步定的结果就是用快时钟将慢时钟域数据打两拍后再读。
发表于 2011-3-23 08:58:48 | 显示全部楼层
回复 20# wangxuede220


    有的了,快读慢的话,你可以参考一些RTC源代码怎么做的,在带RTC的mcu里,RTC工作在32k下,cpu一般比较快,是有同步机制的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

X

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-6-29 18:33 , Processed in 0.022967 second(s), 6 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表