CN103425498B - 一种低功耗的长指令字指令存储器及其优化功耗的方法 - Google Patents

一种低功耗的长指令字指令存储器及其优化功耗的方法 Download PDF

Info

Publication number
CN103425498B
CN103425498B CN201310363840.XA CN201310363840A CN103425498B CN 103425498 B CN103425498 B CN 103425498B CN 201310363840 A CN201310363840 A CN 201310363840A CN 103425498 B CN103425498 B CN 103425498B
Authority
CN
China
Prior art keywords
instruction
power consumption
memory
command memory
slot
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201310363840.XA
Other languages
English (en)
Other versions
CN103425498A (zh
Inventor
虞志益
俞政
于学球
刘宁希
曾晓洋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fudan University
Original Assignee
Fudan University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fudan University filed Critical Fudan University
Priority to CN201310363840.XA priority Critical patent/CN103425498B/zh
Publication of CN103425498A publication Critical patent/CN103425498A/zh
Application granted granted Critical
Publication of CN103425498B publication Critical patent/CN103425498B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Executing Machine-Instructions (AREA)

Abstract

本发明属于微处理器技术领域,具体涉及一种微处理器的指令存储器及其优化功耗的方法。本发明将指令存储器的位宽扩充为4条指令,并且,相应地对存储器的指令选择逻辑、选择信号、时钟信号进行修改,实现指令存储器的位宽扩展。另外,本发明还针对程序中可能出现的分支导致这种技术性能降低进行了功耗优化处理,保证本发明在有分支的情况下仍然能不差于原始的设计。与现有的架构相比,本发明提供的长指令字指令存储器及优化功耗的方法,能够在几乎不增加硬件开销、并且不影响处理器工作最高频率的情况下,有效地降低大部分嵌入式应用的访存功耗,从而降低整个处理器的功耗。

Description

一种低功耗的长指令字指令存储器及其优化功耗的方法
技术领域
本发明属于微处理器技术领域,具体涉及一种微处理器的指令存储器及其优化功耗的方法。
背景技术
指令存储器存储了源程序的指令代码,处理器根据运行时的程序计数器(PC)值从指令存储器中获取指令。现代微处理器的指令存储器一般由静态随机存储器(SRAM)构成,访问SRAM会造成SRAM核心进行充电和放电,以及一些外围电路的功耗。研究表明在嵌入式领域指令存储器功耗约为微处理器的功耗的30~40%,以至于指令存储器成为了微处理器的能量消耗主要部件。高能耗对微处理器特别是嵌入式应用领域的微处理器提出了挑战。因此,研究降低指令存储器功耗有十分重要的现实意义。
图1展示了传统的6级流水线的微处理器结构图。包括了取指令级、译码级、执行级、访存储器级、对齐级和写回级。
在传统的微处理器架构中,取指令级用到的指令存储器的位宽为1条指令,从而每次取新指令时都需要根据指令计数器(PC)去访问指令存储器,从而导致SRAM固有的充放电功耗以及外围电路的功耗。扩展后的指令存储器位宽为4,一次访问指令存储器可以取出4条指令,并且这四条指令被SRAM输出的锁存器锁存,下次取指令时,如果需要的指令已经被取出锁存,则不需要再去访问指令存储器的核心,从而避免了占据SRAM大部分功耗的充放电功耗,而只需要从锁存器中选择即可。实验表明4指令宽度的SRAM的访问功耗约为1指令宽度SRAM的2倍,从而可以期望获得50%的功耗降低。实际上由于分支指令会导致一些取出的指令作废,使得实际的降低不会这么明显,本发明还提出了软件优化算法来优化最坏情况下本发明技术的性能。
发明内容
本发明的目的在于提供一种可大幅降低功耗的指令存储器以及优化功耗的方法。
本发明通过扩展指令存储器的位宽为4条指令,可以减少对指令存储器的访问的频率,从统计上减少了平均获取一条指令引起的功耗,从而降低了指令存储器的访问功耗,由于指令存储器的功耗占据了整个处理器功耗的相当大比例(30~40%),从而也明显降低了整个处理器的功耗。
本发明提出的指令存储器,是以现有的微处理器的架构为基础(即微处理器结构如图1所示,包括取指令级、译码级、执行级、访存储器级、对齐级和写回级),将指令存储器的位宽从原始1条指令扩展到4条指令,即将相邻的4条指令并为一条长指令字,每次访问指令存储器可以获取4条指令;相应地依次对指令存储器的地址信号、选择信号、时钟信号进行修改,具体的修改方式为:1、对于指令存储器的地址信号,采用处理器指令计数器(PC)除去低二位的值进行选择(因为在本发明中指令存储器的位宽从1条指令扩展到4条指令);2、对于指令存储器的选择信号,在原始设计中,指令存储器的选择信号一直有效,在本发明中,只有当需要访问指令存储器时,选择信号才有效(具体需要访问指令存储器的情况有两种,其一是程序计数器PC的低二位为2’b00,其二为当程序执行遇到分支指令时);3、对于指令存储器的时钟信号,原始设计中该时钟信号一直有效,本发明中,只有出现2中所述的需要访问指令存储器的情况时,才将指令存储器的时钟打开,否则将其利用门控时钟进行屏蔽,最终实现指令存储器的位宽扩展。这样,当微处理器不需要访问指令存储器、而从指令存储器的输出锁存器中获取指令时,选择信号和时钟信号均被无效,从而减小了指令存储器的功耗。由于本发明把指令存储器的位宽从原始1条指令扩展到4条指令,因此称其为长指令字指令存储器。
基于上述长指令字指令存储器,本发明还提出优化功耗的方法,该方法通过软件工具实现。该软件能够在编译时期静态地遍历整个汇编程序,找到由于分支导致的最坏情况的出现,并且按照本发明的方法,进行代码优化,使得调整后的代码能够保证本发明的功耗小于现有技术功耗。该方法的具体步骤为:
1、第一个while循环首先来确定那些在长指令字第一个槽的分支指令,如果找到了,就把label这个容器的对应的位置置为1,否则为0,为下一个循环做准备;
2、第二个循环则重新开始扫描汇编代码,如果当前指令是分支目的地,并且是位于长指令字的第4个槽(即最后一个槽),并且分支到这里的指令对应的label的位置为1(表示该分支指令在长指令字第一个槽),那么就表示最坏的情况出现了(最坏情况在图4中给出);
3、具体的优化策略是用一个nop代替这条目的地指令,并且将新的汇编输出到输出文件中;
4、按照步骤(1)、(2)和(3),重复扫描汇编代码,直到原始的汇编代码全部扫描完毕。
本发明将指令存储器的位宽扩充为4条指令,最理想的情况下,存储器核心充放电一次可以提供4条指令,从而减少了访问了存储器核心充放电的次数,对于4位宽长指令字存储器,核心充放电的功耗相对1位宽指令字存储器增加了2倍,从而可以获得平均功耗的降低。另外,本发明还针对程序中可能出现的分支导致这种技术性能降低进行了优化处理,保证本发明技术在有分支的情况下仍然能不差于原始技术的设计。
与现有的架构相比,本发明提供的长指令字指令存储器及优化功耗的方法,能够在几乎不增加硬件开销、并且不影响处理器工作最高频率的情况下,有效地降低大部分嵌入式应用的访存功耗,从而降低了整个处理器的功耗。
附图说明
图1是传统的6级流水线微处理器架构。
图2是长指令字存储器逻辑和架构设计。
图3是评估函数f的定义和说明。
图4是最坏情况的实例和优化策略。
具体实施方式
下面结合附图和实例,进一步描述长指令字指令存储器及优化功耗的方法。
图2 展示了长指令字存储器逻辑和架构设计,首先,指令存储器的位宽从原先的1条指令扩展为现在的4条指令,原先一次取出1条指令(32位)现在可以取出128位的4条指令,这样,原先用指令计数器PC现在改进为PC的取出低二位的部分,定义了存储器的时钟m_clk和存储器选择信号m_ce,当PC的低二位为00或者遇到分支指令时,必须访问指令存储器,因此此时中间变量存储器访问mem_acc为1有效,否则不需要访问存储器,mem_acc为0无效,如果mem_acc有效,此时,m_ce有效,反正m_ce无效,如果mem_acc有效,则m_clk必须启动,否则被门控关掉。取出的指令被锁存在输出的寄存器/锁存器,然后根据PC的低二位来选择某一个32位指令被选中。
图3展示了评估函数f的定义,f是用来评估长指令字技术(LIWM)相对于原始的单指令字存储(1IWM)是更优或者更差。这里的公式的参数定义见图3所示,具体为:
f=valid_inst_cnt - mem_acc_cnt * pwr_ratio
其中,mem_acc_cnt表示指令存储器访问次数;
valid_inst_cnt表示有效的指令数目;
pwr_ratio表示LIWM访问功耗/ 1IWM访问功耗;
当f > 0时,表明LIWM比1IWM消耗少的功耗;
当f < 0时,表明LIWM比1IWM消耗多的功耗。
如果按照该公式计算出的f大于0,则表明LIWM比1IWM更优,否则LIWM比1IWM更差。
图4展示最坏情况和优化策略。首先在(a)中可以看出,如果分支指令出现在长指令字的第一个槽,并且跳转到目的地的指令在下一个长指令字的最后一个槽,那么,有效的指令(无阴影部分的指令)数目为3,而却要访问两次存储器,造成f小于0,这种情况下本发明的技术将比原始技术更差。然后在(b)中给出了优化的策略,即在分支目的地前插入了以nop(空指令),将目的地指令排到下一个长指令,(b)中分情况讨论得到的结果显示,不论在何种情况下,f总是不小于0,从而可以保证本发明的技术不会比原始技术差。
附录 为本发明优化功耗的方法的代码,展示了通过编译时静态扫描汇编代码,发现最坏情况,并且自动优化最坏情况的算法。该算法第一个while循环首先来确定那些在长指令字第一个槽的分支指令,如果找到了,就把label这个容器的对应的位置置为1,否则为0,为下一个循环做准备。第二个循环则重新开始扫描汇编代码,如果当前指令是分支目的地,并且是位于长指令字的第4个槽(最后一个槽),并且分支到这里的指令对应的label的位置为1(表示该分支指令在长指令字第一个槽),那么就表示最坏的情况出现了(最坏情况在图4中给出),优化策略就是用一个nop代替这条目的地指令,并且将新的汇编输出到输出文件中。程序不停地执行直到原始的汇编代码全部扫描完毕。
附录
算法: 最坏情况优化
输入: 源程序汇编代码src_inst
参数: 计数器i, 容器label, 临时指令inst_tmp
输出: 优化后的汇编代码 opt_inst
初始化: 甚至i 为 0, 清空 label, 设置 src_inst 到开始位置
00: while(!src_inst.end())
01: inst_tmp=src_inst.getOneInst();
02: if(inst_tmp.isBranch()) // 如果分支在指令字的第一个槽,设置label 为1
03: label[inst_tmp.getLabel()] = i== 0 ? 1 : 0; i = i== 3 ? 0 :i+ 1; // 更新 label, i
04: endif
05: endwhile
// 重置 i 为 0,src_inst 到开始位置
06: while(!src_inst.end())
07: inst_tmp=src_inst.getOneInst();
08: if(inst_tmp.isBranchTarget() && i== 3 && label[inst_ tmp.getLabel()]) // 最坏情况
09: opt_inst.putOneInst(nop);opt_inst.putOneInst(inst_tmp); i =1; //插入一个 nop
10: else
11: opt_inst.putOneInst(inst_tmp); i = i== 3 ? 0 : i+ 1; // 更新i
12: endif
13: endwhile。

Claims (2)

1.一种长指令字指令存储器,以现有的微处理器架构为基础,所述微处理器包括取指令级、译码级、执行级、访存储器级、对齐级和写回级,其特征在于,将指令存储器的位宽从原始1条指令扩展到4条指令,即将相邻的4条指令并为一条长指令字,每次访问指令存储器可以获取4条指令,并且,相应地依次对指令存储器的地址信号、选择信号、时钟信号进行修改,具体的修改方式为:
(1)对于指令存储器的地址信号,采用处理器程序计数器PC除去低二位的值进行选择;
(2)对于指令存储器的选择信号,只有当需要访问指令存储器时,选择信号才有效,需要访问指令存储器的情况有两种,其一是程序计数器PC的低二位为2’b00,其二为当程序执行遇到分支指令时;
(3)对于指令存储器的时钟信号,只有出现需要访问指令存储器的第二种情况时,才将指令存储器的时钟打开,否则将其利用门控时钟进行屏蔽;在最后选择1条指令供给处理器时,再按照程序计数器PC的最低二位,选择哪一个长指令的槽被选中: 即PC最低二位,如果为00,则选择长指令的第一个槽的指令,如果为01,则选择长指令的第二个槽的指令,如果为10,则选择长指令的第三个槽的指令,如果为11,则选择长指令的第四个槽的指令,最终实现指令存储器的位宽扩展。
2.基于权利要求1所述长指令字指令存储器的优化功耗的方法,其特征在于具体步骤为:
(1)利用一个while循环首先来确定那些在长指令字第一个槽的分支指令,如果找到了,就把label容器的对应的位置置为1,否则为0,为下一个循环做准备;
(2)利用第二个循环重新开始扫描汇编代码,如果当前指令是分支目的地,并且是位于长指令字的第4个槽,即最后一个槽,并且分支到这里的指令对应的label的位置为1,则确定当前位置为待优化点;
(3)用一个nop代替这条目的地指令,并且将新的汇编输出到输出文件中;
(4)按照步骤(1)、(2)和(3),重复扫描汇编代码,直到原始的汇编代码全部扫描完毕。
CN201310363840.XA 2013-08-20 2013-08-20 一种低功耗的长指令字指令存储器及其优化功耗的方法 Active CN103425498B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310363840.XA CN103425498B (zh) 2013-08-20 2013-08-20 一种低功耗的长指令字指令存储器及其优化功耗的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310363840.XA CN103425498B (zh) 2013-08-20 2013-08-20 一种低功耗的长指令字指令存储器及其优化功耗的方法

Publications (2)

Publication Number Publication Date
CN103425498A CN103425498A (zh) 2013-12-04
CN103425498B true CN103425498B (zh) 2018-07-24

Family

ID=49650292

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310363840.XA Active CN103425498B (zh) 2013-08-20 2013-08-20 一种低功耗的长指令字指令存储器及其优化功耗的方法

Country Status (1)

Country Link
CN (1) CN103425498B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104714777A (zh) * 2013-12-11 2015-06-17 上海华虹集成电路有限责任公司 微控制器取指令方法及其实现电路
CN107423816B (zh) * 2017-03-24 2021-10-12 中国科学院计算技术研究所 一种多计算精度神经网络处理方法和系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1560732A (zh) * 2004-03-03 2005-01-05 浙江大学 静态实现数据旁路及寄存器文件数据写入控制的处理器及编译方法
CN101002169A (zh) * 2004-05-19 2007-07-18 Arc国际(英国)公司 微处理器架构
CN102156629A (zh) * 2011-05-04 2011-08-17 苏州国芯科技有限公司 32位指令扩展的方法
CN102855120A (zh) * 2012-09-14 2013-01-02 北京中科晶上科技有限公司 超长指令字vliw的处理器和处理方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1560732A (zh) * 2004-03-03 2005-01-05 浙江大学 静态实现数据旁路及寄存器文件数据写入控制的处理器及编译方法
CN101002169A (zh) * 2004-05-19 2007-07-18 Arc国际(英国)公司 微处理器架构
CN102156629A (zh) * 2011-05-04 2011-08-17 苏州国芯科技有限公司 32位指令扩展的方法
CN102855120A (zh) * 2012-09-14 2013-01-02 北京中科晶上科技有限公司 超长指令字vliw的处理器和处理方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
A Low Power Register File with Asynchronously Controlled Read-Isolation and Software-Directed Write-Discarding;Zheng Yu等;《Circuits and Systems, 2013 IEEE International Symposium on》;20130801;全文 *

Also Published As

Publication number Publication date
CN103425498A (zh) 2013-12-04

Similar Documents

Publication Publication Date Title
CN107003837B (zh) 用于推测性编译器优化的轻量级受限事务存储器
Biswas et al. Introduction of local memory elements in instruction set extensions
US20120192167A1 (en) Runtime Extraction of Data Parallelism
US20150268940A1 (en) Automatic loop vectorization using hardware transactional memory
KR101817459B1 (ko) 1들을 최하위 비트들이 되도록 풀링하면서 비트들을 좌측으로 시프팅하기 위한 명령어
US20110047534A1 (en) Proactive loop fusion of non-adjacent loops with intervening control flow instructions
CN103218029B (zh) 一种超低功耗处理器流水线结构
CN103425498B (zh) 一种低功耗的长指令字指令存储器及其优化功耗的方法
DE102013202992A1 (de) Energieeinsparung bei Verzweigungsvorhersage
DE102013202995A1 (de) Energieeinsparung in Verzweigungsvorhersagen
JP2010026716A (ja) キャッシュメモリ制御回路及びプロセッサ
US8065486B2 (en) Cache memory control circuit and processor
WO2011151944A1 (ja) キャッシュメモリ装置、プログラム変換装置、キャッシュメモリ制御方法及びプログラム変換方法
US20160378492A1 (en) Decoding Information About a Group of Instructions Including a Size of the Group of Instructions
CN101196808A (zh) 一种8位微控制器
US7721054B2 (en) Speculative data loading using circular addressing or simulated circular addressing
US11687344B2 (en) Method and system for hard ware-assisted pre-execution
CN100409180C (zh) 用于处理指令循环的方法和系统
US20160378494A1 (en) Processing Encoding Format to Interpret Information Regarding a Group of Instructions
US7606991B2 (en) Dynamic clock switch mechanism for memories to improve performance
CN103186474B (zh) 对处理器的高速缓存进行清除的方法以及该处理器
Zhang et al. Reducing data cache leakage energy using a compiler-based approach
JP2003140910A (ja) Vliwプロセッサにおけるバイナリトランスレーション方法
Wu et al. Instruction buffering for nested loops in low-power design
Rohde et al. Improving HLS generated accelerators through relaxed memory access scheduling

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant