打印

关于时钟域同步的问题

[复制链接]
1755|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wxfxwk1986|  楼主 | 2010-8-27 20:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
100m写数据,133m接收数据,看到书上处理同步是用的fifo,即用的写的个数与同步后的读的个数进行比较,如果等于0产生一个空信号,指示现在fifo里数据全读完了。其中同步就是用的两个寄存器同步。我的疑问是这样做为什么可以达到同步,是怎么达到同步的?我对时钟同步始终不太理解,谢谢。。。

相关帖子

沙发
ar_dong| | 2010-8-28 11:24 | 只看该作者
有个简单点的办法
用输入时钟每次写50个进fifo
写完后给读出端发中断
后端接收一个中断用133m读50个数

使用特权

评论回复
板凳
mr.king| | 2010-8-28 13:30 | 只看该作者
具体对楼主问题,我估计是均匀连续100M写入,133M突发读出转写到SDRAM,这时通常是按SDRAM的突发页长度(通常是256个地址)两倍空间分配FIFO,大点也行,然后等到有256个数据后(通过设定“几乎满”参数来控制)启动SDRAM的突发写,从FIFO中取走数据,此时FIFO继续均匀写入数据,由于FIFO比较大,加上SDRAM地址控制 刷新控制开销,只要平均速度大于100M就能用

使用特权

评论回复
地板
xiaoqiang87| | 2010-8-28 21:11 | 只看该作者
1# wxfxwk1986


这里所谓同步就是读指针和写指针在单一的时钟域进行操作(这里是比较大小),而之前是读指针和写指针在不同的时钟域,这两个指针是异步的,无法比较大小,所以必须要进过两级同步链对指针进行同步,这样才能采集到正确的数据进行比较。

当然,这里通过两级寄存器同步链进行同步的条件是,跨越时钟域进行同步之前必须将指针转换为格雷码。这样可以消除亚稳态,然后剩下的操作就是我们很熟悉的单一时钟下的比较大小啦~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

250

帖子

1

粉丝