【从嵌入式视角学习香山处理器】三、了解类似的芯片项目——RocketChip

一、前言

这篇文章主要是记录下我最近看到RocketChip项目的官方介绍文档。


二、简介

RocketChip是一个比香山发起得早的Risc-V开源芯片(SoC)项目。它本身并不直接创建SoC的各个模块的实例,包括cache、TLB、各种内部总线、FPU,甚至是加速器。而是创建各种生成器(generator),再利用生成器去生成各个部件的实例。
更进一步,RocketChip不负责创建所有的部件生成器,而是留给设计者去定义自己的SoC硬件“包含什么部件、多少个、参数是怎样的、配置是怎样的”。至少从它的github页面看到文件目录有“hardfloat@xxx”就可反映这一点。

RocketChip的子项目hardfloat
香山的项目设计是对齐RocketChip的——用chisel开发、只写生成器代码不写硬件实例、各个部件的代码作为另外的子项目导入作为香山下的单个目录。

香山的子项目fudian和huancun


三、RocketChip介绍

以下内容完全翻译自RocketChip的报告《The Rocket Chip Generator》。

RocketChip流片历史
RocketChip子模块示例

  1. 已经流片11次,并验证了支持启动linux。
  2. RocketChip不是一个具体的soc设计实例,而是设计生成器——从一个更高的层面去支持多种soc的实例设计。
  3. 改变单个配置就可以生成各种soc,包括MCU到多核服务器芯片的各种类型。
  4. 这篇报告将简要讲解2016年4月为止,RocketChip已经支持的特性。
  5. 这些标准扩展(乘除、原子、浮点)集中为通用标量指令集。
  6. 因为chisel直接描述了可综合电路,且比起高层次综合系统更加接近verilog这样的传统硬件描述语言,所以它可以在电路生成、电路的面向对象与功能描述方面,可以充分利用scala编程语言(的特性)。
  7. chisel还可以生成由c++实现的快速、精确到周期的RTL仿真器;这个仿真器功能上等效于商业版verilog仿真器并且明显更快。可用来仿真完整的RocketChip实例。
  8. 总结,RocketChip是一套可参数化、可组合出多种类soc设计的生成器库。下面是目前生成器和接口的能力的概览:
    core:标量核Rocket生成器、乱序超标量核BOOM生成器,两者都可选添加fpu、可配置功能单元流水线、可自定义的分支预测器。
    caches:cache和TLB生成器,支持配置容量、组相联、替换策略。
    RoCC:ROcket Custom Coprocessor interface,应用特定的协处理器模板。
    Tile:cache连贯性Tile的生成器模板。核和加速器的类型与个数都可配置,用来组成私有cache。
    TileLink:用于cache连贯性代理和对应cache控制器的组网的生成器。配置选项包括Tile的个数、连贯性策略、是否使用共享备份存储,和潜在的物理网络实现。
    外设:各种AMBA兼容总线、各类转换器、控制器(包括Z标量处理器)的生成器。
  9. Rocket也可看作是一个处理器组件的库。其它的设计中会用到一些Rocket原始设计模块,包括功能单元、cache、TLB、页表walker、特权架构实现(即控制/状态寄存器文件)。
  10. RoCC(ROcket自定义协处理器接口)促进了rocket处理器和协处理器之间的解耦通讯。
  11. RoCC接口接收rocket核发送来的协处理器命令。
  12. 这些机制充分满足在一个基于页的存储系统上构建协处理器。
  13. BOOM的目标之一是成为适用于教育、研究、工业,甚至乱序微架构进一步探索的基准实现。
  14. BOOM的实现只用了10k行chisel代码。代码量之所以这么少,部分原因是复用了更大的RocketChip库中已实现的许多部件;(比如)在前端,功能单元、页表walker、cache核浮点单元,全来自rocket和hardfloat库的实例。chisel还极大促进了BOOM成为一个真正的核生成器——可自定义的功能单元的组合,可参数化的取指/解码/发射/提交的宽度。
  15. zscale核实现了rv32im指令集,且设计成像ARM Cortex-M系列那样,通过AHB-Lite总线接口来兼容插入(外设?)。
  16. RocketChip包含着连贯cache与片上网络系统互联形式的共享存储层次结构的生成器。
  17. 这些生成器都是基于TileLink的——这是一个用于描述一
    套实现了某特定cache一致性策略的cache传输的协议框架。
  18. TileLink的目的是把片上网络的设计、cache控制器的实
    现,和一致性协议设计本身进行正交化(就是解耦?)。
  19. 任何符合TileLink传输(层)结构的cache一致性协议,都可对我们提供的物理网络和cache控制器更换。
  20. 反过来说,只要新设计的控制器和网络能确保其行为的正确性,soc的设计者就可以足够有信心地将他们放进基于TileLink的存储器层次结构、而不用担心会发生一致性协议相关的死锁。
  21. TileLink设计为可扩展的,并支持在它之上不断实现新的自定义cache一致性策略。
  22. 为了支持内存映射IO(MMIO),我们提供一个TileLink互联生成器。它会用一个地址表描述(文件)来生成可直连内存映射IO请求到内存映射外设的路由系统。
  23. 我们有一套用于检查过去遇到的、特定的存储bug的回归测试。着对复制有着顺序依赖、或时序依赖的bug特别有用,因为用软件重现这些bug会非常困难,甚至是不可能。
  24. 为协助通过随机测试来对核进行压力测试,我们实现了risv torture tester。它从代码序列的库中随机抽取一些片段,并缝合生成一段riscv汇编程序。每个代码序列中的指令互相交错。每个随机生成的测试程序都会分别在被测试的核和spike指令集模拟器(“黄金模型”)下跑(以进行对比验证)。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 嵌入式硬件工程师学习ARM处理器可以从以下几个方面入手。 首先,了解ARM架构和处理器的基本知识,包括指令集、寄存器、内存管理等。可以通过学习ARM体系结构手册、技术文档以及相关的书籍和教程来获得这些基础知识。 其次,学习ARM处理器的编程语言和开发工具。常用的ARM处理器编程语言有C和汇编语言,可以选择一门适合自己的语言来学习。同时,熟悉ARM处理器的开发工具链,如ARM编译器、调试器和仿真器等,可以帮助我们进行软件开发、调试和优化。 第,进行实践和项目实践。选择一款ARM处理器的开发板,并尝试在开发板上进行各种实际的项目开发,如LED控制、外设驱动、嵌入式系统开发等。通过实践可以加深对ARM处理器理解,掌握实际开发技巧和经验。 此外,还可以参加相关的培训课程和工作坊,与其他从业者进行交流和分享经验。通过与其他人的讨论和交流,可以学到更多关于ARM处理器的实际应用和开发经验。 综上所述,学习ARM处理器需要深入了解ARM架构和处理器的基本知识,掌握ARM处理器的编程语言和开发工具,进行实际的项目实践,并积极参与与其他从业者的交流和分享。这样可以帮助嵌入式硬件工程师深入理解学习ARM处理器。 ### 回答2: 想要学习ARM处理器作为嵌入式硬件工程师,以下是一些步骤和建议: 1. 获取基本知识:首先,了解嵌入式系统的基本概念和原理,包括处理器架构、外设接口和总线控制等。同时,理解ARM处理器的基本特性和指令集架构。 2. 学习文档和手册:ARM提供了详尽的文档和技术手册,包括ARM体系结构参考手册和特定系列处理器的数据手册。阅读这些文档可以深入了解ARM处理器的细节和工作原理。 3. 刷机器:获取一块ARM开发板,如Raspberry Pi、STM32开发板等,开始实践。通过刷入不同的固件和操作系统,尝试探索和理解ARM处理器的各种功能和特性。 4. 学习编程:掌握至少一种ARM汇编语言,如ARM汇编指令集。通过编写简单的汇编程序,了解ARM指令的使用方式和编程技巧。 5. 实践项目:找一些ARM相关的项目并动手实践。这可能包括编写设备驱动程序、移植操作系统、设计和优化嵌入式系统等。通过实际项目经验,能够更深入地理解ARM处理器的应用和工作原理。 6. 参加培训和课程:参加一些专门的培训或课程可以加快学习进程。这些课程通常涵盖ARM处理器的原理、编程、调试和性能优化等方面。同时,也可以结识其他学习者和行业专业人士,加强交流和合作。 总之,学习ARM处理器需要通过理论学习和实践相结合,阅读文档和手册、编程实践、参与项目和培训等多种方式相结合,逐步深入理解和掌握ARM处理器的知识和技能。 ### 回答3: 嵌入式硬件工程师学习ARM处理器可以按照以下步骤进行: 1. 学习计算机体系结构和数字电路基础知识:首先,需要掌握计算机的基本原理和体系结构,了解数据存储和处理以及数字电路的工作原理。 2. 了解ARM处理器的架构和体系结构:熟悉ARM处理器的具体架构和指令集,了解其寄存器、内存和外设控制等核心部件的工作原理。 3. 学习ARM指令集和编程:掌握ARM指令集的各种指令、寻址方式以及编程模型,了解常用的编程语言如C、汇编语言等在ARM处理器上的应用。 4. 搭建开发环境:安装并配置开发工具,如ARM开发板、调试器和集成开发环境(IDE),熟悉开发环境的使用方法。 5. 进行实践项目:通过各种实践项目,如LED灯控制、按键输入、串口通信等,逐渐深入理解ARM处理器的工作原理和应用。 6. 学习外设控制:了解不同的外设接口和控制原理,如GPIO、UART、I2C、SPI等,并掌握它们在ARM处理器上的配置和应用。 7. 学习操作系统和驱动程序:了解嵌入式操作系统如FreeRTOS、uC/OS等的基本概念和原理,并学习编写底层驱动程序以适配ARM处理器。 8. 参与开源社区和论坛:参与ARM相关的开源社区和论坛,与其他开发者交流经验和学习最新的技术动态。 9. 持续学习和更新知识:嵌入式领域的技术更新快,需不断学习新的技术和发展动态,关注ARM处理器的最新进展。 总之,学习ARM处理器需要系统地学习计算机体系架构、ARM指令集、外设控制、操作系统和驱动开发等知识,并通过项目实践和与他人交流不断提升技能和知识水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值