转载地址: http://blog.csdn.net/leishangwen/article/details/46604819

最近大概阅读了一下UCB发布的Rocket处理器的源码,对源代码各个文件的功能有了一些大致的了解,Mark一下。

Rocket是一款64bit的标量处理器,5级流水线,采用的是risc-v指令集,集成FPU,并有许多or1200没有的特性,比如:无阻塞缓存、分支预测、返回地址堆栈、硬件页表填充、cache支持ECC、支持多核等。

Rocket的源代码是使用Chisel编写的,Chisel是UCB发布的基于Scala的领域特定语言。可以在https://github.com/ucb-bar/rocket下载Rocket的全部源码,共有20个文件,各个文件实现的功能大致如下:

开源处理器Rocket的源代码文件作用说明
arbiter.scala 实现了一个固定优先级的仲裁器,编号越低,优先级越高
btb.scala 实现了gshare,其中包含BTB(Branch Target Buffer)、BHT(Branch History Table),还实现了RAS(Return Address Stack)
consts.scala 定义了一些类似与宏定义的变脸
core.scala 包含控制通路、数据通路,联合起来为Core
csr.scala 实现了risc-v指令集中定义的Control Status Registers
ctrl.scala 实现了控制通路,其中就反映了5级流水线
decode.scala 其中实现了对卡诺图的化简,在指令译码的时候会使用这里的功能
dpath.scala 实现数据通路
depath_alu.scala 实现了ALU
fpu.scala 实现了与第三方FPU的接口
icache.scala 实现了指令一级缓存、取值,其中就使用了btb.scala中定义的分支预测技术
instructions.scala 定义了Rocket处理器支持的所有指令
multiplier.scala 实现了乘法、除法运算,其中乘法采用的是迭代法,除法采用的是试商法
nbdcache.scala 实现了数据一级缓存,采用MSHR技术实现了无阻塞缓存
package.scala 定义了复位地址、异常处理vector base address
ptw.scala 实现了硬件的page table walk,也就是硬件页表填充
rocc.scala 实现了一个加速协处理器,用来执行用户自定义指令
tile.scala Rocket处理器的顶层文件,其中连接Core、指令一级缓存、数据一级缓存、FPU等模块
tlb.scala 实现了传输后备缓冲器
util.scala 定义了一些对象,提供了一些工具函数,比如:类型转换。

以上是个人的理解,欢迎大家提出异议,共同讨论啊。

(转)64位开源处理器Rocket的源代码简单介绍的更多相关文章

  1. 64位开源处理器Rocket该人士介绍

    最近大概读一点UCB发布时间Rocket处理器的源代码,的每个文件的源代码的功能有一定的一般理解,Mark一点点. Rocket是一家64bit标量处理器,5第一阶段管道,用途risc-v指令集.综合 ...

  2. GitHub开源库排名一百的简单介绍,值得收藏!

    GitHub Android Libraries Top 100 简介 本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据 GitHub ...

  3. 高性能、高容错、基于内存的开源分布式存储系统Tachyon的简单介绍

    Tachyon是什么? Tachyon是一个高性能.高容错.基于内存的开源分布式存储系统,并具有类Java的文件API.插件式的底层文件系统.兼容Hadoop MapReduce和Apache Spa ...

  4. ubuntu 到底是选择32位还是64位?

     ubuntu 到底是选择32位还是64位? 2011-06-03 15:16:31 标签:ubuntu linux 休闲 cpu 职场 原文出处:官方wiki原文作者:授权许可: 创作共用协议Att ...

  5. [百度空间] [转]将程序移植到64位Windows

    from : http://goooder.bokee.com/2000373.html (雷立辉 整理) 简介:本文对如何将32位Windows程序平滑的支持和过渡到64位Windows操作系统做出 ...

  6. java与32/64位虚拟机

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt232 32位电脑与64位电脑有什么不同? 我们通常说的64位技术是相对于32 ...

  7. IOS是否存在32位和64位版本的区分

    苹果于2013年9月推出了iPhone 5S新手机,采用的全新A7处理器其最大特色就是支持64位运算.其64位A7处理器的使用意味着iPhone性能会大有提高,性能和速度更加出色:而要到达到这样的性能 ...

  8. Visual Studio远程调试监视器(MSVSMON.EXE)的32位版本不能用于调试64位进程或64位转储

    在VS2013中调试Silverlight项目时,提示:无法附加.Visual Studio远程调试监视器(MSVSMON.EXE)的32位版本不能用于调试64位进程或64位转储.请改用64位版本. ...

  9. 介绍 32 位和 64 位版本的 Microsoft Office 2010

    在使用 64 位版本的 Office 2010 运行现有解决方案时存在两个基本问题: Office 2010 中的本机 64 位进程无法加载 32 位二进制文件.在使用现有 Microsoft Act ...

随机推荐

  1. C语言素数

    求1-10000之间的素数,并打印出来. 使用了sbrk和brk函数,采用直接操作内存的方式,尽量减少循环次数,每次进行素数判断仅与之前的素数进行相除.该代码并不健壮,仅作练习用. #include ...

  2. Python学习之路上的几个经典问题

    1.python有三元运算符语法(类似C语言的"?")么? 语法如下: [on_true] if [expression] else [on_false] 如果[expressio ...

  3. 帮助快速生成页面固定显示元素的jQuery插件 - sticky-kit

    来源:GBin1.com 如果需要在用户滚动页面的时候,保持特定元素始终可见的话,今天这里我们介绍的Sticky-Kit是一个不错的选择. 它是一个开源的jQuery插件,可以帮助大家快速针对页面元素 ...

  4. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何在初始化的时候写入参数

    最常见的是定义一个全局变量,然后跟对应的变量绑定,比如我定义了一个SINT型的变量ControlWord 数值是8,定义好之后编译一下,可以发现PLC程序中或多出来这个变量(MAIN.ControlW ...

  5. WCF 之 概述

    WCF全称是Windows Communication Foundation,它是.NET3.0的重要组成部分,用来解决Windows下的一些通信方面的问题.WCF是Microsoft平台上的SOA架 ...

  6. 流媒体播放mime类型添加

    .m3u8 application/x-mpegURL.ts video/MP2T

  7. Windows 2008 R2有效激活方法【转】

    原文地址:http://jingyan.baidu.com/article/851fbc3707096e3e1f15ab33.html 装了windows server 2008之后才发现,它与win ...

  8. 彻底理解PHP的SESSION机制【转】

    原文地址: http://www.cnblogs.com/acpp/archive/2011/06/10/2077592.html session.save_handler = files 1. se ...

  9. 从MVC和三层架构说到ssh整合开发-下

    这章主要讲整合开发,直接从实战讲起,对与ssh的单方面了解,请继续等待我的兴许文章. 解说不到位的地方欢迎大家指正:联系方式rlovep.com 具体请看源码凝视: 全部代码下载(csdn):链接 G ...

  10. (二)Luence——代码实现索引及搜索

    完成需求:使用Lucene完成对数据库中图书信息的索引和搜索功能. 1. 环境准备及工程搭建 1.1 环境准备 mysql5.5+java8+lucene4.10.3(目前最新7.0.1,这里够用就好 ...