FPGA原理与结构(8)——块RAM(Block RAM,BRAM)

系列文章目录:FPGA原理与结构(0)——目录与传送门

一、BRAM简介

        大家对于RAM应该并不陌生,RAM就是一张可读可写的存储表,它经常被拿来与ROM进行对比,相比之下,ROM只可读。而在FPGA中,RAM一般可以分成两种,一种是使用LUT资源组成的分布式RAM(DRAM),另一种就是块RAM(BRAM),这里我们讨论的是BRAM,关于DRAM的内容,可以阅读:FPGA原理与结构——分布式RAM(Distributed RAM,DRAM)

        BRAM就是嵌入在FPGA中的整块的RAM资源,是FPGA中重要的存储资源。在早期的FPGA架构中,基本上只使用基于查找表和触发器的逻辑块实现用户电路,可用作存储要素的就只有逻辑块中的触发器。因此很难在芯片上保存大量数据,而有这样需求的应用需要在FPGA上连接外部存储器。但是在很多情况下,FPGA和外部存储器的带宽会成为系统的瓶颈,从而限制整体性能。因此商用的FPGA架构在发展中开始集成高效的片上存储器。这就是我们BRAM的由来。

二、BRAM的特性和分布

        在xilinx 7系类的FPGA里,一个BRAM的大小是36Kb(这里的K代表的是1024,而不是1000),它也可以被拆分成2个独立的18Kb BRAM来使用,这就是xilinx 7系类里RAM的最小实现形式了。也就是说使用的BRAM在使用的时候必须是整块进行使用的,一块BRAM最小就是18Kb。举个例子,我们需要存储40Kb的资源,就需要使用:一块36Kb的RAM+一块18Kb的RAM,这样就造成了14Kb的资源浪费。

        两个相邻的RAM还可以组合来构成更大的RAM。

        每块36Kb的RAM根据深度和位宽的不同,可以配置成如下形式(深度×位宽):32K x 1, 16K x 2, 8K x 4, 4K x 9, 2K x 18, 1K x 36, or 512 x 72。

        每块18Kb的RAM根据深度和位宽的不同,可以配置成如下形式(深度×位宽):16K x 1, 8K x2 , 4K x 4, 2K x 9, 1K x 18 or 512 x 36。

        根据FPGA型号的不同,每块FPGA中蕴含的BRAM资源数量也是不一样的,用户可以根据自己的需求和成本选择最适合自己的型号,我们以下图为例,这只是xilinx的一部分型号对应的BRAM资源,可以看到不同的device对应的BRAM数量和分布情况有所不同。

         在如今xilinx的FPGA中普遍使用的是ASMBL架构,所以BRAM在FPGA也是按列分布的。

三、BRAM的使用 

        BRAM的作用是非常巨大的,也是具有一定复杂性的,BRAM可以被配置成RAM,ROM或者FIFO,我们一个一个来讨论。

1、RAM

        首先就是最直观的RAM的情况,但是就算是用作RAM,也有着许多不同的工作模式:

(1)Single Port :单口 RAM

        读写共用一个地址总线,在同一个端口,但是不能同时进行

 (2)Simple dual port:简单双口 RAM

         一个写通道,一个读通道,通过A端口写入数据的同时可以通过B端口读出数据

 (3)True Dual Port:真双口 RAM

         两个通道都支持读写,互相独立。A端口和B端口可同时读写数据

 2、ROM

         ROM其实也非常好理解,甚至是BRAM应用中最简单的部分,因为ROM可以理解成只具备读功能,不具备写功能的RAM。

(1)Single Port :单口 ROM

        不能写入,只有一个端口用于数据读

(2)Dual port:双端口 ROM

        不可写,但是有2个端口用于读,两个端口读取数据的位宽可以不同,但是必须是整数倍关系

3、FIFO

        FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,与普通存储器的区别是没有外部读写地址线,使用简单,缺点就是只能顺序读、写入数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。

        FIFO的作用:

                (1)不同时钟域之间的数据传输;

                (2)对不同宽度的数据位宽转换;

                (3)数据缓存

        根据FIFO工作的时钟域,可以将FIFO分为:

        (1)同步FIFO:读时钟和写时钟为同一个时钟,在时钟沿来临时同时发生读写操作。

               作用:位宽转换或数据缓存。

        (2)异步FIFO:读写时钟不一致,读写操作是互相独立的。

               作用:多比特数据跨时钟域。

 四、7系类BRAM的一些额外特性

1、可选输出寄存器

        BRAM的输出还内嵌了个寄存器,我们打拍输出的时候可以使用它,这样就能省下SLICE上的寄存器资源,而且就算我们使用SLICE的FF资源,会引入一个较大的时延,这样做还能降低时延问题。

2、BRAM的级联 

        在xilinx的FPGA里,2块相邻的BRAM可以在不消耗CLB资源的情况下就级联形成更大的RAM。任意两个相邻的BRAM都可以进行级联

五、为什么是最小是18kb

        在Xilinx FPGA中,块RAM(BRAM)的大小选择,如18KB,是基于多方面考虑的结果,包括技术限制、市场需求、设计灵活性以及与现有架构的兼容性等因素。尽管Xilinx没有公开详细解释为什么特定选择了18KB作为BRAM的大小,但我们可以推测这一选择背后的几个可能原因:

5.1 技术和制造的限制

  • 制造效率:在半导体制造过程中,对硅片空间的利用是一个重要考虑因素。18KB的大小可能代表了一种在提供充足的存储容量和保持良好的芯片制造效率之间的平衡。

  • 性能与功耗:BRAM的大小影响其访问速度和功耗。18KB可能是在满足大多数应用需求的存储容量和保持较低功耗之间的优化结果。

5.2 设计灵活性

  • 应用适应性:18KB的BRAM大小提供了足够的灵活性,能够适应各种不同的应用场景,从简单的缓存到复杂的数据结构存储等。它允许设计师根据需要将多个BRAM组合使用,以满足更大的存储需求。

  • 细粒度资源管理:通过提供18KB的BRAM单元,Xilinx FPGA允许开发者更细致地管理和优化他们设计中的内存资源。这有助于提高整个系统的效率和性能。

5.3 向后兼容性与标准化

  • 保持兼容性:在新的FPGA系列中采用18KB作为BRAM单元的标准大小,有助于保持与旧设计的兼容性,使得设计迁移和升级更加容易。

  • 行业标准:随着时间的发展,某些内存大小可能会成为设计中的非正式标准。虽然18KB可能起初是基于技术限制和性能优化的考虑,但它也可能适应了市场上常见的应用需求,从而成为了一种常见的配置选项。

        总而言之,18KB BRAM的选择反映了在满足广泛应用需求、优化性能和功耗、以及提供设计灵活性方面的综合考量。这样的设计决策使Xilinx FPGA能够适应各种不同的使用场景,同时保持高效的资源利用和良好的制造经济性。

  • 45
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
FPGA与高速ADC接口是数字信号处理系统中非常重要的一部分,它们可以帮助我们实现高速数据采集、数字信号处理、通信等功能。其中,ADC是数据采集的核心,采样率的高低决定了系统的性能,因此如何有效地与高速ADC接口是一个非常关键的问题。 本文将介绍一种基于Xilinx FPGA与高速ADC接口的实现方案,以250MSPS采样率的ADC9481为例。具体实现过程如下: 1.硬件连接 首先需要将ADC9481与FPGA进行连接。ADC9481有两组LVDS输出,每组包含14位数据和1位时钟。因此需要使用一对LVDS差分信号来传输一组数据和时钟信号,共需要8对LVDS差分信号。 2.时钟配置 ADC的采样率由时钟信号控制,因此需要配置FPGA的时钟使其与ADC时钟同步。ADC9481的时钟频率最高可达500MHz,一般使用LVPECL时钟驱动器来提供时钟信号。 在FPGA端,需要将时钟信号通过BUFG(全局缓存)引脚输入到FPGA的时钟管理单元(MMCM)中,使用MMCM生成与ADC时钟同步的本地时钟信号。 3.数据接收 ADC的数据输出是14位的差分数据,需要通过FPGA的差分输入接口进行接收。在FPGA端,可以使用选择器和寄存器来对数据进行处理和存储。选择器可以选择要写入哪个寄存器,而寄存器则用于存储ADC的采样数据。在这个过程中,需要注意选择器和寄存器的延迟时间,确保数据正常存储。 4.数据处理 ADC采样数据的处理包括去偏置、解码、滤波等操作。其中,去偏置是为了消除ADC的直流偏置,解码是将ADC的输出数据转换成相应的数字量,滤波则是为了去除高频噪声。 在FPGA端,可以使用DSP48E1模进行数据处理。DSP48E1模是Xilinx FPGA中的专用数字信号处理模,它可以进行加、减、乘、除、滤波等操作。在这个过程中,需要注意DSP48E1模的使用方法和相关参数的设置。 5.数据存储 最后,需要将处理后的数据存储到内存中。在FPGA端,可以使用Block RAM(BRAM)或FIFO等存储器来存储数据。其中,BRAM是单端口存储器,适用于小型数据存储;而FIFO是双端口存储器,适用于大型数据存储。 在存储数据时,需要注意存储器的读写时序和容量,确保数据能够正常存储。 通过以上实现步骤,就可以与高速ADC接口进行有效的数据采集和处理。当然,具体实现过程可能因硬件设备和应用场景而有所不同,需要根据实际情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

apple_ttt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值