Xinlinx FPGA如何降低Block RAM的功耗

2024-05-03 14:28

本文主要是介绍Xinlinx FPGA如何降低Block RAM的功耗,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

FPGA中降低Block RAM的功耗有两种方式,分别是选择合适的写操作模式以及Block RAM的实现算法及综合设置。我们知道对于采用IP核生成对应的RAM时,会有最小面积算法、低功耗算法以及固定原语,但是采用最小功耗算法有时由于级联长度导致无法实现,我们可以通过综合选项得到一个折中的效果,下面将具体介绍。

一、写操作模式

之前我们介绍过BRAM的各种设计细节,可以参考如下文章:

Xinlinx FPGA内的存储器BRAM全解-CSDN博客

我们知道BRAM的写模式一共有三种:写优先、读优先、Nochange

NO_CHANGE模式下,在写操作期间输出锁存保持不变。如图所示,输出的数据仍然是之前的读数据,不受同一端口上的Write操作的影响。

在这里插入图片描述

这样就可以减少端口数据的翻转,从而达到降低功耗的目的。

二、实现算法及综合设置

在上面给出的文章中我们介绍了Block RAM一共有三种实现算法,分别是最小面积算法、低功耗算法以及固定原语算法。在这里我们简单介绍一下:

1.实现算法

  • 最小面积

最小面积算法使所用的BRAM原语数量最少,同时减少了输出多路复用

在这里插入图片描述

在3k×16RAM的实现中,我们用到了三个18Kb的RAM。为了能够形成对比,我们将3个1K×18的BRAM放在一列构成一个3k×16,如下图。

在这里插入图片描述

我们可以发现,在水平和垂直方向上两种方法构成的Memory长度一致,那最小面积是怎么体现出来的呢?这是因为在各个BRAM构成的RAM输出时,需要进行选择。比如对于最小面积算法,在输出时需要对上面2k×19的输出和1k×18的输出进行选择,因此只需要一个2选1多路复用器。那上面两个相邻的2K×19需要进行选择吗,其实是不用的,两个9bit宽的RAM共同构成了要输出的16bit,任何时候都是拼在一起的不需要选择。

  • 低功耗

低功耗算法可以最大限度地减少在读或写操作期间启用的原语数量。该算法没有针对面积进行优化,可能比最小面积算法使用更多的BRAM和多路复用器。

在这里插入图片描述

比如在上述3k×16的Memory中,3个1k×18的垂直方向排列,3个输出通过多路复用器输出到RAM外。当地址处于0-1k时只有上面一个RAM被启用,其余两个RAM不用使能,因此可以降低功耗。

  • 固定原语

固定原语算法允许选择单个BRAM原语类型。内核通过在宽度和深度上连接这个单一的原语类型来构建内存。固定原语算法提供了16kx1、8kx2、4kx4、2kx9、1kx18和512x36原语的选择。

在这里插入图片描述

在这里插入图片描述

2.级联高度cascade_height综合属性

从上面的介绍我们可以发现,低功耗算法实际上是将多个RAM进行级联得到的,下面我们以32K×32bit的RAM为例,通过设置综合属性cascade_height来控制BRAM的级联高度,我们分别设置级联高度为1、32和8,所得结果如图所示:

在这里插入图片描述

图中1和2的方式看似很像,那我们换个图来看看二者的差别:

在这里插入图片描述

对于cascade_height=1的情况,在每一次读写地址时,每一个BRAM均被选通使能;而对于cascade_height=32的情况,在任何一次读写操作中,均只有一个RAM被宣统其他块不被使用,因此可以降低功耗。

那这样的话是不是cascade_height级联高度越大越好?当然不是,因为级联数越大,级联长度就越长,尽管有专用的级联走线,但毕竟要跨过时钟域,有可能无法实现;并且由于布线带来的延迟也可能会对时序造成很大影响。于是就有了图三的情况,在每一时刻激活4个RAM,既减小了功耗,又能够使走线带来的影响较小。

3.ram_decomp综合属性

这一节我们介绍一下ram_decomp综合属性,以8K×36bit为例:

在这里插入图片描述

①和③的效果是一样的,我们来分析②和④,我们可以发现两者的级联数都是2,但是二者对RAM36B36E1的配置方式不同,一种将其配置为9bit位宽,一种将其配置为36bit位宽,那为什么采用ram_decomp="power"后的功耗更低呢?

这是因为在同一时刻,对于4K×9的实现方式来说,每一时刻会激活并排的4个RAM,而1K×36的实现方式每一时刻只用激活1个RAM即可。但是对于④这种方式来说需要更多的多路复用器,一方面它需要在一列的两个RAM中选择出一个RAM数据进行输出,另一方面他还需要从并排的同一列四个RAM中(因为可能需要输出的数据并不在第一个BANK的两个RAM中)选择一个RAM数据进行输出,会消耗更多的资源,面积相比之下会大于②这种实现方式。

下面给出上述四种方式的功耗和资源使用情况:

实现方式功耗BRAMsLUT
default0.597824
cascade_height=20.78886
ram_decomp=“power”0.597824
cascade_height=2 ram_decomp=“power”0.610890

这篇关于Xinlinx FPGA如何降低Block RAM的功耗的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/956953

相关文章

[Linux Kernel Block Layer第一篇] block layer架构设计

目录 1. single queue架构 2. multi-queue架构(blk-mq)  3. 问题 随着SSD快速存储设备的发展,内核社区越发发现,存储的性能瓶颈从硬件存储设备转移到了内核block layer,主要因为当时的内核block layer是single hw queue的架构,导致cpu锁竞争问题严重,本文先提纲挈领的介绍内核block layer的架构演进,然

word转PDF后mathtype公式乱码以及图片分辨率降低等一系列问题|完美解决

word转PDF后mathtype公式乱码以及图片分辨率降低等一系列问题|完美解决 问题描述 最近在投一篇期刊论文,直接提交word文档,当时没有查看提交预览,一审审稿意见全是:公式乱码、公式乱码、乱码啊!!!是我大意了,第二次提交,我就决定将word文档转成PDF后再提交,避免再次出现公式乱码的问题。接着问题又来了,我利用‘文件/导出’或‘文件/另存为’的方式将word转成PDF后,发现公式

FPGA编译与部署方法全方位介绍

FPGA编译与部署是FPGA开发中的核心环节,涉及从代码编写、调试到将设计部署到FPGA硬件的全过程。这个流程需要经过创建项目、编写FPGA VI、模拟调试、编译生成比特流文件,最后将设计部署到硬件上运行。编译的特点在于并行执行能力、定制化硬件实现以及复杂的时钟管理。通过LabVIEW的FPGA模块和NI硬件,可以快速完成开发和部署,尤其适用于复杂控制与高性能数据处理系统。 1. FPG

FPGA开发:条件语句 × 循环语句

条件语句 if_else语句 if_else语句,用来判断是否满足所给定的条件,根据判断的结果(真或假)决定执行给出的两种操作之一。 if(表达式)语句; 例如: if(a>b) out1=int1; if(表达式)         语句1; else         语句2; 例如: if(a>b)out1=int1;elseout1=int2; if(表达式1) 语句1; els

FPGA开发:模块 × 实例化

模块的结构 对于C语言,其基本单元为函数。与此类似,Verilog的基本设计单元称之为"模块"(block)。对于整个项目的设计思想就是模块套模块。 一个模块由两个部分组成:一部分描述接口,一部分描述逻辑功能。 每个Verilog模块包含4个部分:端口定义、IO说明、内部信号声明、功能定义。且位于module和endmodule之间,如下: module block(a,b,c);inpu

JobScheduler 调用导致的运行时长30分钟的功耗问题

一、SDK 的使用情况与功耗影响 案例是否导致功耗变大onStartJob return true 且子线程没有调用jobFinished()告知系统功耗变大,最长带来30分钟的partial wakelock 长持锁onStartJob return true 且子线程调用jobFinished()告知系统功耗有影响,主要线程执行时长,标准是30秒内onStartJob return fals

LabVIEW环境中等待FPGA模块初始化完成

这个程序使用的是LabVIEW环境中的FPGA模块和I/O模块初始化功能,主要实现等待FAM(Field-Programmable Gate Array Module,FPGA模块)的初始化完成,并处理初始化过程中的错误。让我们逐步分析各部分的功能: 1. Wait for FAM Initialization框架 此程序框架用于等待I/O模块成功初始化。如果在5秒钟内模块没有完成配

新型 RAMBO 侧信道攻击通过 RAM 无线电波泄露数据

内盖夫本·古里安大学的研究人员发现了一种从隔离系统中泄露敏感数据的方法。 引入了一种称为 RAMBO(基于 RAM 的电磁隐蔽通道)的新型攻击技术。 该攻击利用计算机 RAM 产生的电磁辐射,使攻击者能够窃取加密密钥、密码、生物特征数据和文件等信息。 即使在系统与外部网络物理隔离的环境中,这种攻击也能实现。 信息泄露速度达 7.5 kB/分钟 该研究由 Morde

FPGA随记——小说 可综合和不可综合

当然我在网络上找到了些可综合和不可综合的解释 感觉也很有参考价值: https://wenda.so.com/q/1378362174074040 综合就是把你写的rtl代码转换成对应的实际电路。 比如你写代码assign a=b&c; EDA综合工具就会去元件库里拿一个二输入与门出来,然后输入端分别接上b和c,输出端接上a 假如你写了很多这样的语句 assign a=b&c; assig

block对变量捕获的方式

之前见很多文章对block捕获变量的方法,会进行诸如此类的描述:“block会捕获被引用的变量, 并对其进行copy操作, 因此, 可能会导致其引用计数加1,如果处理不好, 可能因循环引用导致内存泄漏。” 实际上, 这种说法并不严谨。block对变量的捕获, 根据变量类型的不同,会采用不同的捕获方式。 (1)静态或者全局变量, 在block中直接是指针传递的方式传入block中,对其进行的操作