首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 维修教程知识 > 单片机栏
基于TR600芯片的过程调用设计与硬件实现
来源:本站整理  作者:佚名  2010-04-22 16:10:53



    随着大规模集成电路的不断发展,软硬件界面的划分也发生了变化,VKSI设计方法的改进、IP技术的标准化以及系统在片(SOC)设计的日渐成熟,为软件功能逻辑硬件化实现提供了技术条件和实现手段。作为软件程序设计的重要部分,过程调用功能使用频度相当高,尤其在结构化设计中起到重要作用,因此,其硬件实现方法的优劣对于软件能否很好地移植到逻辑电路中起到了非常重要的作用。

    TR600语音编解码芯片设计是基于MELP、SELP2(Sine Excitation Linear Prediction)等多种语音算法,采用可重构体系结构…和变长指令技术,实现了多种语音算法可在片配置的SOC设计。这款语音芯片结合了逻辑电路的快速性和用户指令编程灵活性的特点,通过分析多种语音算法,并提取资源共集,建立了资源、运算、网络可重构的逻辑电路,同时提取资源的可控节点,形成用户指令界面,以指令流形式控制逻辑电路,实现算法级应用功能。过程调用功能就是以指令形式提供给使用者,并通过指令译码器控制逻辑电路动作,实现具体功能。因此,过程调用功能的硬件实现效率和灵活度直接影响芯片整体的速度、规模以及用户指令编程的复杂度。

      过程调用模型可简单描述为主调过程将被调过程置于某一位置,然后把控制权交给被调过程,执行完毕,再取回控制权,并返回运行结果,主调过程继续执行。因此过程调用需要2个步骤:调用过程和返回过程。过程调用需要处理的信息有:程序计数器(PC)值的保存与恢复、现场保护和参数传递。过程调用是一种典型的后入先出堆栈寄存器结构,这种实现方式虽已相当普遍,但也存在不足:(1)堆栈寄存器使用效率低,存储时间和空间浪费严重。因为参数传递的个数和规格因调用过程的不同会有所不同,而主调过程需要对所有可能被破坏的数据堆栈进行保护,而堆栈的宽度和深度会因满足过程调用最坏情况而设计得最大,而且嵌套调用会增加堆栈寄存器的开销。(2)堆栈寄存器结构无法解决调用过程存取算子对存储体交叉访问的问题。为了给用户指令编程提供一个清晰的指令界面,在指令体系设计时,将LS存取算子设计成与SDRAM存储体一一对应的关系。单块存储体采用独立编址。而对于过程调用,主调过程传递实参可来源于任意存储体,被调过程的LS存取算子只能指向某一个存储体,这就产生了过程调用中参数传递的全局性与存取算子访问局部性之间的矛盾。

      为了解决堆栈寄存器结构实现方式的不足,TR600语音编解码芯片采用了重叠寄存器窗口技术和存取算子对存储体的交叉访问技术来实现过程调用功能。
1 重叠寄存器窗口技术

     重叠寄存器窗口技术是一种寄存器堆设计方法,它将寄存器堆分成若干个寄存器子堆,相邻寄存器子堆有重叠部分并共同可见,作为子堆之间信息交互的窗口,称为窗口寄存器。寄存器子堆与其他子堆不重叠的部分只有自身可见,独立于其他子堆,称为局部通用寄存器。在外部控制电路作用下,同一时刻只有一个子堆对用户是可见的.可以进行读写操作。存储于局部通用寄存器的数据不会影响相邻子堆的操作,而存储于窗口寄存器的数据可以被相邻子堆直接使用。过程调用操作利用了局部通用寄存器的局部性和窗口寄存器的共用性的特点.将过程调用中的相关数据存人局部通用寄存器,避免了数据相关;将传递参数写入窗口寄存器,可以供被调过程直接使用,避免了寄存器之间的数据转移。因此,重叠寄存器窗口技术可以解决过程调用中的现场保护和参数传递的问题。

      TR600芯片体系结构采用可重组思想设计了二组总线寄存器堆,每组寄存器堆有19个寄存器单元,每个单元由2组16位寄存器拼接而成,因此,单指令周期可以存取64位、32位、16位规格的数据。为了实现语音算法中多重嵌套过程调用,每组寄存器堆分为三层寄存器子堆.如图1所示。每层最多可以使用9个寄存器单元,调用操作可以在寄存器子堆内部,也可以在相邻子堆之间完成。总线寄存器堆控制信号由过程调用指令和寄存器读写控制指令经指令译码器译码产生。过程调用指令控制层计数器,产生层译码器使能,控制寄存器子堆换层操作。同时,控制输出选通器选择寄存器子堆输出;寄存器读指令产生当前子堆内寄存器单元输出选择信号,寄存器写指令控制产生数据通路选择和寄存器写使能信号。

  

[1] [2]  下一页

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:10,800.78000 毫秒