zoukankan      html  css  js  c++  java
  • FIFO深度计算

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

    写时钟频率 w_clk,
    读时钟频率 r_clk,
    写时钟周期里,每B个时钟周期会有A个数据写入FIFO
    读时钟周期里,每Y个时钟周期会有X个数据读出FIFO
    则,FIFO的最小深度是?

    首先,这道题不一定有解
    有解的必要条件是在一定时间内(足够长),写入的数据数量一定要等于读出的数据数量
    因此有:A/B * w_clk = X/Y * r_clk

    计算公式如下:

    fifo_depth = burst_length - burst_length * X/Y * r_clk/w_clk

    例举说明:
    如果100个写时钟周期可以写入80个数据,10个读时钟可以读出8个数据。令wclk=rclk ,考虑背靠背(20个clk不发数据+80clk发数据+80clk发数据+20个clk不发数据的200个clk)代入公式可计算FIFO的深度
    fifo_depth = 160-160X(80%)=160-128=32

    如果令wclk=200mhz,改为100个wclk里写入40个,rclk=100mhz,10个rclk里读出8个。那么fifo深度为48
    计算如下fifo_depth =80-80X(80%)X(100/200)=80-32=48

    注:将 fifo_depth = burst_length - burst_length * (X/Y) * (r_clk/w_clk) 作个变形,得到 fifo_depth = burst_length - (burst_length /w_clk)*[r_clk*(x/y)] 其中(burst_length /w_clk) 表示这个burst的持续时间,r_clk*(x/y)表示读的实际速度。两者的乘积自然就是这段时间读出的数据量。显然burst_length表示这 段时间写入的数据量,两者的差为fifo中残留的数据,这个也就是理论上的fifo的最小深度。实际应用中往往是以半空半满信号来指示fifo的空满状态 的,所以实际设计fifo的时候会至少留下一个数据空间的深度裕量

  • 相关阅读:
    Linux系统自带服务罗列
    几个有用的shell命令
    Zabbix
    RaspberryPi3安装CentOS7教程
    grafana简介
    负载均衡之Haproxy配置详解(及httpd配置)
    CentOS7版本的新特性
    文件系统目录结构
    openstack部署dashboard
    openstack核心组件--cinder存储服务(6)
  • 原文地址:https://www.cnblogs.com/wt-seu/p/12398158.html
Copyright © 2011-2022 走看看