异步FIFO中RAM的大小问题!
时间:10-02
整理:3721RD
点击:
异步FIFO中的RAM深度是不是必须是2的n次方才行啊?要不然不能用格雷码编码地址了哇?
参考Xilinx的芯片手册,好像里面有关于一个block RAM能用做那些位宽*深度。
情况和异步FIFO相同吗?
偶数就行,但是自定义格雷码,你可以自己试试看;
一般情况下都是用2的N次方,比较通用;
既然偶数就行的话,奇数为什么不行呢?只要不是2的N次方,从最高的地址回到0都会有多位变化啊!
比如:000,001,011,111,110,100
至于为什么奇数不行,还真没有用数学去推导过
哦,那不同的偶数格雷码编码方式都不同啊?
一般是这样子的,但是这个并不是必须的,而且,也不一定非要用格雷码来编码吧。看工程的需求而定了
如果是格雷码的话应该是
不用格雷码的话,地址跨时钟域的时候有可能传输错误地址啊~!
谢谢!
只要比2的N次方大就行。但是多的浪费了
楼上正解
求解释
因为,你的寻找范围在2的N次方,那地址大于2的N次方的memory都无法寻址,即无法读写。就浪费了。
你其实不必担心这个问题,xilinx最小的BRAM单元是18k(16k) bit,无论怎么生成RAM或者FIFO,最少都要占用18k(16k) bit,比如你为uart接口生成一个宽8深128的RAM或者FIFO,消耗的资源和生成一个宽8深1024是一样的,都是一个18k的BRAM。
你用的是FIFO,深多少其实无所谓的,你要关注的是你实际消耗了多少BRAM资源。
还有,不推荐分布式RAM,因为在高速的情况下,不如BRAM稳定。