zoukankan      html  css  js  c++  java
  • 校招基础——FIFO深度

    1、读写没有空闲周期。(fA>fB)

    fA = 80MHz

    fB = 50MHz

    Burst Length = 120

    读写之间没有空闲周期,是连续读写一个突发长度。

    解法:

    写一个数据需要的时间 = 1 / 80MHz = 12.5ns

    写一个突发需要的时间 = 120 * 12.5ns = 1500ns

    读一个数据需要的时间 = 1 / 50MHz = 20ns

    每1500ns,120个数据被写入FIFO,但读一个数据需要20ns的时间

    则1500ns内读出多少个数据,1500 / 20 = 75

    剩下的没有读出,就存在FIFO中,则需要120 - 75 = 45

    快捷方法:FIFO深度 =120 - 120*50/80 = 45

    补充:

    读写没有空闲,若fA<=fB,则FIFO不会写满,深度为1即可。

    2、读写都有空闲周期。(读写速率大小随意,可以相等)

    fA = 80MHz

    fB = 50MHz

    Burst Length = 120

    两个连续写入之间的空闲周期为 = 1(写使能占得百分比为50%)

    两个连续读取之间的空闲周期为 = 3(读使能占得百分比为25%)

    解法:

    每写入一个数据等待1个周期再写入下个数据,即2周期写入1个数据。

    每读出一个数据等待3个周期再读出下个数据,即4周期读出1个数据。

    写一个数据需要的时间 = 2 * (1 / 80MHz) = 25ns

    写一个突发需要的时间 = 120 * 25ns = 3000ns

    读一个数据需要的时间 = 4 * (1 / 50MHz) = 80ns

    3000ns120个数据被写入FIFO,但读一个数据需要80ns的时间

    3000ns内读出多少个数据,3000 / 80 = 37.5FIFO深度=120-37.5=83

    快捷方法:FIFO深度 = 120 - 120*(50/4)/(80/2)=82.5=83

    3、考虑背靠背,读写速率相等。

    读写速率相等

    每100个时钟写入80个数据

    10个时钟读取8个数据

    突发长度为160 (这个条件其实多余)

    解法:

    100个时钟写入80个数据,那剩下20个时钟周期去哪了?

    10个时钟读取8个数据,那剩下2个时钟周期去哪了?

    剩下的周期在哪我们不管,只考虑最差的情况,即前20个时钟周期空闲,后80个周期写完80个数据,立马又是写请求,这次是前80个时钟周期写完80个数据,后20个时钟周期空闲。即连续的写入,又称为背靠背。也就可以看成一个突发写入是80+80=160。

    写一个突发需要的时间:160时钟周期

    160个时钟周期内读出多少个数据,160*8/10=128

    FIFO深度 = 160 - 128 = 32

    4、考虑背靠背,读写速率不等。

    fA = 20MHz

    fB = 40MHz

    每1000个时钟周期写入500个数据

    每4个时钟周期读出1个数据

    解法:

    考虑到背靠背的情况突发长度则为500 * 2 = 1000

    则为每1000个时钟周期写入1000个数据

    4个周期,读取一个数据。

    写一个数据需要的时间 = 1 / 20MHz = 50ns

    写一个突发需要的时间 = 1000 * 50ns = 50000ns

    读一个数据需要的时间 = 4 * (1 / 40MHz) = 100ns

    50000ns120个数据被写入FIFO,但读一个数据需要100ns的时间

    可以计算出,50000ns内读出多少个数据,50000 /100 = 500

    剩下的没有读出,就存在FIFO中,则需要1000- 500 = 500

    5、以下关于FIFO描述正确的是(CD
    A.空信号是在写时钟域产生的,满信号是在读时钟域产生的
    B.外部可以直接操作FIFO的读写地址
    C.FIFO可以分为同步FIFO和异步FIFO
    D.FIFO是先进先出的存储器

    解答:A、“写满读空”。空信号是在读时钟域产生的,满信号是在写时钟域产生的;BFIFOFirst Input First Output,先入先出队列),外部不可以直接操作FIFO的读写地址

    6单口RAM、双口RAMFIFO三者之间的关系

    单口只有一组数据线与地址线,因此读写不能同时进行,而双口有两组数据线与地址线,读写可以同时进行。RAM有地址线,可以对存储单元寻址,FIFO没有地址线,不能对存储单元寻址,此外RAM数据读完还有,FIFO数据读完就没有了。

    7、伪双口RAM和真双口RAM的区别?

    伪双口RAM,一个端口只读,另一个端口只写,且写入和读取的时钟可以不同,位宽比可以不是1:1,而双口RAM两个端口都分别带有读写端口,可以在没有干扰的情况下进行读写,彼此互不干扰。

  • 相关阅读:
    极简Docker和Kubernetes发展史
    什么是健身
    《高效休息法》IT从业者如何高效休息
    《我们赖以生存的隐喻》文学中的面向对象
    sequelize时间自动格式化
    什么是消息队列
    node.js中this指向失效解决
    node.js的async和await
    node.js箭头函数使用
    node.js如何批量赋值
  • 原文地址:https://www.cnblogs.com/xianyufpga/p/13644324.html
Copyright © 2011-2022 走看看