Cache基础知识OR1200在ICache一个简短的引论
以下摘录《步骤吓得核心——软-core处理器的室内设计与分析》一本书
12.1 Cache基本知识
12.1.1 Cache的作用
处理器的设计者通常会声称其设计的处理器一秒钟能做多少次乘法、每条指令仅仅占用xx个时钟周期,但是当我们实际使用处理器时,就会发现并非那么回事。比方在第11章,从图11.8中能够发现,当程序运行在简单SOPC上时。原先设计在运行阶段仅仅须要一个时钟周期的指令l.movhi却使用了6个时钟周期才完毕运行。造成实际情况与设计不符的原因是因为实际情况是一个由多个模块、设备组成的系统。读者朋友应该都知道“短板效应”,一个水桶能装载的最大水量取决于组成水桶的最短木板的长度。相同。当其余模块速度非常慢时,即使处理器速度非常快,整个系统的速度也不会快。当中影响系统速度的一个重要模块就是存储器,第11章的简单SOPC就是因为从存储器取指须要多个时钟周期导致处理器暂停以等待指令取到,从而使得l.movhi指令用了多个时钟周期才运行完毕。
处理器的工作频率一直都在突飞猛进。可是存储器(包括内存、硬盘等)的工作频率却增长缓慢。事实上也能够将程序、数据都存储在处理器内部的存储空间中(就像本书第2章建立的最小系统,其将程序、数据都存放在OR1200内部的QMEM中。所以能够实如今一个时钟周期内读取指令,两个时钟周期内读取存储数据)。可是处理器内部的存储空间可谓寸土寸金,为了在价格和性能之间找到一个平衡,现代计算机一般採用多级存储层次,如图12.1所看到的。硬盘是最廉价的,所以能够使用大容量的硬盘,可是速度是最慢的。Cache通常是处理器内部的SRAM。成本最高,能够使用的容量有限。可是速度非常快,一般能够在一个时钟周期完毕訪问;内存位于两者之间,速度上优于硬盘,但不如Cache,成本上优于Cache,但不如硬盘。
在Cache中存放的是近期訪问的或者可能即将訪问的数据(此处的数据包含指令、数据),CPU须要数据时,首先在Cache中查找,假设在Cache中找到须要的数据,就直接訪问Cache中的数据,假设在Cache中没有找到须要的数据,那么再到内存中查找。查找结束。将查找到的数据及其附近数据存放到Cache中,这样下一次查找相同内容或者附近内容时就能够在Cache中找到。
Cache提高处理器性能是利用了程序的局部性原理,包含时间局部性、空间局部性,例如以下:
- 时间局部性:假设某个数据被訪问,那么在不久的将来它非常可能再次被訪问,典型的样例就是循环,循环体代码被处理器反复运行,直到循环结束。第一次訪问循环体代码时会从内存中读取,同一时候将该代码存放到Cache中。这样在后面的循环中CPU都可以在Cache中查找到所需代码,从而加速了取指过程
- 空间局部性:假设某个数据被訪问。那么与它临近的数据非常可能非常快被訪问,典型的样例就是数组,数组中的元素经常依照顺序依次被程序訪问
12.1.2 Cache的结构与工作过程
Cache是依照块进行管理的。内存被切割成大小同样的块。数据以块为单位调入Cache,Cache中设有一个文件夹表,该表的项称为line,line相应于内存中的一个块,包含该内存块的块地址高位部分,称为标识。line中还包含该内存块的内容,以及是否有效标志位V。如图12.2所看到的。图中如果内存块大小是16字节、文件夹表有512个line,此时也称为有8KB
Cache。
从12.1.1节对Cache作用的描写叙述可知。Cache涉及到的主要操作就是查找、存放。查找操作就是给出一个地址推断该地址相应数据是否在Cache中。存放操作就是将从内存中读取的数据放到Cache中,这两个操作引入了两个问题:
(1)当把数据调入Cache时。放在文件夹表的哪个位置?
(2)Cache是怎样通过文件夹表查找数据的?
上述两个问题的不同解决方法形成不同的Cache映射方式,有三种Cache映射方式:全关联映射、直接映射、分组关联映射。这一点与MMU的映射方式是一样的,在OR1200处理器中仅仅实现了直接映射方式。所以本书也仅仅介绍直接映射方式。读者朋友能够查阅书籍了解其余Cache映射方式。直接映射是指内存中的每个块仅仅能被放置到Cache中唯一的一个位置,这样方便查找。採用直接映射时。Cache查找过程如图12.3所看到的,此处还是如果内存块是16字节,Cache中文件夹表有512个line。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpc2hhbmd3ZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
送入Cache中要查找的数据地址通常是物理地址(比方:在OR1200中Cache位于MMU之后,所以送入Cache的是物理地址),因为块大小是16字节,Cache中有512个line,所以使用该物理地址4-12位的值作为索引读出相应line。将line中的标识与物理地址的高19位比較,假设相等,且line中的标志位V为1。则Cache命中(Cache
hit),反之Cache失靶(Cache miss)。
当Cache命中且为读操作时。根据物理地址的低4位(即块内偏移)从line的16字节数据中读出相应的数据返回给处理器。当Cache失靶且为读操作时,须要从内存中读出相应地址的数据以及与其处于同一个内存块的数据,将须要的数据送往CPU,同一时候将全部读出的数据写入Cache,要写入的文件夹表索引由地址的4-12位决定。
从上述过程能够更深刻的理解直接映射:直接映射方式中。内存的每个块仅仅能被放置到Cache唯一的一个位置。
假设处理器要运行写操作。而且要写的目的地址在Cache中能找到,称之为写命中。当处理器改动了Cache中的数据,内存中相应的数据怎样改变,这涉及到写策略。经常使用的有通写法(Write
through)、回写法(Write back)。不同的写策略决定了Cache不同的工作方式。在下一章剖析DCache时会具体说明。
12.2 OR1200中Cache简单介绍
OR1200处理器採用Harvard结构,具有分开的指令Cache(ICache)、数据Cache(DCache)。參考图1.6可知ICache位于IMMU之后、DCache位于DMMU之后。所以送入ICache、DCache的地址都是物理地址。
ICache仅仅有读操作,可是DCache可读可写。DCache涉及到写操作时的情况,较复杂,所以笔者分开分析。在本章仅仅剖析ICache。在下一章剖析DCache。
ICache涉及到的宏定义例如以下。从中可知ICache可以配置为512B、4KB、8KB、16KB、32KB。默认是8KB。本章採用默认配置,后面分析时不再反复说明。
此时内存块是16字节,採用直接映射。ICache文件夹表有512行,因此使用地址的4-12bit作为ICache文件夹表的查找索引。
or1200_defines.v
//`define OR1200_NO_IC //是否有ICache。默认是凝视掉,也就是有ICache //`define OR1200_IC_1W_512B
//`define OR1200_IC_1W_4KB
`define OR1200_IC_1W_8KB //配置ICache的大小。默认是8KB
//`define OR1200_IC_1W_16KB
//`define OR1200_IC_1W_32KB `ifdef OR1200_IC_1W_32KB //假设配置ICache是32KB。那么内存块大小是32字节
`define OR1200_ICLS 5
`else
`define OR1200_ICLS 4 //其余情况下,内存块大小都是16字节
`endif `ifdef OR1200_IC_1W_8KB //假设配置ICache为8KB,那么一些宏定义例如以下
`define OR1200_ICSIZE 13 //ICache是8KB。所以地址宽度是13
`define OR1200_ICINDX `OR1200_ICSIZE-2 // 11
`define OR1200_ICINDXH `OR1200_ICSIZE-1 // 12
`define OR1200_ICTAGL `OR1200_ICINDXH+1 // 13 //13位地址中的高9位是ICache文件夹表的索引
`define OR1200_ICTAG `OR1200_ICSIZE-`OR1200_ICLS //标识的宽度,包含物理地址的高19位、有效标志位V
`define OR1200_ICTAG_W 20
`endif
版权声明:本文博客原创文章,博客,未经同意,不得转载。
Cache基础知识OR1200在ICache一个简短的引论的更多相关文章
- Saiku一个简短的引论
一个简短的引论 Saiku成立于2008年,通过Tom Barber和Paul Stoellberger研究. 最初叫Pentaho分析工具.最初是基于OLAP4J图书馆的使用GWT采用前端分析工具包 ...
- vue3 自学(一)基础知识学习和搭建一个脚手架
两年前曾自学过几天vue,那时候版本还是vue2,但后来项目中一直没用到,当时也觉得学习成本太高,便没有继续学习下去.初学者可以看下链接文章以前的吐槽~~ 学习 Vue ,从入门到放弃 最近部门决定升 ...
- 【基础知识】列一下一个.Net WEB程序员需要掌握的知识
基础部分 C# 基础语法 OOP的概念,面向对象的理解 继承 封装 多态 ASP.NET MVC (Web Form 用的越来越少,如果你不熟悉,可以不看) JavaScript 基础语法 如何在HT ...
- C#基础知识-使用XML完成一个小程序(十一)
上一篇中讲到XML基本的结构,还有增删改查的方法,这一篇中我们就来利用XML来完成一个简单的订单系统,主要是实现一个简单学生名单的增删改查,如果想要应用到实际的环境中建议考虑数据量的问题,如果数据量大 ...
- Canvas基础知识总结之中的一个
canvas的HTML语法: <canvas> Canvas not supported </canvas> 上面这句代码中内容部分所含的文本,这种文本的叫法"后备内 ...
- Mybatis之ResultMap一个简短的引论,关联对象
基础部分能够查看我的还有一篇博客http://blog.csdn.net/elim168/article/details/40622491 MyBatis中在查询进行select映射的时候.返回类型能 ...
- Hibernate一个简短的引论
我们从几个方面进行阐述Hibernate When? What ? How? When? Hibernate由来是因为当时EJBBean1.1在处理entittBean架构时,花费的时间要比业务逻辑很 ...
- Jsoup一个简短的引论——采用Java抓取网页数据
转载请注明出处:http://blog.csdn.net/allen315410/article/details/40115479 概述 jsoup 是一款Java 的HTML解析器,可直接解析某个U ...
- Spark第一个研究笔记1一片 - Spark一个简短的引论
该公司推出的在线项目Spark拥有近1随着时间的推移.有效,Spark事实上,优秀的分布式计算平台,以提高生产力. 开始本篇笔记.此前的研究会Spark研究报告共享出来(由于篇幅的限制,它将被划分成制 ...
随机推荐
- FZU2082
树链剖分后要处理的是边的权值,而不是点的权值,但是只要边权下放到点,就可以了 如图 但是问题是,求图4->5路径的权值之和, 那么就会把点3给算进去 那么就要减去, 或者干脆不加进去 有两种方法 ...
- Xamarin C# Android for Visual Studio 平台安装
原文:Xamarin C# Android for Visual Studio 平台安装 Xamarin是基于Mono的平台,目前主要有以下产品(更具体请见:http://xamarin.com/pr ...
- SharePoint发展 - 使用Session(代码更改webconfig)
博客地址 http://blog.csdn.net/foxdave SharePoint启用Session能够使用Powershell,戳这里:能够改动webconfig. 本篇叙述的重点是通过fea ...
- 【深入浅出jQuery】源码浅析--整体架构(转)
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- BZOJ 1449 JSOI2009 球队收益 费用流
题目大意:给定nn支球队.第ii支球队已经赢了winiwin_i场.输了loseilose_i场,接下来还有mm场比赛.每一个球队终于的收益为Ci∗x2i+Di∗y2iC_i*x_i^2+D_i*y_ ...
- Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统
继续并发专题~ 这次介绍CyclicBarrier:看一眼API的注释: /** * A synchronization aid that allows a set of threads to all ...
- Jenkins详细安装与构建部署使用教程(转)
Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:1.持续的软件版本发布 ...
- BeagleBone Black 板第三课:Debian7.5系统安装和远程控制BBB板
BBB板第三课:Debian7.5系统安装和远程控制BBB板 由于BBB板系统是Debian 7.4.据说使用Debian系统能够实现非常多BBB板的无缝连接.能够更好的学习和控制BBB板,所以就决定 ...
- HDU 4288 Coder (线段树)
Coder 题目:http://acm.hdu.edu.cn/showproblem.php?pid=4288 题意:有三种类型的操作,(1)."add x",表示往集合里加入�数 ...
- 使用 WPF 创建单实例应用程序
一个简单的例子就是大家在使用很多应用程序,例如在使用Microsoft Word 时会遇到一种情况,不管你打开多少个文档,系统一次只能加载一个winword.exe 实例.当打开新文档时,文档在新窗口 ...