低功耗设计二之Bypassing(旁路)
通过缩短部分指令流水线级数,减少IO口变化及寄存器赋值,以达到降低动态功率的目的,首先对指令进行分类如下。
指令分类:
(1) IF ID EX MEM WB
LOAD
(2) IF ID EX MEM NOP
STORE JMPR BZ BNZ BN BNN BC BNC
(3) IF ID EX NOP WB
LDIH ADD ADDI ADDC SUB SUBI SUBC AND OR XOR SLL SRL SLA SRA
(4) IF ID NOP NOP NOP
CMP
(5) IF NOP NOP NOP NOP
JUMP(直接跳转)
(6) NOP NOP NOP NOP NOP
NOP
可看出,(3)类指令可将wb前移,略去流水线mem,因其对它无贡献。但是前移的前提条件是前面未出现(1)类指令,或(1)类指令被(2)(4)(5)(6)类指令刷除其作用。
优化模拟效果图如下:
模型转换为实际时,时序问题应理得非常清楚,判断状态值与EX同步,则需在ID对状态赋值,方可在EX时对其调用。
基本步骤如下:
(a)在ID内对状态进行初始化为lower(可降低功耗)状态,判断下一周期内指令即ex_ir是否为(1)类指令,若是,状态变为normal。若为(2)(4)(5)(6)类指令,状态变为power,否则状态不变;
(b)在ex_ir内判断当前指令是否为(3)类且状态为lower(与ID时获得此次状态),若是则传入mem内指令为NOP;
(c)在mem_ir内判断ex_ir是否为(3)类指令且状态为lower,若是则WB传入ex_ir,且将ALUo赋值给reg_C1,否则传入mem_ir。
仿真检验功耗否能够降低(此处仿真执行语句绝大部分为能够优化的语句以便观察实验现象)
优化前:
优化后:
整体功耗降低为原来的74%
参考:《Low-Power Pipelined MIPS Processor Design》
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步