异步FIFO在系统中的使用

来源:互联网 发布:爱家网源码 编辑:程序博客网 时间:2024/06/11 20:19
 在嵌入式系统中,我们一般使用具有较强处理能力的微处理器,配合使用嵌入式操作系统来实现项目或者产品的设计。但在实际设计硬件或者是系统硬件平台设计时,经常会使用一些低速率的器件/外设。而这这些低速设备对于微处理和操作系统而言是异步事件。因此,需要使用中断触发。

        对于带有操作系统与不带操作系统的系统比较,我们会发现,操作系统为我们的程序设计、维护和CPU的效率是带来了明显的好处和提高,但操作系统也降低了中断的处理效率(有操作系统的中断服务时间远大于不带操作系统的系统)。对于这个问题,我们可以从几个方面来弥补,其一,我们可以选用处理速率更块的处理器。其二,就是我们变相地提高中断的效率(减少中断次数,提高每次中断的数据读取量),但前提不影响系统要求。

        FIFO作为一种先进先出存储设备,异步FIFO具有读写分开独立的特点,适合于我们上面提到的低速率的器件/外设与嵌入式系统的接口。FIFO的总则是,输入和输出的平均速率一致,否则就出问题体了。对于异步FIFO,按输入输出平均速率一致的原则,当输入是低速率,而输出为高速率时,显然同样的数据量,输出的时间小于输入。因此,我们用异步FIFO来做低速外设与高速处理器之间的数据缓冲接口,在带操作系统的嵌入式系统中,可以降低外设备的中断申请次数,提高每次中断的数据采集量。

        例如:

        在MPEG-2编码芯片这样的外设,在保证DVD画质的情况,它的码率为4MKbps。在MPEG-2 over IP设备中,需要将图像码流通过TCP/IP协议送到以太网上。如果我们的CPU直接接收4Mbps的串行码流,一般的CPU是胜任不了这个工作的。但假如我们将数据通过硬件转换为32位宽度的数据,则速率降为128K。这时CPU读取这样的数据,则需要1/128K秒(7.62939453125微秒)中断一次,一次只能读32位。这种中断频率是操作系统一般不允许的。

        如果我们将转换为32位的128K速率的数据通过异步的FIFO,再和CPU相连。如果我们设置异步FIFO的深度为N个32位,则中断的频率为128K/N,中断周期为:N/128K。

          N数值     128    256    512   1024   2048   4096   ...

          中断周期:1ms    2ms    4ms    8ms   16ms   32ms   ...

        目前FPGA中带有的RAM可以作为异步FIFO,如果我们做一个32位宽度,1024为读取触发条件,因此中断的周期为8ms。

        如果将异步FIFO的读触发条件增大,到2048,则中断的周期时间为16ms。

原创粉丝点击