TCM和CACHE简述

CACHE的定义

Cache存储器,电脑中为高速缓冲存储器,是位于CPU主存储器DRAM(Dynamic Random Access Memory)之间,规模较小,但速度很高的存储器,通常由SRAM(Static Random Access Memory 静态存储器)组成。它是位于CPU与内存间的一种容量较小但速度很高的存储器。CPU的速度远高于内存,当CPU直接从内存中存取数据时要等待一定时间周期,而Cache则可以保存CPU刚用过或循环使用的一部分数据,如果CPU需要再次使用该部分数据时可从Cache中直接调用,这样就避免了重复存取数据,减少了CPU的等待时间,因而提高了系统的效率。Cache又分为L1Cache(一级缓存)和L2Cache(二级缓存),L1Cache主要是集成在CPU内部,而L2Cache集成在主板上或是CPU上。

CACHE的作用

问题:cpu工作速度非常快,而常见的主存(ddr之类的)是一些i/o设备,它们大多都是挂载在cpu的系统总线上的。I/O设备访问和响应比较慢,在需要读取程序和数据时,cpu需要等待外设。想想看吧,每访问一次内存都要等上几个机器周期,这可不是个好事~~~尤其是,这个“几”可不是简单的一位数,有些时候甚至能达到3位数。 这样会严重影响系统的性能。

解决办法: 使用cache (加一层缓存设备)

cache 直接耦合在cpu内部,访问时不需要通过系统中线访问,cpu和cach直接连接。cache时一种高速缓存设备,可以很快响应cpu的请求,这样很好的解决了上诉问题。我们把常用的数据放到Cache中,CPU在访问的时候直接访问Cache就行了,不用耗费时间去访问内存了。

事实上CPU就是这么做的。在读内存的时候,CPU首先读Cache,看看有没有它想要的数据的“副本”,有的话那就太好了,直接拿过去用。没有的话就只好费点功夫去读内存了。而在写内存的时候,CPU直接写到Cache中,而非直接写到内存中。Cache写满了之后,此时才将Cache中的数据更新到内存,同时清空Cache。就像寄信一样,所有的信件会首先攒到邮局,到达一定数量之后才会送出去。 不过这又出现一个问题:假如Cache中有某个内存数据的“副本”,那么CPU在读该内存的时候就会直接使用该副本而不用去读内存。那万一内存中的数据被改写,此时CPU再读该内存,读出来的岂不是那个旧的副本而不是最新的内存数据?同样,假如我想DMA一些数据,谁能保证此时内存中的数据就是最新的数据?很可惜,Cache是完全的黑箱。你不知道它的地址。你也无法直接访问它,但一般系统会提供函数进行cache回写和clear操作,比如

//将整个Data Cache更新到内存

void DC_FlushAll()

// 清空整个Data Cache void DC_InvalidateAll() 那么,什么时候使用这些函数呢? 在DMA之前,我需要保证数据源内存中的数据是最新的。所以此时需要Flush,从而使DC中的副本能够更新到内存中。 在DMA之后,我需要保证DC中的副本和内存中的数据是相同的。但是NDSLIB没有更新DC的函数,所以没办法,我们只能把DC中的副本杀掉。此时如果CPU访问内存,由于DC中没有副本,所以就只能直接从内存访问并将访问到的值作为DC中副本了。所以此时需要Invalidate

TCM定义

TCM (Tightly Coupled Memory),紧耦合存储器。是一种高速缓存,直接集成在cpu的内部。

分为ITCM(指令紧耦存储器)和DTCM(数据紧耦合存储器).

TCM的作用

问题:cache内部只存了部分主存的数据,当cpu访问的数据不再cpu内只能去访问主存。这整个过程人为很难干预,这是系统自动完成的功能,这就存在一种不确定性,cpu有可能访问cache也有可能是主存。 但是有一些固定的功能 例如中断函数,堆栈中的数据 ,我们想让一直存在缓存中,这样可以提高系统的性能。

解决:单独分配2块地方给这些模块,就是tcm

itcm内部放一些自己想要执行的代码 dtcm内部放一些数据。这些都是确定的cpu需要想用的程序和数据,他就直接访问tcm,直接在里边得出自己想要的指令和数据。

TCM对于以下几种情况的代码是非常有用、也是需要的:可预见的实时处理(中断处理)、时间可预见(加密算法)、避免cache分析(加密算法)、或者只是要求高性能的代码(编解码功能)。随着cache大小的增加以及总线性能的规模,TCM将会变得越来越不重要,但是他提供了一个让你权衡的机会 那么,哪一个更好呢?他取决于你的应用。Cache是一个通用目的的加速器,他会加速你的所有代码,而不依赖于存储方式。TCM只会加速你有意放入TCM的代码,其余的其他代码只能通过cache加速。Cache是一个通用目的解决方案,TCM在某些特殊情况下是非常有用的。假如你不认为需要TCM的话,那么你可能就不需要了,转而加大你的cache,从而加速运行于内核上的所有软件代码。

参考文章:ARM TCM简介_lvtingting2007的专栏-CSDN博客

关于DMA,TCM(ITCM和DTCM)和Cache的理解!_魏波-CSDN博主-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值