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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5067|回复: 6

[讨论] 异步FIFO中格雷码与二进制码之间的转换问题

[复制链接]
发表于 2013-10-22 11:26:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
本帖最后由 HADIST 于 2013-10-22 11:28 编辑

在异步fifo中跨时钟域的读写地址传输过程中需要使用格雷码;而在fifo读写时的地址增减需要使用二进制码;那么就存在一个二进制码与格雷码之间相互转换的问题;通常解决方法是:在读写时钟域进行FIFO读写的时候使用二进制码;写入一次数据;写指针+1;读数据操作类似;在判断FIFO空满状态的时候是使用格雷码比较;那么就需要在同步读写地址的时候需要将二进制码的地址转换成格雷码;转换过程中;如果FIFO地址为2的n次方(例如16);那二进制码转换为格雷码运算为:xgray=(xbin>>1)^xbin;    那如果FIFO地址仅为偶数(例如12);那么此时的格雷码如何选择的呢?我现在有两种方案;一:0000 0001 0011 0111 0101 0100 1100 1101 1111 1011 1001 1000 ;二:0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1010 1011 ;一般选用哪种呢?我认为第二种更好一些因为这个格雷码取的是0~15(2的4次方)格雷码的中间12个;这样在由二进制码转换为格雷码的时候只需要将前面公式中的(xbin+2)再带入上面公式就可以得到对应的格雷码了;如果使用第一种编码方式应该如何实现二进制码到格雷码的转换呢(除了查表法)?
以上是个人观点;有错误的地方希望大家指出;共同学习;
发表于 2013-10-22 18:33:02 | 显示全部楼层
回复 1# HADIST

    如果采用第一种方式,full = (wptr[3:2] == ~rptr[3:2]) && (wptr[1:0] == rptr[1:0]);
    如果采用第二种方式,你如何判断满呢?
 楼主| 发表于 2013-10-22 18:46:20 | 显示全部楼层
回复 2# xiaojigao


   判断空满的方式是一样的啊;都是格雷码;
发表于 2013-10-22 18:59:41 | 显示全部楼层
回复 3# HADIST

什么叫一样的?4bit的格雷码能用在8层的异步FIFO上,满的条件是:(wptr[3:2] == ~rptr[3:2]) && (wptr[1:0] == rptr[1:0]);

    你的第二种编码方式不满足这个条件。看下面两种情况,都是写满(12位格雷码,那FIFO应该是6层深度)的情况:
情况一:
0011  <-- 指针
0010
0110
0111
0101
0100
1100  <-- 写指针
1101
1111
1110
1010
1011
这种情况下,wptr[3:0] == ~rptr[3:0];
情况二:
0011
0010
0110  <-- 读指针
0111
0101
0100
1100  
1101
1111  <-- 写指针
1110
1010
1011

在这种情况下呢?


不知道你明白我的意思没。
 楼主| 发表于 2013-10-22 19:09:43 | 显示全部楼层
回复 4# xiaojigao


   恩 明白你的意思了;你说的对着呢;刚才没多想这一点;那第一种方式的bin2gray如何操作?
发表于 2013-10-23 08:56:14 | 显示全部楼层
回复 5# HADIST


    除了查表,我也想不出别的方法。。。。呼唤高人指点
发表于 2014-3-27 14:27:02 | 显示全部楼层
好啊迎谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-4-26 19:39 , Processed in 0.025615 second(s), 8 queries , Gzip On, Redis On.

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