(一)IFU模块
(1)根据PC的地址访问ITCM或者BIU (地址判别与ICB总线MASTER接口) (e203_ifu_ift2icb.v)
首先存储器ITCM与Icache的优缺点:
- ITCM(Tightly Coupled Memory):访问延迟小且每次访问的延迟固定,但是由于使用地址区间寻址,无法映射整个地址空间(由于极低功耗处理器都应用于实时性较高的场景中,更倾向于延迟确定的ITCM)
- Icache:访问延迟较ITCM要大,且如果发生cache miss情况,延迟就会增大,所以访问延迟不是固定的,但是cache可以映射整个地址空间。
由于蜂鸟E203支持压缩指令集,所以指令的地址可能不对齐,但是处理器的理想状况是能够连续不断地在每一个周期读出一条完整的指令。
对于普通指令非对齐的情况,可以使用剩余缓存(leftover Buffer)即保存上一次取指令没有用完的比特位,下一次使用。只用到16位大小有两种情况:
- 将此次取出的32位低16位与上一次取出的高16位组成一条32位指令(将上次的高16位存放在leftover Buffer)
- 这个指令本身只有16位
分支跳转指令非对齐:由于跳转指令的话,前一次所取到的高16位没有作用。一半采用多体(Bank)的SRAM进行指令存储。使用两块32位宽的SRAM交错存储,两个连续的32位指令字会被分别存储在两块不同的SRAM中(蜂鸟没有设计这部分)。
(为了支持16位压缩指令集,每取指一条指令之后以最快的速度判断当前指令的宽度是16位或者32位,RISC-V将指令长度指示码放在指令的最低位,以11代表32位指令)
1、IFU有两个ICB接口,一个用于访问ITCM(数据宽度为64位),另一个用于访问BIU(数据宽度为32位)
2、根据IFU 访问的地址区间