FIFO例题及解析 fifo采集 原理

1、FIFO在数字系统中的作用是什么?【FIFO例题及解析 fifo采集 原理】   FIFO 简介 由于电子技术的飞速发展 , 新一代FIFO芯片容量越来越大 , 体积越来越小 , 价格越来越便宜 。作为一种新型大规模集成电路 , FIFO芯片以其灵活、方便、高效的特性 , 逐渐在高速数据采集、高速数据处理、高速数据传输以及多机处理系统中得到越来越广泛的应用 。在系统设计中 , 以增加数据传输率、处理大量数据流、匹配具有不同传输率的系统为目的而广泛使用FIFO存储器 , 从而提高了系统性能 。FIFO存储器是一个先入先出的双口缓冲器 , 即第一个进入其内的数据第一个被移出 , 其中一个存储器的输入口 , 另一个口是存储器的输出口 。对于单片FIFO来说 , 主要有两种结构:触发导向结构和零导向传输结构 。触发导向传输结构的FIFO是由寄存器阵列构成的 , 零导向传输结构的FIFO是由具有读和写地址指针的双口RAM构成 。FIFO 功能 FIFO存储器是系统的缓冲环节 , 如果没有FIFO存储器 , 整个系统就不可能正常工作 , 它主要有几方面的功能: 1)对连续的数据流进行缓存 , 防止在进机和存储操作时丢失数据; 2)数据集中起来进行进机和存储 , 可避免频繁的总线操作 , 减轻CPU的负担; 3)允许系统进行DMA操作 , 提高数据的传输速度 。这是至关重要的一点 , 如果不采用DMA操作 , 数据传输将达不到传输要 , 而且大大增加CPU的负担 , 无法同时完成数据的存储工作 。因此 , 选择合适的存储芯片对于提高系统性能很重要 , 在以往的设计中经常采用的是“乒乓型”存储方式 , 这种方式就是采用两片存储器 , 数据首先进入其中一片 , 当数据满时再让数据进入第二片存储器 , 同时通过逻辑控制 , 将第一片存储器中的数据取走 , 以此类推 , 两片轮流对数据进行缓存 。这种方式有着较明显的缺点 , 首先是控制复杂 , 要有专门的逻辑来维护这种轮流机制;其次 , 数据流的流向要不断变化 , 限制了数据流的速率 , 还容易产生干扰 。从数据传输上说 , 缓存芯片容量越大 , 对后续时序要就越低 , 可减少总线操作的频次;但从数据存储上说 , 就意味着需要开辟更大的内存空间来进行进行缓冲 , 会增加计算机的内存开销 , 而且容量越大 , 成本也越高 。因此 , 在综合考虑系统性能和成本的基础上 , 选择满足系统需要的芯片即可 。我 。。知 。。道 加 。。我 。。。。聊

2、FIFO原则是什么?   我好像在一些有关物流管理方面的书上看到过 好像是说仓库货品的先进先出的操作方式 fifo: 全称first in, first out , 先进先出 。lifo: 全称last in, first out , 后进先出 。lifo和fifo是存货的两种计量方法 , 在通货膨胀的情况下 , lifo和fifo对期末存货的计价和当期成本利润的影响是完全不同的: lifo:由于发出的存货是按最新的采购价格(较高)计量的 , 发出的价格高 , 库存的价格低 , 所以期末账面存货价值就相对低了 。在通货膨胀的情况下这种方法是最符合谨慎性原则的 。fifo:由于发出的存货是按最初购买价格计量的 , 库存的价格是相对最新的 , 所以期末账面存货价值就相对高估了 。

3、研华数据采集卡使用FIFO , 有什么用?   高速采样速度很快 , 计算机处理速度跟不上 , 所以把数据放到一个空间 , 计算机每次都去读这个空间 , 这样就可以采集到更高精度的数值 。搜一下:研华数据采集卡使用FIFO , 有什么用?

4、FIFO算法的解释   /*我知道FIFO算法的原理 , 可还是不理解这代码 , 哪位高手指教下各个程序段的意思啊?不胜感激! */ #include <> #include <> #define mSIZE 3//分配三个内存页框 #define pSIZE //总共个进程 static int memery[mSIZE] = {0}; static int process[pSIZE] = {,,,};//页面访问序列 void FIFO(); int main() { get(); printf(\n(FIFO)\tcount\n); FIFO(); system(PAUSE); return 0; } get() { int w[]={,,,}; //需要访问的资源序列 int i,n; for(i=0;i<;i) //输出序列 { printf(%d ,w[i]); } } void FIFO() { int time[mSIZE] = {0}; //分配的三个页框初始化为0 int i = 0, j = 0; int m = 1, n = 1; int max = 1,maxtime = 0; int count = 0; for(i = 0; imaxtime) { maxtime = time[j]; //将存放最长时间资源的计数器的值赋给maxtime max = j; } } if(n == 1) //由于没有在页框中找到所需资源 , 并且也表已满 , 发生缺页中断 。{ if(m != 1) { memery[m] = process[i]; //没有替换的资源 , 则它对应的计数器加一 time[m] = 0; for(j = 0;j <= m; j) { time[j]; } m = 1; } else { memery[max] = process[i]; //发生缺页中断 , 从前面的标记中寻找第一个进入页表的资源替换 time[max] = 0; //替换后原来的最长则清0 ,  for(j = 0;j < mSIZE; j) { time[j]; //替换后 , 此资源对应的计数器加一 } max = 1; maxtime = 0; count; } } else { memery[n] = process[i]; for(j = 0;j < mSIZE; j) //一次分配对所有在页表中的资源的计数器加一 { time[j]; } n = 1; } for(j = 0 ;j < mSIZE; j) { printf(%d ,memery[j]); //输出此次资源访问时页表中资源的情况 。} printf(\t%d\n,count); } }

5、FIFO和双口RAM有什么区别?   在测控、仪器仪表、语音信处理和图像通信领域中往往需要多处理器分工完成数字信处理(DSP)算法和与外部系统的通信、控制、数据采集和人机接口功能 。在多机系统中 , CPU之间的通信常采用以下几种方式:()利用共享式存储器实现 。DMA方式就是其中的一种 , 能够达到数据的高速传输 , 但不能同时访问存储器 , CPU必须等待总线 , 而且有些CPU不支持DMA功能 。另一种是利用多端口存储器 , 双口RAM和FIFO是常用的两种多端口的存储器 , 允许多CPU同时访问存储器 , 大大提高了通信效率 , 而且对CPU没有过多的要 , 特别适合异种CPU之间异步高速系统中 。因此 , 受到硬件设计者的青睐 。双口RAM是常见的共享式多端口存储器 , 以图1所示通用双口静态RAM为例来说明双口RAM的工作原理和仲裁逻辑控制 。双口RAM最大的特点是存储数据共享 。图1中 , 一个存储器配备两套独立的地址、数据和控制线 , 允许两个独立的CPU或控制器同时异步地访问存储单 。既然数据共享 , 就必须存在访问仲裁控制 。内部仲裁逻辑控制提供以下功能:对同一地址单访问的时序控制;存储单数据块的访问权限分配;信令交换逻辑(例如中断信)等 。FIFO(First In First Out)全称是先进先出的存储器 。先进先出也是FIFO的主要特点 。FIFO只允许两端一个写 , 一个读 , 因此FIFO是一种半共享式存储器 。在双机系统中 , 只允许一个CPU往FIFO写数据 , 另一个CPU从FIFO读数据 。而且 , 只要注意标志输出 , 空指示不写 , 满指示不读 , 就不会发生写入数据丢失和读出数据无效 。本文介绍了以双口RAM和FIFO为例 , 利用多端口存储器设计多机系统 。现对双口RA几FIFO比较如下:(1)FIFO的仲裁控制简单 , 但其容量不如双口RAM 。由于先进先出的特点 , 特别适合数据缓冲和突发传送数据 。某些芯片的内部就集成小容量FIFO , 例如 , DSP的同步串口就集成两个FIFO , 用于接收和发送数据缓冲 。双口RAM的仲裁逻辑比FIFO复杂 , 但其容量较 大 。由于存储数据完全共享 , 适用于双机系统的全局存储器和大容量数据存储共享 , 例如大容量磁盘的数据缓存可采用双口RAM 。(2)FIFO只给外部提供一个读和一个写信 , 因此CPU用一个I/O地址便可读或写FIFO , 使硬件趋于简单 , 给编程也带来一些方便 , 但CPU不能对FIFO内部的存储器进行寻址 。双口RAM由于有两套地址线 , 使硬件较FIFO复杂 , 但允许CPU访问内部存储单 , 因此CPU之间可以自己定主和分配数据块以及数据单 , 使软件设计更加灵活 。在异种机系统设计中 , 利用双口RAM和FIFO能够实时、快速、灵活和方便地进行相互通信 , 得到满意的效果 。fpga里只有ram和逻辑单 。没有fifo模块 当你在fpga里选择实现一个fifo时 , 其实只是选了一块和fifo一样大小的ram , 然后工具自动会帮你加上外围逻辑来实现一个fifo的功能 。

    推荐阅读