RISC-V架构与蜂鸟E200

本文用于记录与学习,参考
1.《手把手教你设计CPU.RISC-V处理器》(胡振波)
2. b站up主“芯来科技”相关教程
3. b站up主“Rong晔”相关教程
如有侵权,联系删除

一、RISC-V

1.1 特权模式

RISC-V 架构定义了 3 种工作模式,又称为特权模式(Privileged Mode)

  • Machine Mode:机器模式,简称 M Mode
  • Supervisor Mode:监督模式,简称 S Mode
  • User Mode:用户模式,简称 U Mode

1.2 模块化指令子集

RISC-V 的指令集使用模块化的方式进行组织,每一个模块使用一个英文字母来表示。RISC-V 最基本也是唯一强制要求实现的指令集部分是由 I 字母表示的基本整数指令子集。使用该整数指令子集,便能够实现完整的软件编译器。
其他的指令子集部分均为可选的模块,具有代表性的模块包括M/A/F/D/C

在这里插入图片描述

  • 以上模块的一个特定组合“IMAFD”,也被称为“通用”组合,用英文字母 G 表示。因此 RV32G 表示 RV32IMAFD,同理 RV64G 表示 RV64IMAFD
  • 为了提高代码密度,RISC-V 架构也提供可选的“压缩”指令子集,用英文字母 C 表示。压缩指令的指令编码长度为 16 比特,而普通的非压缩指令的长度为 32 比特
  • 为了进一步减少面积,RISC-V 架构还提供一种“嵌入式”架构,用英文字母 E 表示。该架构主要用于追求极低面积与功耗的深嵌入式场景。该架构仅需要支持 16 个通用整数寄存器,而非嵌入式的普通架构则需要支持 32 个通用整数寄存器。
  • 通过以上的模块化指令集,能够选择不同的组合来满足不同的应用。例如,追求小面积、低功耗的嵌入式场景可以选择使用 RV32EC 架构;而大型的 64 位架构则可以选择 RV64G。

二、蜂鸟E200

RISC-V是哈佛结构,即指令存储和数据存储是分开的

2.1 简单的RISC-V处理器结构

在这里插入图片描述

  • pc(program counter)寄存器:将指令从指令存储器读出来,决定读取哪条指令
  • ctrl模块:译码,确定取出的这个32位指令蕴含什么信息,为其他模块提供控制信号,地址信号和立即数值。如add指令被译码后得到操作数存放的寄存器地址,去取出相应位置的寄存器值
  • reg_file寄存器堆:存放寄存器值得地方
  • imm_gen立即数扩展模块:若ctrl译码得到的是addi指令,因为不能直接使用立即数,要进行立即数扩展,从指令中取出的立即数需要根据指令的结构进行扩展,将其扩展为32位后,才能进行运算
  • alu(arithmetic&logical unit)算数/逻辑运算单元

2.2 经典MIPS五级流水线

流水线本质上可以理解为一种以面积换性能(Trade Area for Performance)、以空间换时间(Trade Space for Timing)的手段。与其相对应的是状态机:状态机本质上可以理解为是一种以性能换面积(Trade Performance for Area)、以时间换空间(Trade Timing for Space)的手段
通过使用状态机,可以省掉上述流水线中的寄存器开销,还可以复用组合逻辑数据通路,因此面积开销比较小。但是每条指令都需要 5 个周期才能完成,吞吐率和性能很差。8051内核就没有流水线

  • 取指(IF):指令取指(Instruction Fetch)是指将指令从存储器中读取出来的过程
  • 译码(ID):指令译码(Instruction Decode)是指将从存储器中取出的指令进行翻译的过程。经过译码之后得到指令需要的操作数寄存器索引,可以使用此索引从通用寄存器组(Register File)中将操作数读出
  • 执行(EX):指令执行(Instruction Execute)是指对指令进行真正运算的过程。在“执行”阶段的最常见部件为算术逻辑部件运算器(Arithmetic Logical Unit,ALU),作为实施具体运算的硬件功能单元
  • 访存(MEM):访存(Memory Access)是指存储器访问指令将数据从存储器中读出,或者写入存储器的过程
  • 写回(WB):写回(Write-Back)是指将指令执行的结果写回通用寄存器组的过程。如果是普通运
    算指令,该结果值来自于“执行”阶段计算的结果;如果是存储器读指令,该结果来自于“访存”阶段从存储器中读取出来的数据
    在这里插入图片描述上图为经典MIPS五级流水线运行图,如果流水线没有停顿,理论上可以取得每个时钟周期都完成一条指令的性能

2.3 蜂鸟E200流水线总体结构

在这里插入图片描述

  1. 流水线的第一级为“取指(由 IFU 完成)”
  2. 蜂鸟 E200 处理器核很难严谨界定它的完整流水线级数为几级,原因如下:
  • 译码(由 EXU 中完成)执行(由 EXU中完成)和写回(由 WB 完成)均处于同一个时钟周期,位于流水线的第二级
  • 访存(由 LSU 完成)阶段处于 EXU之后的第三级流水线,但是 LSU 写回的结果仍然需要通 过 WB 模块写回通用寄存器组(Register File,Regfile)
  • 由于蜂鸟 E200 处理器核的流水线的按序主体是位于第一级的“取指”和位于第二级的“执行”和“写回”,因此非严谨地定义蜂鸟 E200 处理器核的流水线深度为二级

2.4 蜂鸟E200系列处理器特性

在这里插入图片描述

2.5 蜂鸟E203处理器内核

在这里插入图片描述

  • e203_cpu_top为整个系统的顶层,例化了2个模块,分别为e203_cpu,e203_srams,前者为处理器内核所有逻辑部分,后者为处理器内核所有sram部分,将两者分离,主要是方便asic的实现
  • e203_clk_ctrl 用于控制处理器各个主要组件的自动时钟门控
    e203_irq_sync 用于将外界的异步中断信号进行同步
    e203_reset_ctrl 用于将外界的异步 reset 信号进行同步使之变成“异步置位同步释放”的复位信号
    e203_itcm_ctrl 和 e203_dtcm_ctrl 用于控制 ITCM和 DTCM 的访问
    e203_core 则是处理器核的主体部分,其中实现了处理器核的主要功能(取指令单元 e203_ifu,执行单元e203_exu,存储器访问单元 e203_lsu,总线接口单元 e203_biu)

2.6 蜂鸟E203配置

通过修改目录下的config.v文件中的宏定义便可实现不同的配置,配置选项参照在《手把手教你设计CPU.RISV-V处理器》4.6节。详细配置见github上e200_opensource项目doc目录下《蜂鸟E203开源内核简介.pdf》

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值