用于修改静态存储装置中微指令的方法和设备 【技术领域】
本发明涉及用于微处理器的控制存储器领域。具体说,本发明涉及对同时使用只读存储器(ROM)和随机存储器(RAM)的控制存储器装置的修改。
背景技术
控制存储器含有控制微处理器数据通路的可执行微指令。在一些机器上,控制存储器由RAM组成,而在其他机器中,控制存储器就是ROM。RAM的内容很容易用新的信息进行重写。然而,RAM是易失的,即RAM的内容仅在给电路施加电源的这段时间周期期间能够保持。相反,ROM的内容是在ROM制造时插入,并且即使在断电时也不能被改动或擦除。
当大规模制造时,ROM比RAM便宜很多。处于对RAM和ROM成本的考虑,微码程序员通常用RAM设计新的电路,以便可以很容易地修正程序错误,但是在最终设计阶段,为了将生产成本减至最小,就用ROM取代RAM。然而,即使是最严格的设计检验也会遗漏程序错误,而这些错误将随后永久嵌入在静态ROM中。
当在存储于ROM中的微指令集中发现有程序错误时,程序员就创建补丁来修正错误。在本领域中的“补丁”术语是指引入用于修正先前代码或添加新功能的新代码。微指令整体上称为“代码”,并且以模块方式进行设计,其中整个代码由单独的子程序组成。因此,可以对代码中某部分的错误进行隔离和修正,而不需要对整个代码都进行重写。当发现缺陷子程序时,程序员将创建没有错误地副本子程序,该子程序会取代缺陷子程序被程序流程调用。通过同时使用RAM和ROM存储微指令集的系统就可能实现这种技术。子程序通常存储在ROM中,而调用子程序的主程序代码则存储在RAM中。因为程序流程按RAM中的微指令集进行,所以,来自主代码的出口点就允许程序流程执行ROM中子程序的微指令。当子程序已经执行,程序流程就退出子程序,并且重返RAM中的主代码。然而,当在子程序中发现错误时,对应于缺陷子程序的出口点无效,并且程序员必须用新的子程序修补错误。因为ROM为静态,所以这个新的子程序必须存储在RAM中。
由于除主代码中的预定点外就不能进入或退出缺陷子程序,所以,这种方法就比较缺乏灵活性。另外,因为为了修正子程序中的程序错误,无论错误是多么次要也必须在RAM中复制整个子程序,因而,这种方法浪费了空间。本领域需要在程序中具有更加灵活的ROM和RAM间的出口和进入点。另外,需要将修正ROM中程序错误所需的RMA容量减至最小。
【发明内容】
本发明定位于一种为使程序员对ROM微指令具有更直接的访问和控制,而对驻留在ROM中的微指令程序流程进行修改的方法和设备。因为不能对ROM中的微指令进行改动,所以,任何所需的对微指令集的变化都必须在RAM中进行。本发明允许程序员直接访问ROM中的程序错误,而不需要在RAM中复制整个子程序。本发明也允许程序员给陈旧的ROM添加新的功能,而不是用新设计的ROM来取代旧的ROM。
本发明的示范实施例是一种用于对静态存储装置中的程序流程进行修改的方法,该方法包括产生触发从静态存储装置到可编程存储装置的跳转的中断的步骤。
在本发明的一个实施例中,跳转点寄存器用于保持跳转点的地址。该跳转点会触发程序流程中的中断事件。程序计数器含有程序流程中当前微指令的地址。如果程序计数器保留有与跳转点寄存器中跳转点地址相等的地址,就产生中断事件。这个中断事件开始在程序流程中进行从静态存储装置到可编程存储装置的改变。
在本发明的一个实施例中,中断事件可以用于修复静态存储装置的程序错误。程序员可以创建针对驻留在静态存储装置中缺陷代码部分的补丁。随后,程序员可以将出口地址存储在寄存器或其他存储装置中,其中出口地址对应于缺陷代码部分中预定微指令的地址。将出口地址与所有在程序流程中执行的微指令进行比较。当在程序流程中出现预定的微指令,就执行补丁中的微指令。
在本发明的另一实施例中,中断事件可以在程序流程中产生给静态存储装置添加功能的改变。这种改变可以是存储在可编程存储装置中的附加代码形式,该形式可以在执行来自静态存储装置的微代码的中间执行。
在本发明的另一实施例中,多个跳转点寄存器可以与相应的比较器一起与中断端口耦合,该端口可以使每个单独的跳转点寄存器有效或无效。每个单独的跳转点寄存器可以与单独的中断事件关联。因此,使用多个跳转点寄存器给程序员提供了灵活性,并且允许她根据将来的需要方便地分配跳转点寄存器。
这种修改减少了用于修正ROM中错误所需的RAM容量,并且改进了ROM的功能。
通过下面的描述,对于本发明的熟练技术人员来说,本发明的其他目标和优点将变得容易理解。
【附图说明】
图1是示出RAM和ROM之间的传统程序流程的图例。
图2是示出在本发明实施例中RAM和ROM之间的程序流程的图例。
图3是用于实现RAM和ROM之间的程序流程的电路框图。
图4是数据处理系统的框图。
【具体实施方式】
图1是示出用于数据处理系统中,例如计算机系统或通用微计算机,微指令错误修正的方法,即“调试”方法,的已有技术实现的框图。处于说明目的,本发明的较佳实施例使用ROM和RAM进行描述。然而,在下面的详细描述中,可以容易理解所述的方法适用于任意的静态存储装置和易失存储装置。在图1中,RAM 100已经用调用在ROM 110中的子程序的代码进行了编程。含有接着要执行的微指令地址的程序计数器(未示出)顺RAM堆栈向下执行,直到程序计数器碰到ROM堆栈中的微指令地址。在点101,程序流程从RAM 100中的微指令集中退出,并进入ROM 110中的微指令集。程序计数器顺ROM 110向下执行,直到它碰到RAM 100中的微指令地址。程序流程从ROM 110中的微指令集中退出,并在点102重返RAM 100中的微指令集。对于存储在ROM 110中各个子程序,重复这种处理。然而如果程序错误需要在ROM 110中进行修正,或者需要加入不同的功能,程序员可以对RAM 100重新编程,以便绕过存储在ROM 110中的子程序。本领域熟练技术人员中目前的惯例是通过在RAM100中复制整个子程序来对缺陷子程序进行调试,消除程序错误,并且对RAM100进行重新编程来把程序流程带到在RAM 100中复制的子程序,而不是带到存储在ROM 110中有缺陷的子程序。
如图1所说明,如果在子程序105中发现程序错误106,那么,程序员将只能使从RAM 100到ROM 110的数据通路103无效,并且创建到驻留在RAM 100中的替代子程序107的数据通路104。当完成子程序107,数据通路108回流到位于RAM 100中无效数据通路103之后的任意所设计的微指令。
当程序错误的大小极小时,这就会成为对RAM资源的巨大浪费。因为ROM是静态,所以,即使仅有一小部分子程序需要重写,程序员也不能改变ROM中的微指令,使程序流程从ROM中不同的点重定向到RAM。
图2是示出本发明实施例中RAM 200和ROM 210之间程序流程的框图,该实施例允许程序员不需要将整个子程序复制在RAM 200中,就能调试存储在ROM 210中的缺陷子程序。另外,程序员可以在存储于ROM 210的子程序中包括附加特性和功能。如图1,在微代码无差错部分期间,程序流程退出RAM 200而进入ROM 210。然而,当在ROM 210中发现错误时,图2的程序流程允许程序员不需要为了修正错误而牺牲掉很大一部分RAM 200,就能创建该错误的补丁。
程序计数器(未示出)顺RAM堆栈向下执行,直到程序计数器碰到ROM堆栈中的微指令地址。在点201,程序流程从RAM 200中的微指令集中退出,并进入ROM 210中的微指令集。程序计数器顺ROM 210向下执行,直到它碰到RAM 200中的微指令地址。程序流程从ROM 210中的微指令集中退出,并在点202重返RAM 200中的微指令集。对于存储在ROM中的各个子程序,重复这种处理。
程序流程203延续到含有程序错误205的子程序208。执行子程序中的无差错指令,直到点204,在该点程序流程为了补丁而返回到RAM 200。在点206,已经完成补丁,并且程序流程返回到ROM 210。当完成子程序,数据通路207回到RAM 200。
在本发明的示范实施例中,在已有技术的数据处理系统中引入了中断电路。图3是将允许程序员创建如图2所示的程序流程的中断电路框图。
图3的中断电路由多个寄存器,或任意其他能存储微指令地址的存储装置(并且通常成为跳转点寄存器)组成。跳转点寄存器保留有触发中断事件的跳转点地址。如本领域所熟知,当在该处理外出现外部事件时,中断就会引起临时的处理挂起。中断信号指示中断事件的出现,因此,处理器挂起当前的处理,而执行中断信号所请求的任务。然而在本发明的这个实施例中,是以完全不同的方法来使用中断信号。图3的中断电路使用中断来绕过驻留在ROM中的微代码部分,而不是使用中断指示外部事件的发生。
在图3中所包括的中断电路包括3个跳转点寄存器300、310、320。而本领域的熟练技术人员可以理解跳转点寄存器的数目可以在不影响本发明范畴的情况下,根据电路设计者的选择进行变化。3个跳转点寄存器的每个寄存器通过线303、313、323分别单独与3个比较器308、318、328中的一个耦合。比较器是用于比较两个输入字的装置,并且通常由异或门组成,而对于本发明的这个或其他实施例,可以使用任意能实现比较功能的装置。然而出于说明目的,将使用“比较器”术语。每个比较器308、318、328通过控制线304、305与处理器320耦合。
每个跳转点寄存器300、310、320设定具有对应于中断事件的地址。线301将地址从处理器320加载入每个跳转点寄存器。
控制线304承载从程序计数器给比较器308、318、328的内容。程序计数器是含有接着要执行的微指令的地址的寄存器。在一些数据处理系统中,程序计数器设计为含有当前正在执行的微指令。对于本领域的熟练技术人员来说可以理解程序计数器的内容不需要为了实现本发明的任意实施例而局限于预期状态或当前状态。
控制线305承载来自处理器320的控制信号,所述信号为了实现与每个跳转点寄存器关联的期望功能而使每个比较器308、318、328有效或无效。
控制线306承载从比较器308、318、328给处理器320中状态寄存器(未示出)的状态信号,该信号指示哪个跳转点寄存器含有与程序计数器相同的地址。处理器320中状态寄存器的设置仅是设计选择的问题,而不会影响本发明的范畴。需要注意在本发明的替代实施例中,程序计数器可以用于识别哪个跳转点寄存器具有与程序计数器相同的地址。如果使用程序计数器,那么,必须检验地址中的所有位来识别所论的跳转点。如果使用状态寄存器,那么,仅需要检查一位。使用程序计数器还是状态寄存器来识别哪个跳转点寄存器含有与当前中断关联的跳转点地址的选择只是设计选择的问题。
如果程序计数器中的地址与跳转点寄存器300、310、320中分配的地址之一相等,并且发送了使对应于上述跳转点寄存器的比较器有效的控制信号,那么,就发送状态信号给处理器320,并且向中断控制器(未示出)发送一个信号,从而发生中断。
在这个示例中,中断事件不是调用程序流程挂起的外部事件,而是将程序计数器重定向到存储在RAM中的微指令。程序流程在RAM中继续,直到重定向回ROM。因为RAM是动态,因而,RAM可以将程序计数器重定向到存储在ROM中的任意微指令。
出于调试程序代码的目的,程序员可以识别一部分ROM中微指令子程序中的错误,并且将错误的地址存储在跳转点寄存器中。如果这个错误是只要用几行代码行就可以修复的次要错误,那么。该错误的补丁就能顺利地存储在RAM中。当程序计数器遇到已存储在跳转点寄存器中的错误地址,比较器允许给中断控制器发送信号,通过这个信号产生将程序流程重定向到存储在RAM中的补丁上的中断。当包含在补丁中的微指令已经完成处理,紧随补丁的RAM微指令可以将程序流程重定向到跟随在子程序错误部分后的ROM微指令上。在这种方式下,就可以在不需要将整个子程序复制到RAM中的情况下,修正含有小程序错误的子程序。
出于向存储在ROM中的程序代码添加功能的目的,程序员可以方便地使用跳转点寄存器向已经存在的ROM子程序结构中添加更多的子程序。在本发明的一个实施例中,程序员可以在跳转点寄存器中插入微指令地址,其中微指令是一部分驻留在ROM中的程序子程序。当程序计数器含有这个微指令的地址时,程序流程就会跳转到驻留在RAM中对应的微指令集。微指令对应集的最后指令将把程序流程重定向到程序员所期望的子程序上。在这种方式中,程序员可以在不替换旧的已编程的ROM的情况下,给ROM子程序添加新功能。因此,ROM可以不需要用重新编程的ROM替换的情况下,就对ROM进行更新。
图3的中断电路是本发明的一个实施例,这个实施例中,3个跳转点和相应的比较器通过或门330与处理器,即中断控制器中的中断请求(IRQ)引脚相连。还是在本发明的另一实施例中,为了对无论何时触发中断就会出现的新代码进行检验的数量最小,可以在数据处理系统中使用多个中断电路。当在单个中断电路中存在许多跳转点寄存器时,就需要花费大量的MIPS来确定哪个新的代码对应于刚触发的中断。而当存在许多中断电路,每个仅具有3个或更少的跳转点寄存器,并且每个与单独的IRQ引脚相连,那么,在实现对应于经触发的中断事件中就会花费较少的MIPS。多个中断电路或单格中断电路的使用是根据电路板设计者的需要的设计选择问题。然而,任何对在此描述的中断电路的变化都落入本发明的范畴。
图4是示出数据处理系统的框图。对于本领域的熟练技术人员可以理解在不对所熟知的电路和控制逻辑进行具体详述的情况下,也可以实现本发明。为了避免混淆描述,就从图4中忽略这种具体详述。图4的框图是一种系统的代表,在这种系统中,控制逻辑从操作核心(operate core)中分离出来。这种系统可以是数字信号处理器或专用集成电路。然而,需要注意本发明可以用于具有其他体系形式的数据处理系统中,例如控制逻辑与操作核心相结合。
程序流程控制装置400与控制存储器RAM 430、控制存储器ROM 440、中断电路450和指令解码装置410耦合。中断电路450可以是图3的中断电路。程序流程控制装置400产生程序计数器的内容,产生指示当前指令是否已经执行或取消的标志,并且处理所有的外部事件例如直接存储器存取(DMA)和中断。指令解码装置410可以与操作核心420集成也可以不集成在一起,并且通过线405与程序流程控制装置400相连。指令解码装置410也通过线404与控制存储器RAM 430和控制存储ROM 440耦合。中断电路450与程序流程控制装置400、控制存储器RAM 430、控制存储器ROM 440以及操作核心420耦合。程序流程控制装置400依据来自控制存储器RAM 430、控制存储器ROM 440或中断电路450的输入产生程序计数器。程序流程装置400使用线RAM_CS 401、ROM_CS 403以及EXEC 412来使从控制存储器RAM 430、控制存储器ROM 440或中断电路450的输入有效。线422将跳转点地址存入中断电路450中的跳转点寄存器(未示出)。线402将程序计数器的内容发送给控制存储器RAM 430、控制存储器ROM 440和中断电路450。当中断电路450指示当前的程序计数器含有与跳转点寄存器(未示出)中所含有的跳转点地址相等的地址时,就由可集成在程序流程控制装置400或没有集成在其中的中断控制器(未示出)产生中断。当中断电路450产生中断时,程序流程控制装置400将程序计数器复位来保存中断事件所指定的下一微指令地址。
图4的数据处理系统仅是本发明实施例如何使用的说明实例。应该注意本发明可以使用各种计算机程序语言和硬件来实现,而并不局限于任何特定的硬件和软件配置。例如,如模块490所示,程序流程控制装置400、指令解码器410和操作核心420的功能可以通过使用通用处理器来实现。本发明可以在任何将代码存储在静态存储装置例如ROM、磁带存储元件、光盘或软盘中的实施例中使用。
可以认识到,在不背离本发明的情况下,本发明能具有其他和不同的实施例,并且它的一些细节可以从不同方面进行修改。因而,附图和描述实际上是作为说明,而不是对本发明的限制。