前言
本文首发:FPGA逻辑设计回顾(11)FPGA以及PC中的RAM与ROM
FPGA中使用的存储资源,例如前两篇文章讲的:
- FPGA逻辑设计回顾(10)DDR/DDR2/DDR3中的时序参数的含义
- FPGA逻辑设计回顾(9)DDR的前世今生以及演变过程中的技术差异
DDR也是计算机中的元素,当然在我们的FPGA中也广泛使用,在科普了它们的渊源,它们的基础知识后,我们便可以接着讲它在FPGA中的应用,它的使用方式,乃至它的设计等,这在后续的文章中会有所体现。
但你知道的,在FPGA设计中,存在着更多使用的小存储器,它们可以灵活的使用在你的FPGA逻辑设计中,甚至处处皆是!
杀鸡焉用牛刀,DDR的使用场景是对存储空间要求比较大等类似场景,如果是普通的存储场景,我们将会用到本文中所说的存储器件,RAM以及ROM。
本文从它们在电子产品中的应用到Xilinx的IP核逻辑设计来讨论RAM以及ROM的设计。
RAM以及ROM在计算机中的应用
在任何存储数据的电子设备中,如您的计算机,各种组件共同工作以存储内存。您的硬盘是您的主要存储设备,它保存着您的操作文件和个人文件,那里的信息量会影响您的计算机的速度。
幸运的是,您的系统还可以利用另外两种内存类型来保存您的信息,RAM和ROM。
在这里,我们将把电子存储作为一个整体来研究,然后讨论这两种类型的内存。我们将比较RAM与ROM的相似之处和不同之处,以帮助您更好地了解这些快速、临时的存储形式。
计算机中的RAM以及ROM
什么是存储器?
在讨论电子产品时,存储器通常指的是任何类型的电子存储。然而,最有可能的是,这个术语被用来讨论如何将您的数据保存在您的硬盘驱动器之外,以减少CPU为定期访问该数据所需的工作。
如果你的CPU总是直接通过你的硬盘驱动器来获取这些信息,你的计算机可能会急剧变慢,你可能会遇到性能问题。
相反,如果你使用RAM或ROM等存储选项,你的系统仍然可以访问这些数据,而不会出现运行时间慢的缺点。
什么是硬盘驱动器?
您的硬盘,有时也被称为硬盘驱动器,HD或HDD是您的计算机上的永久存储设备。它是非易失性的,这意味着它将存储信息,无论它是打开还是关闭。像您的系统设置或时区等信息在大多数计算机上都存放在这里。
您的硬盘由一个或多个磁头写入数据的盘子组成,它位于一个空气密封的外壳内,可以在电脑内部或外部。
如果外壳存储在内部,这些被称为内部硬盘,它们位于驱动器插槽内,并使用电缆直接连接到主板。外部,或外部硬盘通过USB端口插入您的计算机,是另一种方式来永久存储数据。
每台电脑都有一个硬盘,虽然你可以升级或从你的标准模型交换,但它将始终用于存储管理你的操作系统,关键软件程序和任何个人数据保存的文件。
其他类型的存储器
除了你的电脑需要的硬盘之外,还有另外两种存储器选择。让我们深入了解它们是什么,以便更好地理解RAM与ROM的区别。
什么是RAM?
RAM是随机存取存储器的首字母缩写,它是计算机上继硬盘之后的下一个最重要的存储设备。
RAM可以实时监控你的CPU,并在你使用时主动存储你正在使用的数据和程序。随机存取存储器上的信息可以在任何会话中反复写入、读取和擦除。
与你的硬盘不同,RAM被归类为易失性内存。这意味着,在没有访问电源的情况下,通过RAM存储的任何东西都会丢失。它不是一个永久的存储选项,尽管它比传统的硬盘驱动器快得多,但在RAM中保存任何关键文件或软件是不安全的,因为如果你失去电源,你可能会失去它。
幸运的是,在今天的计算机上设计现代操作系统的人明白,RAM可能是不稳定的。有许多故障保护的内置自动备份工作到硬盘驱动器,以帮助消除数据的损失,如果你的系统自动关闭。
一个很好的例子是,当你在Microsoft Word或Pages中创建的文档每隔几分钟就会自动保存一次,而不需要你保存文件来进行物理备份。
RAM的类型
RAM是一个广义的术语,包括两种不同类型的存储器。SRAM和DRAM。以下是您需要了解的每种类型。
SRAM
SRAM是一种广义的术语,包括两种不同类型的存储器:SRAM和DRAM。另一个缩写,SRAM指的是静态RAM,其工作原理是将部分数据存储在一个六晶体管的存储单元中。虽然SRAM的速度非常快,但它的价格也比DRAM贵得多。
DRAM
DRAM也叫动态RAM,它的工作原理是将数据存储在内存单元中。这些单元是由晶体管和电容器对组成的。
什么是ROM?
计算机上另一种值得注意的内存类型是只读存储器或ROM。
顾名思义,ROM只有在数据不是动态的时候才有用,但它比RAM有一个优势--它是非易失性的。这意味着,如果电源被切断,它不会忘记或丢失任何信息,这使得它是一个很好的选择,像固件或其他元素,很少得到更新,但太笨重,直接存储在你的硬盘驱动器。
传统上,ROM数据是在芯片生产和硬连接时添加的。然而,只读存储器已经发展起来了,现在有一些选项支持擦除和重写芯片上的数据。虽然它的效率不如RAM,但它是一种选择。
ROM的类型
与RAM一样,在您的系统中可能存在不止一种类型的ROM。以下是四种最常见的基于半导体的ROM的主要细节。
掩膜ROM
传统类型的ROM,这是一种在制造过程中写入数据的芯片,并永久地对信息进行编程。
PROM
可编程只读存储器芯片,或PROM,是指在系统中安装后,有数据写入。它是一种非易失性的,但也是可定制的选项。
EPROM(可编程只读存储器)
随着ROM的发展,可擦写可编程只读存储器选项,或EPROM的出现。您可以通过将该芯片暴露在高强度的紫外线下删除其上的信息,这样您就可以对数据进行重新编程。
EEPROM
最后一种类型,电子可擦除可编程只读存储器,或EEPROM使用场电子发射以电子方式擦除芯片中的数据。这是具有读/写能力的最有效的选择,但也是最昂贵的。
RAM和ROM的主要区别是什么?
很明显,RAM和ROM是两种不同的存储方式,下面我们就来分析一下它们的主要区别和你需要了解的地方。
数据存储
RAM数据不是永久存储在系统上的,它可以被无限期地改变。您可以根据需要多次读取、写入、擦除和重新开始。
相反,ROM数据是永久的。虽然有一些方法可以改变它,但这些功能是有限的,而且进行更改可能会很耗时。
速度
因为RAM数据不是永久的,所以它的速度很快。比ROM数据快得多,这意味着你的系统在使用RAM比ROM效率更高。
CPU访问
RAM速度如此之快的原因之一就是因为你的CPU是有线的,可以直接访问以这种方式存储的任何数据。
对于ROM来说,情况就不一样了。
要访问ROM信息,你的系统将首先把这些数据复制到RAM中,然后允许你读取它。
文件大小和存储量
RAM数据占用的空间大,但它的容量也比较大。另一方面,RAM占用的空间较小,但存储容量也较小。
如何使用
RAM是您的临时文件的主要内存,如您的CPU缓存或DRAM DIMM模块。
ROM最常用于诸如BIOS或UEFI固件、RFID标签、医疗设备或微控制器。基本上,任何地方都需要一个小型但永久的内存存储解决方案。
成本
在这两种ROM中,是目前最实惠的选择。由于额外的功能,RAM的成本明显更高,可以添加到您的系统中。
流行的ROM选项
鉴于ROM的局限性,你可能会怀疑它是否是一种值得使用的内存类型。值得注意的是,虽然它不具备RAM那样的功能,但也不是没有优点。
例如,大多数Flash存储器的可移动存储设备,如U盘、固态硬盘或SD卡,其实都是EEPROM存储设备。得益于我们前面提到的技术进步,这种只读技术的衍生物可以让你快速保存和访问那些不直接存于硬盘上的文件。
你也能够对这些驱动器进行更改,通过添加或删除文件,尽管这些上传和下载可能需要一些时间。也就是说,这些是一个非常便宜和可行的选择,可以给你更多的存储空间,如果你的电源意外断电,它不会消失。
最后的结论
当你比较RAM和ROM时,很容易看出它们都有各自的优点和缺点。你必须在电脑上同时安装这两种软件,才能保证电脑的高效运转。
ROM之所以脱颖而出,是因为它价格便宜,并且为你提供了一个永久的数据解决方案,但它在修改数据的能力和你可以进行更改的次数上也有限制。
RAM的成本较高,但它也为你提供了多次更改数据的灵活性,并且对这些更改没有任何限制。这里的缺点是,如果你的RAM曾经与电源分离,你可能会在途中丢失这些信息。
正确的解决方案是将两者结合起来,以满足你的处理需求量和你的预算。
RAM以及ROM在FPGA中的实现
FPGA内部有着丰富的存储资源,FPGA中实现RAM以及ROM有几种方式,通常情况下,我们会使用IP核的方式去使用FPGA的存储资源:
在FPGA的底层资源中,BRAM(Block RAM)位于其中,如下图为k7 FPGA中的BRAM的分布情况:
FPGA中的BRAM资源
如上图,所有箭头的那几列都是FPGA中的BRAM资源,可见有很多,具体量化需要根据不同型号的FPGA,BRAM资源也有所不同。
当然,在FPGA中,如果需要使用RAM,不一定非要使用BRAM,还是那句话,BRAM适合存储稍大的场合,至少平时小打小闹的使用,也可以使用Distributed RAM,就是分布式RAM,它在FPGA中使用LUT资源等来构成。当然也不是一定如此,有时还需要考虑资源平衡,例如FPGA中的LUT以及寄存器资源告急,而BRAM资源几乎使用量很少,这时候你就应该考虑下资源分配的问题了,BRAM资源你这么多,不用也白不用。
在IP核定制之前,就可以选择使用BRAM还是Distributed RAM:
分布式资源与块资源
当然,FPGA中的资源也可以灵活地配置为各种存储器,例如FIFO的定制,使用的存储资源可以是BRAM:
FIFO定制
当然,你具有选择自由,Distributed RAM也可以实现:
存储类型选择
至于ROM,当然也不例外,FPGA中没有专门的ROM,但是ROM可以使用bram或者分布式RAM实现:
ROM的内容可以通过COE文件来加载进去:
Rom的COE文件
但不同担心,虽然是有RAM来实现的,但FPGA上电后,ROM的内容还完好地保存着,不会因某一次的断电而丢失,这也符合ROM的内涵。
当然, ROM以及RAM的实现不仅可以使用IP核的方式实现,也可以使用RTL代码来描述,但是和之前的FIFO一样,我们的设计仅仅是为了理解其工作原理,实现的应用通常也不会使用,但可作为备选,究其原因,还是因为FPGA场景提供的IP经过了大量的验证,更加的稳定,且功能多,能够提高开发效率。
好了,这篇文章重点在于说明,而不是设计,关于设计,我们下篇文章见。