蜂鸟学习笔记E203(七)——写回、存储器和ICB总线

一、 蜂鸟E203处理器的写回硬件实现

核心思想如下

  • 将指令划分为单周期指令和长指令两大类
  • 将长指令的交付和写回分开,使得即使执行力多周期的长指令也不会阻塞流水线,妨碍单指令

主要包含最终写回仲裁、长指令写回仲裁
蜂鸟学习笔记E203(七)——写回、存储器和ICB总线_第1张图片

最终写回仲裁

长指令的写回比单周期指令的写回具有更高的优先级,在没有长指令写回的空闲周期,后面的单周期指令可以随时写回,乱序写回。
最终写回仲裁的部分源代码如下所示

module e203_exu_wbck(

  //////////////////////////////////////////////////////////////
  // The ALU Write-Back Interface
  input  alu_wbck_i_valid, // Handshake valid //alu表明有指令需要写回
  output alu_wbck_i_ready, // Handshake ready //wbck向alu返回读写反馈请求
  input  [`E203_XLEN-1:0] alu_wbck_i_wdat, // 从alu写回的数据值
  input  [`E203_RFIDX_WIDTH-1:0] alu_wbck_i_rdidx, // 写回的寄存器索引值
  // If ALU have error, it will not generate the wback_valid to wback module
      // so we dont need the alu_wbck_i_err here

  //////////////////////////////////////////////////////////////
  // The Longp Write-Back Interface
  input  longp_wbck_i_valid, // Handshake valid //表明有长指令需要写回
  output longp_wbck_i_ready, // Handshake ready //wbck向longpwbck返回读写反馈请求
  input  [`E203_FLEN-1:0] longp_wbck_i_wdat, // 从longpwbck写回的数据值
  input  [5-1:0] longp_wbck_i_flags, // 从longpwbck写回标志
  input  [`E203_RFIDX_WIDTH-1:0] longp_wbck_i_rdidx, // 从longpwbck写回的寄存器索引
  input  longp_wbck_i_rdfpu, // 从longpwbck写回到FPU的标志

  //////////////////////////////////////////////////////////////
  // The Final arbitrated Write-Back Interface to Regfile
  output  rf_wbck_o_ena, // 写使能
  output  [`E203_XLEN-1:0] rf_wbck_o_wdat, // 写回的数据值
  output  [`E203_RFIDX_WIDTH-1:0] rf_wbck_o_rdidx,  // 写回的寄存器索引


  
  input  clk,
  input  rst_n
  );

OITF模块和长治零写回仲裁模块

这两个模块完成所有长指令的写回操作。
执行不同的长指令所需要的周期数不同,我们使用OITF来纪录长治零的先后关系。OITF红的每个表项都带有一个指针(Instruction Tag),每个长指令都会带着这个ITAG。只要没有发生寄存器冲突都可以乱序写回,但是会增加硬件设计。

总结

E203如果只考虑单周期指令则为“顺序发射、执行写回”
如果仅讨论长指令“顺序发射、乱序执行、顺序写回”
如果都考虑“顺序发射、乱序执行、乱序写回”

二、 蜂鸟E203处理器的存储器

没有缓存

有一些低功耗处理器是不使用缓存的主要有以下几个原因

  • 无法保证实时性。有可能发生缓存不命中(cache miss),这就需要到外部存储器读取数据,所以一般使用ITCM和DTCM
  • 代码量较少
  • 面积和功耗考虑

ARM CortexM0、3、4都没有配备缓存 7配有缓存,是双发射6级流水线的CPU

一定要有存储器

哈佛体系结构特点

  • 将程序和数据存储在不同的存储空间中国,每个存储器独立编址,独立访问
  • 与两个存储器相对应的是两条独立的指令总线和数据总线。这样可以使得处理器在一个时钟周期内同时获得指令字和操作数
  • 取址和执行可以并行执行

ITCM和DTCM

M3和M4就配置了这两个,原因如下

  • 能够保证实时性,不存在缓存不命中的情况,延迟是可知的
  • 满足代码量要求
  • 面积功耗小

RISC-V对于存储器访问指令的简化

  1. 仅支持小端格式
  2. 无地址自增自减模式
  3. 无一次读多个数据和一次写多个数据的指令

蜂鸟学习笔记E203(七)——写回、存储器和ICB总线_第2张图片

AGU:负责读和写指令,以及A拓展指令集生成存储器访问地址
LSU:主要作为存储器访问的控制模块

三、 ICB总线

你可能感兴趣的:(蜂鸟E203,fpga开发)