(翻译)FIFO In Hardware

翻译一些自己觉得有价值的材料,工作中碰到英语大多数是读,基本没有写或者翻的,翻得不好不到位的敬请指摘。

同时也附原文以供参考。

http://electronics.stackexchange.com/questions/97280/trying-to-understand-fifo-in-hardware-context

翻译:

Wiki定义FIFO in electronics如下:

FIFO常被用于电路缓冲及计算机软硬件的流量控制。在硬件方面,FIFO主要包含一组读写指针,存储器和控制逻辑。

FIFO,先进先出,数据从一端塞进去,从另一端取出来。可存储的数据量有一个上限。

然而,在硬件的内存地址中实际移动数据代价高昂。比较好的方式是,通过控制接下来要读和写的地址,使得使用这些内存地址如同在一段循环的缓冲队列一样。这些地址分布在寄存器中,常被成为读指针和写指针。

下图是一份8个地址FIFO的简要说明:

下个接受的字将被写在地址1(写指针所指向的位置),然后写指针+1指向地址2。下一个读请求取出地址5里的值(读指针所指向的位置),然后读指针+1指向地址6。在这个例子中,这些地址是环状的,地址7再加1会回到地址0。

完善的FIFO系统需要检测空状态和满状态。对此有不同的实现方式。一个单独的寄存器可以用来记录此FIFO中有多少个word,上图中为4个。(这种方式你会使用一个额外的word或预留一个不用的word,可能还需要知道总量?

另一个有用的方式是比较读指针和写指针。例如,两个指针相等则FIFO为空状态,写指针比读指针小1则为满状态,注意这种实现方式为留下一个不会被使用的word。(这种方式你会浪费一个word,想想其实跟第一种方法差不多

这样能够避免读写冲突,不用在读写间加互斥锁。

原文:

Wikipedia defines the FIFO in electronics as under:

FIFOs are commonly used in electronic circuits for buffering and flow control which is from hardware to software. In its hardware form, a FIFO primarily consists of a set of read and write pointers, storage and control logic.

A FIFO is a First In First Out memory. You can think of data being shifted in one end and shifted out the other, with the amount of data in the FIFO being allowed to grow up to some maximum limit.

However, actually shifting data around in memory is costly to do in hardware. A better way is to use a memory more normally but make it look like a circular buffer by manipulation of the next address to write to and read from. These addresses live in separate registers, and are often called the read pointer and the write pointer.

Here is a illustration of the state for a simple FIFO using a 8-word memory:

The next incoming word will be written to the empty word at address 1 (the value of the write pointer), then the write pointer incremented to 2. The next read request will fetch the word at 5 (the value of the read pointer), then the read pointer is incremented by 1. In this example, the addresses are automatically circular if the pointers are 3 bits wide. Adding 1 to 7 yields 0 in 3-bit unsigned math.

Complete FIFO systems need ways to indentify the full and empty conditions. There are various schemes for this. A separate register could be used to keep track of how many words are in the FIFO, which is 4 in the snapshot shown above.

A useful scheme for a firmware implementation is to compare the read and write pointers. You could, for example, decide that both pointers equal is FIFO empty, and write one behind read (after wrapping) is FIFO full. Note that such schemes will leave one word of the FIFO unused. You end up spending a piece of state somewhere to allow detection of full and empty, whether that‘s a separate register or a unusable word in the FIFO. The advantage of this scheme is that reads and writes can happen independently without conflict, so such a FIFO doesn‘t need a mutex between reading and writing. For example, you don‘t have to disable interrupts when reading because no harm is done if a interrupt routine pushes a word onto the FIFO while foreground code is trying to read.

时间: 2024-11-03 16:44:37

(翻译)FIFO In Hardware的相关文章

还在吐槽翻译的外版书质量差吗?谈谈我个人的理解

很难想象哪个学习计算机技术的人是没看过这方面书籍的,如果只是在网上看看技术贴,那样得来的知识绝对是离散的,不系统的.而要真正学好一门学问(比如一门计算机语言或者一门技术),一本好书的作用是不言而喻的.很多人抱怨国人在技术图书方面抄来抄去,不求甚解,虽然出版图书者甚众,但最终成为精品者却凤毛麟角.于是,更多读者热衷于外版书.但显然,并非所有国人的外语水平都足以在阅读原版书籍时毫无障碍.那么退而求其次,寻求翻译版就成为一种看似不得已的选择. 不幸的是,网上对于翻译版书籍的吐槽可以说从未消停.我也看过

(翻译)网络安全书籍推荐列表

看到作者列出的书籍列表,对于信息安全的初学者来说,能很好的选择教材,鉴于只有英文版,我尝试翻译成中文以供参考,初次翻译,翻译的不好请见谅. 原文链接:http://dfir.org/?q=node/8/ 注:对于所有的书籍链接,我都会寻找中文版重新链接,如无中文版,则按原文链接英文版.并且所有书籍名称保留英文名称 这是一个我建立的一个有关计算机安全的书籍列表,它们都是很有用的“计算机安全”这个主题的相关数据.包括:数字取证. 事件响应, 恶意软件分析和逆向工程.书籍的范围从入门教材到高级的研究课

U-Boot的README文件的中文翻译

都说看源码前先看README,诚不我欺啊,在拿到新代码前的原本一头雾水都可以通过质量好的README,以达到神清目明.一个README几千行的英文说明,翻译起来费时又费力,故我翻译README前部分章节,先抛个砖. ==================================================== # # (C) Copyright 2000 - 2013 # Wolfgang Denk, DENX Software Engineering, [email protecte

[nRF51822] 3、 新年也来个总结——图解nRF51 SDK中的Button handling library和FIFO library

:本篇是我翻译并加入自己理解的nRF51 SDK中按钮相关操作的库和先进先出队列库.虽然是nRF51的SDK,但是通过此文你将更多地了解到在BSP(板级支持)上层嵌入式程序或OS的构建方法. 1.按钮相关操作库 按键管理程序是通过GPIO事务和事件管理程序来检测一个按钮是否被按下的.当然,其中也做了消抖的工作——在GPIOTE事件中启动一个定时器用来延时一段时间,当该定时器失效后如果按钮仍然处于按下状态,则会产生一个按钮事件.如果在延时的过程中又有一个新的GPIOTE,那么这个定时器会重新被启动

【翻译自mos文章】使用Windows操作系统的Dell Pcserver,Oracle db报错:ORA-8103

翻译自mos文章:使用Windows操作系统的Dell Pcserver,Oracle db报错:ORA-8103 ORA-8103 using Windows platform and DELL servers (Doc ID 1921533.1) Applies to: Oracle Database - Personal Edition - Version 11.1.0.6 to 12.1.0.2 [Release 11.1 to 12.1] Oracle Database - Stand

Verilog基础知识7(FIFO深度计算)

需求说明:Verilog设计 内容       :第一部分 FIFO深度讨论                   第二部分 FIFO深度计算 来自       :时间的诗 第一部分 FIFO深度讨论 原文:http://comm.chinaaet.com/adi/blogdetail/37555.html 其实很惭愧,在这之前用FIFO都是直接用IP,因为应用场景很简单,因此FIFO深度的选择也比较随意,并没想很多.今天在网上看到一个异步FIFO深度计算的题目,发现对于这块并不熟悉,因此注意了下

Embedded Android 协同翻译

如果你有一定的Android的基础和英语基础, 有愿意贡献开源社区的心, 如果你对以下目录感兴趣, 欢迎加入我们协同翻译<Embedded Android> 此次协同翻译,将使用github的形式,请您务必有一个github的账号. co-work QQ群:15997841 1,The Content 1  Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

【翻译自mos文章】私有网络所用的协议 与 Oracle RAC

说的太经典了,不敢翻译,直接上原文. 来源于: Network Protocols and Real Application Clusters (文档 ID 278132.1) PURPOSE ------- Purpose of this document is to give DBAs and Systems Administrators interested in Real Application Clusters an overview and a comparison of netwo

【翻译自mos文章】在win2003 sp1下,遇到无法解释的数据库性能下降

翻译自mos文章:在win2003 sp1下,遇到无法解释的数据库性能下降 Unexplained Database Slowdown Seen on Windows 2003 Service Pack 1 (Doc ID 464683.1) Applies to: Oracle Server - Enterprise Edition - Version 9.2.0.1 to 11.1.0.6 [Release 9.2 to 11.1] z*OBSOLETE: Microsoft Windows