IC/FPGA逻辑设计笔试题中最常见的体型莫过于FIFO最小深度的计算了,以前看到过计算FIFO最小深度,需要代入公式,直到看到这篇文档,才觉得使用逻辑分析的方法来看更能让人理解的更为深刻。

文档把计算FIFO的最小深度的情况几乎列全了,所以几乎可以说看完这篇几乎就掌握了所有计算FIFO深度的问题了。(感谢作者)

计算FIFO深度最小深度的总的思路大概是:

算出写时钟周期,读时钟周期;

从描述中提取出突发写数据个数(Burst Length),一次写这么多数据需要多久?同时,这么长时间,读了多少数据?

之后,Burst length 减去 读出的数据,就是FIFO的最小深度。

理解这些东西且看下文,下文是从上述文档中拿出来的例子,本人边做边写,让自己加深印象,同时更方便大伙那就更好了。

注意:突发的意思是数据在那个时候集中过来。。。(大概可以这么理解)


目录

概述:

第一种情况:

第二种情况:

第三种情况:

第四种情况:

第五种情况:

第六种情况:

第7种情况:

最后一种情况:

写在最后:


概述:

当一些数据必须从一个模块传输到另一个模块以避免数据丢失时,我们需要在不同时钟域工作的两个模块之间使用异步FIFO。 只有当您读取速度慢并且写入速度很快以缓冲较慢模块未读取的数据时,才需要FIFO。

FIFO的深度(大小)应该是这样的,FIFO可以存储较慢模块不能读取的所有数据。 FIFO仅在数据突发时才有效; 你不能有连续的数据输入和输出。 如果存在连续的数据流,那么所需FIFO的大小应该是无限的。 您需要知道突发速率,突发大小,频率等,以确定FIFO的适当大小。


第一种情况:

写时钟快于读时钟,写和读的过程中没有空闲周期,也即在突发(burst)过程中,读和写都在各自的时钟域内连续进行。

例:

分析过程:

写时钟周期T_A = 1000/80 ns = 12.5ns;同理读时钟周期为20ns;

突发写长度为120个数据,写120个数据耗时120*12.5 = 1500ns;

1500ns时间内读出数据1500/20ns = 75个;

故最小FIFO深度为120 - 75 = 45;


第二种情况:

写时钟频率大于读时钟频率,但在读写的过程中存在空闲周期。

例如:

分析:

写时钟周期T_A = 12.5ns,读时钟周期为T_B = 20ns;

两个写时钟写一个数据,也就是写一个数据需要时间2*T_A = 25ns,那么由于突发写数据个数为120个,写这么多数据需要时间120*25ns = 3000ns;

4个读时钟周期读一个数据,因此读一个数据需要时间80ns,3000ns读了3000/80 = 37.5个数据(0.5不算一个数据,没读完整),约等于37个数据。

所以,FIFO的最小深度为120 - 37 = 83;


第三种情况:

写时钟慢于读时钟,且读写过程中没有空闲周期;

例如:

分析:

这种情况下永远也不会发生数据丢失的情况;

fifo的深度为1即可。


第四种情况:

写时钟频率小于读时钟频率,但读写过程中存在空闲周期;

例如:

分析:

写时钟周期1000/30 ns = 100/3 ns;

读时钟周期 20ns;

写一个数据需要2个时钟,也就是200/3 ns;

读一个数据需要4个时钟,也就是80 ns;

写120个数据需要时间8000ns,这段时间内读出数据8000/80 = 100个;

因此,FIFO的最小深度为120 - 100 = 20;


第五种情况:

读写时钟速率相同,且无空闲时钟。

例如:

分析:

如果读写时钟之间没有相位差,则不需要FIFO就可以进行读写呀;

如果二者存在相位差,只需要FIFO的深度为1即可。


第六种情况:

读写时钟频率一致,但在读写过程中存在空闲周期。

例如:

分析:两个时钟写一个数据,需要时间40ns;

4个时钟读一个数据,需要80ns;

由于突发长度为120,需要120*40 = 4800ns写完;这段时间读出数据个数:4800/80 = 60;

所以,FIFO最小深度为120 - 60 = 60;


第7种情况:

特定条件下,最坏情况分析FIFO最小深度;

例如:

分析:

首先,从条件可知,写频率等于读频率;

其次,读写可以在如下限制下的任意时刻发生:

“writing of 80 data items will be completed in 100 cycles” and ”reading of 8 data items will be completed in 10 cycles”.

可能的情况有:

为了获得更安全的FIFO深度,我们需要考虑最坏的情况,以防数据丢失;

对于最坏的情况,写入和读取之间的数据速率之间的差异应该是最大的。 因此,对于写操作,应考虑最大数据速率,对于读操作,应考虑最小数据速率。

从上表可以看出,最快的写数据速率应该为第4种情况,写操作在最小的时间内完成;

由于突然写长度为160,所以160个时钟写160个数据;

由于读速度为10个时钟读8个数据,因此一个数据需要10/8个时钟;

所以160个时钟读了160*8/10 = 128个数据;

所以FIFO的最小深度为160-128=32.


最后一种情况:

条件转弯抹角的给出,需要自己提取关键信息;(一般考试都是这种,提出出来关键信息后,在按照上面的方法来分析即可)

例如:

假如clkA = 25MHz,则CLKB = 100MHz;

TA= 40ns, TB = 10ns;

en_B = 100*40 = 4000ns;占空比为1/4;

我们认为B为写时钟,写使能时间为4000/4 = 1000ns,则突发写长度为1000/10 = 100个数据;

在1000ns内读出数据为1000/40 = 25个数据,所以FIFO最小深度为100 - 25 = 75



写在最后:

不知不觉间,从刚开始建立IC/FPGA笔试面试交流群到现在,陆续已经加入100多人,很多是从CSDN来的,也有一些各位邀请的。

从和各位的讨论中,觉得受益匪浅,这不仅仅是技术上的收益,同时还开阔了眼界,增长了见识,可谓是英雄豪杰云集于此,真是荣幸。

如果我是王勃,定为此写一篇类似的滕王阁序。。。(哈哈)

最后,还是继续欢迎路过的同行俊杰能够加入进来,我们并不孤单。加我微信,拉你进群(ljs521615)

IC/FPGA笔试/面试题分析(九)关于FIFO最小深度计算的问题相关推荐

  1. IC/FPGA笔试/面试题分析(八)近期IC/FPGA笔试面试讨论群题目汇总解析

    背景:IC前端设计/FPGA笔(面)试交流群,欢迎同行加入 自从开始邀请同行加入笔试面试交流群之后,目前已经有40多位同行加入,大家踊跃发言,各抒己见,让各自受益匪浅. 今天的这篇博文是将近期部分题目 ...

  2. IC/FPGA笔试/面试题分析(七)建立时间和保持时间类型考题汇总分析

    自从召集2020届校招同行加入新建立的"IC/FPGA校招笔试面试交流群",见识到了很多关于建立时间和保持时间分析的题目,在为别人解答疑惑,以及别人为自己解答疑惑的同时,自己对于知 ...

  3. IC/FPGA笔试/面试题分析(十一)基础概念(三态门等)

    上篇博文写了一些有关CMOS门电路的基础内容,相信认真看完,一定能画出各种CMOS门电路:CMOS门电路,这些是最常考的基础内容. 下面简单介绍一下其他概念题目: 1. 解释一下Vih,Vil,Vol ...

  4. IC/FPGA笔试/面试题分析(十)CMOS门电路

    目录 CMOS介绍 CMOS非门 CMOS与非门 CMOS或非门 CMOS或门 CMOS与门 CMOS与或式 CMOS或与非 CMOS介绍 MOS管分为NMOS和CMOS,二者成对出现在电路中,且二者 ...

  5. IC/FPGA校招笔试题分析(三)

    还有1天就要进行某瓦科技的面试了,今天晚上赶紧复习下上次它的笔试题: 1.一个四位十六个状态的格雷码计数器,起始值为1001,经过100个时钟脉冲作用之后的值为(). 首先,算出100个脉冲后跑了多少 ...

  6. IC/FPGA校招笔试题分析(四)再看Moore状态机实现序列检测器

    参加了几次笔试,发现序列检测器是常考的内容,而之前认为序列检测器真的很简单,但是这次X疆的笔试题做完之后,我怀疑自己了. 画状态转移图的时候,我开始犹豫了,我怕我会没考虑全,甚至有点晕. 人家又问: ...

  7. IC/FPGA校招笔试题分析(二)任意切换的时钟分频电路

    今天的笔试题是某芸科技的现场笔试题,数字前端的笔试题,要求很简单,就是现场写出代码实现: 任意切换1-8分频,且无论奇分频还是偶分频,占空比均为50%,我至今仍然认为,在那种紧张且时间有限的情况下(本 ...

  8. IC/FPGA校招笔试题分析(一)

    某发科的一个题目,仅仅给出下面一个电路图,让你画出Q1,Q2以及Q3的波形,并描述电路功能. 可以看出,这个电路很简单(可tm的当时就是没做出来),我当时疑惑的是初值是什么,输入初值是什么? 可想想和 ...

  9. 【机密】数字IC后端笔试面试题库(附知识星球活动)

    [机密]数字IC后端笔试面试题库(附知识星球活动) 文章右侧广告为官方硬广告,与吾爱IC社区无关,用户勿点.点击进去后出现任何损失与社区无关. 最近很多公司的校招都陆续开始了,不知道今年应届生的小伙伴 ...

最新文章

  1. Shell编程日常积累_20160114
  2. UILable在Autolayout模式下面自动调节字体大小
  3. FTP软件VSFTP配置文件详解
  4. Linux查看tomcat 控制台输出命令, WebSphere中间件日志
  5. Intellij IDEA 的使用
  6. 执行删除操作返回没被删除的信息
  7. CodeForces - 1547G How Many Paths?(强联通缩点+拓扑)
  8. 母版页调用内容页的方法的简单实现
  9. excel 表格导入 - java 实现
  10. SharePoint 2013的100个新功能之搜索(一)
  11. 读书笔记 数据化营销
  12. 必 备 习 题 集 (五)
  13. 杀毒jwgkvsq.vmx
  14. 唠唠SE的IO-03——字符输入输出流
  15. Camtasia实用技巧之行为效果
  16. 当identity_insert 设置为off时不能为表_最近新get日志测试方法,再也不用为故障响应慢发愁!...
  17. QTP10.0的下载安装及所遇问题
  18. 植物大战僵尸2 android 修改,【图片】植物大战僵尸2常用修改教程【gg助手吧】_百度贴吧...
  19. transform: translateY(-100%)偏移实现上滑隐藏导航栏
  20. 神经网络学习——第一个代码学习

热门文章

  1. h3c交换机限制端口访问_H3C交换机端口限速和流量监管典型配置指导
  2. python输入exit怎么退出了_Python 中的 exit() 和 sys.exit()
  3. py文件打包或apk_Python文件打包成exe很简单,如果安卓手机也能运行的软件你会吗...
  4. mysql double 20_MySQL教程20-小数类型
  5. dts插件 foobar pan baidu_SU插件插件库安装教程
  6. 需要单机还是集群部署_5000W如何玩转Filecoin市场 部署最符合企业的集群模式
  7. 智能车竞赛技术报告 | 智能车视觉 - 武汉理工大学 - WHY
  8. 如何生成动态matlibplot动图?
  9. 清华校庆正当时,智能小车决赛日
  10. 2021年春季学期-信号与系统-第五次作业参考答案