本申请要求于2014年6月27日提交的标题为“METHOD FOR IMPLEMENTING EFFICIENT ENTROPY DECODER BY USING HIGH LEVEL SYNTHESIS(通过使用高级综合来实施高效熵解码器的方法)”的美国非临时专利申请第14/317,860号的优先权并且是该案的继续申请,该申请所公开的内容以引用的方式全部并入本文。
背景技术:
高级综合工具可以从高级源代码(例如,C、C++)创建寄存器传输级(RTL)(例如,VHDL/verilog/systemVerilog)代码。高级综合使测试和改变RTL硬件有效,这是因为可以对高级源代码进行改变,而不是重写RTL,重写RTL是缓慢并且容易出错的过程。算术编码可能是现代视频压缩标准(例如,VP8/VP9/HEVC/H264)的一种复杂因素,并且,如果硬件加速器实施成RTL,则算术编码的调试/测试可能是一项繁琐的任务。为了解决这一问题,使用高级综合。然而,算术编码可能非常依赖于数据,并且非线性算法高级综合工具在试图从高级源代码生成RTL代码时可能会出现问题。
结果,由于对算术编码进行的综合出现故障,硬件加速器的高级综合通常也会出现故障。这些故障导致硬件加速器设计的过度调试/测试。当子元件在系统综合期间重复地出现故障以导致系统的过度调试/测试时,相似的复杂系统具有对应的缺点。
技术实现要素:
本公开涉及在针对包括硬件定义的系统综合源代码之前用从源代码综合成的寄存器传输级(RTL)定义代替与硬件定义对应的源代码元素。
在一般方面中,公开了一种存储有计算机可执行程序代码的非暂时性计算机可读存储介质,该计算机可执行程序代码在计算机系统上执行时,使得该计算机系统执行步骤。该步骤包括:接收源代码的一部分,该源代码包括定义集成电路的元件的第一程序模型,基于源代码的所述部分来生成第一寄存器传输级(RTL)描述,基于所述第一RTL描述来定义库组件,接收包括定义集成电路的第二程序模型的源代码,用库组件代替与第一程序模型对应的源代码的部分,以及基于所述源代码来生成第二RTL描述。库组件包括:与集成电路的元件相关联的输入接口,该输入接口配置为将至少一个输入变量映射到第一存储器位置;以及与集成电路的元件相关联的输出接口,该输出接口配置为将至少一个输出变量映射到第二存储器位置。
在另一一般方面中,公开了一种配置为生成集成电路的寄存器传输级(RTL)描述的高级综合(HLS)工具。HLS包括库处理模块,该库处理模块配置为基于定义集成电路的元件的第一RTL来定义库组件。库组件包括:与集成电路的元件相关联的输入接口,该输入接口配置为将至少一个输入变量映射到第一存储器位置;以及与集成电路的元件相关联的输出接口,该输出接口配置为将至少一个输出变量映射到第二存储器位置。HLS包括综合模块,该综合模块配置为用库组件代替与第一程序模型对应的源代码的部分,源代码定义集成电路,并且基于源代码来生成集成电路的RTL描述。
在又一一般方面中,公开了一种通过使用高级综合(HLS)工具来设计集成电路的方法。该方法包括:通过综合工具模块,基于配置为定义集成电路的元件的第一寄存器传输级(RTL)来定义库组件;通过综合工具模块,用库组件代替与第一程序模型对应的源代码的部分,源代码定义集成电路,并且通过综合工具模块,基于源代码来生成表示集成电路的第二RTL描述,其中,在生成第二RTL描述期间,在与从第二存储器位置读取输入相同的时钟周期内将输出写入第一存储器位置。
实施方式可以包括以下特征中的一个或者多个特征。例如,第一程序模型可以定义包括多路复用器逻辑的状态机。第一程序模型可以定义算术解码器。生成第一RTL描述可以包括:用高级语言,基于源代码的部分来对第一程序模型进行第一模拟;其次,基于第一RTL描述来对第一程序模型进行第二模拟;以及将第一模拟的输出与第二模拟的输出进行比较。生成第一RTL描述包括:将第一RTL描述与以下中的至少一个的设计规范进行比较:集成电路的元件和集成电路。输入接口和输出接口是用高级编程语言定义的硬件接口。
例如,在生成第二RTL描述期间,库组件可以在与所接收到的输入相同的时钟周期内生成输出。在生成第二RTL描述期间,库组件可以在与从第二存储器位置读取输入相同的时钟周期内将输出写入第一存储器位置。在生成第二RTL描述期间,库组件可以基于对第二程序的综合来接收输入,并且基于输入来生成独立于时间的输出。
例如,输入接口和输出接口可以是用高级编程语言定义的硬件接口。综合模块可以进一步配置为:当与库组件对接时,在生成所述集成电路的所述RTL描述期间,在与所接收到的输入相同的时钟周期内生成输出。综合模块可以进一步配置为:当与所述库组件对接时,在与从第二存储器位置读取输入相同的时钟周期内,将输出写入第一存储器位置。
附图说明
图1是根据至少一个示例实施例的用于对表示硬件的软件代码进行综合的方法的流程图。
图2、图3A和图3B图示出了根据至少一个示例实施例的算术解码器系统的框图。
图4是根据至少一个示例实施例的用于对表示硬件的软件代码进行综合的方法的流程图。
图5是根据至少一个示例实施例的系统的框图。
图6是可以用于实施本文所描述的技术的计算机装置和移动计算机装置的示意框图。
具体实施方式
虽然示例实施例可以包括各种修改和替选形式,但是在附图中仅仅以举例的方式示出了其实施例并且本文将详细描述其实施例。然而,应该理解,并不旨在将示例实施例限于所公开的特定形式,而是,相反地,示例实施例旨在涵盖在权利要求书的范围内的所有修改、等效物和替选。
此外,附图旨在图示出在某些示例实施例中使用的方法和/或结构的一般特性,并且补充下面提供的书面描述。然而,这些附图不一定是按比例绘制而成,并且可能不会精确地反映出任何给定实施例的精确结构或者性能特性,并且不应该被理解为定义或者限制示例实施例所涵盖的值或者特性的范围。例如,为了清楚起见,可以缩小或者夸大结构元件。相似的或者相同的附图标记在各个附图中的使用旨在指示相似的或者相同的元件或者特征的存在。
图1是根据至少一个示例实施例的用于对表示硬件的软件代码进行综合的方法的流程图。由于存储在与设备(例如,图5和图6所示的)相关联的存储器(例如,至少一个存储器510和/或604)中并且由与设备相关联的至少一个处理器(例如,至少一个处理器505和/或602)执行的软件代码的执行,可以执行针对图1描述的步骤。然而,考虑了替选实施例,诸如,体现为专用处理器的系统。虽然下述步骤被描述为由处理器执行,但是这些步骤不一定由相同的处理器执行。换言之,至少一个处理器可以执行下面针对图1描述的步骤。
进一步地,可以针对解码器或者熵解码器的示例实施方式来描述下述步骤。然而,示例实施例并不限于此。例如,可以使用所描述的技术来对任何集成电路或者ASIC(专用集成电路)的描述/设计进行综合。因此,可以使用本文所描述的技术来设计编码器和解码器。综合可以是使数字系统从行为规范转变为配置成实施该行为的结构的过程。可以通过使用更高级源代码(例如,C、C++)来开发该行为规范。结构可以是定义硬件(例如,寄存器)和在寄存器之间的数据流的寄存器传输级(RTL)描述。相反,编译软件代码使用编译器,该编译器将源代码(例如,C、C++)描述编译为在目标处理器(例如,X86)上运行的汇编代码。
如图1所示,在步骤S105中,在对软件代码进行综合之前,对软件代码的一部分进行隔离。对软件代码进行隔离包括:识别执行特定功能或者功能组的软件代码,并且将该代码从使用该功能或者该功能组的软件系统移除。例如,软件代码的该部分可以与复杂的或者处理密集综合相关联。换言之,软件代码的该部分可能容易出现编码错误并且可能需要很多时间来进行综合。软件代码的该部分本身可以定义与集成电路或者ASIC相关联的模型。可替选地,软件代码的该部分本身可以定义与集成电路或者ASIC的元件和/或子组件相关联的模型。
因此,对软件代码的该部分进行隔离可以允许开发人员和/或硬件设计师将综合工具用在软件代码的隔离部分上。因此,在步骤S110中,对软件代码的隔离部分进行综合。在一种示例实施方式中,软件代码的隔离部分可以通过综合工具(例如,从存储器)读取。然后,可以利用综合工具来对软件代码的隔离部分进行综合。对软件代码的隔离部分进行综合可以包括:生成由软件代码的隔离部分定义的集成电路的寄存器传输级(RTL)描述。
在步骤S115中,开发在软件代码的经综合的隔离部分与软件代码之间的接口。例如,该接口可以是输入/输出接口(I/O)接口。换言之,该接口可以配置为接收输入(例如,数据、信号、比特、比特流、字节、寄存器值等)。该接口可以配置为传送输出(例如,数据、信号、比特、比特流、字节、寄存器值等)。该接口可以是软件接口(例如,存储器读取/写入)以及硬件接口(例如,引脚布局或者总线互连)。
在步骤S120中,对包括隔离部分的软件代码进行综合,从而将经综合的隔离部分被配置作为独立于时间的输入/输出组件。例如,通过使用综合工具,可以将软件代码的经综合的隔离部分与软件代码集成在一起。该集成可以包括用软件代码的经综合的隔离部分代替软件代码的隔离部分。该集成可以包括:将接口和/或软件代码配置为(例如,通过使用综合工具)实现在软件代码与软件代码的经综合的隔离部分之间的通信。在示例实施方式中,当软件代码与软件代码的经综合的隔离部分通信时,软件代码利用接口。因此,通信可以是独立于时间的(例如,发生在一个时钟周期内)。换言之,在与接收到输入(并且读取)相同的时钟周期内生成(并且写入)输出。
因此,示例实施例允许开发人员对行为规范的复杂元素(例如,算法)进行综合和故障排除,并且然后用RTL定义代替在行为规范中的复杂元素。在行为规范的综合期间,RTL定义应该在与接收到输入相同的时钟周期内返回结果。因此,根据需要,开发人员可以将重点放在了解复杂元素的系统行为上。
图2、图3A和图3B示出了根据至少一个示例实施例的算术解码器系统的框图。如图2所示,算术解码器205包括状态机多路复用器(mux)逻辑210、引擎215和流缓冲移位器220。
状态机多路复用器逻辑210配置为基于至少一个输入值来选择至少一个输出值。在示例实施方式中,状态机多路复用器逻辑210可以被实施为状态机或者有限状态机(FSM)。因此,可以基于当前状态和输入值来确定输出值。在触发时钟之后,FSM切换到包括输出值的新状态。FSM可以用软件或者硬件来实施。例如,FSM可以被实施为微处理器的指令集。例如,FSM电路可以由配置为保持之前的状态的多个触发器和配置为接收输入的多个解码逻辑门组成。输出状态或者信号可以取决于之前的状态和触发器被时钟控制时的输入。FSM可以被固定在每当FSM处于特定状态下并且接收到特定输入时的状态,则输出状态信号应该是相同的。
引擎215配置为执行视频压缩。例如,引擎215可以是专门配置为执行视频压缩的处理器。引擎215可以从图片层向下执行解压缩。例如,引擎215可以执行图片层、片层、宏块层、和块层的解压缩。换言之,引擎可以被编程为以帧为基础进行解码(解压缩),并且以块为基础执行从图片层开始的变长解码、反Zig-Zag、反量化和反离散余弦变换、以及帧重构(运动矢量补偿),直到图片结束。引擎215配置为生成用作至状态机mux逻辑210的输入的解码二进制。
流缓冲移位器220配置为作为加载到引擎215的代码流的高速缓存。例如,流缓冲移位器220可以存储从状态机mux逻辑210接收到的解码/解压缩代码。流缓冲移位器220的输出可以是算术解码器205的输出。
如图3A所示,状态机mux逻辑210进一步包括多个状态机305(示出为状态1、状态2、状态3和状态4)。如上所述,多个状态机305中的每一个可以包括输出状态或者信号,该输出状态或者信号可以取决于之前的状态和在对状态机mux逻辑210进行时钟控制时改变的输入。可以通过使用RTL描述来对多个状态机进行建模。因此,可以通过使用高级综合(HLS)工具(用于商业的Catapult-C(Calypto)、AccelFPGA、(AccelChip)、SystemC编译器(Synopsys)以及GAUT、SPARK、Cathedral等),从较高级源代码(例如,C、C++)对多个状态机305进行综合。
HLS工具基于设计师和系统约束条件来生成架构的RTL描述。与手工编码设计(例如,直接用RTL进行的编码)相比较,RTL描述应该是可靠的(例如,没有错误)。换言之,HLS工具可以加速设计时间和寄存器传输级手工编码。高级综合可以与转换为硬件域的软件编译类似。用对复杂硬件组件的算术行为进行建模的高级语言(例如,Matlab、C、C++等)来编写源规范。自动精化过程允许根据目标约束条件将所描述的行为映射到特定技术目标上。
因此,多个状态机305可以是对用高级语言编写的源代码进行综合的结果(例如,RTL定义)。例如,利用循环和/或选择语句的算法可以被综合到多个状态机305中。上述约束条件中的一个可以在于:当状态机处于特定状态下并且接收到特定输入时,输出状态信号对于多个状态机305中的每一个应该是相同的。另外,架构可以包括一个或者多个触发器。
在条件语句的情况下,HLS可以创建由条件语句的每个分支描述的电路的所有或者至少一部分。因此,条件软件语句的运行时执行包括在两个可能的结果(例如,状态)之间选择。当HLS工具将源代码综合到RTL描述中时,可以生成大量分支。如果分支出现故障,则综合可能会出现故障。进一步地,HLS工具可能不一定产生最好的/最佳的结果(例如,遵循最佳分支)。此外,多个状态机305可以与FSM对应。因此,多个分支可能不与在FSM内的状态对应。因此,源代码可能需要在发起新的综合之前进行故障排除和/或移除非最佳结果。进一步地,非线性算法具有附加复杂性,这是因为HLS工具可能会尝试使非线性算法适合线性(或者近似线性的)的定义。
因此,在示例实施方式中,可以单独地对多个状态机305进行综合。如图3B所示,状态机mux逻辑210被有限状态机库组件310用算术解码器205代替。有限状态机库组件310可以是基于表示状态机mux逻辑210的源代码的隔离综合的RTL定义。有限状态机库组件310可以包括相关联的输入硬件接口。输入硬件接口可以用高级编程语言来定义。有限状态机库组件310可以包括相关联的输出硬件接口。输出硬件接口可以用高级编程语言来定义。输入/输出硬件接口可以与IC或者ASIC的总线和/或引脚位置相关联。输入/输出硬件接口可以配置为:当对与算术解码器205相关联的源代码进行综合时,在通过HLS工具生成IC或ASIC的RTL描述期间,在与所接受到的输入相同的时钟周期内生成输出。
可替选地(或者另外地),有限状态机库组件310可以包括相关联的软件输入接口。软件输入接口可以配置为将至少一个输入变量映射到存储器位置(例如,寄存器565)。有限状态机库组件310可以包括配置为将至少一个输出变量映射到存储器位置的相关联的软件输出接口。输入/输出软件接口可以与寄存器位置和/或到存储器位置的指针相关联,并且具有对应的读取/写入方法。输入/输出软件接口可以配置为:在通过HLS工具生成IC或者ASIC的RTL描述期间,在与所接收到的输入相同的时钟周期内生成输出。换言之,输入/输出软件接口可以配置为:当HLS工具正在对与算术解码器205相关联的源代码进行综合时,在在与从另一存储器位置(例如,寄存器570)读取输入相同的时钟周期内将输出写入存储器位置。
图4是根据至少一个示例实施例的用于对表示硬件的软件代码进行综合的方法的流程图。由于存储在与设备(例如,图5和图6所示的)相关联的存储器(例如,至少一个存储器510和/或604)中并且由与设备相关联的至少一个处理器(例如,至少一个处理器505和/或602)执行的软件代码的执行,可以执行关于图4描述的步骤。然而,考虑了替选实施例,诸如,体现为专用处理器的系统。虽然下述步骤被描述为由处理器执行,但是这些步骤不一定由相同的处理器执行。换言之,至少一个处理器可以执行下面针对图4描述的步骤。
进一步地,可以针对解码器或者熵解码器的示例实施方式来描述下述步骤。然而,示例实施例并不限于此。例如,可以使用所描述的技术来对任何集成电路或者ASIC(专用集成电路)的描述/设计进行综合。
如图4所示,在步骤S405中,接收包括定义集成电路的元件的第一程序模型的源代码的一部分。例如,HLS工具可以从存储器位置读取表示FSM的代码的一部分。HLS工具可以读取表示与算术解码器205相关联的状态机mux逻辑210的代码。可替选地,HLS工具可以读取与算术解码器205相关联的所有源代码,并且将与状态机mux逻辑210相关联的源代码与算术解码器205分离/隔离。
在步骤S410中,将源代码的该部分综合到第一寄存器传输级(RTL)描述中。对源代码的该部分进行综合可以包括:生成由源代码的该部分定义的集成电路的寄存器传输级(RTL)描述。例如,源代码的该部分的RTL描述可以定义熵解码器的元件,该元件可以是或者可以不是更大集成电路的元件(例如,视频解码器)。在示例实施方式中,软件代码的隔离部分的RTL描述可以定义算术解码器和/或其元件或者子组件(例如,状态机)。
例如,HLS工具可以对表示FSM的代码的读取部分进行综合。对源代码的部分进行综合可以包括:作为示例,针对芯片大小、速度、时钟速率等来优化产生的RTL描述。对源代码进行综合可以包括:通过例如将多种状态映射到相同的或者默认的状态来修改产生的RTL代码。映射可以是基于设计师对标准(例如,视频编码标准)的获知。
在示例实施方式中,将第一RTL描述与以下中的至少一个的设计规范进行比较:集成电路的元件和集成电路中。在示例实施方式中,对RTL描述进行测试或者分支测试。测试RTL描述可以包括:用高级语言基于源代码的部分来对程序模型(例如,表示FSM)进行第一模拟;基于第一RTL描述来对程序模型进行第二模拟,并且将第一模拟的输出与第二模拟的输出进行比较。
在步骤S415中,基于第一RTL描述来定义库组件。例如,可以将表示FSM的代码的综合部分添加至现有的库或者用作新代码库的初始元素。可以将接口与库组件相关联。例如,该接口可以是输入/输出接口(I/O)接口。换言之,该接口可以配置为接收输入(例如,数据、信号、比特、比特流、字节、寄存器值等)。该接口可以配置为传送输出(例如,数据、信号、比特、比特流、字节、寄存器值等)。该接口可以是软件接口(例如,存储器读取/写入)以及硬件接口(例如,引脚布局或者总线互连)。库组件可以是有限状态机库组件310。
在步骤S420中,接收包括定义集成电路的第二程序模型(或者多个程序模型)的源代码。例如,HLS工具可以读取与算术解码器205相关联的所有源代码。
在步骤S425中,用库组件代替包括第一程序模型的源代码的部分。例如,HLS工具可以用有限状态机库组件310代替与状态机mux逻辑210相关联的源代码。代替源代码可以包括:将与库组件相关联的接口与源代码链接。例如,可以将与有限状态机库组件310相关联的I/O接口链接至与HLS工具中的算术解码器205相关联的源代码。
在步骤S430中,将源代码综合到第二RTL描述中。例如,HLS工具可以对与包括有限状态机库组件310的算术解码器205相关联的源代码进行综合。在示例实施例中,在将源代码综合成第二RTL描述期间,有限状态机库组件310可以经由I/O接口在与所接收到的输入相同的时钟周期内生成输出。例如,有限状态机库组件310可以在与从第二存储器位置读取输入相同的时钟周期内将输出写入第一存储器位置。
图5是根据至少一个示例实施例的系统的框图。如图5所示,系统(或者设备)500包括至少一个处理器505和至少一个存储器510。该至少一个处理器505和该至少一个存储器510经由总线515通信耦合。系统500可以是例如计算装置(例如,云计算装置或者服务器)的元件。
在图5的示例中,系统500可以是至少一个计算装置,并且应该被理解为实际上表示配置为执行本文所述的方法的任何计算装置。同样,系统500可以被理解为包括可以用于实施本文所描述的技术的各种标准组件,或者其不同的或者将来的版本。仅仅通过举例的方式,将系统500图示为分别包括该至少一个处理器505(例如,基于硅的处理器)和该至少一个存储器510(例如,非暂时性计算机可读存储介质)。
由此,如可以了解到的,该至少一个处理器505可以用于执行存储在该至少一个存储器510上的指令,从而实施本文所描述的各种特征和功能、或者附加的或者替选的特征和功能。当然,该至少一个处理器505和该至少一个存储器510可以用于各种其它目的。具体地,可以了解,该至少一个存储器510可以被理解为表示各种类型的存储器和可以用于实施本文所描述的模块中的任何一个的相关硬件和软件的示例。下述系统和/或方法可以包括数据和/或存储元件。数据和/或存储元件(例如,数据库表)可以存储在例如该至少一个存储器510中。
如图5所示,该至少一个存储器510包括综合工具模块520、源代码块550和RTL描述块560。综合工具模块520可以包括词汇(lex)模块525、综合模块530、优化模块535、库处理模块540和验证模块545。
综合工具模块520可以配置为对用高级编程语言(例如,C、C++等)编写的源代码进行综合。综合工具模块520可以是上述HLS工具。综合工具模块520可以配置为执行上述功能/步骤中的一个或者多个。例如,综合工具模块520可以配置为基于配置为定义集成电路的元件的第一寄存器传输级(RTL)来定义库组件,并且用库组件代替与第一程序模型对应的源代码的部分,源代码定义了集成电路。
源代码块550可以配置为存储用高级编程语言(例如,C、C++等)编写的源代码(或者其部分)。源代码可以定义集成电路的元件(例如,作为源代码部分555)、整个集成电路(例如,ASIC)和/或多个集成电路。源代码可以是基于,作为一个示例,针对标准(例如,视频编解码标准)的程序模型。RTL描述块560可以配置为存储经综合的源代码的RTL描述,包括配置为模拟上面更详细地讨论的软件接口的寄存器565、570的存储器。
lex模块525可以配置为接收源代码作为输入(例如,作为字符串),并且生成符号令牌序列。令牌是具有共同意义的一组字符(例如,词语或者标点符号)。lex模块525可以删除评论和呈空格(blank)、制表(tab)和换行(newline)字符形式的空白。lex模块525可以使来自综合模块530的错误消息与源代码相关(例如,追踪行数)。当发现错误时,lex模块525可以停止处理。因此,在示例实施方式中,首先对硬件的复杂元素(例如,作为视频压缩编解码器的元件的算术编码)进行综合可以允许对于与硬件的复杂元素的源代码相关联的词汇错误进行任何调试。
综合模块530可以配置为基于高级编程语言(例如,C、C++等)源代码来生成寄存器传输级(RTL)定义。优化模块535可以配置为对产生的IC的大小(例如,较小的IC可能更好)或者布局(例如,为了适配在标准的芯片上)进行优化。优化模块535可以配置为对温度曲线进行优化。例如,发热组件可以分散在布局中。优化模块535可以配置为对存储器可用性进行优化。例如,可以将附加存储器添加至RTL定义。优化可以包括对RTL定义进行手工编码。
库处理模块540可以配置为在源代码综合期间存储可以链接至源代码的至少一个库组件。每个库组件可以包括相关联的接口。例如,接口可以是上面更详细地描述的输入/输出(I/O)接口。验证模块545可以配置为验证经综合的RTL定义的操作。在示例实施方式中,验证经综合的RTL定义的操作可以包括测试或者分支测试。测试RTL描述可以包括:用高级语言对表示源代码或源代码的部分的程序模型进行第一模拟;基于RTL描述来对程序模型进行第二模拟,并且将第一模拟的输出与第二模拟的输出进行比较。
如将了解到的,图5所示的系统500可以被实施为下面针对图6描述的通用计算机装置600和/或通用移动计算装置650的元件和/或扩展。可替选地,或者另外,图5所示的系统500可以被实施为与具有下面针对通用计算机装置600和/或通用移动计算装置650描述的特征中的一些或者所有的通用计算机装置600和/或通用移动计算装置650分立的系统。可替选地,或者另外,图5所示的系统500是与通用计算机装置600和/或通用移动计算装置650分立的并且用于设计和/或开发通用计算机装置600和/或通用移动计算装置650的组件(例如,视频解码器)的系统。
图6是可以用于实施本文所描述的技术的计算机装置和移动计算机装置的示意框图。图6是可以与本文所描述的技术一起使用的通用计算机装置600和通用移动计算装置650的示例。计算装置600旨在表示各种形式的数字计算机,诸如,膝上型计算机、桌面型计算机、工作站、个人数字助理、服务器、刀片服务器、主机、和其它合适的计算机。计算装置650旨在表示各种形式的移动计算装置,诸如,个人数字助理、蜂窝电话、智能电话、和其它相似的计算装置。此处所示的组件、它们的连接和关系、以及它们的功能仅仅意在是示例性的,而并不意在限制在本文档中描述的和/或要求的本发明的实施方式。
计算装置600包括处理器602、存储器604、存储装置606、连接至存储器604和高速扩展端口610的高速接口608、以及连接至低速总线614和存储装置606的低速接口612。组件602、604、606、608、610和612中的每一个通过使用各种总线来相互连接,并且,若适合,可以按照其它方式安装在公共主板上。处理器602可以处理在计算装置600内执行的指令,包括存储在存储器604中或者存储装置606上的用于显示针对在外部输入/输出装置上的GUI(诸如,耦合至高速接口608的显示器616)的图形信息。在其它实施方式中,若适合,可以使用多个处理器和/或多个总线、以及多个存储器和多种类型的存储器。同样,可以将多个计算装置600连接在一起,其中,每个装置提供必要的操作的分区(例如,服务器组、一组刀片服务器、或者多处理器系统)。
存储器604存储在计算装置600内的信息。在一种实施方式中,存储器604是一个或多个易失性存储单元。在另一实施方式中,存储器604是一个或多个非易失性存储单元。存储器604也可以是另一种形式的计算机可读介质,诸如,磁盘或者光盘。
存储装置606能够为计算装置600提供海量存储。在一种实施方式中,存储装置606可以是或者可以包含计算机可读介质,诸如,软盘装置、硬盘装置、光盘装置或者磁带装置、闪存或者其它相似的固态存储器装置、或者装置阵列,包括在存储区域网络或者其它配置中的装置。计算机程序产品可以有形地体现为信息载体。计算机程序产品也可以包含在被执行时执行一种或者多种方法(诸如上述的方法)的指令。信息载体是计算机可读介质或者机器可读介质,诸如,存储器604、存储装置606、或者在处理器602上的存储器。
高速控制器608管理计算装置600的带宽密集型操作,而低速控制器612管理较低带宽密集型操作。这种功能分配仅仅是示例性的。在一种实施方式中,高速控制器608耦合至存储器604和显示器616(例如,通过图形处理器或者加速器)并且耦合至可以接受各种扩展卡(未示出)的高速扩展端口610。在实施方式中,低速控制器612耦合至存储装置606和低速扩展端口614。可以包括各种通信端口(例如,USB、蓝牙、以太网、无线以太网)的低速扩展端口可以耦合至一个或者多个输入/输出装置,诸如,键盘、指向装置、扫描仪或者组网装置(诸如,交换机或者路由器),例如通过网络适配器。
计算装置600可以按照多种不同形式来实施,如图所示。例如,计算装置可以被实施为标准服务器620,或者很多时候被实施为一组这种服务器。计算装置也可以被实施为机架式服务器系统624的部分。另外,计算装置可以被实施在诸如膝上型计算机622等个人计算机中。可替选地,可以将计算装置600的组件与在诸如装置650等移动计算装置(未示出)中的其它组件组合。这种装置中的每一个可以包含计算装置600、650中的一个或者多个,并且整个系统可以由彼此通信的多个计算装置600、650构成。
除了其它组件之外,计算装置650还包括处理器652、存储器664、诸如显示器654等输入/输出装置、通信接口666、和收发器668。装置650还设置有提供附加存储的存储装置(诸如,微驱动器或者其它装置)。组件650、652、664、654、666和668中的每一个通过使用各种总线来相互连接,并且,若适合,可以按照其它方式将部件中的多个安装在公共主板上。
处理器652可以执行在计算装置650内的指令,包括存储在存储器664中的指令。处理器可以被实施为芯片的芯片集,该芯片包括分立的多个模拟处理器和数字处理器。处理器可以为例如装置650的其它组件提供协调,诸如,对用户接口、由装置650运行的应用、和由装置650进行的无线通信的控制。
处理器652可以通过耦合至显示器654的控制接口658和显示接口656与用户通信。显示器654可以是,例如,TFT LCD(薄膜晶体管液晶显示器)或者OLED(有机电致发光二极管)显示器、或者其它合适的显示技术。显示接口656可以包括用于驱动显示器654向用户呈现图形和其它信息的合适的电路系统。控制接口658可以接收来自用户的命令并且对其进行转换以便提交给处理器652。另外,外部接口662可以提供与处理器652的通信,从而使移动计算装置650能够与其它装置进行近场通信。外部接口662在一些实施方式中可以提供例如有线通信,或者在其它实施方式中提供无线通信,并且也可以使用多个接口。
存储器664存储在计算装置650内的信息。存储器664可以被实施为计算机可读介质、一个或多个易失性存储单元、或者一个或多个非易失性存储单元中的一个或者多个。还可以提供扩展存储器674,并且该扩展存储器672可以通过扩展接口672连接至装置650,该扩展接口672可以包括例如SIMM(单列直插存储器模块)卡接口。这种扩展存储器674可以为装置650提供额外的存储空间,或者也可以存储装置650的应用或者其它信息。具体地,扩展存储器674可以包括用于执行或者补充上述过程的指令,并且还可以包括安全信息。由此,例如,扩展存储器674可以作为装置650的安全模块被提供,并且可以利用允许安全使用装置650的指令来编程。另外,可以经由SIMM卡以及附加信息(诸如,以非可侵入的方式将识别信息放置在SIMM卡上)来提供安全的应用。
存储器可以包括,例如,闪存和/或NVRAM存储器,如下面所讨论的。在一种实施方式中,计算机程序产品有形地体现为信息载体。计算机程序产品包含在被执行时执行一种或者多种方法(诸如上述的方法)的指令。信息载体是可以例如通过收发器668或者外部接口662接收到的计算机可读介质或者机器可读介质,诸如,存储器664、扩展存储器674、或者在处理器652上的存储器。
装置650可以通过通信接口666进行无线通信,该通信接口666必要时可以包括数字信号处理电路系统。通信接口666可以提供在各种模式或者协议下的通信,诸如,GSM语音呼叫、SMS、EMS、或者MMS消息传送、CDMA、TDMA、PDC、WCDMA、CDMA2000、或者GPRS等。这种通信可以,例如,通过射频收发器668发生。另外,短程通信可以发生,诸如,通过使用蓝牙、WiFi或者其它这种收发器(未示出)。另外,GPS(全球定位系统)接收器模块670可以向装置650提供附加的与导航和位置相关的无线数据,若合适,该数据可以由在装置650上运行的应用使用。
装置650也可以通过使用音频编解码器660来进行可听见的通信,该音频编解码器660可以接收来自用户的言语信息,并且将其转换为可用的数字信息。音频编解码器660同样可以,诸如通过扬声器,例如在装置650的听筒中,生成用户可听见的声音。这种声音可以包括来自语音电话呼叫的声音,可以包括录音(例如,语音消息、音乐文件等),并且还可以包括由在装置650上运行的应用生成的声音。
计算装置650可以按照多种不同形式来实施,如图所示。例如,计算装置可以被实施为蜂窝电话680。计算装置还可以被实施为智能电话682、个人数字助理或者其它相似的移动装置的部分。
上述示例实施例中的一些被描述为在流程图中示出的过程或者方法。虽然流程图将操作描述为顺序的过程,但是可以并行地、并发地或者同时地执行操作中的许多种操作。另外,可以重新设置操作的顺序。可以在完成过程的操作时终止该过程,但是该过程也可以具有未包括在附图中的附加步骤。过程可以与方法、功能、过程、子例程、子程序等对应。
上述方法可以由硬件、软件、固件、中间件、微代码、硬件描述语言或者其任何组合实施,上述方法中的一些用流程图示出。当用软件、固件、中间件或者微代码实施时,可以将用于执行必要任务的程序代码或者代码段存储在诸如存储介质等机器或者计算机可读介质中。处理器可以执行必要任务。
出于描述示例实施例的目的,本文所公开的具体结构和功能细节仅仅是代表性的。然而,示例实施例可以体现为许多替选的形式并且不应该被认为仅仅受限于本文所陈述的实施例。
要理解,虽然在本文中可以使用术语“第一”、“第二”等来描述各种元件,但是这些元件不应该受限于这些术语的限制。这些术语仅仅用于区分不同的元件。例如,在不脱离示例实施例的范围的情况下,第一元件可以称为第二元件,并且,相似地,第二元件可以称为第一元件。如本文所使用的,术语“和/或”包括所列的相关项中的一个或者多个的任何组合和所有组合。
要理解,当元件被提及为“连接”或者“耦合”至另一元件时,其可以直接连接或者耦合至该另一元件,或者可以存在中间元件。相反,当元件被提及为“直接连接”或者“直接耦合”至另一元件时,不存在中介元件。应该以同样的方式来解释用于描述元件之间的关系的其它词(例如,“在……之间”vs“直接在……之间”、“相邻”vs“直接相邻”等)。
本文所使用的术语的目的仅仅是为了描述具体示例实施例,并不旨在限制示例实施例。如本文所使用的,单数形式“一个”、“一”和“该”旨在包括复数形式,除非上下文另有清楚指示。要进一步理解,术语“包括”和/或“包含”在本文中使用时指定所述特征、整数、步骤、操作、元件和/或组件的存在,但是并不排除一个或者多个其它特征、整数、步骤、操作、元件、组件和其组合的存在或者添加。
还应该注意,在一些替选实施方式中,所指出的功能/动作可能不会按照附图中所指出的顺序发生。例如,根据所涉及的功能/动作,连续地示出的两个附图实际上可以同时执行或者有时可以按照相反的顺序执行。
除非另有规定,否则本文所使用的所有术语(包括技术术语和科学术语)都具有与示例实施例所属领域的普通技术人员通常所理解的意思相同的意思。要进一步理解,术语(例如,在常用字典中定义的术语)应该被解释为具有与其在有关领域的背景下的意思一致的意思,并且不应该被解释为理想化或者过度正规的意义,除非本文如此明文规定。
根据有关在计算机存储器内的数据位的操作的软件、算法和符号表示来呈现上述示例实施例和对应的详细描述的分区。这些描述和表示是本领域的普通技术人员将其工作的本质有效传达给本领域的其它普通技术人员的描述和表示。当此处使用了术语时并且当通常使用了该术语时,设想算法是导致期望结果的步骤的自洽顺序。这些步骤是需要对物理量进行物理操纵的步骤。通常,尽管不是必须的,但是这些量采取能够被存储、传输、组合、比较和操纵的光学信号、电信号或者磁信号的形式。已经证明,主要是为了共同使用的原因,将这些信号称之为比特、值、元素、符号、字符、项、数字等。
在上述说明性实施例中,对可以被实施为程序模块或者功能过程的操作的动作和符号表示(例如,采取流程图的形式)的参考包括执行特定任务或者实施特定抽象数据类型的例程、程序、对象、组件、数据结构等,并且可以通过使用在现有结构元件处的现有硬件来描述和/或实施。这种现有硬件可以包括一个或者多个中央处理单元(CPU)、数字信号处理器(DSP)、专用集成电路、现场可编程门阵列(FPGA)计算机等。
然而,应该记住,这些术语和相似术语中的全部均与适当的物理量相关联,并且仅仅是应用于这些量的方便标签。除非另有特别说明,或者如从上述讨论中所了解到,否则,贯穿说明书,诸如“处理”或者“计算(computing)”或者“计算(calculating)”或者“确定”或者“显示”等术语指计算机系统、或者相似的电子计算装置的动作和过程,该计算机系统或者该相似的电子计算装置将表示为在计算系统的寄存器和存储器内的物理量、电子量的数据处理并且转变为同样被表示为在计算机系统存储器或者寄存器或者其它这种信息存储、传输或者显示装置中的物理量的其它数据。
还要注意,示例实施例的软件实现的方面通常被编码在一些形式的非暂时性程序存储介质上或者被实施为一些类型的传输介质。程序存储介质可以是磁盘(例如,软盘或者硬盘驱动器)或者光盘(例如,光盘只读存储器、或者“CD ROM”),并且可以是只读或者随机存取。相似地,传输介质可以是双绞线、同轴电缆、光纤或者本领域已知的一些其它合适的传输介质。示例实施例并不限于任何给定实施方式的这些方面。
最后,还应该注意,虽然随附权利要求书陈述了本文所描述的特征的特定组合,但是本公开的范围并不限于随后要求的特定组合,而是扩展以涵盖本文所公开的特征或者实施例的任何组合,无论此时在随附权利要求书中是否明确地列举出了该特定组合。