【无标题】异步FIFO相关面试问题

FIFO相关问题

        一、什么是FIFO?异步FIFO和同步FIFO有什么异同?异步FIFO的设计理念和设计要点是什么?

        答:FIFO是一种先进先出的数据缓冲器,与普通的存储器相比,没有外部地址线,其内部地址线自加1。异步FIFO的意思就是FIFO的读写时钟是异步的,因此可用于两个不同时钟系统之间的数据传输。

        设计理念:完成数据在不同时钟域间的传递;

        设计要点:如何得出空满状态位,读写指针采用格雷码编码,并且经过两级寄存器同步后进行指针对比得出空满状态位。

        二、你的FIFO怎么实现的,会乒乓FIFO吗?

        答:我是用的双口RAM实现的的,这样做的好处是因为不用考虑内部时序,但是会有成本的问题。

        乒乓操作是一个无缝的缓存高速数据流的操作,多用于两个单口RAM,可以做到没有数据丢失的高速数据流处理,可以用两个单口RAM,类似于乒乓,写1读2,写2读1。

         三、空满状态位是怎么得出的?为什么要用格雷码编码而不用二进制编码和独热码编码?为什么要经过俩级寄存器的同步再进行指针的对比?

        答:指针采用了格雷码,所以读空就是两者指针相同;写满就是指针高两位不同,低位相同。

        格雷码每次只跳变一位,不易出错,而且即使出错,也只是会造成空满判断提前一位或落后一位。

        在实际中分为两种情况,分别是写快读慢写慢读快。在写时钟大于读时钟时,要产生fifo_full信号,需要将read_ptr同步到写时钟域,读指针会有延时,可能比实际的读地址要小,如果满足fifo_full的触发条件,像这种FIFO非满而产生满标志信号的情况称为“虚满”,但是也并不影响FIFO的功能。在写慢读快,产生fifo_empty信号,把写指针传递到读时钟域,写指针有延时,即可能fifo中有数据但判断读空,成为“虚空”

        两级寄存器是为了消除亚稳态问题,保证最后采样得到的数据是稳定的

        四、格雷码和二进制转换?

        二进制码转换成二进制格雷码,其法则是保留二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的求法相类似。其实就是二进制码右移一位和本身异或。

        assign wgnext = (wbnext>>1) ^ (wbnext);//二进制转格雷码

        二进制格雷码转换成二进制码,其法则是保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制码的其余各位与次高位自然二进制码的求法相类似

        五、假如异步FIFO写时钟是读时钟的100倍,会出现什么问题?

        可能会有空满指示信号同时有效的状况发生。

        在FIFO刚刚复位,假如FIFO的深度不是很够,在写满之后,FIFO的满信号会指示为1,说明FIFO满了;但是读时钟速度很慢,此时写地址尚未同步到读时钟域,会表现出空满指示信号同时有效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值