
软核处理器or1200内部设计分析
文章平均质量分 84
leishangwen
而立之年岁开始学硬件——廉颇老矣,尚能饭否!
展开
-
or1200处理器的异常处理类指令介绍
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书 我们在计算机体系结构的学习中知道:中断实质上包括由外部事件引起的硬中断(又称外中断)和由内部预先安排的特定指令或内部异常引起的软中断(又称内中断或异常)两大类。在OR1200处理器中将中断称之为异常(exception),硬中断是其中的一种异常,当然这只是说法的不同而已。当异常发生时,有关处理器的状态信息被存储到某些原创 2014-04-28 13:01:48 · 1867 阅读 · 0 评论 -
OR1200数据Cache的通写、回写应用举例
通过对使用DCache各种情景的分析以实现对DCache模块的剖析,使用到DCache的情景有如下几种: (1)l.mtspr指令写DCache中的特殊寄存器(分通写法、回写法) (2)存储指令执行阶段DCache失靶(分通写法、回写法) (3)加载指令执行阶段DCache失靶(分通写法、回写法) (4)存储指令执行阶段DCache命中(分通写法、回写法) (5)加载指令执行阶段DCache命中(DCache的工作过程在通写法、回写法下是原创 2014-06-19 12:50:34 · 2549 阅读 · 0 评论 -
OR1200中数据Cache的使用情景分析
存储指令执行阶段DCache失靶这种情景在通写法、回写法策略下有不同的执行过程,在通写法策略下直接写存储器中对应的地址,不操作DCache。在回写法策略下,首先判断目的地址对应的DCache中目录表的line是否被修改,如果是(Dirty为1),则将该line写回到内存,然后将目的地址所在的内存块读入DCache,填充到对应line,然后再修改DCache中对应目的地址的数据;如果目的地址对应的line没有被修改(Dirty为0),那么直接将目的地址所在的内存块读入DCache,填充到对应line,然后再修原创 2014-06-25 13:04:00 · 2015 阅读 · 0 评论 -
OR1200处理器中Wishbone总线接口模块WB_BIU介绍
WB_BIU模块是OR1200处理器与外部Wishbone总线连接的接口模块,15.1节给出了WB_BIU模块的对外连接关系,并指出WB_BIU模块的三个作用。因为OR1200处理器支持Wishbone B3版本,所以在15.2节介绍了Wishbone B3版本中的寄存反馈总线周期,重点说明了其中的周期类型识别地址标签CTI_O/CTI_I、突发类型扩展地址标签BTE_O/BTE_I的作用。原创 2014-07-01 13:02:52 · 2861 阅读 · 0 评论 -
OR1200处理器的计时器模块TT介绍
计时器模块(Tick Timer:TT)一般用在操作系统的进程调度、用户程序的定时参考等。TT内部会对时钟周期计数,当计数值达到一个预设值时,会产生中断,通知处理器进行处理。其实现的主体是两个特殊寄存器:计时器单元计数寄存器TTCR、计时器单元模式寄存器TTMR,通过这两个SPR的不同配置,实现不同的工作模式,以及计时中断的产生。TTCR、TTMR是第10组特殊寄存器原创 2014-07-02 13:26:25 · 2329 阅读 · 0 评论 -
开源软核处理器介绍
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书 随着FPGA技术的发展,以及EDA软件工具的进步,如今的FPGA应用范围越来越广,以致出现了SOPC(System-On-a-Programmable-Chip:可编程片上系统)的概念,用可编程逻辑技术把整个系统放到一块可编程逻辑芯片上,其中可以包含处理器、DSP、RAM、ROM、总线控制器、UART控制器、以太原创 2014-03-17 14:02:13 · 4781 阅读 · 0 评论 -
OpenRISC与Or1200介绍
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书1、OpenRISC 1000架构 OpenRISC项目包括OpenRISC 1000、OpenRISC 2000两个子项目,OpenRISC 1000项目产生了OpenRISC 1000架构,OR1200就是符合OpenRISC1000架构的处理器,本小节将简单介绍OpenRISC 1000架构。原创 2014-03-18 13:35:14 · 4789 阅读 · 0 评论 -
OR1200代码组织
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书 使用SVN从地址http://opencores.org/ocsvn/openrisc/openrisc可以得到最新的OR1200代码。本书以OR1200的Rel3这个版本为例进行分析,在Rel3版本中有一个浮点处理单元FPU,但这不是OR1200的一部分,是另外一个开源项目,所以本书不分析FPU。下载后进入branch原创 2014-03-19 13:48:51 · 2359 阅读 · 0 评论 -
or1200开发环境的使用
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书1、一个简单的汇编程序 上一节安装好了GNU编译工具,还设置了虚拟机与宿主机的共享文件夹,下面我们就小试牛刀,写一个简单的程序,需要读者朋友们了解的是本书所有的测试代码都是很简单的汇编程序,因为即使最简单C语言代码(如:HelloWorld)经过编译后也会得到大量目标代码,而我们的目的是了解处理器内部的工作过程原创 2014-03-21 14:13:54 · 2772 阅读 · 0 评论 -
OR1200中指令Cache的结构
OR1200中实现ICache的文件有or1200_ic_top.v、or1200_ic_fsm.v、or1200_ic_tag.v、or1200_ic_ram.v、or1200_spram.v,分别实现了ICache模块、IC_FSM模块、IC_TAG模块、IC_RAM模块、单口RAM。在ICache中例化了IC_FSM、IC_TAG、IC_RAM模块,在IC_TAG、IC_RAM模块中例化了单口RAM。如图12.4所示。其中IC_TAG、IC_RAM可以称为数据部分,IC_FSM可以称为控制部分,在数据原创 2014-06-12 13:25:34 · 2364 阅读 · 0 评论 -
Cache基本知识与OR1200中ICache简介
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书 12.1 Cache基本知识12.1.1 Cache的作用 处理器的设计者一般会声称其设计的处理器一秒钟能做多少次乘法、每条指令只占用xx个时钟周期,可是当我们实际使用处理器时,就会发现并不是那么回事,比如在第11章,从图11.8中可以发现,当程序运行在简单SOPC上时,原先设计在执行阶段只需要一个时钟周期的指令l.原创 2014-06-11 13:48:16 · 4725 阅读 · 0 评论 -
OR1200各模块之间的连接关系图,使用VISIO绘制,理解源代码必备
OR1200各模块之间的连接关系图,使用VISIO绘制,理解源代码必备共有两张图,一张描述的OR1200_TOP的各个模块连接关系,一张描述的OR1200_CPU中各个模块的连接关系,本人分析OR1200时自行绘制的,通过这两张图便于理解OR1200的代码,在后续本人会陆续发布对OR1200代码的分析。在http://download.youkuaiyun.com/detail/leishan原创 2013-02-26 22:40:47 · 4559 阅读 · 0 评论 -
新书出版:步步惊“芯” —软核处理器内部设计分析
china-pub预售地址:http://product.china-pub.com/3768163内容简介 ······ 本书以开源32位软核处理器OR1200为研究对象,像引导读者如做解剖学实验那般,对其进行剖析,力图使读者对教科书上介绍的处理器有一个实践上的认识,打破处理器令人高深莫测的印象,同时使读者了解处理器设计的细节。OR1200包括CPU、MMU、Cache、转载 2013-06-27 13:38:37 · 2773 阅读 · 0 评论 -
《步步惊芯 软核处理器内部设计分析》火热销售中
《步步惊芯 软核处理器内部设计分析》火热销售中......,各大网站均有销售:amazon:http://www.amazon.cn/dp/B00DJAH6MSdangdang:http://product.dangdang.com/product.aspx?product_id=23278571china-pub:http://product.china-原创 2013-07-12 21:57:34 · 1585 阅读 · 0 评论 -
or1200开发环境的安装
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书 主要是GNU开发工具链的安装,有了GNU工具链提供的工具,我们可以在Linux环境下将汇编、C代码编译成OR1200平台的可执行代码,这就是交叉编译的过程。有了OR1200的可执行代码,就能够在OR1200模拟器OR1KSim中运行该可执行代码,观察其是否如预期那样执行。 在介绍GN原创 2014-03-20 13:54:04 · 3739 阅读 · 13 评论 -
MMU的作用及工作过程
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书的第10章 MMU剖析 MMU的作用及工作过程 MMU(Memory Management Unit)是内存管理单元的简称,读者朋友在学习嵌入式的时候应该听说过µCLinux,这是适合没有MMU的微控制器使用的嵌入式Linux操作系统,比如ARM7。由于没有MMU,所以在µCLinux上实现多任务功能是一个非常棘手的原创 2014-05-26 16:03:29 · 18477 阅读 · 2 评论 -
or1200中IMMU分析
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书1 IMMU结构 OR1200中实现IMMU的文件有or1200_immu_top.v、or1200_immu_tlb.v、or1200_spram.v,其中使用or1200_immu_top.v实现了IMMU模块,使用or1200_immu_tlb.v实现了ITLB模块,or1200_spram.v是一个单口RAM,使用其实原创 2014-05-29 13:45:03 · 2525 阅读 · 0 评论 -
Or1200中IMMU使用举例
5 IMMU使用情景 前几章通过对OR1200处理器中各类指令执行过程的分析,实现了对CPU模块的剖析,本章将采用情景分析法,通过对使用IMMU的各种情景的分析以实现对IMMU模块剖析。使用IMMU的情景有如下几种: (1)使用IMMU进行地址翻译,同时ITLB命中,且没有违反页保护策略 (2)使用IMMU进行地址翻译,但是ITLB未命中(3)使用IMMU进行地原创 2014-06-09 13:50:06 · 1645 阅读 · 0 评论 -
基于OR1200的一个简单SOPC
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书 在本书第2章建立了最小系统,最小系统只由CPU、QMEM模块组成,借助于最小系统,我们分析了OR1200各类指令的执行过程、熟悉了流水线的工作原理以及CPU内部各个模块的代码实现,第10章在最小系统上增添了IMMU、DMMU模块,借此分析了OR1200中内存管理单元的实现原理。本章将建立一个基于OR1200的简单SOPC,原创 2014-06-10 13:16:39 · 2830 阅读 · 3 评论 -
创建or1200最小SOPC,并进行仿真
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书 在上一篇博文中使用GNU工具链可以得到可执行文件,然后在模拟器中运行这个可执行文件,并记录指令执行的信息到文件中,通过分析这个文件可以判断程序是否是按照预期那样执行。但这只是一个软件的模拟过程,用于前期的验证,对于剖析OR1200内部结构的作用并不大。为了剖析OR1200内部结构,我们还需要借助硬件仿真工具ModelSi原创 2014-03-24 14:27:29 · 2670 阅读 · 0 评论 -
or1200处理器中QMEM模块的作用
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书QMEM的作用 QMEM是Quick Memory的简称,顾名思义,就是快速存储器,实际上这是一个片上RAM,可以实现在一个时钟周期内读取其中存储内容(指令、数据),用户可以把一些常用的代码存放在其中,比如:Context切换过程、异常处理句柄、堆栈等。有学者将QMEM类比为OR1200的一级缓存(L1 Cache原创 2014-03-25 23:24:18 · 2537 阅读 · 0 评论 -
Wishbone总线快速了解
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书 PC机一般都提供PCI插槽,各种板卡(包括显卡、语音卡、网卡,甚至用户自制的板卡)只要满足PCI接口标准,就可以直接插在PC机的PCI插槽使用,十分方便。同样的道理,目前有很多IP核的研发者或公司,为了方便不同研发者或公司的IP核能够直接连接,就要求这些IP核遵守共同的接口标准。在片上系统(SoC)中,处理器核与其他原创 2014-03-26 13:36:09 · 16524 阅读 · 0 评论 -
or1200中加载存储类指令说明
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书 OR1200中实现的加载存储类指令有8条,每条指令的作用与说明如表9.1所示。 说明一点:在第2章建立的最小系统没有配置使用MMU,所以有效地址等于物理地址。 加载存储类指令的助记符也很好理解记忆,第一位是’s’表示存储指令,’l’表示加载指令;第二位是’b’表示对字节操作原创 2014-05-07 13:40:57 · 1527 阅读 · 0 评论 -
or1200处理器的数据流图
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书 完整的OR1200处理器流水线数据通路图,如图9.12所示,图中显示了数据处理类、特殊寄存器访问类、转移类、异常处理类、乘法除法类、加载存储类指令处理过程中流水线各个阶段的数据流转。 (1)取指阶段:GENPC模块计算指令地址,然后通过指令Wishbone总线从指令存储器中取得指令,原创 2014-05-08 13:19:37 · 1909 阅读 · 0 评论 -
TLB的作用及工作过程
以下内容摘自《步步惊心芯——软核处理器内部设计分析》一书 页表一般都很大,并且存放在内存中,所以处理器引入MMU后,读取指令、数据需要访问两次内存:首先通过查询页表得到物理地址,然后访问该物理地址读取指令、数据。为了减少因为MMU导致的处理器性能下降,引入了TLB,TLB是Translation Lookaside Buffer的简称,可翻译为“地址转换后援缓冲器”,原创 2014-05-27 12:28:10 · 7620 阅读 · 0 评论 -
or1200中IMMU分析(续)
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书 2 IMMU中的特殊寄存器 OR1200处理器中的IMMU包含第2组特殊寄存器,如表10.1所示。 ITLBW0MRx是指令TLB匹配寄存器,其格式如表10.2所示。 表10.2是OpenRISC 1000规范中的定义,实际在OR1200处理器中只实现了其中一部分字段,包括原创 2014-06-05 13:00:19 · 1777 阅读 · 0 评论 -
or1200中IMMU分析(再续)
以下内容摘自《步步惊芯——》原创 2014-06-06 13:02:11 · 1285 阅读 · 0 评论 -
OR1200指令Cache使用举例
同第10章分析MMU的方法一样,本章也是采用情景分析法,通过对使用ICache的各种情景的分析以实现对ICache模块剖析。使用ICache的情景有如下几种: (1)l.mtspr指令写ICBIR (2)指令取指阶段ICache失靶 (3)指令取指阶段ICache命中 (4)指令取指阶段,目的指令所在的内存页禁止缓存 上述四种情景中,情景(1)在流水线的执行阶段使用到了ICache,情景(2)、(3)、(4)在流水线的取指阶段使用到了ICache。原创 2014-06-16 13:28:17 · 1617 阅读 · 0 评论 -
OR1200数据Cache介绍
DCache中缓存的是数据,而ICache中缓存的是指令,这就是DCache与ICache的根本区别,由此也决定了DCache的特别之处。指令存储在指令存储器中,且指令存储器是只读的,对应只有一个取指操作,但是数据存储在数据存储器中,且数据存储器是可读、可写的,对应加载、存储两个操作。一般情况下,指令存储器、数据存储器都属于内存的一部分,有时就是内存中同样的地址空间。当向数据存储器中存储数据且DCache命中时,称之为写命中,可以采用两种策略:原创 2014-06-18 13:20:58 · 1627 阅读 · 0 评论 -
OR1200处理器的Store Buffer分析
SB的作用是通过缓冲存储操作,从而加快存储操作。其原理是这样的:当执行存储操作时,可能需要通过WB_BIU将要写的数据写入外部Memory,尤其是在通写法模式下,每次执行存储操作都要将数据写入外部Memory,这样会等待外部Memory完成存储操作,在此期间,CPU处于暂停状态,降低了CPU的效率,引入SB后,如果是存储操作,那么SB模块将本次操作保存起来,同时立即向DCache返回一个存储完成信号(dcsb_ack_o为1),使得CPU可以继续执行,然后SB模块会接着完成被其保存起来的存储操作。在SB内部原创 2014-06-27 09:08:02 · 2867 阅读 · 0 评论 -
or1200中乘法除法指令说明
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书 OR1200中乘法除法类指令共有9条,表8.3给出了所有的乘法除法类指令的作用及说明。 说明:表8.3是ORBIS32中给出的指令用法,但是通过分析OR1200的代码,发现有些指令并没有按照ORBIS32实现,如:l.mac、l.maci、l.msb,这三条指令有一个共同点就是涉原创 2014-05-06 13:12:25 · 1597 阅读 · 0 评论 -
串行除法与并行除法
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书串行除法与并行除法8.2.1 串行除法 OR1200中使用的串行除法算法是“试商法”。设被除数是m,除数是n,商保存在s中,被除数的位数是k,其计算步骤如下(为了便于说明,在此处所有数据的最低位称之为第1位,而不称为第0位): (1)取出被除数的最高位m[k],使用被除数的最高位减去除数n,如原创 2014-05-05 13:24:44 · 4240 阅读 · 0 评论 -
or1200处理器的数据处理类指令说明
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书 在笔者的分类中,数据处理类指令有48条。表4.1给出了OR1200中实现的所有算术处理类指令及其说明。 笔者将OR1200的数据处理类指令再细分为如下类别: 比较指令l.sfeq、l.sfeqi、l.sfges、l.sfgesi、l.sfgeu、l.sf原创 2014-04-04 13:15:10 · 2255 阅读 · 0 评论 -
or1200处理器对数据相关的处理方法
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书 上文中提到过流水线相关的问题,本节将对流水线相关的问题进行说明。流水线中经常有一些被称为“相关”的情况发生,它使得指令序列中下一条指令无法按照设计的时钟周期执行,这些“相关”会降低流水线的性能。流水线中的相关分为三种类型: (1)结构相关:指令在执行的过程中,由于硬件资源满足不了指令执行的要求,发生硬件原创 2014-04-01 11:30:25 · 1871 阅读 · 1 评论 -
or1200处理器中的特殊寄存器
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书 OR1200中的寄存器分为两类:通用寄存器r0-r31、特殊寄存器。特殊寄存器又分为11组,在本书第1.3.3节简单地列出了所有的特殊寄存器组。从列表中可以发现除第0组外的其余特殊寄存器组都是与具体的硬件模块相关联的,比如:第2组特殊寄存器与指令MMU有关、第4组特殊寄存器与指令缓存ICache有关、第9组特殊寄存器原创 2014-04-10 13:31:15 · 4011 阅读 · 0 评论 -
or1200中特殊寄存器访问类指令说明
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书特殊寄存器访问类指令说明 OR1200中特殊寄存器访问类指令只有两条:l.mfspr、l.mtspr。如表5.5所示。l.mfspr指令 l.mfspr指令与上一章数据处理类指令的最大不同就是l.mfspr的执行阶段需要两个时钟周期,所以会暂停流水线。执原创 2014-04-15 13:26:13 · 2030 阅读 · 0 评论 -
or1200处理器的SPRS模块详细分析
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书 前面两节以访问映射到SPR地址空间的通用寄存器为例分别介绍了l.mfspr、l.mtspr指令的一般过程,访问其余特殊寄存器的取指、译码阶段与上述都是一样的,只是执行阶段与特殊寄存器所在模块有关,将在分析具体模块的时候再行分析,但是无论访问哪个模块中的特殊寄存器,都涉及到SPRS模块。SPRS在指令l.mfspr、l原创 2014-04-16 13:06:58 · 2304 阅读 · 0 评论 -
or1200处理器中的转移类指令介绍
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书延迟槽 在第4章介绍流水线相关的时候,提到有三种相关:数据相关、结构相关、控制相关。其中控制相关指流水线中的转移指令或者其他需要改写PC的指令造成的相关。这些指令改写了PC值,所以下一条执行的指令可能会发生变化,如果下一条执行的指令地址不是当前指令地址加4,那么流水线处于译码阶段的指令就无效,需要重新取指。如图原创 2014-04-17 12:55:26 · 1459 阅读 · 0 评论 -
or1200中Exception模块的作用
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书EXCEPTION模块的作用 为了便于说明,在进行具体指令分析之前,给出在异常处理类指令执行过程中涉及到的主要模块连接关系,如图7.1所示,图中的大部分模块在前几章分析指令的时候都有所涉及。但在本章会使用不同的输入输出接口。该图仍然采用模块左边是输入接口,右边是输出接口的绘制方式,这样做的好处是一目了然知道哪些原创 2014-04-30 13:35:48 · 1637 阅读 · 0 评论 -
串行乘法与并行乘法
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书串行乘法 OR1200中串行乘法采用的是“移位——加”迭代算法,这种算法借鉴了手工计算乘法的过程,对于二进制乘法,比如:1101*1011,手工计算过程如图8.1所示。图8.1 手工计算二进制乘法的过程 从图中可知手工计算时会将被乘数与乘数中每一位依次相乘,最后原创 2014-05-04 11:21:42 · 7080 阅读 · 1 评论