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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5137|回复: 12

[求助] 请问一个关于生成格雷码的问题

[复制链接]
发表于 2014-3-14 08:19:10 | 显示全部楼层 |阅读模式

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

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

x
昨天跑去一个公司面试别人问了我格雷码和异步fifo的问题,我以为答得很好,顺便多说了一句:异步FIFO的深度最好是2的N次方,不然不好编译格雷码。人家就问了我一个比较难的的问题:怎么设计不是2的N次方,而是一个深度12的异步FIFO的格雷码,即从0-11循环的格雷码,我想了半天觉得只要一次只要1bit变就行了,于是写出如下答案:0000(0)->0001(1)->0011(2)->0111(3)->0110(4)->1110(5)->1111(6)->1110(7)-1100(8)->1101(9)->1001(10)->1000(11)->0000(12,0)写完以后对方摇摇头说这个可能会有些问题,我知道这个打错了,请问对的0-11循环格雷码应该是怎样的?我这样写有何错误,我一次只变了一个bit呀?
发表于 2014-3-14 08:40:57 | 显示全部楼层
1)5和7的编码都是1110,笔误?
2)这套编码和自然二进制码之间的转换公式是什么,这一点设计中需要考虑的吧!
发表于 2014-3-14 13:51:51 | 显示全部楼层
非2^N的也可以。只有是偶数深度都可以。用的时候把2^N的gray code头尾去掉相同个数个值就可以啦。

我们用6来举例:
0-7的gray code如下:
0 --> 000
1 --> 001
2 --> 011
3 --> 010
4 --> 110
5 --> 111
6 --> 101
7 --> 100

那么0-5的就是
1(0) --> 001
2(1) --> 011
3(2) --> 010
4(3) --> 110
5(4) --> 111
6(5) --> 101
发表于 2014-3-14 16:46:51 | 显示全部楼层
 楼主| 发表于 2014-3-14 23:16:06 | 显示全部楼层
回复 2# rvnistelrooy
这个是我真的写错了,不是笔误,谢谢你帮我发现
发表于 2014-3-14 23:39:19 | 显示全部楼层
除了最高位以外,格雷码的其它位都是镜像对称的
 楼主| 发表于 2014-3-15 22:35:06 | 显示全部楼层


谢谢大牛的回答,让我茅塞顿开,那么我再追问一个问题:如您所说,这样的格雷码翻译成二进制码就会是0010(2)->1101(13),在这个2-13区间上变化。但是,往往我们产生将空(Aempty)和将满(Afull)信号的时候,我们是直接用减法就可以了,比如在深度是2的N次方的时候,直接减这种做法很方便。如果改成上面的情况,如何做个逻辑来产生将空将满信号呢?比如我要留3个冗余,即还有3个位置就要空或者满的时候就出将空将满信号,如果写才能尽量省面积?
发表于 2015-12-9 20:27:14 | 显示全部楼层
学习一下。。
发表于 2015-12-10 09:57:47 | 显示全部楼层
学习一下。。
发表于 2018-1-31 06:00:04 | 显示全部楼层
回复 3# asic_service

Thank you for the reply
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-3-28 20:48 , Processed in 0.035678 second(s), 9 queries , Gzip On, Redis On.

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