[0030] 下面根据本发明实施例中的附图对本发明实施例中的方法进行完整、清楚、细致的描述,使本发明的目的和效果变得更加具体明显。本发明设计了一种能耗低、性能功耗比高的处理器。
[0031] 本发明主要从系统层面、处理器层面、单元层面、寄存器层面、SRAM层面、组合逻辑层面等几个方面进行设计。
[0032] 系统层面的低功耗设计主要是将SoC系统划分为两种不同的电源域,即主域和常开域,其中分别放置不同的功能模块,使其能够实现在特定时刻支持将SoC中的大部分硬件关闭电源;然后将SoC系统对应上述不同电源域划分出不同的时钟域,使其能够支持小部分电路以低速低功耗的方式进行;接着需要配备功耗管理单元控制进入或者退出不同的功耗模式。
[0033] 处理器层面的低功耗设计主要是在处理器的指令集中定义一种休眠指令,当处理器执行到该指令时,将会停止执行当前的指令流,进入一种空闲状态,直到处理器接收到中断,处理器才会被唤醒,也就是运行该指令后处理器便进入到休眠状态。然后需要将休眠状态分为浅度休眠和深度休眠两种状态,浅度休眠状态是将处理器核的整个时钟关闭,但是仍然会保留电源供电,因此就可以节省动态功耗,但是静态漏电功耗仍然会有消耗,深度休眠状态是将处理器核的时钟和电源全部关闭,这样就可以同时节省动态和静态功耗。当处理器进入深度休眠断电后,其内部上下文状态可以采用在处理器核内部使用单口SRAM进行保存和恢复,这种SRAM在主电源被关闭后可以使用极低的漏电消耗保存处理器的状态,它可以使处理器休眠和唤醒的速度极快。
[0034] 模块和单元层面的低功耗设计需要将独立的时钟门控单独配备于每个功能完整的单元,当该模块或者单元空闲时,可以使用时钟门控将其时钟关闭以节省动态功耗,对于一些独立且规模较大的模块就可以划分出独立的电源域以进一步节省静态功耗。
[0035] 寄存器层面的低功耗设计主要对数据通路寄存器进行设计。为了减少不必要的动态功耗,需要在每级流水线都配置一位控制位,用以表示该级流水线是否为有效指令,当指令加载至此级流水线时会将控制位设为高位,向数据通路寄存器加载数据信息,离开此级流水线时将此控制位清零,数据通路寄存器无须清零,这样保持寄存器中的值不变,减少数据通路寄存器的翻转率,从而大幅减少动态功耗。
[0036] SRAM层面的低功耗设计需要在对处理器进行低功耗设计中动态的选用合适的SRAM,且尽量去减少SRAM的读写。由于常规的SRAM通常分为单口SRAM、一读一写SRAM、双口SRAM,为了避免高功耗的出现,优先选择功耗与面积小的SRAM,还需要对SRAM的数据宽度进行综合权衡,以减少其对面积的影响,所以在选择中会优先选取单口SRAM使用,之后会根据该指令所需数据的大小进行动态选择。同时给SRAM配备独立的时钟门控,在空闲时关闭SRAM的时钟可以节省动态功耗,在处理器的低功耗模式下可以将SRAM的电源关闭以防止漏电。
[0037] 组合逻辑层面的低功耗设计要尽量将大的数据通路或者运算单元进行复用,使各个功能子单元共享一份实际的运算数据通路,然后还需要避免使用除法、乘法等大面积的运算单元,需要将乘、除运算分解进行,尽量将其转化为加减法运算,通过使用尽量少的组合逻辑面积减少静态功耗。
[0038] 如图1所示,一种低功耗的处理器,包括功耗管理模块、取指模块、译码模块、执行模块、访存模块、写回模块、流水线控制模块和数据模块。
[0039] 功耗管理模块用于控制取指模块、译码模块、执行模块、访存模块、写回模块以及数据模块中各个SRAM的工作状态;取指模块用于读取指令PC值,并在PC中截取有效地址位,根据地址在指令存储器中取出指令;译码模块对指令进行译码,并在数据模块中取出指令的源操作数;执行模块用于分支跳转指令的跳转PC值和整形指令、乘除法指令结果的计算以及访存指令中访存地址的计算;访存模块根据执行模块计算出来的访存地址来对数据模块中寄存器进行读写;写回模块根据目的寄存器号将计算结果写回到数据模块的寄存器中;同时取指模块、译码模块、执行模块、访存模块、写回模块这五个模块依次相连以完整的运行每条指令;流水线控制模块分别与取指模块、译码模块、执行模块、访存模块、写回模块相连以完成5级流水线控制以及与数据模块相连以完成SRAM寄存器的选择;数据模块分别与执行模块、访存模块、写回模块相连以实现数据的传输。
[0040] 取指模块、译码模块、执行模块、访存模块和写回模块采用5级流水线的模式进行布置,使处理器可以在一个时钟周期内同时处理多条指令,这样可以有效提高处理器的工作频率及吞吐量。
[0041] 所述的功耗管理模块包括总线时钟单元和总线电源单元;
[0042] 所述的取指模块包括指令存储器和取指模块流水寄存器;
[0043] 所述的译码模块包括拆分单元、整形译码单元、分支跳转译码单元、访存译码单元、乘除译码单元和译码模块流水寄存器;
[0044] 所述的执行模块包括整型执行单元、乘法执行单元、除法执行单元、访存执行单元和执行模块流水寄存器;
[0045] 所述的访存模块包括缓存单元、读写单元和访存模块流水寄存器。
[0046] 所述的写回模块包括处理单元;
[0047] 数据模块包括一读一写SRAM、单口SRAM、双口SRAM和数据通路寄存器;
[0048] 取指模块、译码模块、执行模块、访存模块、写回模块以及数据模块中的一读一写SRAM、单口SRAM、双口SRAM都有独立的时钟控制单元和电源控制单元,并通过功耗管理模块中的总线时钟单元、总线电源单元控制。
[0049] 本发明将处理器分为正常和低功耗两种模式,通过功耗管理模块控制处理器进入不同模式。在处理器为正常模式工作的情况下,功耗管理模块中的总线时钟单元和总线电源单元开启,同时各个功能模块开始工作,首先取指模块根据指令PC值读取在指令存储器中的指令,然后取指模块将指令发送至流水线控制模块并完成指令的检测,流水线控制模块通过5级流水线中的控制位表示该级流水线是否有有效指令,若为无有效指令则该级流水线控制位置0,流水线控制模块将指令PC值以及指令传入取指模块流水寄存器,然后流水线控制模块将控制译码模块、执行模块、访存模块、写回模块依次关闭;若为休眠指令则功耗管理模块将控制处理器进入低功耗模式;若为有效指令则该级流水线控制位置1,数据模块将通过该指令所需数据量来选择相应的SRAM里的数据进行传输,一般选取单口SRAM传输,当该指令所需数据量超过设定的最大阈值时,将选择双口SRAM数据进行传输,以便可以使数据可以快速的从存储器中读取出来,当该指令所需数据量低于设定的最小阈值时,将选择一读一写SRAM数据进行传输,以达到资源合理利用、降低功耗的目的。将指令所需数据从选用的SRAM中传入数据通路寄存器中等待调用,并将指令PC值以及指令传入取指模块流水寄存器中,这样可以减少数据通路部分的寄存器翻转率,减少处理器的动态功耗。
[0050] 然后通过取指模块流水寄存器将PC值以及指令传输至译码模块,译码模块将指令写入拆分单元进行分离,获得操作码、源寄存器号以及目的寄存器号。然后将拆分出来的操作码通过四种类型的指令译码单元进行译码,判断当前运算指令类型。同时译码模块根据源寄存器号的值进入数据模块对数据通路寄存器进行数据读取,将源操作数从数据通路寄存器中取出,然后将指令PC值、运算指令类型、目的寄存器号以及源操作数传入译码模块流水寄存器中。所述的四种类型的指令译码单元包括整形译码单元、分支跳转译码单元、访存译码单元、乘除译码单元,
[0051] 然后通过译码模块流水寄存器将指令PC值、运算指令类型、目的寄存器号以及源操作数传输至执行模块,执行模块根据运算指令类型在对应的指令执行单元进行相应的计算。若为分支跳转指令,则在整型执行单元中判断跳转条件是否成立,若跳转条件成立则计算分支跳转PC值并将分支跳转的使能信号、分支跳转PC值直接传输至取指模块;若为整型指令,则在整型执行单元中进行运算;若为乘、除法指令,则分别在乘法执行单元、除法执行单元中进行运算;若为访存指令,则在访存执行单元中进行访存地址的运算,并将访存的使能信号、访存数据以及访存地址信号不经过执行模块流水寄存器直接传输至访存模块,这样可以避免造成流水线拥堵。执行模块运算结束后将指令PC值、运算指令类型、运算结果或访存数据、访存地址、目的寄存器号传输至执行模块流水寄存器中。
[0052] 然后通过执行模块流水寄存器将指令PC值、运算指令类型、运算结果或访存数据、访存地址、目的寄存器号传输至访存模块,若当前指令为整型、乘除法指令,则将指令PC值、运算指令类型、运算结果及目的寄存器号直接写入缓存单元。若当前指令为访存类指令中的写数据指令,则首先访存模块将访存数据的值传入读写单元进行字对齐后再将进行字对齐后的数据写入数据模块的数据通路寄存器中,随后根据访存的使能信号、访存地址信号的值将数据通路寄存器中的数据写入访存地址对应的SRAM存储器中。如果当前指令为读数据指令,则数据模块会根据访存地址在SRAM存储器中读出数据传至数据通路寄存器中,再将数据通路寄存器中的数据传入读写单元。最后访存模块将读写单元中的读取数据、缓存单元中的指令PC值、运算指令类型、运算结果和目的寄存器号传入访存模块流水寄存器中。
[0053] 然后通过访存模块流水寄存器将读写单元中的读取数据、缓存单元中的指令PC值、运算指令类型、运算结果和目的寄存器号传输至写回模块,写回模块首先将数据写入处理单元,通过处理单元将数据中的读取数据、运算结果进行对齐,然后写回模块将将需要写回的数据写回到数据模块的数据通路寄存器中,再根据目的寄存器号将数据通路寄存器中的写回数据写入相应的SRAM寄存器中。
[0054] 取指模块、译码模块、执行模块、访存模块、写回模块以及数据模块中的一读一写SRAM、单口SRAM、双口SRAM都配置了独立的时钟控制单元和独立的电源控制单元,所有独立的时钟控制单元和独立的电源控制单元均由功耗管理模块中的总线时钟单元和总线电源单元控制,当取指模块、译码模块、执行模块、访存模块、写回模块以及数据模块中的一读一写SRAM、单口SRAM、双口SRAM出现闲置时,总线时钟单元立即控制对应的独立时钟控制单元关闭,等待5个时钟周期,若5个时钟周期后取指模块、译码模块、执行模块、访存模块、写回模块以及数据模块中的一读一写SRAM、单口SRAM、双口SRAM仍然为闲置状态将通过总线电源单元控制对应的独立电源控制单元关闭,这样可以有效的降低处理器的功耗。
[0055] 当处理器进入低功耗模式时,处理器将将直接选择调用2单口SRAM中的数据,并且由于处理器中的取指模块、译码模块、执行模块、访存模块、写回模块以及数据模块中的一读一写SRAM、单口SRAM、双口SRAM都有独立的时钟控制单元和电源控制单元并通过功耗管理模块中的总线时钟单元、总线电源单元控制,一旦处理器中的取指模块、译码模块、执行模块、访存模块、写回模块以及数据模块中的一读一写SRAM、单口SRAM、双口SRAM处于闲置状态,总线时钟单元将控制对应的独立时钟控制单元关闭,等待时间将缩短为1个时钟周期,若1个时钟周期后取指模块、译码模块、执行模块、访存模块、写回模块以及数据模块中的一读一写SRAM、单口SRAM、双口SRAM仍然为闲置状态将通过总线电源单元控制对应的独立电源控制单元关闭,以节省动态功耗。