• FIFO -- 深度计算


    FIFO深度的计算公式

    参考 https://www.cnblogs.com/dxs959229640/p/8144656.html

    求FIFO的最小深度主要有以下要点:

    • 在求解之前需要验证一下在允许的最大时间长度内写入的数据量是否等于读出的数据量,保证有解;

    • 求FIFO深度需要考虑最坏的情形,读写的速率应该相差最大,也就是说需要找出最大的写速率和最小的读速率;

    • 不管什么场景,要确定FIFO的深度,关键在于计算出在突发读写这段时间内有多少个数据没有被读走;

    • 由于FIFO空满标志位的判断延迟,在实际应用中需要预留一些余量。
      下面我们来推导一下FIFO深度的求解公式,假设:

    • 写时钟频率为fwr

    • 读时钟频率为frd

    • 在写时钟周期内,每m个周期内就有n个数据写入FIFO

    • 在读时钟周期内,每x个周期内可以有y个数据读出FIFO

    那么:

    • 首先必须满足((1/fwr)*(m/n) ≥ (1/frd)*(x/y))
    • ”背靠背“的情形下是FIFO读写的最坏情形,burst长度 (B = 2*n)
    • 写完burst长度数据最快所需时间 (T = (1/fwr) * B)
    • 从FIFO中读出一个数据至少需要时间 (t= (1/frd) * (x/y))
    • 在T时间内能够读走的数据个数 = (T/t = B * (frd/fwr) * (y/x))
    • 在T时间内还没有读走的数据个数 = (B - B * (frd/fwr) * (y/x))
    • 因此FIFO的最小深度为 (color{red}{B - B * (frd/fwr) * (y/x)})
    • 注意保留一些余量

    假设:

    写数据时钟频率fa=80MHz
    读数据时钟频率fb=50MHz
    在写时钟周期内,每100个周期就有40个数据写入FIFO
    在读时钟周期内,每10个周期可以有8个数据读出FIFO
    

    那么:
    首先这里没有给出数据的突发长度,从假设中可以得出每100个周期就有40个数据写入FIFO,这里可能就有人会说突发长度就是40个数据,其实不是这样的,因为数据是随机写入FIFO的,我们需要考虑做坏的情形,即写速率最大的情形,只有如下图背靠背的情形才是写速率最高的情形,burst length为80

    用公式计算最小深度为: (80-80*50/80*(8/10)=40)

  • 相关阅读:
    solr7之solrJ的使用
    solr7.3.1在CentOS7上的安装
    nginx配置:location配置方法及实例详解
    [读书]10g/11g编程艺术深入体现结构学习笔记(持续更新...)
    liunx系统计划任务管理(at/crond调度)
    Golden Gate 概念和机制
    Oracle三大经典表连接适用情况
    Oracle索引简单介绍与示例
    Oracle RAC的日志体系
    Oracle10g RAC的简单操作
  • 原文地址:https://www.cnblogs.com/lyc-seu/p/12507062.html
Copyright © 2020-2023  润新知