引言

前面我们分析了ORPSoC的整体架构,并对其子系统进行了深入的分析和了解。但对于ORPSoC的核心模块or1200_top及其内部的core--or1200_cpu模块却鲜有涉及,算是ORPSoC分析的盲区,也是蒙在我心里的一片乌云。

本小结就对这两个模块的整体架构进行分析,扫除这块所谓的‘盲区’和‘乌云’。

1,a general picture

按照惯例,还是先对这两个模块有一个感性认识。下面就是or1200_top和or1200_cpu的模块连接图。

CPU模块:or1200_top

core模块:or1200_cpu

2,CPU整体架构

1>模块接口

下面就是CPU的实际模块接口图,从中我们可以清晰的看到一个CPU的外部接口。

2>模块整体架构图

上面我们了解了CPU的模块接口,但是其接口比较多,我们需要对这些接口进行分类,画出其接口简图,如下:

从中我们可以看出CPU与外部进行数据交换和控制的接口,以及其模块组成。

经过分析对应的RTL代码,我们可以知道:默认配置下,具有一个一路直接映射的8KB数据cache和一个一路直接映射的8KB指令cache,Cache line长度为16-byte,两个cache都是物理索引(physically tagged)。默认配置下支持MMU,其由一个64-entry hash,1-way direct-mapped的数据TLB和指令TLB组成。此外,用调式单元可实现实时调试,tick timer,PIC,和电源管理。

3>深入分析

1》数据流图

上面介绍的只是CPU的概要情况,为了便于理解,我们需要弄清楚CPU的数据流向,掌握了数据在CPU内部的流动情况,我们就会有更清晰的认识,毕竟CPU还是数据驱动的东西。经过阅读or1200_top模块相关RTL的code,我画了or1200_top模块的逻辑上的数据流图,如下:

2》分析

仔细分析上图。整个流向就是箭头的方向(自下而上)。下面我就以load/stor指令的执行过程来说明:

假如core要执行load指令,就以bootrom.S中的最后一条指令为例:l.lbz r3,r4,0x2

a,指令含义

我先说一下这条指令的含义。通过查手册,可知,这条指令的format是:

l.lbz rD,I(rA)

其含义是:

EA ← exts(Immediate) + rA[31:0]
rD[7:0] ← (EA)[7:0]
rD[31:8] ← 0

总体含义是将内存的一个字节的数据load到通用寄存器中,其具体操作过程是,将立即数0x02先进行0扩展,再与r4里面的值相加得到有效地址EA(注:这个地址就是虚拟内存地址,注意这个地址是虚拟地址,不是物理地址),然后将内存地址为EA[7:0]处的数据load到寄存器r3的低8位中,高位补0。

b,执行过程

core取得这条指令后,计算出虚拟地址,经dmmu模块,得到物理地址,根据物理地址从qmem(相当于一级cache)读取数据,如果出现miss,就是cache miss异常,异常处理会从内存中读取数据放到stor buff(相当于三级cache)和data cache(相当于二级cache),异常处理完成后,再重新执行这条指令,就能读到数据。

当然,如果dmmu中没有对应的物理地址,就是TLB miss,产生一个TLB miss异常,core jump到异常入口处取指,这个过程我之前介绍过,具体过程,这里就不展开阐述。

c,stor

stor指令与load指令执行过程类似。

3,core整体架构

上面我们分析了CPU的架构,并介绍了其数据流向,下面我说一下core的整体架构。

OpenRISC 1200 是OpenRISC 1000 处理器家族的一个实现版本。

OR1200是 32-bit 标量 RISC架构,Harvard 结构, 5级 integer流水线, 支持MMU,还具有DSP能力。

关于architecture是john von neumann,还是harvard,还是modify harvard,还是princeton ,我觉得争论这个的意义不大,其实在一个现实的core的实现中,没有一个明显的界线,一切以提高性能,降低功耗,减小面积等等这些更实际的指标为基准。所以还是那句话“不管是黑猫,白猫,只要能抓住老鼠,就是好猫”。

1>模块接口

下面是core的接口,从中我们可以了解其具体的接口的名称,从名称中我们可以大概了解其与外部的数据及控制交换通路。

2>整体架构

说到core的架构,首先必须要把官方的架构图放到这里,如下:

3>分析

1》架构图

上面的图我就不说什么了,可以阅读相关的文档了解其大概情况。上面的图太粗糙了,为了介绍core的工作机制,我们需要更深入的分析,这就需要阅读其对应的RTL代码。

经分析,or1200_cpu这个核心中的核心的结构图,如下:

2》分析

上图是一个标准的computer architecture结构图。上面一部分是控制通路,下面一部分是数据通路。

一目了然。

4,小结

终于扫除了最后的盲区!

本小节分析了CPU和core的架构,自此,我们对整个ORPSoC的project有了一个初步的,完整的了解,对整个系统(APP+linux/eCos+FPGA+SoC+IPcore+CPU+core)都一一作了分析,不仅如此,我们还写了属于自己的IPCORE和其driver并作了验证,此外我们还测试验证了vga等ORPSoC之外的开源ipcore。

现在再返回头来看ORPSoC的整体模块连接图,我想,就没有‘乱七八糟’的感觉了吧,代替的应该是是‘一览众山小’吧。

“千里之行始于足下”,路还很远,move on.

5,参考文献

1,arch-manual-1.0

2,ORPSoC RTL code

OpenRisc-37-OpenRISC的CPU&core的整体架构分析的更多相关文章

  1. WebRTC音视频引擎研究(1)--整体架构分析

    WebRTC技术交流群:234795279 原文地址:http://blog.csdn.net/temotemo/article/details/7530504     1.WebRTC目的     ...

  2. 转: WebRTC音视频引擎研究(1)--整体架构分析

    转自: http://blog.csdn.net/temotemo/article/details/7530504   目录(?)[+]   WebRTC技术交流群:234795279 原文地址:ht ...

  3. Tomcat整体架构分析

    下面让我们来看看Tomcat容器的整体结构: 本文的目的是覆盖这张图中所涉及的主要请求处理组件.而上图中的一些高级主题如集群和安全则不是在本文讨论的范围之内. 本图中,Service, Host, C ...

  4. Spark系列(四)整体架构分析

    架构流程图 说明  Driver端流程说明(Standalone模式) 使用spark-submit提交Spark应用程序Application. 通过反射的方式创建和构造一个DriverActor进 ...

  5. MapReduce整体架构分析

    继前段时间分析Redis源代码一段时间之后.我即将開始接下来的一段技术学习的征程.研究的技术就是当前很火热的Hadoop,可是一个Hadoop生态圈是很庞大的.所以首先我的打算是挑选当中的一部分模块, ...

  6. 一步步去阅读koa源码,整体架构分析

    阅读好的框架的源码有很多好处,从大神的视角去理解整个框架的设计思想.大到架构设计,小到可取的命名风格,还有设计模式.实现某类功能使用到的数据结构和算法等等. 使用koa 其实某个框架阅读源码的时候,首 ...

  7. 使用performance monitor 查看 每一个cpu core的cpu time

    使用performance monitor 查看 每一个cpu core的cpu time: 打开performance monitor,添加 counter 如下 运行一段cpu bound 的代码 ...

  8. Linux上获取CPU Core个数的实现

    Linux上获取CPU Core个数的实现 可以通过多种手段取得CPU Core的个数,如: 1) 调用系统提供的函数get_nprocs(),可以在头文件sys/sysinfo.h中发现它 2) 借 ...

  9. PULPino datasheet中文翻译并给了部分论文注释(前四章:Overview、Memory Map、CPU Core、Advanced Debug Unit)

    参考: (1).PULPino datasheet:https://github.com/pulp-platform/pulpino/blob/master/doc/datasheet/datashe ...

随机推荐

  1. 多个Storyboard切换

    - (void)showStoryboard { // 实例化MainStoryboard UIStoryboard *storyboard = [UIStoryboard storyboardWit ...

  2. C语言第12轮:指针

    C语言第12轮:指针 [学习目标] 1.        指针 2.        指针与数组 A: 指针的概念 内存存储单元按字节排序.每一个字节编有序号.我们称之为地址.因为能够通过地址就能够找到所 ...

  3. MAC中在eclipse luna上搭建移动平台自动化测试框架(UIAutomator/Appium/Robotium/MonkeyRunner)关键点记录

    这几天因为原来在用的hp laptop的电池坏掉了,机器一不小心就断电,所以只能花时间在自己的macbook pro上重新搭建整套环境,大家都知道搭建环境是个很琐碎需要耐心的事情,特别是当你搭建的安卓 ...

  4. asp.net中TextBox里面实现回车触发指定事件

    原文:asp.net中TextBox里面实现回车触发指定事件 我在一个user_top用户控件里面做了个包括搜索的功能.然后再一个页面中添加这个用户控件.浏览时候在textbox里面输入搜索内容后.下 ...

  5. jquery.validate 以alert方式显示错误方法

    $.validator.setDefaults({ submitHandler: function() { alert("submitted!");return false; } ...

  6. sb2-admin

    近期开发中遇到的问题总结   最近准备把后台管理系统重新设计开发下,使用了bootstrap,在网上找了个漂亮的后台模板:sb2-admin,在使用中遇到了不少问题,总结下,以免以后忘记. 1.EF5 ...

  7. 快速构建Windows 8风格应用31-构建磁贴

    原文:快速构建Windows 8风格应用31-构建磁贴 引言 磁贴是吸引用户经常使用应用重要手段之一.我们可将应用程序内较好的内容使用磁贴进行展示. 另外应用程序磁贴是应用程序中的核心部分,而且很可能 ...

  8. Spring IOC 之Bean作用域

    当你创建一个bean定义的时候,你创建了一份通过那种bean定义的bean的创建类的真正实力的处方.bean的定义是一个处方 的想法是很重要的的.因为这意味着,对于一个类你可以创建很多对象实例从一个单 ...

  9. Spring之单元测试

    引言 是否在程序运行时使用单元测试是衡量一个程序员素质的一个重要指标.使用单元测试既可以让我检查程序逻辑的正确性还可以让我们减少程序测试的BUG,便于调试可以提高我们写程序的效率.以前我们做单元测试的 ...

  10. 网易ios 面试

    1 说说 你对  MRC和 ARC 的理解 2  对OC内存分析 有什么好的方法, 3 corePlot 4 pop 动画 5 cocoapods 6 GCD 7 瀑布流 及 uicollection ...