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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: come_on_sn

[求助] 请问异步FIFO中为什么需要使用格雷码来表示指针呢

[复制链接]
 楼主| 发表于 2021-11-5 14:11:53 | 显示全部楼层


loglong 发表于 2021-11-5 13:16
建议看一下cummings的文章。
grey code只有一个数据变化,通过cdc后,可以保证指针传递后的正确性(要么是 ...


感谢层主分享,多谢!
 楼主| 发表于 2021-11-5 14:15:43 | 显示全部楼层


loglong 发表于 2021-11-5 13:16
建议看一下cummings的文章。
grey code只有一个数据变化,通过cdc后,可以保证指针传递后的正确性(要么是 ...



您好,顺便问下,如果要上板验证FIFO的功能,像读写使能、复位信号应该不能出现在顶层实体中吧。

我意思是无法通过板上I/O生成变化的rst、en信号(比如几十ns之后复位无效这样)

我用的是比较基础的Basys3开发板
 楼主| 发表于 2021-11-9 14:54:19 | 显示全部楼层


innovation 发表于 2021-11-4 21:07
你想问的是,比如说1个深度为8的FIFO,为什么不用3-bits的读写指针(明明2^3=8呀),而要用4-bits的读写 ...



啊,很抱歉,回复有些迟了。

我画了下感觉还是没有绕过来弯。(太笨了,我)
发表于 2021-11-9 17:56:24 | 显示全部楼层


come_on_sn 发表于 2021-11-9 14:54
啊,很抱歉,回复有些迟了。

我画了下感觉还是没有绕过来弯。(太笨了,我)


你既然已经看了专门讲FIFO的文章,那么,这个FIFO的读/写指针其实是读/写数据个数的计数,对于写端口来说,我们在设计时并不能限制写入的最大总数量,也不能确保读端口及时读走,理解上最简单,但实施上不现实的做法就是设计一个无限大的存储空间,这样写端口都不需要做判断,有数就直接写入存储器,读端口只需要判断写入总数大于自己的读出总数,就可以一直读。

现实是我们只能提供有限的存储空间并循环利用,但限制存储空间大小的只满足了可实现性的要求,并未回避掉我们需要记录写入数据总数和读出数据总数的需求,于是人们设计了FIFO写端口的“满逻辑”和读端口的“空逻辑”,从而将本来需要记录无限大的计数器限制为只需要计数2倍存储深度即可。

所以,我在想你提出这个为什么会多1bit的问题,是不是因为你将这个所谓的FIFO读/写指针与计算机教材里面的存储器地址指针给等同起来了?

顺便在给你推荐两篇关于FIFO的博客吧:
异步FIFO的设计详解(格雷码计数+两级DFF同步)
异步FIFO的最小深度计算
 楼主| 发表于 2021-11-23 10:00:17 | 显示全部楼层


innovation 发表于 2021-11-9 17:56
你既然已经看了专门讲FIFO的文章,那么,这个FIFO的读/写指针其实是读/写数据个数的计数,对于写端口来说 ...




所以,我在想你提出这个为什么会多1bit的问题,是不是因为你将这个所谓的FIFO读/写指针与计算机教材里面的存储器地址指针给等同起来了?



感恩前辈的回答,我确实是按照计算机中存储器地址等同了,但是这两者不一样吗?都是作为存储器的地址索引哎
发表于 2021-11-23 11:46:47 | 显示全部楼层


come_on_sn 发表于 2021-11-23 10:00
感恩前辈的回答,我确实是按照计算机中存储器地址等同了,但是这两者不一样吗?都是作为存储器的地址 ...


咱们设计FIFO时,读写端口针对这个公共的,用于存储数据的存储器,都需要完成两件事:
1)当前存储器的地址,用于寻址存储器的存储单元,这个就是你在教材里面学到的存储器地址指针,这个信息保留在读/写端口内部,不在读/写端口之间传递;
2)写端口自初始化后写入数据条数,读端口自初始化后读出条数,这个信息是计数,需要在读/写端口之间传递,也就是你在这个帖子里面问的FIFO的读写指针。你仔细看大家在帖子里面给你推荐的三篇文章,在读/写端口之间传递的指针(计数)在读/写端口使用时,并不是直接用来寻址存储器的存储单元,而是用来与读/写端口本地的真实的存储器地址指针进行比较,以判断(写)满/(读)空的标志。
发表于 2021-11-29 13:49:32 | 显示全部楼层


come_on_sn 发表于 2021-11-5 14:15
您好,顺便问下,如果要上板验证FIFO的功能,像读写使能、复位信号应该不能出现在顶层实体中吧。

我意思 ...


如果想通过板子验证 (我建议仿真验证就好了), 那么就写一个PRBS 用来产生数据,经过FIFO后, 把数据读出来然后通过PRBS checker。
你只需要控制时钟的速度,push、pop的速度等来fully verify你的FIFO (写成参数)。

不建议通过IO控制 (你说的RST可以,Enable也可以,数据流就算了),建议你把TB的东西也写到板子的逻辑里去。
 楼主| 发表于 2021-12-2 09:58:19 | 显示全部楼层


loglong 发表于 2021-11-29 13:49
如果想通过板子验证 (我建议仿真验证就好了), 那么就写一个PRBS 用来产生数据,经过FIFO后, 把数据读 ...



感谢前辈答复,有2个问题想请教下

1、prbs我理解似乎只能产生2进制数据,但是我的FIFO数据位宽为8bit,不知道这怎么结合呢?

2、push速度我理解应该是把数据往FIFO中写的速度(一般通过enable信号控制?)、pop的速度具体指什么呢?不是很理解



 楼主| 发表于 2021-12-2 11:27:18 | 显示全部楼层


innovation 发表于 2021-11-4 21:07
你想问的是,比如说1个深度为8的FIFO,为什么不用3-bits的读写指针(明明2^3=8呀),而要用4-bits的读写 ...


前辈您好,有一点不太理解,判断写逻辑时,为什么通常
是~full & wr_en 而不用考虑是否为空呢?如果某个地址有数据还能继续写?
发表于 2021-12-2 13:27:25 | 显示全部楼层


come_on_sn 发表于 2021-12-2 11:27
前辈您好,有一点不太理解,判断写逻辑时,为什么通常
是~full & wr_en 而不用考虑是否为空呢?如果某个 ...


一个水池,一个进水龙头,一个放水龙头,现在由你掌管进水龙头,我掌管放水龙头。不说其它了,你会咋个控制你掌管的进水龙头?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-4-19 10:38 , Processed in 0.028653 second(s), 6 queries , Gzip On, Redis On.

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