微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > 微电子学习交流 > 异步时钟的数据位宽转换问题

异步时钟的数据位宽转换问题

时间:12-12 整理:3721RD 点击:
小弟新来,请教大神一个问题,输入为20bit 600MHz,转换后为18bit,666MHz,已知要使用small fifo,输入的数据可以认为有很多,连续的,两个clk是同源的。现在的思路不是很明确。。

600M和666M同源吗?
纯异步好麻烦,中间可能需要丢数据

把20bit重组成18bit写进异步fifo,
另一侧用666M的时钟去读。
666x18略小于600x20,要考虑600M时钟下数据最大连续的可能,决定FIFO的大小。

这两个频率不成倍数关系,怎么同源啊?

用PLL可以同源的

还是不太明白,同源后和纯异步的差别是什么?

是啊。同不理解。

一个600一个666,强调啥同源不同源?一个600,一个300,强调同源还能省点事

先异步,再转位宽。

为啥会丢数据?

你这会丢数据。因为在600domain的位宽转换fifo,写带宽大于读带宽。所以,先做时钟转换,然后才能再做位宽转换。

我理解是这样的:
lz讲20b*600M数据是连续的,转换到18b*666M,实际意思我猜是666.6666...M
即两端的理论数据吞吐率是一样的
如果同源,那么,频率严格锁定,不会出现溢出之类的问题,用个fifo倒一下就完了
如果不同源,那么实际上两端的数据率是有差别的,过一段时间就会出现需要填数或者丢个数据的问题,才能保证不溢出

尼玛,叫我小窝!

嗯,也有道理

写重组或者读重组没有本质的区别。
关键是FIFO大小,要考虑输入最长的连续值。

不会,因为20bits/666m的output不会一直有效

目光如炬

同源速度不成比例是不是也也是麻烦事?

意思是这样的,但要把每每18bit组织好再写进fifo。
一般的fifo没法写高位/写低位,要在fifo外面加寄存器buffer一下再写。

同源的是精确的倍数锁定的,不同源是长时间有偏差的。

多谢解惑

前面有位朋友说要求知道最大连续包长度。。。这是大前提
如果连续包无限长,异步FIFO解决不了楼主的问题。。。必须提高读时钟
在有限长的情况下,先做还是后做位宽转换无非就是同步buffer深一点儿还是异步FIFO深
一点儿的问题。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top