可编程控制器的制作方法

文档序号:6410787阅读:631来源:国知局
专利名称:可编程控制器的制作方法
技术领域
本发明涉及一种可编程控制器,它执行主要用于位操作的基本指令和处理包含大量的位的数据的应用指令,更准确地说,本发明涉及一种配有专门设计以便能处理基本指令和应用指令的硬件(处理器)的可编程控制器。
可编程控制器广泛地用在工业设备、机器、以及工厂自动化装置中。随着对象设备的复杂性的增加,已经提出了高速处理大量输入/输出信号的要求以及高速操作的要求。为些,由专门设计的能处理主要用于位操作的基本指令和处理包含大量位的数据的应用指令的硬件(一个处理器)来实现高速处理。由该硬件和执行通信处理和外围处理的通用微处理器的组合来构成可编程控制器。
常规例子的专门设计的硬件(即,处理器)有三级流水线结构,并通过这种流水线结构执行指令。在这种情况下,在执行级执行的处理包括下列细节。
第一级指令的取出,用于从指令中取出后面要执行的指令,第二级各种算术与逻辑操作,计算数据存贮器地址的数据地址计算,或处理后面的指令解码的目标分支操作处理和寄存器读数处理,第三级针对数据存贮器进行读/写操作的存贮器访问处理(即,读/写处理),分支操作,位操作,或针对通用寄存器的写操作。
在流水线结构中,指令执行的整个速度取决于所有级中最慢的指令执行级的处理速率。为了加速这样的流水线处理,必须提供具有相同速度的每一指令执行级。然而,在前面所述的三级流水线结构中,如果用具有相同访问时间的存贮器作为指令存贮器和数据存贮器,则执行的整个速度会变慢并且需要更长的处理时间,因为第二或第三级执行例如位操作处理比第一级执行的处理花费更长的处理时间。
鉴于已有技术的上述缺点而设想出本发明,本发明的目的是提供一种能容易实现并能加速执行指令的可编程控制器的结构。
本发明的另一目的是提供一种可编程控制器的结构,能在不因插入处理流水线相关危险的NOP指令而增加程序长度的情况下使处理加速。
本发明的另一目的是提供一种具有五级流水线结构的可编程控制器,能在不使用高速存贮顺的情况下以较高的速度执行处理。
本发明的另一目的是提供一种具有五级流水线结构的可编程控制器,能容易地执行在一个流水线级的时间周期内不能完成操作的指令。
本发明的另一目的是提供一种具有五级流水线结构的可编程控制器,能迅速地执行需要大量存贮器存取周期的位处理指令和迅速执行其它指令。这种可编程控制器除了包括存储器地址计算块和专为位处理指令设置的流水线寄存器以外,还包括数据通路和控制电路,数据通路用于从位处理指令操作块发送和接收访问存储器所需的数据,控制电路在执行位处理操作期间按要求暂停执行在位处理操作指令后面的指令。本发明的又一目的是提供一种能协调地执行每一条指令的具有五级流水线结构的可编程控制器,并且该可编程控制器配有一个控制电路,当重写供微分指令使用的存储器时该控制电路按要求暂停执行指令。
本发明的另一目的是提供一种具有五级流水线结构的可编程控制器,通过下列两点能在协调地控制关于是执行指令还是使指令无效的决定的同时执行指令一、在流水线寄存器中提供控制信号,控制信号表现当前指令是一个位操作指令,该位操作指令用于更新建立指令执行状态的标记BITACC;二、当执行指令(按照指令执行状态根据控制信号的值确定要被执行或要被无效的指令)时暂停执行该指令直到确定指令执行状态为止。
本发明的另一目的是提供一种可编程控制器,它具有五级流水线结构,并且能按规程中所要求的方式根据各种停止状态协调地执行暂停操作。
本发明的另一目的是提供一种通过抑制程序长度能以高速执行变址指令的可编程控制器。
为此,本发明的可编程控制器执行基本位处理操作和包含大量位的应用处理,包括下列步骤由五级形成一个指令执行级,即,一个指令执行级包括用于执行取指令操作以便从指令存贮器取出指令的第一级,用于指令解码并从一通用寄存器取出一个数值的第二级,用于执行算术操作和逻辑操作、数据地址计算、或目标分支有效地址的计算的第三级,用于访问数据存贮器的第四级,以及用于执行位操作,针对通用寄存器的写操作、或分支操作的第五级;以及以流水线方式执行该指令执行级。
本发明的可编程控制器包括下列部分,它们作为流水线处理的各指令执行级的硬件;具有指令存储器和程序计数器的IF部分;具有指令解码器和通用寄存器的ID部分;具有算术与逻辑单元的EX部分;具有数据存储器和用于控制访问数据存储器的存储器访问接口的MEM部分;以及用于执行位操作处理的BPU。
按照本发明的可编程控制器,根据可编程控制器的基本处理操作之一的位操作指令的结果将每一指令执行级的执行说明信息改变为一个预定值,并使位操作指令后面的指令无效。
按照本发明的可编程控制器,在与各指令执行级对应的硬件之间设有多个流水线寄存器,以及将指令执行级的执行结果存贮在每一流水线寄存器中。
按照本发明的可编程控制器,将各指令执行级的执行说明信息存贮在多个流水线寄存器的各流水线寄存器中,并且每当执行一个指令执行级时将执行说明信息馈送给下一指令执行级的流水线寄存器。
按照本发明的可编程控制器,在指令执行级能执行的精简的指令集结构包括存储器访问指令、寄存器到寄存器的操作指令、立即值指令、分支指令、以及位操作指令。
按照本发明的可编程控制器,一个精简的指令集结构包括存储器访问指令,在第三级执行要访问的数据存储器的有效地址的计算,在第四级从数据存储器读数据和将数据写入数据存储器,以及如果指令要求将数据从数据存储器写入通用寄存器则在第五级写数据;寄存器到寄存器操作指令,在第三级执行通用寄存器之间的算术和逻辑操作,在第五级将数据写入通用寄存器;立即值操作指令,用包含在该指令中的立即值和存储在预定通用寄存器中的值进行算术和逻辑操作;分支指令,在第三级执行比较并且在第五级根据比结果执行分支操作;以及位操作指令,在第四级执行将数据从数据存储器取出送到通用寄存器的操作和操作处理,以及在第五级执行针对每位数据的操作处理。
为此,提供一种本发明的可编程控制器,它按流水线方式执行如下的第一至第五级,即,用于执行取指令操作以便从指令存贮器取出指令的第一级,用于指令解码并从一通用寄存器取出一个数值的第二级,用于执行算术和逻辑操作、数据地址计算、目标分支有效地址的计算或分支状态确定的第三级,用于访问数据存贮器或执行分支操作的第四级,以及用于执行位操作,针对通用寄存器的写操作、或分支操作的第五级;该可编程控制器包括选择装置,设在第二级中,用于从通用寄存器的输出、第三级的ALU的输出、和提供给第四级的ALU的输出中选择出第三级的ALU的一个输入。
本发明的可编程控制器以流水线的方法执行第一至第五级,即,用于执行取指令操作以便从指令存贮器取出指令的第一级,用于指令解码并从一通用寄存器取出一个数值的第二级,用于执行算术和逻辑操作、数据地址计算、目标分支有效地址的计算、或分支状态确定的第三级,用于访问数据存贮器或执行分支操作的第四级,以及用于执行位操作、针对通用寄存器的写操作、或分支操作的第五级,该可编程控制器包括选择装置,设在第三级中,用于从自第二级输出至ALU的一个输出端的值、提供给第四级的ALU的输出、以及提供给第五级的ALU的输出中选择第三级的ALU的一个输入。
本发明的可编程控制器以流水线的方式执行第一至第五级,即,用于执行取指令操作以便从指令存贮器取出指令的第一级,用于指令解码并从一通用寄存器取出一个数值的第二级,用于执行算术和逻辑操作、数据地址计算、目标分支有效地址的计算、或确定分支状态的第三级,用于访问数据存贮器或执行分支操作的第四级,以及用于执行位操作、针对通用寄存器的写操作、或分支操作的第五级,该可编程控制器包括如下功能暂停执行装入(LOAD)指令后的一个指令直到按照该装入(LOAD)指令获得的数据写入通用寄存器为止,如果该数据对LOAD指令之后的指令是必要的。
只要如在寄存器到寄存器的操作或变元操作中所做的那样由ALU计算要写入通用寄存器的值,即使还没有将该值写入通用寄存器中,该值也会出现在流水线中的某个地方。与可编程控制器类似地,有可能通过提供一个数据通路来处理流水线相关危险,该数据通路用于从流水线中的预定位置获得一个作为ALU变元所需要的值。然而,如果按照前面的LOAD指令从数据存储器获取要写入通用寄存器的一个值,则该值在执行存储器访问操作的第四级第一次出现在流水线中。如果后面的指令与把由该LOAD指令更新其值作为变元的通用寄存器有关,那么使用可编程控制器中设置的数据通路可能难以解决问题。
为了解决这一问题,必须暂停执行后面的指令直到将需要的值写入通用寄存器为止。该方法相当于插入NOP指令。但是,如果实际地将NOP指令插入程序中,则程序长度增大。为了避免此问题,当在第二级解码当前指令时检验流水线上的前面指令。并进一步地检验是否由前面指令更新了当前解码指令所需要的通用寄存器的值。如果情况是这样,暂停执行当前解码的指令直到该值实际写入通用寄存器为止。同时,也防止程序计数器计数值增加。结果是,实现了与插入NOP指令等效的操作。
按照本发明的可编程控制器,该可编程控制器的特征在于如果LOAD指令后面的指令是STORE指令,并且如果由LOAD指令对保持STORE指令所需要的一个值的通用寄存器更新,那么按照该LOAD指令在第五级存储到通用寄存器中的数据在第四级被取出并写入数据存储器。
正如前面已经描述的,如果由LOAD指令更新在第三级执行操作所需的通用寄存器的值,必须暂停执行指令直到能从通用寄存器中取出所需要的值为止。然而,在STORE指令的情况下,从通用寄存器中获取的值直接通过流水线寄存器而不加处理,并且将这样移动的值在第四级写入数据存储器。因此,不需等待按LOAD指令供给通用寄存器的值写入到通用寄存器,并且不需随后按照STORE指令将从通用寄存器中取出的值写入数据存储器。在用于将由LOAD指令更新的通用寄存器的值写入数据存储器的STORE指令位于LOAD指令之后的情况下,如果由可编程控制器执行流水线相关危险操作,则花费浪费的停止时间。
为了避免这样的问题,给可编程控制器提供数据通路,在用于将LOAD指令更新的通用寄存器的值写入数据存储器的STORE指令位于LOAD指令之后的情况下,通过代替暂停执行STORE指令的数据通路将按照前面的LOAD指令(在第五级)从数据存储器中取出的值供给第四级作为用于后面STORE指令的数据。简言之,在LOAD指令更新的通用寄存器的值被写入数据存储器的STORE指令位于LOAD指令之后的情况下,能继续进行处理而不暂停STORE指令的执行。
给本发明的可编程控制器提供数据通路。在用于将LOAD指令所更新的通用寄存器的值写入数据存储器的STORE指令位于LOAD指令之后隔一条指令的情况下,通过代替暂停执行STORE指令的数据通路将按照前面的LOAD指令(在第五级)从数据存储器中取出的值作为用于后面STORE指令的数据。简言之,在将LOAD指令更新的通用寄存器的值写入数据存储器的STORE指令位于LOAD指令之后隔一条指令的情况下,能继续进行处理而不暂停STORE指令的执行。
本发明的可编程控制器以流水线的方式执行以下的第一至五级,即,用于执行取指令操作以便从指令存贮器取出指令的第一级,用于指令解码并从一通用寄存器取出一个数值的第二级,用于执行算术和逻辑操作、数据地址计算、目标分支有效地址的计算或确定分支状态的第三级,用于访问数据存贮器或执行分支操作的第四级,以及用于执行位操作、针对通用寄存器的写操作、或分支操作的第五级,该可编程控制器的特点是包括如下功能当满足分支条件时禁止执行已经包含在流水线中的无效的指令。
本发明的可编程控制器按流水线方式执行以下的第一至第五级,即,用于执行取操作指令以便从指令存贮器取出指令的第一级,用于指令解码并从一通用寄存器取出一个数值的第二级,用于执行算术和逻辑操作、数据地址计算、目标分支有效地址的计算、或确定分支状态的第三级,用于访问数据存贮器或执行分支操作的第四级,以及用于执行位操作、针对通用寄存器的写操作、或分支操作的第五级,该可编程控制器的特点是包括如下功能当满足分支条件时禁止执行已经包含在流水线中的无效的指令。
当按照本发明具有五级流水线结构的RISC可编程控制器执行分支指令时,在第三级计算分支地址并确定分支状态。可以在第三级准备好形成分支所需要的所有值,因此可以在后面的第四级执行分支操作。然而,由于实际电路的限制,在某些电路结构中不是在第四级而是在第五级执行分支操作。在任何情况下,如果满足分支条件,都将在第三级获得的分支地址写入执行分支操作的那一级的程序计数器中。按照程序计数器的值取出指令,从而完成分支操作。此时,如果不满足分支条件,流水线已包括要执行的指令。如果满足分支条件,决不能执行这样的指令。为了防止执行这样的指令,如果满足分支条件,禁止执行在流水线中已取的指令直到从分支地址中取出指令为止。具体说,如果满足分支条件,则禁止用在流水线中已取的指令改写数据存储器或通用寄存器。可编程控制器在第五级执行分支指令并执行前面描述的处理。可编程控制器在第四级执行分支指令。
根据本发明,可编程控制器以流水线方式执行五级,即,用于执行取指令操作以便从指令存贮器取出指令的第一级,用于执行指令解码操作和从一通用寄存器取出一个数值的寄存器取出操作的第二级,用于执行算术和逻辑操作、数据地址计算、目标分支有效地址的计算、或确定分支状态的第三级,用于访问数据存贮器或执行分支操作的第四级,以及用于执行位操作、针对通用寄存器的数据写操作、或分支操作的第五级,该可编程控制器包括下列功能不考虑暂停程序计数器增值的控制信号的值,将由1加上程序计数器的值所获得的值锁存到寄存器中,由定时关系变化驱动程序计数器的时钟信号早的时钟信号驱动该寄存器;用该寄存器的值(代替程序计数器的值)作为指令存储器的地址来取指令。
为了克服前面所述的缺点,给本发明的可编程控制器设置了一个由定时关系变化比驱动程序计数器的时钟信号早的时钟信号驱动的寄存器。由于取出存在寄存器中的值作为指令存储器的地址,因而可较早地确定指令存储器的地址,借此能保证指令存储器的访问时间所需要的提前时间。
根据本发明,可编程控制器是这样的设置如果暂停程序计数器计数值增加的控制信号是一个暂停增值操作的信号,不将从指令存储器中读出的值装入用于取指令的指令寄存器中,而是将该指令寄存器的值保留在其自身之中。
根据本发明,具有五级流水线结构的可编程控制器的特点是如果在执行分支指令时满足分支条件,将在执行分支指令的过程中计算的目标分支地址用作指令存储器的地址,从而取出指令。
根据本发明,具有五级流水线结构的可编程控制器满足能由执行微分指令时计算的位存储器的地址重写位存储器。
根据本发明,具有五级流水线结构的可编程控制器满足当可编程控制器开始开作时,能根据在可编程控制器开始工作之前从外面设置的程序计数器的初值从指令存储器的正确地址来取指令。
为此,使本发明的具有五级流水线结构的可编程控制器满足当执行其操作不能在一个流水线级的时间周期内完成的指令时,通过只在完成指令操作所需的时间周期期间中断程序计数器的增值及通过使控制信号无效来中止该流水线,(该控制信号是把一个值写回寄存器的控制信号或把数据写入数据存贮器的控制信号)借此来执行指令。
根据本发明,具有五级流水线结构的可编程控制器满足当执行其操作不能在一个流水线级的时间周期内完成并且需要不确定的操作时间的指令时,暂停该流水线,直到从执行指令的一个操作块收到一个操作完成信号为止,借此执行该指令,所说的这个操作块是通过中断一个程序计数器的增值并使控制信号无效来执行该指令的,所说控制信号是把一个值写回寄存器中的控制信号或把数据写入数据存贮器的控制信号。
根据本发明,具有五级流水线结构的可编程控制器满足当执行其操作不能在一个流水线级的时间周期内完成的多种类型的指令时,利用适合该类指令的判定操作是否完成的方法,通过中断程序计数器的增值并使控制信号无效来暂停该流水线,借此来执行指令,所说控制信号是把一个值写回寄存器中的控制信号或把数据写入数据存贮器的控制信号。
根据本发明,具有五级流水线结构的可编程控制器,包括一个用于确定是否执行其操作不能在一个流水线级的时间周期内完成的指令的标记,其中,如果已经确定该指令不应执行则阻止开始执行该指令,以便避免流水线操作的浪费时间的暂停。
根据本发明,具有五级流水线结构的可编程控制器包括一个执行其操作不能在一个流水线级的时间周期内完成的指令的操作块,对该操作块进行安排,使其能适应多种类型数据的宽度操作,并且还使它能够接收具有设定在预定位位置的值的输入,并且能根据需要清除在不使用的位位置的值。
根据本发明,具有五级流水线结构的可编程控制器的特点是当执行其操作不可能在一个流水线级的时间周期内执行的指令时,保持预定的信息,直到在该指令将操作结果存储到寄存器的条件下把操作结果写回到多个通用寄存器的操作全部完成时为止。
根据本发明,具有五级流水线结构的可编程控制器满足当执行其操作不可能在一个流水线级的时间周期内执行的指令时,对设在指令解码级和执行该指令的级之间的流水线寄存器中的指令的控制信号或变元进行保持一段按需要确定的时间周期。
给本发明的具有五级流水线结构的可编程控制器设置一个操作块和一个指令执行控制块,操作块是专门设计的以便执行可编程控制器需要的所有操作中的一个操作,例如在多个流水线级的时间中花费长时间的乘法操作或除法操作,而指令执行控制块用于控制操作块和流水线结构的需要部分。
为了克服前面所述的已有技术的缺点,本发明的可编程控制器按流水线方式执行五级,即用于执行取指令操作,即,从指令存贮器IM取出指令的第一级IF,用于执行指令解码操作和从一通用寄存器取出一个数值的寄存器取数操作的第二级ID,用于执行算术和逻辑操作、数据地址计算、目标分支有效地址的计算、以及确定分支状态的第三级EX,用于访问数据存贮器DM或执行分支操作的第四级MEM,以及用于执行位操作,针对通用寄存器的写数据、或分支操作的第五级WB。该可编程控制器的设置包括一个专门设计的为与位处理指令一起用的存储地址计算块BPUADR,以便除执行装入指令、存储指令、以及存储器访问指令外还执行位处理指令。专门设计用于位处理指令的存储地址计算块BPUADR在多个流水线周期计算数据存储器DM的地址,从而发出存储器访问请求信号。结果,能在多个连续的流水线级中访问存储器。进一步地,给可编程控制器配有专门设计用于执行位处理操作的电路块BPU。从该电路模块中输出存储器地址和存储器读请求信号,借此,执行从数据存储器DM中读数据的操作。作为替换,从该电路块输出存储器地址、要写入存储器中的数据、以及存储器写请求信号,借此执行将数据写入数据存储器DM的操作。
在流水线寄存器中根据指令解码结果提供表示随后的指令是一条位处理指令的控制信号。如果必须暂停执行位处理指令后面的指令,则可编程控制器暂停程序计数器增值。即使只通过暂停程序计数器PC的增值不可能暂停该指令的执行,也通过进一步改写指令的解码结果来暂停位处理指令后面的指令。
给可编程控制器提供专门设计用于仅当输入改变时与要执行的微分指令一起使用的一个数据存储器BM。该存储器的地址总线在该数据存储器BM和指令存储器IM之间共享。在这种情况下,指令存储器地址在取出一指令时就输入到流水线寄存器中,并且如此取出的地址通过该流水线寄存器依次传送到专门设计与位处理指令一起使用的电路块。当把微分指令写回专门设计与微分指令一起使用的数据存储器BM时,传送的指令存储器IM地址被用作向该存储器内写入数据的地址。当把微分指令写回到专门设计与微分指令一起使用的数据存储器中时,暂停程序计数器的增值,以保证指令的取出。进一步地,当把微分指令写回到专门设计与微分指令一起使用的数据存储器中时,用对随后的操作不会有任何影响的指令改写从指令存储器获得的指令。另外,如果这些操作同时出现,通过按要求暂停执行指令来保证指令的取出。
使本发明的可编程控制器设计成能解决前面所述的已有技术的问题并以流水线方式执行五级,即用于执行取指令操作以便从指令存贮器IM取出指令的第一级IF,用于执行指令解码操作和从一通用寄存器取出一个数值的寄存器取数操作的第二级ID,用于执行算术和逻辑操作、数据地址计算、目标分支有效地址的计算、以及确定分支条件的第三级EX,用于访问数据存贮器DM或执行分支操作的第四级MEM,以及用于执行位操作,针对通用寄存器的写数据操作或分支操作的第五级WB。该可编程控制器包括确定包括多个标记值的指令执行状态,仅当在指令执行级中满足指令执行状态时才执行一特定的指令。
进一步地,该本可编程控制器还包括一个结构,该结构的功能是当启动紧跟在标记设置指令之后的一个指令的指令执行级时,能使标记设置指令已经完成更新用于设立指令执行状态的标记;能在协调地控制是执行该指令还是使该指令无效的判定的同时执行该指令。更进一步地,该可编程控制器还包括一个具有如下功能的结构当启动紧跟在算术操作指令之后的一个指令的指令执行级时,能使各种类型的算术操作指令已经完成更新用于设立指令执行状态的标记;并且能在协调地控制是执行该指令还是使该指令无效的判定的同时执行该指令。
本可编程控制器还包括这样一个结构能由在第五级中实现位操作处理的位处理指令来更新标记以形成位处理指令;能提供流水线寄存器中的控制信号,该控制信号表示当前指令是更新与指令执行条件有关的标记的位处理指令;能根据该控制信号暂停执行指令,而不对指令执行条件进行判定;并且能在协调地控制是要执行该指令还是使该指令无效的判定的同时执行该指令。
为了克服前面所述的缺点,本发明的可编程控制器以流水线方式执行五级,即,用于执行取指令操作以便从指令存贮器IM取出指令的第一级IF,用于执行解码操作和从一通用寄存器取出一个数值的寄存器读取数操作的第二级ID,用于执行算术和逻辑操作、数据地址计算、目标分支有效地址的计算、以及确定分支条件的第三级EX,用于访问数据存贮器DM或执行分支操作的第四级MEM,以及用于执行位操作、针对通用寄存器的写数据操作或分支操作的第五级WB。可编程控制器包括用于执行启动/停止控制操作的状态机。将取指令时获得的程序计数器的值输入到流水线寄存器中,并且通过流水线寄存器照原样传递该值。根据流水线寄存器中的程序计数器的值,在可编程控制器处于暂停模式时,由用于启动/停止控制的状态机计算要写入程序计数器的值。在通过用于启动/停止控制的状态机探测停止条件满足、从而使可编程控制器已变为暂停模式之后,阻止执行在满足停止条件的指令后面的另一指令,即使已将该后面的指令调入流水线级。这样,能避免执行无效指令。由于采用了这样的一个结构,所以能提供具有五级结构的可编程控制器,该可编程控制器能按照规程根据各种停止条件协调地执行暂停操作。
为了解决前面所述的问题,本发明的可编程控制器具有一个处理器,该处理器根据输入程序的指令码来执行位处理操作和包含多个字的应用处理,其中每一字由多个位构成作为要计算的对象,并且该处理器进一步包括用于读和写数据的通用寄存器,计算要执行的指令的地址的地址计算部分、以及从外部存储器读数据和将数据写入外部存储器的存储器访问部分,可编程控制器包括一个选择器,该选择器与通用寄存器相连,并且该选择器根据显示标记的识别结果通过操作通用寄存器的内容用硬件执行变址指令,显示标记用于显示有或没有变址指令,变址指令间接地将要操作的对象规定在指令码中。
使本发明所限定的可编程控制器满足指令码是由要操作的对象访问的一个顺序指令。
使本发明的可编程控制器满足将选择器设置在地址计算部分。
规定本发明的可编程控制器满足指令码是使用要计算的对象作为预置数据的计时器或计数器指令。
规定本发明的可编程控制器满足将选择器设置在用于从外部存储器中读数据的数据通路中。
根据本发明的可编程控制器,改善了处理的整个速度。这是通过下面的方式实现的将专门设计的硬件(即,处理器)的指令执行级分为五级以便提供指令集和指令结构;并改善专门设计的硬件(即,处理器)的组成单元的可用性因数。通常,如果使指令执行级分为多级,将使指令的执行的控制复杂化。统一的指令结构大大地简化了专门设计的硬件和简化了控制,因而使本发明的可编程控制器的安排容易配置成多级。结果,能用简单的硬件实现对五级流水线结构的控制,另外,将可编程控制器安排成能根据位处理指令的结果将每一指令执行级的执行说明信息改变成预定值,其中位处理指令是可编程控制器的基本处理操作之一。因而,能通过可编程控制器所特有的位操作处理在不中断流水线处理的情况下使随后的应用指令无效(不被执行)。
以下结合附图详述本发明的实施例,其中

图1是一个说明性的图表,表示本发明的可编程控制器的一个五级流水线结构;图2是一个示意图,表示本发明可编程控制器的指令集和指令结构的一个实施例;图3是一张表,表示本发明可编程控制器的一个操作码的配置的一个例子;图4是一个方框图,表示根据本发明一个实施例的可编程控制器;图5是一张表,表示处理本发明可编程控制器的指令的顺序;图6是一张表格图,表示本发明可编程控制器的操作码ALUOP的分配的一个例子。
图7是表示图4所示的可编程控制器的数据通路的一个方框图;图8是表示按照本发明一个实施例的可编程控制器的一个方框图;图9是表示图8所示的可编程控制器的数据通路的一个方框图;图10是一个方框图,表示图8所示可编程控制器的选择装置SRCFB的部分电路;图11是一个解释本发明可编程控制器操作的图表;图12是一个解释本发明可编程控制器操作的图表;图13是表示本发明可编程控制器另一实施例的方框图;图14是表示图13所示可编程控制器的数据通路的方框图;图15是解释本发明可编程控制器操作的图表;图16是解释本发明可编程控制器操作的图表;图17是表示本发明可编程控制器的又另一实施例的方框图18是解释本发明可编程控制器操作的图表;图19是表示本发明可编程控制器的再另一实施例的方框图;图20是解释本发明可编程控制器操作的图表;图21是解释本发明可编程控制器操作的图表;图22是表示本发明可编程控制器的再一实施例的方框图;图23是表示本发明可编程控制器的又再一实施例的方框图;图24是与图4对应的简化方框图;图25是按照本发明第三实施例的可编程控制器的方框图;图26(a)~图26(d)是一个定时关系图,表示按照本发明第三实施例的可编程控制器的定时关系;图27是按照本发明另一实施例的可编程控制器的方框图;图28(a)~图28(c)是一个定时关系图,表示图24所示可编程控制器的定时关系的一个实例;图29是按照本发明第四实施例的具有五级流水线结构的可编程控制器的方框图;图30是一个定时关系图,表示具有五级流水线结构的可编程控制器的操作定时关系的第四实施例;图31是一个状态转移图,表示设在具有五级流水线结构的可编程控制器的操作执行控制块SUBALU中的状态机的状态转移的第四实施例;图32是一个状态转移图,表示设在具有五级流水线结构的可编程控制器的操作执行控制块SUBALU中的状态机的状态转移的另一实施例;图33是按照本发明另一实施例的具有五级流水线结构的可编程控制器的方框图;图34是具有五级流水线结构的可编程控制器的示意结构的第五实施例的方框图;图35是按照本发明第五实施例的具有五级流水线结构的可编程控制器的方框图;图36(a)~图36(c)是一个说明性的图表,表示本发明可编程控制器的五级流水线结构;图37是本发明的一个实施例的方框图;图38(a)~图38(b)是一个定时关系图,表示图37所示可编程控制器的操作定时关系;图39是本发明的另一实施例的方框图;图40是一个定时关系图,表示位处理指令的操作定时关系,按照该位处理指令,从数据存储器读出数据的一个字并在已修改该数据的一位后把这样读出的数据再写到数据存储器中;图41是在执行图40所示指令时电路中信号的定时关系图;图42是表示位处理指令的操作定时关系的一个定时关系图,按照该位处理指令,从数据存储器读出数据的三个字并在执行该指令时把这样读出的数据写回到数据存储器中;图43是在执行图42所示指令时电路中信号的定时关系图;图44是在执行微分指令时所获得的电路的定时关系图;图45是表示图44所示可编程控制器的操作定时关系的定时关系图;图46是定时关系图,解释在微分指令的相关危险处理中引起的矛盾;图47是定时关系图,表示在执行微分指令和位处理指令时的防范措施;图48是一个图表,表示本发明可编程控制器的操作码PC-REHZDB的分配的一个实例;图49是一个方框图,表示本发明第六实施例的具有五级结构的可编程控制器的第一和第二级的配置;图50是表示本发明的具有五级结构的可编程控制器的第三至第五级的配置的方框图;图51(a)~图51(c)是表示本发明可编程控制器的流水线级的说明性例图;图52是表示可编程控制器的操作的定时关系图;图53是表示可编程控制器的操作的定时关系图;图54是一个方框图,表示本发明第七实施例的具有五级流水线结构的可编程控制器的第一和第二级的构造;图55是表示本发明的具有五级结构的可编程控制器的第三至第五级的构造的方框图;图56是示意图,表示本发明的状态机的状态转移;图57是表示可编程控制器在执行停止指令时的操作的定时关系图;图58是表示可编程控制器在因中断而暂停时的操作的定时关系图59(a)~图59(c)表示根据可编程控制器的一个例子的顺序指令和该指令的地址的一个例子;图60是一个流程图,表示图7所示的顺序指令的操作;图61(a)~图61(c)是在图59所示可编程控制器的预置数据区中的计时器或计数器指令和该指令地址的一个例子;图62是图59所示计时器或计数器指令的操作的流程图;图63是本发明第八实施例的可编程控制器的电路图;图64是表示图63所示可编程控制器的选择器的连接的框图;图65是表示图63所示的可编程控制器的操作的流程图;图66是根据本发明第九实施例的可编程控制器的电路图;图67是表示图66所示的可编程控制器的选择器的连接的框图;图68是表示图66所示的可编程控制器的操作的流程图。
图1表示本发明的可编程控制器的一个五级流水线结构。图1是每一执行级的流水线处理的细节的示意表示。在该图中,由IF(指令取出)表示第一级,在第一级由指令寄存器从指令存储器中取出要执行的下一条指令。在由ID/RF表示的第二级进行指令解码和从通用寄存器中取出一个值。在由EX表示的第三级,执行算术与逻辑操作、数据地址计算,或计算目标分支的有效地址的分支操作。在由MEM表示的第四级,访问数据存储器。最后,在由WB/BPU表示的第五级,执行位操作,针对通用寄存器的写操作,或分支操作。
下面参见图2描述本发明的指令集和指令结构的一个例子。如图2所示,指令包括访问存储器的存储器存取指令(M型指令),执行寄存器到寄存器操作的寄存器-寄存器操作指令(R型指令),执行包含在指令中的立即值数据和存储在通用寄存器中的值操作的立即值指令(I型指令),进行比较和响应比较结果执行分支操作的分支指令(J型指令),以及执行位操作处理的位操作指令(B型指令)。
M型指令包括op-code(操作码)字段、随后的src1(源1)字段、dst1(目的1)字段、以及偏移(offset)字段。例如,M型指令(即,装入指令)进行下面的操作。也就是说,将存储在由src1字段规定的通用寄存器中的地址值与存储在偏移字段的偏移值相加,得到有效地址。将以该有效地址存储在数据存储器中的值装入由dst1字段规定的通用寄存器中。
R型指令包括op-code(操作码)字段、随后的src1(源1)字段、src2(源2)字段、dst1(目的1)字段以及功能字段。例如,R型指令有如下功能将存储在由src1字段规定的通用寄存器中的值与存储在由src2字段规定的通用寄存器中的值的操作结果装入由dst1字段规定的通用寄存器中。例如,用功能字段规定操作方法说明的细节。
I型指令包括op-code(操作码)、随后的src1(源1)字段、dst1(目的1)字段以及立即数字段。例如,I型指令有如下功能将存储在由src1字段规定的通用寄存器中的值与存储在立即数字段中的值的操作结果装入由dst1字段规定的通用寄存器中。
J型指令包括op-code(操作码)、随后的src1(源1)字段、src2(源2)字段以及偏移(offset)字段。例如,J字段有如下功能将存储在偏移字段中的偏移值加到程序计数器并且根据存储在由src1字段规定的通用寄存器中的值与存储在由src2字段规定的通用寄存器中的值的比较结果执行分支操作。
B型指令包括op-code(操作码)字段和随后的位操作指令字段。例如,B型指令具有将数据的规定位置设置成1的功能。
对于本发明的可编程控制器的指令,操作码字段的位宽度是统一的,规定通用寄存器的两个字段接在除B型指令外的指令的操作码字段之后。使字段的位置统一以便规定两个通用寄存器。结果是,能以下面将要描述的方式简化特定设计的硬件结构和流水线控制。
图3表示本发明的可编程控制器的指令集的一个实施例。图3是一张表,表示具有6位操作码字段的指令集的一个实施例。在该表中,类型表示指令的类型,指令表示指令的名称,操作表示指令的功能。
现参考图4,描述根据本发明一个实施例的可编程控制器。图4是一个方框图,表示特定设计的供本发明可编程控制器使用的硬件结构。在该图中,IF部分1包括存储指令的指令存储器2和程序计数器PC,程序计数器PC对在接收来自程序计数器控制电路PCCAL的信号时就存储要执行的下一条指令的指令存储器2的地址计数。根据程序计数器PC计数的地址保持从指令存储器2中读出的指令的指令寄存器IR作为流水线寄存器IF/ID起到以下两个作用保持IF部分1的操作结果并且将该结果送到F一级的ID部分3。
ID部分3包括主要用于对指令的操作码部分进行解码的指令解码器CONTROL,由多个通用寄存器构成的通用寄存器块REGFILE;以及与指令解码器CONTROL的后读级相连以便转换输出到流水线寄存器ID/EX的信号的多路转换器。在能用寄存器块REGFILE中,RDREG1代表接收通用寄存器中的哪一个从RDDATA1输出一个值的信号的一端。RDREG2代表接收规定通用寄存器中的哪一个从RDDATA2输出一个值的信号的一个输入端。WTREG代表接收一个规定从WTDATA输入的值写入通用寄存器中的哪一个的信号的输入端。将指令解码器CONTROL的输出存储在流水线寄存器ID/EX的WB、MEM和EX级。将从RDDATA1和RDDATA2输出的值存储在流水线寄存器ID/EX的src1和src2字段。将包含在指令中的立即值数据存储在流水线寄存器ID/EX的IREX1,将M和I型指令的dst1字段的值存储在流水线寄存器ID/EX的IREX2中。将R型指令的dst2字段的值存储在流水线寄存器ID/EX的IREX3中。
EX部分4包括执行算术和逻辑操作的算术与逻辑单元ALU(以后称为ALU),用于将ALU的输入之一切换到流水线寄存器ID/EX的src2字段的输出或IREX1的输出的切换控制部分ARGCAL(以后称为ARGCAL),接在流水线寄存器ID/EX的WB和流水线寄存器EX/MEM的WB之间并将输出转换给流水线寄存器EX/MEM的WB的多路转换器MUX2,接在流水线寄存器ID/EX的MEM和流水线寄存器EX/MEM的MEM之间并将输出转换给流水线寄存器EX/MEM的WB的多路转换器MUX3,用于在存储在IREX2中的值和存储在IREX3中的值之间转换并将结果输出给流水线寄存器EX/MEM的WTREGMEM的多路转换器MUX4。来自ALU的输出存储在流水线寄存器EX/MEM的AULRSLT中。流水线寄存器ID/EX的src2的输出也保持在流水线寄存器EX/MEM的SRCMEM中。
MEM部分5包括用于控制访问数据存储器6的存储器访问接口7,以及接在流水线寄存器EX/MEM的WB和流水线寄存器MEM/WB的WB之间并将输出转换给流水线寄存器MEM/WB的WB的多路转换器MUX5。将来自流水线寄存器EX/MEM的输出保持在流水线寄存器MEM/WB的ALURSLT中,并且将此输出用于访问数据存储器6。将来自流水线寄存器EX/MEM的MEM的输出输入给存储器访问接口7。将来自流水线寄存器EX/MEM的SRCMEM的输出写入数据存储器6。将流水线寄存器EX/MEM的WTREGMEM的输出输出给流水线寄存器MEM/WB的WTREGMEM。数据存储器6的RDDATA的输出保持在流水线寄存器MEM/WB的MEMDATA中。
WB部分8包括执行位操作的位操作单元BPU(此后称为BPU),用于根据BPU的输出使随后的应用指令无效(即,不执行)的位累加器BITACC(此后称为BITACC),以及用于将要写入通用寄存器块REGFILE的值切换到流水线寄存器MEM/WB的ALURSLT的输出或者流水线寄存器MEM/WB的MEMDATA的输出中的一个输出。
在以图4所示的方式构成专门设计的硬件的情况下,如图5所示的处理每一种类型指令的顺序是必须的。在M型指令的情况下,在第一级执行指令的取出,在第二级进行指令解码和从寄存器中取出数据。在第三级执行数据地址的计算,在第四级访问存储器。在第五级进行针对寄存器的写操作。
在R型和I型指令的情况下,在第一级执行指令的取出,以及在第二级进行指令的解码并从寄存器中取出一个数值。在第三级执行算术与逻辑操作,在第五级进行针对寄存器的写操作。
在J型指令的情况下,在第一级执行指令的取出,在第二级进行指令的解码并从寄存器中取出一个值。在第三级执行用于比较目的算术与逻辑运算,以及在第五级执行分支操作。
在B型指令的情况下,在第一级执行指令的取出,在第二级进行指令的解码。在第四级从数据存储器6中读数据,在第五线执行位操作处理。
下面就一个流水线级描述图4所示的本发明的可编程控制器的每一指令处理级的操作。首先,用更新的程序计数器PC的值作为指令存储器2的地址,并且将从指令存储器2中读取的指令装入流水线寄存器IF/ID。除J型指令改变指令地址的情况外,将在下一时钟的上升沿增加1的值作为程序计数器PC的值存储。类似地,将新的指令一条接一条地装入程序计数器PC。
在第二级的指令解码操作中由指令解码器CONTROL的组合电路主要对装入指令的操作码部分解码。由此得到的解码信号包括所有的用在随后的第三级、第四级和第五级中的指令执行说明。在时钟的下一上升沿将指令执行说明装入流水线寄存器ID/EX的EX、MEM、和WB级。同时从由包含在指令中的src1和src2字段规定的寄存器中读取数据。还将这样读出的数据存储在流水线寄存器ID/EX的src1和src2字段。进一步地,包含在指令中的立即(偏移)字段、M和I型指令的dst1字段,以及R型指令的dst1字段也保持在流水线寄存器ID/EX的IREX1、IREX2以及IREX3中。
在第三级,ALU对保持在流水线寄存器ID/EX中的数据执行算术与逻辑运算。要运算的数据的组合如下(1)要装入并且在ALU中须经算术与逻辑运算的一个数据是src1字段。
(2)要装入并且在ALU中须经算术与逻辑运算的另一数据按下面的方式由ARGCAL的值来选取。还按需要使数据项经受位扩展。
(a)对于R和J型指令……src2(b)对于M和I型指令……IREX1在R和I型指令的情况下,通过向ALU发出相应的操作码使由ALUOP标志的操作执行说明经受所需要的操作。例如,图6示出了操作码ALUOP赋值的一个例子。
在M型指令的情况下,由ALU计算要访问的数据的地址。结果是,ALUOP命令ALU进行加法处理。换句话说,通过将存储在IREX1中的偏移字段中包含的地址与src1的寄存器的值相加来得到数据存储器6的有效地址,这意味着是一个变址操作。只要将接收0输入值的通用寄存器规定为scr1字段,就能将在偏移字段中包含的地址规定为绝对地址。
在J型指令的情况下,通过在ALU中比较来确定分支状态。为此,ALUOP命令ALU在此例中执行减法。换句话说,从src1字段规定的寄存器的值中减去由src2字段规定的寄存器的值,并将相减得到的结果与分支状态进行相互比较。对于J型指令,为了简便起见,将除执行用于分支的比较的电路以外的电路从图4所示的方框图中省去。
在下一时钟信号的上升沿将ALU的操作结果保持在流水线寄存器EX/MEM的ALURSLT中。与此同时,src2字段完全照原样保持在流水线寄存器EX/MEM的SRCMEM中。由多路转换器MUX4选择以下二者之一或者是对于M和I型指令的用于保持dst1字段的IREX2或者是对于R型指令的用于保持dst2字段的IREX3。这样选择的一个结果保持在流水线寄存器EX/MEM的WTRGMEM中。在M和I型指令的情况下选择控制信号REGDST为0,但在R型指令的情况下选择该控制信号为1。
在第四级的存储器访问处理中,根据流水线寄存器EX/MEM中保留的值访问存储器。换句话说,用ALURSLT访问数据存储器6,用SRCMEM将数据写到存储器中。普通位处理指令包括从数据存储器中读取数据,因而在这一级以与处理大量位(字)情况相同的方式来执行访问存储器的操作。
由流水线寄存器EX/MEM的MEM控制针对数据存储器6的读/写操作。由存储器存取接口7产生实际的存储器读/写时钟,并将这样产生的时钟输出给数据存储器6。
对于位处理指令,BPU在第五线执行由BPUOP指定的位处理。由BITACC在下一时钟信号的上升沿保持位处理的结果。对于R和I型指令,将ALURSLT的值写入通用寄存器块REGFILE中。对于M型装入指令,将MEMDATA的值写入通用寄存器块REGFILE。在此时,如果BITACC的值为1,则执行随后的应用指令(字处理)。另一方面,如果BITACC的值为0,则必须使随后的应用指令(字处理)无效。结果是,能实现将BITACC数据的反馈作为用于当前级的流水线的控制信号。换句话说,可编程控制器附加有使下一流水线级的执行说明信息取消的电路。采用下列形式的一个电路作为这样一个电路的例子用于执行说明信息和BITACC的逻辑乘(与)的电路;或者多路转换器(MUX1,MUX2,MUX3和MUX4),所述多路转换器用BITACC作为图4中所示的选择信号并且选择在前级的流水线寄存器中保留的控制信号或者选择使下一应用指令(即字处理)无效的执行说明信息(在图5所示结构的例子中为0)作为保持执行说明信息(例如流水线寄存器ID/EX的WB)的每一流水线寄存器的区域的输入。
从前面描述的电路操作中能看出,在每个时钟通过移位流水线寄存器ID/EX的EX,M和WB将执行说明信息传送到下一级。因而,能实现简单而有效地控制指令的执行。此外,将本发明的可编程控制器设置成执行协调的处理,也就是说,在当前级处理完成之后将每一级处理的数据保留在下一流水线寄存器中。由此,能使专门设计的硬件的数据通路简单然而有效。
可由例如前沿型D触发电路实现流水线寄存器IF/ID、ID/EX、EX/MEM、MEM/WB、WB/IE和PC。进一步地,可由例如触发电路或存储器形成通用寄存器块REGFILE。其它电路元件可由组合电路来形成。
用图4所示的五级流水线结构,下面将参考图7所示的方框图描述用于执行寄存器到寄存器操作的数据通路。通过两个流水线寄存器EX/MEM和MEM/WB的每一个的ALURSLT将由ALU执行的操作结果写入通用寄存器块REGFILE的任一通用寄存器中。如果将一个值写入某一通用寄存器的指令紧接在用此通用寄存器的该值作为变元的指令之后,例如,存储在通用寄存器R1中的值和存储在通用寄存器R2中的值进行逻辑乘(即,对它们进行与操作)。进一步地,如果用于将与操作的结果写入通用寄存器R3的指令(AND R1R2 R3)紧接在用于实现通用寄存器R3中存储的值和存储在通用寄存器R4的值的逻辑和(OR)(即,使这些值经过OR操作)并将OR操作的结果写入通用寄存器R5的指令(OR R3 R4 R5)之后,则用于执行OR操作的变元R3必须是在OR操作之前刚执行的AND操作的结果。然而,为了OR操作,在寄存器取数操作时将执行OR操作所必须的要写入通用寄存器R3中的值存储在流水线寄存器EX/MEM中。正因为如此,问题出现在将操作结果实际写入通用寄存器之前操作结果变成为后来的指令所必需的时候。
为了解决在访问通用寄存器时出现的这种流水线相关危险,必须插入所需数量的NOP指令直到消除流水线相关危险为止。插入NOP指令不需对电路结构进行修改,因而可容易地实现。然而,插入NOP指令导致指令数目相应增加,这又增加了程序的大小。
现在将参考图8至12描述本发明第二实施例的可编程控制器。基于图4所示可编程控制器的电路来描述本发明特有的结构。按需要将省去该结构的其它部分的描述和解释。首先,参考图8描述和于寄存器到寄存器操作的数据通路。正如前面所述,图7所示的常规数据通路有这样一个问题如果在将寄存器到寄存器操作的结果写入通用寄存器块REGFILE的一个通用寄存器之前下一指令涉及该通用寄存器,则从寄存器中取出的数据是未经更新的并因此变得无用。因而,通过配置用在流水线操作的第二级中的ALU上用于选择变元的选择装置SRCFB给本发明的可编程控制器提供附加的数据通路,如图8的方框图所示。
如图8所示,将一个通用寄存器REGFILE的输出(即,一个通用寄存器的输出)、第三级的ALU的输出、以及一个流水线寄存器EX/MEM的ALURSLT的输出(即,在第四级中采用的ALU的输出)与选择装置SRCFB的输入相连。选择装置SRCFB输出与流水线寄存器ID/EX的SRC1的输入相连。将选择装置设置成能从通用寄存器的输出、ALU的输出、以及流水线寄存器EX/MEM的ALURSLT(即,提供给第四级的ALU的输出)中选择一个保持用于ALU的一个变元的要输入给流水线寄存器ID/EX的SRC1的值。图8仅表示了与ALU的两个变元之一相连并与由SRC1执行的从寄存器中取出数据有关的数据通路。
图9是一个方框图,表示图8所示的数据通路的更详细的结构。在该图中仅示出了与本发明有关的那些部分。如图所示,在第二级(以后称为ID级)设置选择装置SRCFB。将MUX的输出和流水线寄存器EX/MEM的ALURSLT的输出分别作为信号EX-SRC和MEM-SRC传送给选择装置。将通用寄存器堆REGFILE的读寄存器标志信号输出给选择装置SRCFB(也将该读寄存器标志信号馈入端RDSEL1,该端RDSEL1接收用于规定从通用寄存器堆REGFILE的RDDATA1中输出一个值的通用寄存器的信号)。
EX-SEL信号是第三级(以后称为EX级)的写寄存器标志信号,而MEM-SEL信号是第四级(以后称为MEM级)的写寄存器标志信号。将流水线寄存器ID/EX的IREX2或IREX3的值作为EX级的写寄存器标志信号EX-SEL输出给选择装置SRCFB。进一步地,将流水线寄存器EX/MEM的WTREG的值作为MEM级的写寄存器标志信号MEM-SEL输出给选择装置SRCFB。
将存储在流水线寄存器ID/EX的WB中的值作为EX级的一个寄存器写有效信号EX-WTEN输出给选择装置SRCFB。将存储在流水线寄存器EX/MEM的WB中的值作为MEM级的寄存器写有效信号MEM-WTEN输出给选择装置SRCFB。将通用寄存器堆REGFILE的输出端RDDATA1的输出作为信号ID-SRC输出给选择装置SRCFB。选择装置SRCFB的输出与流水线寄存器ID/EX的SRC1相连。图9表示一个电路,在该电路中将前面指令的操作结果再返回给流水线寄存器ID/EX的SRC1。
例如,由两个多路转换器的组合构成选择装置SRCBF,如图10所示,并且将选择装置SRCFB设置成能选择要输出给流水线寄存器ID/EX的SRC1的数据。在图10中,由第一多路转换器选择信号ID-SRC或信号MEM-SRC,由第二多路转换器选择由第一多路转换器如此选择的信号或信号EX-SRC。
下面参照图11描述图9所示的电路在有因访问通用寄存器而产生的流水线相关危险存在的情况下的操作。在图11所示的处理中,执行三条寄存器的寄存器指令(即AND R1 R3 R4,OR R1 R3 R5,和AND R2 R3 R6),其中,根据第一条AND指令(即,AND R1 R2 R3)更新通用寄存器R3的值,并用通用寄存器R3的更新值作为变元。以下的描述基于如下假设一级的处理时间是1并且具有与参考时钟信号PHI 1的一个周期相对应的长度,并且与参考时钟PHI 1的上升时间同步地执行在每一级的处理。下面的描述进一步基于如下假设与第一条指令相应的处理的开始时间是时刻0,并取每一级的停止时间分别为时刻1至时刻8。
首先,描述第一条指令(AND指令)的处理。在时刻1将第一条指令从指令存储器中读到指令寄存器IR(IF/ID/IR)中。在时刻2分别将通用寄存器R1和R2的值存储在流水线寄存器ID/EX的SRC1(ID/EX/SRC1)和SRC2(ID/EX/SRC 2)中,由此准备好用于ALU的变元。在时刻3 ALU执行AND操作,并且将要存在通用寄存器R3中的操作结果存储在流水线寄存器EX/MEM的ALURSLT(EX/MEM/ALURSLT)中。在时刻4将存储在流水线寄存器EX/MEM的ALURSLT(EX/EME/ALURSLT)中的值存储到流水线寄存器MEM/WB的ALURSLT(MEM/WB/ALURSLT)中,为在通用寄存器R3中存储数值作准备。在时钟信号PHI 3的上升沿(即,时间4.5)将存储在流水线寄存器MEM/WB的ALURSLT(MEM/WB/ALURSLT)中的值写入通用寄存器堆REGFILE的通用寄存器R3中,其中时钟信号PHI 3与参考时钟信号PHI 1相位相差180°。
其次,描述第二条指令(AND指令,AND R1 R3 R4)的处理。通用寄存器R3的值在时刻3开始的EX级是必要的。在此情况下,通过选择装置SRCFB将ALU的输出反馈给EX级,并且在时刻3将该输出存储在流水线寄存器ID/EX的SRC 2(ID/EX/SRC2)中。
对于第三条指令(OR指令,OR R1 R3 R5),通用寄存器R3的值在时刻4开始的EX级是必要的。在此情况下,通过选择装置将存储在流水线寄存器EX/MEM的ALURSLT(EX/MEM/ALURSLT)中的值反馈给EX级,并将该值存储在流水线寄存器ID/EX的SRC 2(ID/EX/SRC 2)中。
对于第四条指令(AND指令,AND R2 R3 R6),在时刻4.5将第一条AND指令的结果写入通用寄存器R3中。从通用寄存器R3中取出该值并将该值提供给流水线寄存器ID/EX的SRC 2(ID/EX/SRC2),借此处理该值。
如上所述,在时刻4.5将第一条指令的操作结果写入通用寄存器R3。因而,对于必须在时刻4.5之前从通用寄存器中取值的第二和第三条指令不可能从通用寄存器R3中读出正确的值。为此,在第二条指令情况下(即,当由紧接着的前一指令来更新要用作为变元的通用寄存器的值的时候),用ALU的输出作为变元代替通用寄存器的输出。进一步地,在第三条指令的情况下(即,当用由当前指令之前再之前的指令来更新要用作变元的通用寄存器的值的时候),用存储在流水线寄存器EX/MEM的ALURSLT中的值代替通用寄存器的输出作为变元。
下面描述判断是否由在先指令更新存储在通用寄存器中并用作ALU的变元的值的方法。有可能由通用寄存器堆REGFILE的读寄存器标志信号ID-SEL、EX级的写寄存器标志信号EX-SEL、以及MEM级的写寄存器标志信号MEM-SEL来确定通用寄存器中的哪一个成为对象寄存器。
也能由EX级的寄存器写有效信号EX-WTEN和MEM级的寄存器写有效信号MEM-WTEN来确定是否针对通用寄存器执行写操作。简言之,如果从寄存器中取值所需要的读寄存器号数(即,通用寄存器堆REGFILE的读寄存器标志信号ID-SEL)和EX级的写寄存器号数(即,EX级的写寄存器标志信号EX-SEL)之间匹配,并且如果EX级的寄存器写有效信号EX-WTEN为“有效”,则用EX的寄存器写数据(即,ALU的输出)作为从寄存器取值的一个信号,代替通用寄存器的输出。进一步地,如果从寄存器中取一个值所需要的读寄存器号数(即,通用寄存器堆REGFILE的读寄存器标志信号ID-SEL)和MEM级的写寄存器标志号数据MEM-SEL之间匹配,并且如果MEM级的寄存器写有效信号MEM-WTEN为“有效”,那么用MEM级的寄存器写数据(即,流水线寄存器EX/MEM的ALURSLT的输出)作为用于从寄存器中取出一个值的一个信号,代替通用寄存器的输出。
此外,如果所有从寄存器中取出一个值所需的读寄存器号数(即,通用寄存器堆REGFILE的读寄存器标志信号ED-SEL)、EX级的写寄存器号数(即,EX级的写寄存器标志信号EX-SEL)、以及MEM级的写寄存器标志号数MEM-SEL之间都匹配,并且如果EX级的寄存器写有效信号EX-WTEN和MEM级的寄存器写有效信号MEM-WTEN都为“有效”,则将EX级的寄存器写数据(即,ALU的输出)用作从寄存器中取出一个值的一个信号。这可归因于如下事实如果由紧接在当前指令之前的指令和在当前指令之前再之前的指令更新要用作某一指令的变元的通用寄存器,则必须将由紧接在前指令更新的结果用作变元。
下面参考图12描述处理依次的四条指令的方法,用此方法依次地改写通用寄存器R3的值。为了简便起见,下面的描述基于如下假设通用寄存器是8位长,00001111(0×0F)和01010101(0×55)分别存储在通用寄存器R1和R2中。对于第一条指令(AND R1 R2 R3),在时刻2分别将0×0F和0×55存贮在流水线寄存器ID/EX的SRC1(ID/EX/SRC1)和SRC 2(ID/EX/SRC2)中。在时刻3将操作结果0×05存贮在流水线寄存器EX/MEM的ALURSLT(EX/MEM/ALURSLT)中。在时刻4将操作结果0×55存贮在流水线寄存器MEM/WB的ALURSLT(EX/MEM/ALURSLT)中。在时刻4.5将操作结果0×05写入通用寄存器R3。
对于第二条指令(OR R3 R2 R3),在时刻3通过SRCFB将存储在流水线寄存器EX/MEM的ALURSLT中的操作结果0×05反馈给流水线寄存器ID/EX的SRC1(ID/EX/SRC1)。在时刻4将该指令的操作结果(0×55)存储在流水线寄存器EX/MEM的ALURSLT(EX/MEM/ALURSLT)中。
对于第三条指令(XOR R3 R1 R3),在时刻4将存储在流水线寄存器EX/MEM的ALURSLT(EX/MEM/ALURST)中。
下面参考图13所示的方框图描述本发明的另一个不同实施例的可编程控制器。在图8所示的可编程控制器中,在流水线操作的第二级(即ID级)设置了选择用在ALU中变元的数据通路。正相反,按图13所示的实施例,在第三级(即,EX级)设置数据通路以完成与图8所示实施例相同的功能。
如图13所示,在流水线操作的第三级设置选择装置SRCFB,用于选择用在ALU中的变元。从第二级输出给ALU的一个输入端的值(即,流水线寄存器ID/EX的SRC 1的输出)、提供给第四级的ALU的输出(即,流水线寄存器EX/MEM的ALURSLT的输出)、以及提供给第五级的ALU的输出(即,流水线寄存器MEM/WB的ALURSLT的输出)与选择装置SRCFB的输入端相连,并且SRCFB的输出与ALU的一个输入相连,选择装置SRCFB设置成能从下列值中选择一个要输入给ALU的一个输入端的值从第二级输出给ALU的一个输入端的值(即,流水线寄存器ID/EX的SRC1的输出)、提供给第四级的ALU的输出(即,流水线寄存器EX/MEM的ALURSLT的输出)、以及提供给第五级的ALU的输出(即,流水线寄存器MEM/WB的ALURST的输出)。图8仅表示了与ALU的两个变元之一相连的数据通路,它与由SRC1执行的从通用寄存器中取出数据有关。
图14是方框图,表示图13所示的数据通路的更详细的结构。在图中仅示出了与本发明有关的部分。如图所示,将选择装置SRCFB设置在第三级(以后称为EX级)。将流水线寄存器EX/MEM的ALURSLT的输出和流水线寄存器EX/WB的ALURSLT的输出分别作为信号MEM-SRC和WB-SRC馈送给选择装置SRCFB。进一步地,将流水线寄存器ID/EX的SRC1的输出输出给选择装置SRCFB。
MEM-SEL信号为MEM级的写寄存器标志信号,WB-SEL信号为WB级的写寄存器标志信号。EX-SEL信号为EX级的写寄存器标志信号。将流水线寄存器EX/MEM的WTREG的值作为MEM级的写寄存器标志信号MEM-SEL输出给选择装置SRCFB。将流水线寄存器MEM/WB的WTREG的输出值作为WB级的写寄存器标志信号WB-SEL输出给选择装置SRCFB。将流水线寄存器ID/EX的IREX2或IREX3的值作为EX级的写寄存器标志信号EX-SEL输出给选择装置SRCFB。
将存贮在流水线寄存器EX/MEM的WB中的值作为MEM级的寄存器写有效信号MEM-WTEN输出给选择装置SRCFB,将存储在流水线寄存器MEM/WB的WB中的值作为寄存器写有效信号WB-WTEN输出给选择装置。选择装置SRCFB的输出与ALU的两个输入端之一相连。图14表示将在先指令的操作结果返回给ALU的两个输入端之一的电路。
参见图15,描述图13所示电路的操作。下面将描述图15所示电路在有因访问通用寄存器而形成的流水线相关危险的情况下的操作。执行两条寄存器到寄存器指令(即,AND R1 R3 R4,OR R1 R3 R5)其中根据第一条AND指令(即,AND R1 R2 R3)更新通用寄存器R3的值,并且用通用寄存器R3的更新值作为一个变元。
首先,描述第一条指令(AND指令)的处理。在时刻1将第一条指令从指令存储器中读到指令寄存器IR(IF/ID/IR)中。在时刻2分别将通用寄存器R1和R2的值存储在流水线寄存器(ID/EX)的SRC 1(ID/EX/SRC 1)和SRC2(ID/EX/SRC 2)中,由此准备用于ALU的变元。在时刻3 ALU执行AND操作,并且将要存贮在通用寄存器R3中的操作结果存储在通用寄存器EX/MEM的ALURSLT(EX/MEM/ALURSLT)中。在时刻4将存储在流水线寄存器EX/MEM的ALURSLT(EX/MEM/ALURSLT)中的值存储在流水线寄存器MEM/WB的ALURSLT(MEM/WB/ALURSLT)中,为在通用寄存器R3中存储数值作准备。在时钟信号PHI 3的上升沿(即,时间4.5)将存储在流水线寄存器MEM/WB的ALURSLT(MEM/WB/ALURSLT)中的值写入通用寄存器堆REGFILE的通用寄存器R3中。
然后,描述第二条指令(AND指令,AND R1 R3 R4)的处理。通用寄存器R3的值在时刻3开始的EX级中是必要的。在此情况下,通过选择装置SRCFB将流水线寄存器EX/MEM的ALURSLT(EX/MEM/ALURSLT)的输出作为SRC 2的输出反馈和输入到ALU的两个输入端之一。
对于第三条指令(OR指令,OR R1 R3 R5),通用寄存器R3的值在时刻4开始的EX级中是必需的。在此情况下,通过选择装置将存储在流水线寄存器EX/MEM的ALURSLT(EX/MEM/ALURSLT)中的值作为SRC 2的输出反馈并输入到ALU的两个输入端之一。
在图8和13所示的可编程控制器中,由在当前指令之前的紧接着的在前指令或隔一个的指令修改用于提供某一指令的变元的通用寄存器,不从通用寄存器中取数据而从流水线寄存器上的某一位置反馈数据。但是,如果前面的指令是装入(LOAD)指令,则对象数据仅在MEM级完成访问存储器之后出现在流水线寄存器上。下面参见图16描述电路在下面情况下的操作,将要由LOAD指令更新的通用寄存器的一个值用作后面指令的一个变元。
第一装入指令作出以下指示将0×0005加到存储在通用寄存器R0的值来计算要读出数据的存储器的地址,并且将从该地址存储在存储器的值存储在通用寄存器R3中。与LOAD指令相应的数据在MEM级的停止点(即时刻4)之前没有出现在流水线寄存器上。因此,紧接在LOAD指令之后的AND指令不可能在时刻4之前从流水线寄存器中取数据。
换句话说,在第五级(即WB级)的操作过程中将一个值写入通用寄存器REGFILE中。将在时刻4出现在流水线寄存器MEM/WB中的数据存储器的值(流水线寄存器MEM/WB的MEMDATA)在时间4.5存储在通用寄存器R3中。根据后面的指令在时刻5取出存储在通用寄存器R3的值。
如果在前的指令要求执行ALU的操作,如寄存器到寄存器操作或立即操作,则要写入通用寄存器中的数据存在于流水线寄存器上。然而,在LOAD指令的情况下,直到在第四级(即MEM级)从数据存储器中读出一个值才能获得该数据。因此,必须暂停执行随后的指令直到将正确的值供给寄存器为止。图17表示实现上述功能的可编程控制器的一个实施例。
图17表示了一个电路,在该电路中用于控制指令执行的执行控制块HDU设置在第二级。执行控制块HDU接收从流水线寄存器IF/ID反馈的两个读寄存器标志信号(与通用寄存器堆REGFILE的RDREG 1和RDREG 2对应的信号)、从流水线寄存器ID/EX反馈的写寄存器标志信号IREX 2和数据存储器存取控制信号MEM、以及从流水线寄存器EX/MEM反馈的写寄存器标志信号WTREG和数据存储器存取控制信号MEM。
可以看出,由紧接在前的LOAD指令在下列状态下更新要求当前在ID级对指令解码的通用寄存器。换句话说,ID级的读寄存器号数(即读寄存器)和EX级的写寄存器号数(即流水线寄存器ID/EX的写寄存器标志信号IREX 2)存在匹配,并由EX级的存储器访问来读数据(即流水线寄存器ID/EX的数据存储器存取控制信号MEM)。类似地,如果用MEM级的对应信号进行相同的检验,则能确定是否由当前指令之前再之前的LOAD指令来更新要求当前在ID级对指令解码的通用寄存器。如果已经检测出由当前指令之前再之前的LOAD指令或紧接在当前指令之前的LOAD指令更新要求当前对指令解码的通用寄存器,那么需暂停执行当前正在解码的指令。为此,执行控制块HDU输出控制信号PC-HZD和ID-HZD。如果PC-HZD信号为零,按通常的方式增加程序计数器的计数值。然而,如果PC-HZD信号为1,则使程序计数器安排成不变值(即,根据控制信号PC-HZD使加到程序计数器PC上的值在0和1之间转换)。如果ID-HZD为1,由控制信号ID-HZD控制的多路转换器(即,将零或由指令操作码解码所得到的值输出给流水线寄存器ID/EX的WB的多路转换器,或类似的多路转换器)用0重写控制信号,该控制信号是以前用对指令操作码解码的指令解码器CONTROL解码的。结果是,禁止写入数据存储器和通用寄存器。执行控制块HDU有可能通过输出一个作为PC-HZD和ID-HZD信号的信号来暂停执行指令。
如前所述,如果由紧拉在前的LOAD指令或在当前指令之前再之前的LOAD指令来更新要求当前对指令解码的通用寄存器,必须暂停执行当前解码的指令直到将更新的值写入通用寄存器为止。然而,如果当前解码的指令是将要由LOAD指令更新的通用寄存器的值存入数据存储器的存储(STORE)指令,则不必暂停该指令的执行。下面参见图18来描述当在LOAD指令之后执行将LOAD指令所更新的通用寄存器的值存入数据存储器的STORE指令时所执行的电路操作。在时刻4将根据第一条LOAD指令(LOADWRZ R0 R1 ox0002)已得到的数据供给流水线寄存器MEM/WB的MEMDATA。为了根据第二条STORE指令将存储在MEMDATA中的数据写入数据存储器,需要在时刻4至时刻5之间的某一时间设置要写在数据存储器的数据总线上的值。
如果按照第一条LOAD指令将一个值写入某一通用寄存器,并且如果按照紧接在后面的STORE指令将这样写入的值写到数据存储器中,则可能从流水线寄存器MEM/WB的MEMDATA获得按照第二条STORE指令在MEM级将要写入的数据,因为根本没有修改数据。如果流水线寄存器EX/MEM的WTREG的值和流水线寄存器MEM/WB的WTREG的值彼此相同,并且如果流水线寄存器MEM/WB的MEM的数据表示LOAD指令,则将存储在流水线寄存器MEM/WB的MEMDATA中的值写入数据存储器。然而,如果不是这种情况,将流水线寄存器的SRCMEM的数据(即在流水线上移动的原始数据)写入数据存储器。用此方案,如果在LOAD指令之后立即出现将由LOAD指令更新了的通用寄存器的值存入数据存储器的STORE指令,则可能在不暂停执行STORE指令的情况下将一个正确的值写入数据存储器。进一步地,为了处理由当前指令之前再之前的LOAD指令更新按照STORE指令写入一个值的通用寄存器的情况,将存储在流水线寄存器MEM/WB的MEMDATA中的数据写入数据存储器,只要流水线寄存器ID/EX的IREX 2的数据和流水线寄存器MEM/WB的WTREG的值彼此相同,并且流水线寄存器MEM/WB的MEM的数据表示LOAD指令。如果这不是事实,需要做的一切是将流水线寄存器ID/EX的SRC2的数据(即在流水线上移动的原始数据)写入数据存储器。
下面参见图19来描述具有上述功能的可编程控制器的一个实施例。在此图中仅表示了与本发明有关的部分。如图所示,在EX和MEM级设置了数据选择块MEMFB1和MEMFB2。数据选择块MEMFB1和MEMFB2分别将从WB级输出的和存贮在通用寄存器中的数据反馈给EX级和MEM级。数据选择块MEMFB1接收自流水线寄存器ID/EX输出的值和自流水线寄存器MEM/WB(ALURSLT或MEMDATA)输出的值,并有选择地将所接收的两值中的一个输出给流水线寄存器EX/MEM的SRCMEM。数据选择块MEMFB2接收从流水线寄存器EX/MEM的SRCMEM中输出的值和从MEM/WB(ALURSLT或MEMDATA)流水线寄存器中输出的值,并有选择地将所接收的两值中的一个输出给数据存储器DM/EM。
下面描述在WB级进行分支操作的电路的结构。该电路的操作如图20和21所示,用图22中的方框图表示该电路的一个实施例。如果分支状态满足要求,并且如果执行分支操作,则图22所示的电路按下面将要描述的方式操作。
如图20所示,首先在时刻1从流水线寄存器IF/ID的指令寄存器IR中取出一条指令。将该指令的地址存储在流水线寄存器IF/ID的PC级。在随后的ID级读出确定分支状态所需的通用寄存器的值。将这样读出的值存在流水线寄存器ID/EX的SRC1和SRC2中。将流水线寄存器IF/EX的PC的值存贮在流水线寄存器ID/EX的PC级。在随后的EX级,用ALU将两个变元作相互比较。将比较的结果存贮在流水线寄存器EX/MEM的EQ、GT和LT中。在EX级,用与ALU不同的加法器ADDER计算目标地址,并将所获得的结果存贮在流水线寄存器EX/MEM的PC中。在随后的MEM级,由在EX级获得的比较结果和分支指令的类型确定是否满足分支状态。根据确定结果,设置在MEM级的执行控制块HDU产生各种类型的控制信号。将流水线寄存器EX/MEM的PC的值存贮在流水线寄存器MEM/WB的PC级。如果已满足分支状态,在最后的WB级用以存储的目标地址值更新程序计数器PC的值。
另一方面,如果不满足分支状态,则直接执行随后的指令,这不存在问题。然而,如果满足分支状态,必须在取出目标地址处的指令之前暂停执行流水线中取用的指令。在图21中,如果指令(1)是一条分支指令,并且如果满足分支指令(1)的分支状态,则将目标分支的地址写入程序计数器PC。在时刻5根据该地址取出指令(即执行分支操作)。尽管已将指令(2)至(4)取入流水线,但仅在不满足分支状态时才打算执行这些指令。因而,如果满足分支状态,则不该执行这些指令。为了防止指令被执行,如果在MEM级分支状态的确定结果是满足分支状态就通过使用由执行控制块HDU产生的各种类型的控制信号来防止执行在流水线中取用的指令。用于防止指令执行的控制信号为PC-SEL、IF-HZD、ID-HZD、以及EX-HZD信号。PC-SEL信号是一个选择信号,用于确定是否将分支地址写入程序计数器PC。IF-HZD、ID-HZD、以及EX-HZD是控制信号,使在对应的IF、ID、以及EX级的指令变为无效。
如果IF-HZD控制信号为1,将取出的具有用NOP指令码改写的操作码的指令再写入NOP指令。如果ID-HZD和EX-HZD控制信号1,则在ID级解码的控制信号都用0改写,结果是禁止数据存储器或通用寄存器的写入。最后,使在ID或EX级中取用的指令变得无效。图22所示的电路是在WB级执行分支操作的一个电路的一个实例。在该电路中,用PHI 1时钟信号锁存在MEM级产生的PC-SEL信号。然后在从流水线寄存器MEM/WB的PC级输出一个值的同时将这样锁存的信号输出给程序计数器PC,借此控制分支操作。
在图22所示的电路中,在WB级执行分支操作。然而,由于已经在EX级完成分支操作所需的分支状态的确定和目标分支地址的计算,所以,只要有执行分支操作的足够时间在MEM级也能执行分支操作。图23表示在MEM级执行分支操作的一个电路的一个实施例。在使用该电路的情况下,不需要提供带PC级的流水线寄存器MEM/WB,这又导致较小的电路尺寸。进一步地,图23所示电路需要的指令数比在WB级执行分支操作的电路所需的指令少一条,这将改善执行速率。
为了解释本发明的第三实施例,用图24代替图4。图24实际上是由图4简化而来。
虽然图24所示的具有五级流水线结构流水线级具有采用较短流水线级时间周期的优点,这一优点也意味着它必须用较短的时间访问指令存储器1或数据存储器4。由于流水线级增加到五级,尤其在针对指令存储器1进行存取时需执行复杂的状态确定。访问指令存储器1所需要的时间妨碍流水线级所需时间的减少。结果,必须降低访问指令存储器1的总性能或者必须使用高速指令存储器1,这会大大增加成本。
图28(a)至(c)是定时关系图,表示与具有五级流水线结构的可编程控制器的指令取出有关的定时关系。为简便起见,该可编程控制器基于如下假设仅一个控制信号PC-HZD对图24所示的程序计数器控制电路ADDRCALC起作用,可编程控制器设计成在控制信号PC-HZD为0时将1加到程序计数器PC;当控制信号为1时不更新程序计数器PC。从图26所示的定时关系图中省去了指令(例如改变程序计数器PC的分支指令)的定时关系。进一步地,可编程控制器基于如下假设用具有相φ1至φ4的四相时钟信号来操作可编程控制器,由时钟信号φ1驱动用IF/ID开始的流水线寄存器,由时钟信号φ3驱动程序计数器PC。
图28(a)至(c)表示按递增的顺序由指令存储器1的地址1取出指令。图28(a)表示程序计数器PC的值,图28(b)表示控制信号PC-HZD的值。图28(c)表示指令寄存器IR的值,指令寄存器IR将指令取出的结果送到第二级ID并兼作流水线寄存器IF/ID之用。
在图28(a)至(c)所示的例子中,仅在程序计数器PC为3时的一个流水线级的时间周期控制信号PC-HZD才变为1,并且暂停程序计数器PC的增加计数。位于指令存储器1地址3的指令取两次。然后,依次从地址4、地址5取指令。在取指令时,由时钟信号φ3确定指令存储器1的地址。必须输出存储器的该地址的值直到下一时钟信号φ1到来为止。换句话说,从确定指令存储器1的地址到读出指令存储器1的内容所用的访问时间必须小于时钟信号φ3至φ1之间的时间。如果进行流水线结构的最优化,并且如果一个流水线级需要的时间变短,那么,在时钟信号φ3至φ1之间的时间变为小于直到现在一直取用的指令存储器1的访问时间。因此,需要使用更高速和更昂贵的指令存储器1。
如果能用定时变化比时钟信号φ3快的时钟信号φ2来启动程序计数器PC,就解决了上述问题。但是,为了输出控制程序计数器PC增值的控制信号PC-HZD,要确定复杂的状态。不可能在时钟信号φ2到达之前确定控制信号PC-HZD。因而,不能用时钟φ2启动程序计数器PC。
现参照图24至27描述根据本发明第三实施例的可编程控制器。在这些图中仅仅描述本发明的特征部分。这里将省略与图24所示的相同的其它部分以及对它们的详细解释。
图25是仅表示由IF代表的第一级的方框图。在该图中,ADD1是一个加法器,用于将1加到由时钟信号φ3启动的程序计数器PC的值中(即,将程序计数器的值增加1)。MUX1代表由控制信号PC-HZD控制的用于暂停程序计数器PC的计数增值的多路转换器,并且将打算设置到程序计数器PC的值转换到加法器ADD1输出或转换到程序计数器PC的值。ADD2是一个加法器,用于将1与程序计数器PC的输出相加(即,将程序计数器的值加1)。PC1是一个由时钟信号φ2启动的寄存器,用于寄存加法器ADD2的输出,时钟信号φ2比启动程序计数器的时钟信号φ3快。
标号1代表指令存储器,用于输出在由寄存器PC1指出的地址中存储的指令。MUX2表示由控制信号PC-HZD控制的多路转换器,MUX2将要存储在指令寄存器IR中的值转换到指令存储器1的输出或存储在指令寄存器IR中的值。当控制信号PC-HZD为0时,将指令存储器1的输出存储在指令寄存器IR中。当控制信号PC-HZD为1时,将存储在指令寄存器IR中的值设置到指令寄存器IR中。
换句话说,与图24所示的可编程控制器不同,图25所示的可编程控制器配有与程序计数器PC相同数据宽度的并由时钟信号φ2启动的寄存器PC1。不论控制信号PC-HZD为何值都锁存由1加上程序计数器PC的值所得到的值。用这样得到的值作为存储要读出的指令的指令存储器1的地址来取出该指令。对指令寄存器这样设计,当控制信号PC-HZD为1时不是取指令存储器1的值而是取指令寄存器本身的值。
图26是定时关系图,表示图25所示的可编程控制器的取出指令的时间关系。将由1加程序计数器PC的值所得到的值锁存到寄存器PC 1中,由图26(a)所示的时钟信号φ3来更新程序计数器PC的值,由图26(b)所示的时钟信号φ2来启动寄存器PC 1。如图26(d)所示的指令寄存器IR用保留在寄存器PC 1中的值作为地址取出指令存储器1的内容。当图26(c)所示的控制信号PC-HZD的值为1时,取出指令寄存器本身的值而不是指令存储器1的值。
借助于图25所示的寄存器PC 1,能比程序计数器PC更早地确定指令存储器1的地址,并且使使用花费较长访问时间的指令存储器1成为可能。此外,如果暂停程序计数器PC增值的控制信号PC-HZD是一个暂停程序计数器增值的信号(即信号为1),则不将从指令存储器1中读出的值装入取出指令的指令寄存器IR,而是将从指令存储器1中读出的值装入指令存储器本身。即使在执行用于暂停程序计数器PC增值的指令时,也能使用访问时间长得多的存储器作为指令存储器1。
如果仅执行程序计数器PC加1或完全照原样保留一个值的指令,可编程控制器仅用图25所示的电路按规定操作。但是,除此指令之外,可编程控制器还执行例如用于更新程序计数器PC的条件分支和无条件分支指令。进一步地,有一可编程控制器特有的微分指令,从与指令存储器共享地址总线的位存储器(没有示出)中读出一个值和将一个值写入该位存储器。当可编程控制器处于暂停状态时从外面设置程序计数器PC的初值,当可编程控制器开始工作时由这样设置的地址开始取出指令存储器1的内容。象图25所示的可编程控制器那样,如果用1加程序计数器PC的值所获得的值作为指令存储器1的地址,在可编程控制器处于暂停状态时不可能由程序计数器设置的地址取出指令。
图27是解决上述问题的本发明的一个实施例的可编程控制器的方框图。与图25所示的可编程控制器相对比,图27所示的可编程控制器设有多路转换器MUX3,MUX3将要存贮在寄存器PC 1中的值转换到以下的任一个程序计数器PC的值、加法器ADD2输出的值、以及从下一级流水线寄存器输出的分支的目标地址或用于改写的位存储器地址。程序计数器PC的值在可编程控制器已开始工作之后立即直接锁存到寄存器PC 1中。
当由于满足分支条件而执行分支指令时,当通过微分指令将该值写回到位存储器时,或者当在可编程控制器已开始工作之后要立即执行的第一条指令被取出时,选择除由1加程序计数器的值所获得的值以外的输入值作为要存入寄存器PC 1的一个值。图27中省略了用于选择这些输入的信号。
尽管有五级流水线结构的流水线级具有花费较短时间周期的优点,但这一优点在执行鉴于可编程控制器的规定所需要的应用指令时出现一个问题。设置在流水线的第三级EX的算术与逻辑单元ALU执行算术操作、逻辑操作、以及计算用于访问存储器的地址。但ALU不能在一个流水线级的时间周期内执行例如特别复杂的应用指令的乘法和除法操作。
一般来说,如果想要减少操作时间,执行操作的电路的尺寸就会大大增加。在如图24所示具有五级流水线结构的可编程控制器中,如果企图在一个流水线级的时间周期内执行包含在规程中的乘法和除法,则会需要一个大到不能在LSI上实现的操作块。即使不顾尺寸问题而使用有快速算法的操作块,也不可能在一个流水线级的时间周期内完成操作。为了执行这样的操作,必须延长流水线级的时间周期。
下面参考图34描述本发明的具有五级流水线结构的可编程控制器的示意结构。与图24所示的可编程控制器相对比,图34所示的可编程控制器具有设置在流水线结构的第三级EX中的下述附加块,即,除算术与逻辑单元ALU以外的操作块MULT和DIV、操作执行控制块SUBALU、以及多路转换器MUX。ALU执行算术操作、逻辑操作、以及计算访问存储器用的地址;对MULT和DIV进行专门设计以便执行所有应用指令中的复杂操作,例如乘法和加法;SUBALU控制操作块操作的执行;MUX将输出给流水线寄存器EX/MEM的操作结果转换到算术与逻辑单元ALU的一个输出或操作执行控制块SUBALU的一个输出。
从执行流水线的观点来看,操作执行控制块SUBALU与算术与逻辑单元ALU处于相同位置。如图所示,操作执行控制块接收变元S1、S2和来自流水线寄存器ID/EX的操作所需要的控制信号(由解码器2解码的信号)。操作执行控制块还给操作块MULT或DIV输出需要的数据。通过多路转换器MUX将操作结果传送给流水线寄存器EX/MEM。在一个流水线级的时间周期内不能完成这些操作,因而操作执行控制块SUBALU执行如下的控制操作(1)暂停程序计数器PC的增值和流水线操作;以及(2)如果专门设计的操作块正在操作,则使有关在第二级ID和第三级EX将一个值写回到通用寄存器(即寄存器堆3)中的请求信号和有关向数据存储器4写数据的请求信号无效。下面将参考图示的实施例描述更具体的功能。
现参照图29更详细地描述本发明第四实施例的具有五级流水线结构的可编程控制器。图29仅表示整个五级流水线级中的第一级IF、第二ID、以及第三级EX的结构。此外,该图省略了与本发明无关的流水线结构的部件。与图34所示的元件相同的元件用相同的参考符号和标号表示。
在第一级IF,程序计数器对下一次要取出的指令存储器1的地址计数。程序计数器控制电路ADDRCALC更新存贮在程序计数器PC中的值。在图29所示的可编程控制器中,从图中省略了处理例如用于修改程序计数器PC的分支指令的电路的结构,并且也省去对该电路的解释。下面的描述基于如下假设程序计数器PC的值基本上逐一地增加,并且当控制信号HZD_PC为1时程序计数器PC保留原来的值。
指令寄存器IR放在第一级IF和第二级ID之间并且兼作流水线寄存器IF/ID,指令寄存器IR从指令存储器1中取出以指令存储器1的预定地址存储的指令,而该预定地址存储在程序计数器PC中。
在第二级ID,根据指令寄存器IR的值对指令的内容解码。第二级设有寄存器堆3、解码器2、以及相关危险控制单元HDU,寄存器堆3包括多个位宽度由规程确定的通用寄存器,解码器2(以后称为解码器DC)通过解码指令产生用在后面流水线级的各种类型的控制信号,相关危险控制单元HDU输出在进行流水线操作中异常的控制信号。设在第二级ID和第三级EX之间的流水线寄存器ID/EX有S1和S2、以及REG,S1和S2用于读取和存储具有指定号数的通用寄存器的值,REG表示在后面的每一流水线级要用的控制信号EX、MEM和WB以及表示要用于将一个值写回到寄存器中的寄存器号数。
控制信号EX、MEM和WB是所需控制信号的集合。假定当控制信号WB或控制信号MEM中的一个为1时写操作有效,控制信号WB控制将一个值写回到寄存器中,控制信号MEM控制将数据写入数据存贮器中。多路转换器MUX1插在第二级ID中的解码器DC与流水线寄存器ID/EX之间。当控制信号HZD-ID为1时,多路转换器MUX1用0改写这些控制信号EX、MEM和WB的全部,借此使针对通用寄存器(即寄存器堆3)或数据存贮器4的写请求信号无效。
实际上,算术与逻辑单元在执行操作的第三级EX根据流水线寄存器ID/EX的S1和S2的值执行由控制信号EX指示的操作。将这样操作的结果存贮在流水线寄存器EX/MEM的DST中。
图29所示的可编程控制器设有操作执行控制块SUBALU,它设在第三级EX中,用于执行其操作不能在一个流水线级的时间周期内完成的指令。该操作执行控制块的功能与算术及逻辑单元ALU相同在流水线操作过程中从流水线寄存器ID/EX接收输入并且向流水线寄存器EX/MEM输出操作结果。该操作执行控制块不执行实际的操作,并且分开设置专用的操作块(执行乘法的操作块MULT和执行除法的操作块DIV)。该操作执行控制块SUBALU向这些操作块提供变元、接收一个操作结果、并且向流水线寄存器EX/MEM输出这样收到的结果。这些操作不能在一个流水线级的时间周期内完成,因此必须在操作期间中止流水线操作。为此,操作执行控制块SUBALU要输出一个控制信号RQ_HZD给相关危险控制电路HDU。
当向流水线寄存器EX/MEM输出操作结果或要改写的寄存器号数时,必须把向流水线EX/MEM的输出转接到算术及逻辑单元ALU的输出,或者转接到操作执行控制块SUBALU的输出这二个输出中的一个。类似地,必须把要改写的通用寄存器的号数转接到流水线寄存器ID/EX的REG值,或者转接到操作执行控制块SUBALU的输出这二个输出中的一个。出于这些理由,操作执行控制块SUBALU向多路转换器MUX 2和3输出一个控制信号RQ-WT以便进行转接。多路转换器MUX 2向流水线寄存器EX/MEM转接要输出的操作结果,从而把如此转接的结果经过多路转换器3传递到流水线寄存器EX/MEM。结果,转接了要改写的通用寄存器的号数。
控制信号MEM或MB在第三级EX中全然不起作用,该控制信号只是从流水线寄存器ID/EX简单地传递到流水线寄存器EX/MEM。像在第二级ID中一样,第三级EX也没有多路转换器4和5,并把送到多路转换器4和5的控制信号HZD_EX置成1,这就可能使控制信号无效。多路转换器MUX4通过用零改写控制信号WB而使向通用寄存器(即,寄存器堆3)写一数值的请求无效。多路转换器MUX5通过用零改写控制信号MEM而使向数据存贮器4写一数值的请求无效。
现在参照图30所示的定时关系图描述操作执行控制块SUBALU的操作。图30所示的定时关系图说明了一个实例,其中乘法指令(MULT)设在指令存贮器1的地址10中,它前边的指令F1和F2设在地址10之前的地址9和地址8,随后的指令R1、R2、R3和R4设在地址11及随后的地址中。
图29所示的可编程控制器基于以下的假设该电路中的寄存器是由4相时钟信号φ1-φ4中的任何一个驱动的,并且每个流水线寄存器是由时钟信号φ1驱动的。附图表示出兼作流水线寄存器IF/ID的指令寄存器IR、程序计数器PC、控制信号HZD_PC、流水线寄存器ID/EX的S1和EX、设在操作执行控制块SUBALU中的状态机的状态STATE、乘法块MULT的操作结束信号DONE、流水线寄存器EX/MEM的DST和WB、控制信号HZD_EX、以及从操作执行控制块SUBALU输出的控制信号RQ_WT。
在图30所示的实例中,具有驱动流水线寄存器的时钟信号φ1的一个流水线级变为该流水线的一级。按时间顺序设置流水线级T1至T5及Ta至Te,并且在流水线级T1→T5及流水线级Ta→Te之间插有一个很小的时间间隔。在流水线级T1中取出乘法指令之前的指令(即,在先指令F1),并且在流水线级T2中取出乘法指令。把乘法指令引入到流水线级T3中的第三级EX。通过已从流水线寄存器ID/EX的EX收到的乘法请求并且收到已由相关危险控制单元HDC产生的控制信号HZD_PC的操作执行控制块SUBALU,来中止程序计数器PC的增值。在操作执行控制块SUBALU中设置的状态机的状态从表示状态机等待着操作请求信号的初始态IDLE转移到MULT1,并进一步转移到MULT2。当设在状态执行控制块SUBALU中的状态机的状态是MULT2时,该状态机仍旧保持在等待模式中,直到从乘法模块MULT送回操作结束信号DONE时为止。当收到操作结束信号DONE时,状态机转移到状态MULT3,并且进一步转移到表示该状态机等待操作请求信号的初始状态IDLE。操作执行控制块SUBALU向相关危险控制单元HDU提供有关设在SUBAL中的状态机的状态的信息,相关危险控制单元HDU根据这样收到的状态信息更新控制信号HZD_PC和HZD_EX。
图31示意地表示在执行图30所示乘法指令的情况下设在操作执行控制块SUBALU中的状态机的状态转移的情况。当将乘法指令移入流水线的第三级EX时,状态机从表示状态装置等待操作请求信号的初始状态转移到状态MULT1。状态机无条件地从状态MULT1变化到状态MULT2,并在状态MULT2中等待操作的完成。作为操作终止信号DONE向乘法块MULT输出的结果确定了操作的完成。如果对可编程控制器的规格指标进行的设计使该操作块因执行操作的时间恒定而不向状态机传回操作终止信号DONE,则要在操作执行控制块SUBALU中设置一个计数器,例如时间计数装置。还可能利用以下事实将计数器的计数值超过一预先设定值作为状态转移的条件(即,确定操作完成的条件)。
图30中所示的定时关系图只表示乘法情况。和图29所示的可编程控制器相似,如果把多个操作块连接到操作执行控制块SUBALU,并且如果要完成多种类型的操作,所要作的全部工作只是制作一个能够从等待操作请求信号的初始状态IDLE转移到多种类型操作的状态(图32中的乘法或除法状态)的状态机。这时,需要作的全部工作是从以下方法中选出一个比较方便的方法一是根据从每一操作块送回的操作完成信号确定操作的完成的方法,二是根据设在操作执行控制块SUBALU中的计数器的值(即定时计数装置的值)确定操作的完成的方法。
在可编程控制器执行的指令当中,某些指令(那些不可能在一个流水线级的时间周期内完成的指令)要经受有关是否已被执行的判定。对于由算术及逻辑单元ALU处理的普通的指令,算术和逻辑单元ALU完成与指令执行条件无关的指令。如果不执行这些指令,那么,通过使数值写回寄存器的或使数据写到数据存贮器的控制信号无效,就基本上可使这些指令无效。上述完成操作的方式旨在使流水线处理中的流动所受到的干扰最小。在操作执行控制块SUBALU无条件地执行例如ALU的操作的情况下,如果指令执行条件变成无效,则要浪费在操作完成之前的等待时间。如果当把完成该操作执行控制块SUBALU中的操作的指令引入流水线和第三级EX中时不满足指令执行条件,那么就能防止状态机初始状态IDLE转移到操作正在执行的状态,从而不再浪费时间。
在操作块支持多种方式的操作(即,操作块处理多个不同类型数据宽度的操作)的情况下,例如,如果一个乘法块作8位数据乘8位数据的乘法并且也作16位数据乘16位数据的乘法,则可直接使用两个寄存器的值作为变元。对于8位数据的乘法,如果使用两个寄存器中的每一个寄存器的高8位作变元,则在实际完成乘法的操作块以8位操作方式操作的条件下必须把该变元设置到输入数据的低8位。操作执行控制块SUBALU必须把高8位值替换到低8位值而不向乘法模块MULT直接传送16位数据。
当乘法块MULT处在8位操作方式时,操作执行控制块SUBALU必须按照该操作块的规定处理数据,例如,必须用零清除输入数据的无用位位置。在某些情况下,还必须以类似的方式处理输入数据和操作结果这两者。应该对该操作块进行设计,使得不必进行这样的数据处理。然而,如果利用过去的设计资源来配置整个系统,则上述的处理依然还是必须的。
在由图29所示的5级流水线结构的可编程控制器执行的指令中,某些指令需要根据一个或两个寄存器的值来执行操作,并且需要把该操作的结果写回数据存贮器4或一个通用寄存器(即,寄存器堆3)的一个字中。与此相反,在由操作执行控制块SUBALU执行的指令中,某些指令可能需要多个改写操作。例如,如果16位数据乘以16位数据,则结果变为32位长度。如果包括在寄存器堆3中的通用寄存器具有16位宽度,则必须针对一个指令改写寄存器两次。在图30所示的定时关系图中,该通用寄存器相对于乘法指令只改写一次。但在某些情况下,必须根据操作的数据宽度、通用寄存器和数据存贮器4的宽度、或类似的量来进行几次改写操作。为处理这样一种指令,要对状态机进行这样设计,使得操作执行控制块SUBALU在请求操作时保持从流水线寄存器收到的信息,并且使得不是从普通的流水线操作得到的改写操作可以进行几次。
在图30所示的定时图中,在第三级EX中引入乘法请求。这时,取出下一个指令R1,因此将下一个指令R1的变元引入流水线寄存器ID/EX的下一个流水线级T4。乘法指令的变元仅在一个流水线级的时间周期在流水线寄存器ID/EX中退出。如果该变元必须按照完成操作的操作块MULT的规定在流水线寄存器ID/EX中固定不变直到操作结束时为止,就不可能正确地完成操作。就要求向流水线寄存器ID/EX中的操作执行控制块SUBALU传递数值的指令而论,为可编程控制器提供一个多路转换器MUX6,对MUX6进行设计,使它在存在保持请求信号的条件下保持存贮在流水线寄存器ID/EX中的这个数值(即S1的内容)。操作执行控制块SUBALU产生保持请求信号,以使多路转换器MUX6能够保持该数值。结果,即使把下一个按指令引入流水线寄存器ID/EX中,也有可能把操作执行控制块SUBALU当前正在处理的指令的变元或操作方式保持所需长短时期,从而可以正确地完成操作。
在上述实施例中示出了进行乘法和除法的操作块。然而,操作块不限于该实施例中公开的这种形式。
位处理指令是可编程控制器的必要功能之一,用于在执行指令的过程中更新或访问数据存贮器的一个字中的一位的数值,或者用于更新或访问数据存贮器的多个字。为了执行这个位操作指令,需要多个存贮器访问周期。因此,如果按原样使用上述的5级流水线结构,就不可能执行该位操作指令。
该可编程控制器还设有一个所设谓的微分指令,用于检测输入的升或降。与微分指令一起使用的存贮器变得必需了,以记录作为输入信号的前一次扫描的结果而获得的值。出于这个理由,执行使用三级流水线结构的指令的常规的可编程控制器设置了具和指令存贮器相同的地址、并且是一位宽度的存贮器(未经审查的日本专利申请No.Hei-5-189014和189015)。例如,输入x0从OFF态升高到ON态,从而使输出y1接通;在这种情况下,只通过检查现行输入x0是在ON态还是在OFF态是不可能检测到输入x0的升高的。根据存贮在存贮器中的前一个输入x0,作出这样的判断只在前一个输入x0是在OFF态并且当前的输入x0是在ON态时输入x0才升高。如果接通输入x0,将这一事实存贮在存贮器中。结果,即使输入x0在下一个扫描操作时处在ON状态,也作不出输入x0已经升高的判断。按此方式,检测输入信号升降的微分指令需要有存贮器来记录作为输入扫描的前一次扫描的结果而获得的输入信号值。出于这一理由,可编程控制器设有存贮器,其地址和指令存贮器相同并且宽度为一位。这种方法的好处是地址管理简单。已经开发出来具有5级流水线结构并能执行高速操作的可编程控制器也使用了这个方法。在地址存贮器和与微分指令一起使用的数据存贮器之间共享一个地址总线,从而减少了信号线数目。然而,当改写用于微分指令的存贮器时,使用这种配置将使流水线操作受到干扰。结果是不执行所需的指令。
图35是表示按本发明第五实施例的5级流水线结构的可编程控制器的总体配置的方块图。从和具有图24所示结构的可编程控制器的比较显然可以看出,第五实施例的可编程控制器额外还设置了一个BPU(位处理单元)以执行位处理指令,以及一个寄存器BITACC(位累加器),它作为位操作结果被更新。
在第五实施例的5级流水线结构的可编程控制器中,先把一个指令合成例如如图36(a)所示的5个流水线级,然后再去执行这个指令;这5个流水线级就是指令取出IF、指令解码、寄存器取出ID,算术和逻辑操作、数据地址操作、以及目标分支操作EX,存贮器访问(读/与操作)MEM,和分支操作及在寄存器中写入数据WB。除了这些指令外,可编程控制器还需要其它指令,即一个“位处理指令”,用于访问或更新数据存贮器的一个字中的一位的值。所谓位处理指令包括各种类型的指令。有一种指令用于根据从数据存贮器读出的一个字中的某一位的状态在可编程控制器中更新寄存器BITACC(位累加器)。图36(b)和36(c)表示出在该流水线被中位处理指令的状态。如图所示,BPU级的存在位置对应于WB级,在该WB级中数据写入寄存器是由除位处理指令之外的指令完成的。在BPU级中,执行所有以下操作使用在MEM级中从数据存贮器读出的值更新BITACC、在数据存贮器中更新一个位、并且把数据写入数据存贮器。位处理指令有许多类型,并且根据指令以图36(b)和36(c)所示的方式改变BPU级的所需数目。
某些位处理指令不需要从数据存贮器读出一个字,而是要从数据存贮器读出多个字以执行一个指令。例如,在简单地实现存贮器地址的读写的装入和存贮指令的情况下,这些指令具有简单的指令语言结构。因此有可能通过向立即值数据加上一个指定的寄存器的内容来得到一个存贮器地址。因此,如果使用进行算术操作(如,寄存器至寄存器的操作)的ALU来计算用于存贮器访问操作的一个地址,就可能实现一个有效的电路。然而,与装入/存贮指令相比,位处理指令并非一定需要一个简单的存贮器地址。因此,如果对电路进行配置,使得通过ALU来计算该地址,那么这个电路将变得很复杂。为避免这一问题出现,可编程控制器除ALU外还要设有一个地址计算块,专用于位处理指令。当执行位处理指令时,通过该地址计算块计算存贮器地址。
如果和装入/存贮指令相比,位处理指令需要多次存贮器访问,不可能只通过计算一次存贮器地址(如装入/存贮指令的情况那样)来执行该指令。因此在地址计算块中设置了一个机构,用于记录位处理指令的一个字中的用于计算地址所必须的部分。结果,使该可编程控制器具有在多个连续的流水线周期上计算地址的功能。从该机构输出用于访问存贮器的控制信号。因此,使该可编程控制器具有在多个流水线周期上访问存贮器的功能。
如果位处理指令穿过流水线寄存器后抵达用于执行位处理指令的电路块BPU,那么,除了地址计算块外,BPU也有可能计算位处理指令需要的用于存贮器访问的地址。在某些情况下,使用BPU比使用地址计算块计算地址更好些,这是因为还要执行位处理指令后边的一个指令的缘故。出于这一理由,为可编程控制器设置了一个数据通道,以便有可能利用由BPU计算出来的地址以及数据读出请求信号从数据存贮器读出数据。
再者,如果位处理指令要求更新数据存贮器,则BPU计算要写入数据存贮器的值。为此,为可编程控制器设置了一个数据通道,以便有可能通过使用由BPU计算出来的要写入存贮器的值、地址、和数据存贮器的写入请求而把数据写入数据存贮器。
图37表示用于实施本发明特征的电路配置。在图37中示出了5级结构中的3级EX、MEM和WB(BPU)中与数据存贮器访问有特定关系的电路。除了按照装入和存贮指令计算存贮器地址的ALU之外,还为图37所示的EX级提供专用于位处理指令的地址计算部分BPUADR。在执行位处理指令时,使用BPUADR的输出代替ALU的输出作为用于存贮器访问的地址。为此,在EX级中设置一个多路转换器MUX,以从ALU和BPUADR的输出中选择一个输出。把这样选出的输出写入EX/MEM流水线寄存器的地址AD。当用于位处理指令的地址计算块BPUADR计算出用于存贮器访问的地址。把这样计算的地址经多路转换器MUX写入EX/MEM流水线寄存器EX/MEM的地址AD。如果存贮器访问是从存贮器读出数据,则流水线寄存器EX/MEM的存贮器读出控制信号RD变为1。如果存贮器访问是把数据写入存贮器,则流水线寄存器EX/MEM的存贮器写入控制信号WT变为1。以此方式,在位处理指令的情况下,专用于位处理指令的地址计算块BPUADR计算数据存贮器DM的地址ADDR,并且输出读出控制信号RD或写入控制信号WT。在装入指令或存贮指令的情况下,ALU计算存贮器地址,并且把这样算出的存贮器地址经多路转换器MUX写入流水线寄存器EX/MEM的地址AD。在装入指令的情况下,流水线寄存器EM/MEM的存贮器读出控制信号RD变为1,而在存贮指令的情况下,流水线寄存器EM/MEM的存贮器写入控制信号WT变为1。
为MEM设置一个数据通道,以便有可能根据数据存贮器DM的地址ADDR、写入值WTDT、以及从执行位处理指令的块BPU输出的存贮器控制信号RD和WT、以及在EX流水线周期中计算出来的值执行存贮器访问。如果假定图37所示的存贮器控制信号RD和WT意味着当它们是1时是执行存贮器访问,那么即使流水线寄存器EX/MEM的存贮器控制信号WT和RD是0,也能通过从位处理指令块BPU输出一个存贮器访问请求来执行这种存贮器访问。简短地说,只要位处理指令执行电路块BPU从数据存贮器DM读出数据,就通过转接多路转换器MUX把存贮器地址ADDR从位处理指令执行电路块BPU送到数据存贮器DM来代替流水线寄存器EX/MEM的地址AD。此外,经过或门把存贮器读出控制信号RD从位处理指令执行电路块BPU送到数据存贮器DM。结果,从数据存贮器DM读出的数据RDDT经流水线寄存器MEM/WB输入到位处理指令电路BPU。在位处理指令执行电路块BPU把数据写入数据存贮器DM的情况下,通过转接多路转换器MUX把存贮器地址ADDR从位处理指令执行电路块BPU送到数据存贮器DM来代替流水线寄存器EM/MEM的地址AD。此外,把写入数据WTDT从位处理指令执行电路块BPU送到数据存贮器DM来代替流水线寄存器EX/MEM的数据。此外,还经过一个或门把存贮器写入信号WT从位处理指令执行电路块BPU送到数据存贮器DM。结果,有可能把数据从位处理指令执行电路块BPU写入数据存贮器DM。
图38表示本发明第五实施例的可编程控制器的定时关系图。图38(a)表示装入/存贮指令的定时图,图38(b)表示位处理指令的定时图,按照此定时图,在执行该指令时从数据存贮器读出数据的3个字,并将这3个字写回数据存贮器。在图38(a)所示的定时图中,通过EX级中的ALU计算一个地址,并且在MEM级中完成在数据存贮器中的数据的读、写。另一方面,通过在图38(b)所示的定时关系中的EX级内的BPUADR来计算一个地址。根据这样计算的地址从MEM级中的数据存贮器读出数据。在BPUADR中保持计算一个地址所必须的位处理指令的部分指令字。BPUADR即使在EX级后边的MEM级中也计算地址,以便有可能即使在MEM级之后紧接着进行的流水线周期中也能读出数据存贮器,并且有可能输出一个数据存贮器读出请求信号。结果,即使在BPU1级中的BPU。因此,从BPU输出在两个BPU级,也执行数据从数据存贮器的读出。必须从存贮器读出数据的另一个字。然而,位处理指令的指令字已经到达穿过流水线寄存器后的BPU1周期期间从数据存贮器读出数据所必须的所有信号,从而实现数据从数据存贮器的读出。此外,在读出操作之后实现的向数据存贮器写入3个数据字的情况下,从BPU输出所有必要的值并且在3个周期中执行数据向数据存贮器中的写入。
借助于本发明的可编程控制器,使具有5级流水线结构的可编程控制器有可能执行为执行指令需进行多次存贮器访问的位处理指令。然而,位处理指令在多个流水线周期占据数据存贮器。因此必须中止位处理后面的一个指令的执行直到随后的指令可以访问数据存贮器为止。出于这一理由,可编程控制器具有根据流水线寄存器提供的并且表示下一个信号是位处理指令的控制信号来中止程序计数器增值的功能。如果只通过中止程序计数器的增值不可能中止下一个指令的执行,那么可编程控制器就具有根据在流水线寄存器中提供的并表示下一个信号是位处理指令的控制信号,通过用指令解码的结果改写指令使该指令无效的功能。
此外,如果只通过使用该控制信号不可能实现所要求的中止下一个指令的执行,可编程控制器就具有根据表示现在正在执行的并是从BPU输出的位处理指令的控制信号来中止程序计数器的增值的功能。类似地,如果通过中止程序计数器的增值不可能中止执行随后的指令,该可编程控制器就具有根据在流水线寄存器中设置的并且表明随后的信号是在流水线寄存器中设置的位处理指令的控制信号、通过用指令解码的结果改写指令来使该指令无效的功能。
图39表示用于实施这些特点的一个电路配置。把从图39所示IF级中指令存贮器IM获取的一个指令字存贮在设于流水线寄存器IF/ID上的一个指令寄存器IR中。在ID级的解码器块DC中解码这样存贮的指令字,并把解码操作的结果写入流水线寄存器ID/EX中。如果这样解码的指令是一个位处理指令,将1写入设在流水线寄存器上的控制信号BPU。在流水线寄存器ID/EX、EX/MEM、和MEM/WB上依次传送该控制信号BPU。然后把该控制信号送到相关危险检测块HDU。相关危险检测块HDU产生相关危险信号HZD_PC、HZD_ID、和HZD_EX。相关危险信号HZD_PC中止程序计数器PC的增值,相关危险信号HZD_ID使存贮器访问、以及在ID级获得的结果的寄存器写入操作无效。相关危险信号HZD_EX使存贮器访问、以及在EX级获得的结果的寄存器写入操作无效。除了在流水线寄存器上提供的控制信号BPU外,位处理指令执行块还输出一个控制信号,表示现正执行位处理。通过相关危险检测块HDU对这些信号一起进行处理,借此产生相关危险信号。
下面参照执行指令获得的指令的定时图来描述该可编程控制器的操作。图40所示,对位处理指令予以说明,按照该指令,从数据存贮器读出数据的一个字,并在修改该数据的一位后把这样读出的数据再次写到数据存贮器中。对于图40所示的定时图,假定位处理指令存入指令存贮器的地址1中,随后的指令存入地址2和3。按照在该图中所示的位处理指令,开始时从MEM级中的数据存贮器读出数据,并且在BPU1级中处理这样读出的数据中的一位数据。把这样处理过的数据在BPU2级中再次写回数据存贮器。因而,多个指令同时执行对数据存贮器的访问,除非和随后的指令有关的存贮器访问在位处理指令的BPU2级之后执行。当指令存贮器的地址1的位处理指令在ID级时,指令存贮器的地址2的随后的指令在IF级。因此,不可能阻止对随后的指令的取出。此外,必须在用于前一个位处理指令的BPU2级之后执行用于地址2处的指令的MEM级。因此,必须只在两个流水线周期中止执行指令。
图41表示在执行图40所示指令时该电路中的信号的定时图。在时刻1已经完成在指令存贮器中地址1的位处理指令的取出,并把该指令字输入到流水线寄存器IF/ID中的指令寄存器IR。然后解码这样输入的指令字,由此在时刻2在流水线寄存器ID/EX的控制信号BPU中出现有关该取出的指令是一个位处理指令的信息。把这个控制信号BPU送到流水线寄存器EX/MEM和MEM/WB。当控制信号BPU在流水线寄存器ID/EX和EX/MEM中时,相关危险检测块HDU输出一相关危险信号HZD_PC。结果,使程序计数器PC中止两个周期。从时刻2到时刻5继续取出地址2处的指令。如果前一个位处理指令不受直接解码该取出的指令的影响,则解码照原样进行。但如果由于取出的指令的解码而产生了误操作,则还要在相关危险信号HZD_PC的同时输出相关危险信号HZD_ID。相关危险信号HZD_ID使有关存贮器访问的控制信号MEM、WB和EX无效,并且当将指令寄存器IR的解码结果写入流水线寄存器ID/EX时使写入寄存器的数据无效。当相关危险信号HZD_ID在产生的过程当中,流水线寄存器ID/EX变到在解码NOP指令时相同的状态。由于使用了相关危险信号HZD_ID和相关危险信号HZD_PC,所以可能实现下述的控制即,象图40所示的指令2那样,指令的执行只中止2个流水线周期,并且直到完成位处理指令的存贮器访问才进行下一个指令的存贮器访问。
现在来说明一个位处理指令,按照该指令从存贮器读出数据的3个字,并且当执行该指令时把这样读出的数据写回存贮器。这种情况是基于下述假定在指令存贮器IM中的地址1中存贮该位处理指令,在相继的地址2和3中还存贮其它指令。如图42所示,位处理指令(1)进行存贮器访问用了6个连续的周期,下一个指令(2)必须延迟MEM级的执行直到指令(1)的BPU6级为止。在这种情况下,不可能只通过流水线寄存器携带的控制信号BPU来中止执行随后的指令。因此,如图43所示,从位处理指令执行块BPU输出表示正在执行位处理指令的控制信号。如果使用这个控制信号和控制信号BPU一起产生相关危险信号HZD_PC,就有可能根据需要中止执行随后的指令。如果按照需要产生了相关危险信号HZD_ID,还有可能使取出的指令的解码结果无效。
该可编程控制器具有一微分指令,用于检测输入信号的升或降。为了记录输入信号前一次扫描结果获得的值,必须配备与微分指令一道使用的存贮器。出于这一理由,该可编程控制器设有在执行具有三级流水线结构的指令的常规可编程控制器中使用的存贮器,即和指令存贮器具有相同的地址且宽度为1位的存贮器。在用于微分指令的数据存贮器和指令存贮器之间共享一个地址总线,从而减少了信号线数目。结果,即使对于能以较高速度操作并且具有5级流水线结构的可编程控制器,也有可能执行和常规的微分指令相同的微分指令。
借助于上述电路配置和与微分指令一道使用的存贮器,执行微分指令时所需要的存贮器改写地址变得与存贮该微分指令的指令存贮器的地址相同。按照存贮改写地址的一种可能的方法,把以前取出微分指令时获得的程序计数器的值存入一个堆栈,并且当改写该微分指令时获得该地址。但这种方法将导致复杂的控制,并且把程序计数器PC的值一直传递到EX级以进行分支指令之类的处理。为防止出现这些问题,使用如下的配置换言之,通过使用流水线寄存器把指令存贮器地址(即,PC的值)传送到位处理指令执行块BPU,并且当BPU执行微分指令时,再次使用这样传送的地址将微分指令改写到该存贮器。
当把微分指令写回存贮器时,指令存贮器的地址变得和把微分指令改写到存贮器中所用的地址相同。如果照原样连续提取指令,则当前写入存贮器的微分指令被再次取出,而不是原先想要提取出的指令。为防止这一问题发生,在把微分指令写回存贮器的流水线周期期间中止程序计数器的增值,这就保证了取出想要执行的指令。
只简单地中止程序计数器PC的增值不可能防止执行一个无效的指令。如果不可能使指令解码的结果无效,则把用NOP(No Operation空操作指令)进一步改写从指令存贮器取出的值的结果输入到指令寄存器IR。结果,防止了指令的无效执行。
现在参照执行微分指令时获得的电路的定时图以及和执行微分指令有关的电路部分,描述该可编程控制器。图44表示在执行微分指令时获得的电路的定时图。图45是IF和ID级的方块图。该实施例基于下述假定微分指令存入指令存贮器的地址1,除位处理指令以外的指令存入地址2以及地址2之后的地址,并且首先执行地址1的微分指令。再次把微分指令写入BPU2级。这时,从BPU块输出存贮器地址和存贮器写入请求信号。在如图44所示的把微分指令写回存贮器的流水线周期期间,产生相关危险信号HZD_PC以中止程序计数器PC的增值,借此保证对存贮在指令存贮器中地址6处的指令的取出。作为对PC的增值进行简单中止的结果,当把微分指令写回存贮器时,指令存贮器的地址变到地址1。再将取出地址1处的指令。还有可能使这样取出的指令在ID级中无效。但在这个实施例中,可以按照从指令存贮把表示NOP(空操作指令)的一个值写回指令寄存器IR来代替从指令存贮器提出的值,从而避免了执行无效指令。
和能够确定处理相关危险的方式的另一个指令的相关危险处理过程相对比,在改写微分指令的实现的相关危险处理变得必须在完成执行指令之前进行。出于这个理由,在和指令的组合有关的相关危险处理中就产生了矛盾,使可编程控制器出现误操作。为避免出现这种问题,用相关危险检测块HDU来监视各种类型相关危险的发生。如果矛盾出现在解决微分指令的相关危险中,则要额外地中止指令的另外一个周期的执行以防止电路的误操作。
图46表示出这种矛盾和一个实例。在图46中,在地址1放置微分指令,在地址3放置如图40所示的用于针对数据存贮器读、写数据的一个字的位处理指令。在地址2、地址4、和地址4后边的地址放置除位处理指令以外的指令。从地址1的微分指令开始依次执行这些指令。相关危险信号代表在相关危险检测块中产生的信号。相关危险信号HZD_ID和HZD_PC1与地址3处的位处理指令有关。相关危险信号HZD_PC2和HZD_IF与地址1的微分指令有关。通过相关危险信号HZD_PC1和HZD_PC2的逻辑和(或),可获得从相关危险检测块HDU输出的相关危险信号HZD_PC。在从时刻4至时刻5及从时刻5至时刻6的两个周期期间中止程序计数器PC的增值。通过相关危险信号HZD_PC1解码该指令,并且用NOP(空操作指令)改写在时刻5到时刻6期间写入流水线寄存器ID/EX的值。另一方面,用NOP改写由指令寄存器IR在时刻6通过相关危险信号HZD_IF获得的指令。如果就象这样执行这两个相关危险处理操作,则在地址4的指令既不解码又不执行。如果在相关危险处理中出现这样的一种矛盾,则必须通过在相关危险检测块HDU中在另一个周期期间产生相关危险信号HZD_PC来排除这一不被执行的指令。
图47是表示当执行微分指令和位处理指令时的一种对抗的定时图。当微分指令写位存贮器时,信号BMWTRQ置成“1”,在其它情况下置成“0”。信号PC-REHZDB代表由和驱动流水线寄存器的时钟的相位相反的时钟操作的信号。图48是一个表格,表示本发明的可编程控制器的操作码PC_REHZDB的分配实例。按以下所述来改变信号BMWTRQ的量在BMWTRQ等于“1”并且HZD_ID等于“1”的条件下,PC_REHZDB置成“1”;并且,在HZD_PC1或者HZD_PC2等于“0”的条件下,PC_REHZDB置成“0”。信号PC_REHZDB代表用驱动流水线寄存器的时钟锁存流水线寄存器所产生的信号。信号HZD_PC代表HZD_PC1、HZD_PC2、和PC_REHZD的逻辑和。信号HZD_PC停止PC的增值。
在可编程控制器所需的指令当中,有一些指令不是总是要执行的,而是仅在满足了预定的指令执行条件时才执行。在上述5级流水线结构的多个位置上提供有构成指令执行条件的各个标记。用位操作指令更新的标记BITACC是在五级流水线结构的第五级或者第五级之后的一级中更新的。为此,如果把根据指令执行条件确定是执行还是使其无效的指令设置在紧接在用于更新标记BITACC的位操作指令之后,那么当执行随后的指令时位操作指令尚未更新标记BITACC。尚未确定指令执行条件,因此不可能准确完成执行/无效的控制。
图49和50是表示按本发明的第六实施例的具有5级流水线结构和可编程控制器的总体配置的方块图。从比较图35所示的可编程控制器实例和本发明的可编程控制器之间的结构显然可以看出,本发明的可编程控制器额外设有一个标记寄存器FR和一个相关危险检测单元HDU。相关危险检测单元HDU根据标记BITACC的值确定指令执行条件,标记BITACC由标记寄存器FR中的一个强迫执行标记EXEFLG和一个误差标记ERRCNTR以及一个位处理指令执行单元BPU来更新。如果不满足指令执行条件,向相关危险信号HZD_EX输入1。
例如,具有本发明的5个流水线结构的可编程控制器在事先将一指令分成5个流水线级之后执行该指令,这五个流水线级即,IF指令取出,ID指令解码、从寄存器取数,EX算术和逻辑运算、数据地址计算、和目标分支计算,MEM存贮器访问(读/写操作),以及WB分支操作和寄存器写操作,如图51(a)所示。除了这样一个指令而外,该可编程控制器还需要一个“位处理指令”,用于访问或更新包括在数据存贮器的一个字中的一个位的值。位处理指令包括各种类型的指令。某些指令用来根据包括在从数据存贮器读出的一个字中的某个位的状态更新设在可编程控制器中的一个寄存器BITACC(位累加器),某些指令用来更新包括在数据存贮器以及BITTACC中的某一位的值。图51(b)和51(c)表示位处理指令的流水线级和标记BITACC的更新。如这些附图所示,BPU级存在的位置对应于WB级,在该WB级中除位处理指令外的一个指令把一个值写入寄存器。在BPU级,完成借助于从MEM级的数据存贮器读出的值来更新BITACC,更新包括在数据存贮器中的一位的值,以及针对数据存贮器的写操作,或者类似的操作。存在各种类型的位处理指令,并且所需的BPU级的数目随指令而变,如图51(b)和51(c)所示。虽然在附图中标记BITACC从0变到1,但也可以按相反的方式从1变到0。
在该可编程控制器的指令当中,某些指令不是总是执行的,而是只在满足了包括多个标记值在内的指令执行条件时才执行。在该实施例中,某些指令在满足下述条件时执行EXEFLG ∪(BITACC ∩ ERRCNTRL)=1在该表达式中,EXEFLG是一强迫执行标记,且RRCNTRL是一误差标记。这些标记与其它一些标记一起都包括在该电路中的标记寄存器FR中。BITACC是由位处理指令更新的标记。图49和50表示的本发明的可编程控制器具有只在这些标记满足上述指令执行条件时执行一个特定指令的功能。
把从IF级的指令存贮器IM取出的指令字存贮在设于流水线寄存器IF/ID中的指令寄存器IR内。在ID级的解码器块DC中解码这样存贮的指令字,并把解码操作的结果写入流水线寄存器ID/EX中。如果解码的指令是一个位处理指令,则把1写入在流水线寄存器中提供的控制信号BPU中。随后通过流水线寄存器ID/EX和EX/MEM顺序地传送这个控制信号BPU。把这些控制信号输出到相关危险检测块HDU。相关危险检测块HDU产生相关危险信号HZD_PC、HZD_ID、HZD_EX。相关危险信号HZD_PC中止程序计数器PC的增值,相关危险信号HZD_ID使在ID级中实现的解码操作的所有结果的寄存器写入操作和存贮器访问操作无效。相关危险信号HZD_EX使在EX级中实现的解码操作的所有结果的寄存器写入操作和存贮器访问操作无效。
图49和50中所示的流水线寄存器ID/EX的一个INST信号表示是执行现行指令还是使现行指令无效取决于指令执行条件。如果结果是EX级中的指令是用于控制执行该操作还是使操作无效的指令,则相关危险检测单元HDU根据标记BITACC的值确定指令执行条件,标记BITACC的值由标记寄存器FR中的强迫执行标记EXEFTG和误差档记ERRCNTR及由位处理指令执行单元BPU来更新。如果不满足指令执行条件,则向相关危险信号HZD_EX输出1。如果相关危险信号HZD_EX是1,则用代表“不进行更新操作”的值改写用于控制外部存贮器和寄存器堆RF的信号。即使在EX和MEM级进行了任何操作,也不保持操作的结果,这就最终导致了阻止指令的执行。
下面将要说明的情况是,在根据指令执行条件执行一个指令或使其无效之前直接提供用于改变指令执行条件的指令。在构成指令执行条件的各标记中,强迫执行标记EXEFLG和误差标记ERRCNTRL是由FLGSET指令更新的。在该实施例中,FLGSET指令更新当前执行指令的EX级中的标记。即使根据指令执行条件或执行或无效的这个指令直接放在FLGSET指令之后,在执行下一个指令时执行条件也已被确定。结果,变得有可能在协调地控制有关是执行指令还是使指令无效的判定的同时执行该指令。图52是表示上述操作的一个定时关系图。
误差标记ERRCNTRL不仅由FLGSET指令更新,而且由另外的指令更新,例如算术操作指令(如除法),或BCD码转换指令。例如,对于一个值被零除的情况,或者对于BCD码区之外的一个值的情况,这种操作都是作为误差处理的。对于更新除FLGSET指令之外的误差标记ERRCNTRL的指令,紧随的下一个指令启动执行EX级之前更新误差标记ERRCNTRL。结果,有可能在协调地控制有关是执行该指令还是使该指令无效的判定的同时执行随后的指令。
当完成位处理指令的BPU级时,更新了组成指令执行条件的所有标记中的标记BITACC。因此,如果把根据指令执行条件确定是执行还是使其无效的指令直接放在位处理指令之后,则在位处理指令更新标记BITACC之前执行随后指令的EX级,这又使控制有关该指令是执行还是使其无效的判定成为不可能。为了防止这一问题的出现,如果更新标记BITACCA的位处理指令放在根据图5 3所示的指令执行条件确定是执行还是无效的指令之前,那么当执行根据指令执行条件确定是执行还是无效的指令时,可编程控制器进入等待状态,因此不执行根据指令执行条件确定是执行还是无效的这个指令的EX级,直到更新了标记BITACC和确定了指令执行条件时为止。借助于这一功能,即使把根据指令执行条件确定是执行还是使其无效的这个指令直接放在位处理指令之后以更新标记BITACC,也有可能协调地控制有关该指令是执行还是无效的判断。
现在参照图49和50所示的方块图描述本发明的特点。在流水线寄存器ID/EX和EX/MEM中提供一个控制信号BPU,信号BPU表示当前的指令是更新标记BITACC用的一个位处理指令。如果得到的结果是,作为装入指令寄存器IR的一个指令的解码的结果,ID级的指令是根据指令执行条件确定是执行还是无效的这个指令,那么,相关危险检测单元HDU就检查流水线寄存器ID/EX和EX/MEM中的控制信号BPU。如果在流水线的EX级或者MEM级中存在更新BITACC的位处理指令,则向相关危险信号HZD_PC和HZD_ID输出1。如果相关危险信号HZD_PC是1,则用多路转换器MUX代表什么都不执行的值(即,附图中的0)来改写ID级中的指令解码结果。通过发出这两个相关危险信号就可能中止执行ID级中的一个特定的指令。当更新标记BITACC的位处理指令从流水线EX和MEM级消失时,用0改写相关危险信号HZD_PC和HZD_ID,就可恢复该中止的指令。
具有5级流水线结构的可编程控制器先把一个指令分成5个流水线然后再去完成这个指令,这5级就是,IF指令取出,ID指令解码从寄存器取数,EX算术和逻辑操作、数据地址计算、和目标分支计算,MEM存贮器访问(读/写操作),以及WB分支操作和寄存器写入操作。除了这一指令外,可编程控制器还需要一个“位处理指令”,用于访问或更新包括在数据存贮器的一个字中的一个位的值。位处理指令包括各种类型的指令。使用某些指令依据包括在从数据存贮器读出的一个字中的某一个位的状态来更新可编程控制器中的寄存器BITACC(位累加器),或者使用某些指令来更新包括在数据存贮器以及BITACC中的某一个位的值。
有各种理由中止可编程控制器,例如,执行一个停止指令,发生中断,或发生操作失败。可编程控制器中止后的状态(如,程序计数器PC的值)取决于停止条件。如果具有5级流水线结构的可编程控制器是因为执行一个停止指令而中止的,那么就要在完成该停止指令的解码操作时把该停止指令后边的另一指令引入该流水线。还有可能设想,在实际中止可编程控制器之前,把几个指令都引入流水线级。在这样一种情况下,在中止可编程控制器后获得的程序计数器PC的值未必和说明中描述的一个期望值相同。因此,中止时的可编程控制器的状态与说明中描述的这样一个期望状态不同。如果把该指令后边的满足停止条件的另一个指令引入流水线寄存器,那么将会执行不应执行的指令。
图54和55是表示按本发明第七实施例的具有5级流水线结构的可编程控制器。图中用a-h表示的线连接到相应的元件。比较图35所示的可编程控制器和本发明的可编程控制器之间的结构可以清楚地看出,本发明的可编程控制器额外设有用于控制可编程控制器的启动/停止操作的一个状态机STM和用于避免执行无效指令的相关危险检测单元HDU。
假定在下述情况下中止本发明的可编程控制器(a)在执行一个停止指令时当执行停止指令时中止可编程控制器。在中止可编程控制器后获得的可编程控制器PC的值变为停止指令本身的地址。
(b)在产生一个中断请求信号时在执行由产生中断请求信号后首先出现的“停止标志”表示的指令之前不中止可编程控制器。在可编程控制器中止后获得的程序计数器PC的值变为具有由可编程控制器的中止所产生的“停止标志”的指令之后的另一个指令的地址。
在本发明的可编程控制器中,使用在整个指令中的一个特定位置提供的一位作为“停止标志”。只有具有置成“1”的位的指令才能在产生中断请求信号时变为中止可编程控制器的指令。
图54和55是本发明的可编程控制器的方块图,它能完成前述的停止功能。在附图中只示出与本发明的这个实施例有关的电路方块。图中所示的STM代表一个状态机,用于控制可编程控制器的启动/停止操作。状态机STM接收控制信号STOP和END,以便知道停止指令的执行情况和停止标志,并且还接收一个启动请求信号和一个中断请求信号。现在描述这些控制信号。把从IF级的指令存贮器IM中提出的一个指令存入流水线寄存器IF/ID的指令寄存器IR中。DC级的解码器块DC对该指令字解码,并把指令字的解码结果写入流水线寄存器ID/EX中。如果解码的指令是一停止指令,则向在流水线寄存器ID/EX中提供的控制信号STOP写入1。此外,为了执行由一停止标志表示的指令,对该指令解码,并且向在流水线寄存器ID/EX中提供的控制信号END写入1,这表明该指令已设有一个停止标记。根据这些控制信号STOP和END,有可能使状态机知道停止指令和带有停止标志的指令已被执行。
向流水线寄存器IF/ID输入代表指令存贮器IM的地址的程序计数器PC的值。随后,将该值依次送到ID/EX和EX/MEM流水线寄存器,以便用于计算中止可编程控制器时程序计数器PC的值。当可编程控制器由设在流水线寄存器ID/EX或EX/MEM中的程序计数器PC的值中止时,状态机STM计算程序计数器PC的值、代表该指令解码结果的流水线寄存器ID/EX的值、以及变为停止条件之一的中断请求信号。把这样计算出来的值写入程序计数器PC,而后再中止可编程控制器。存贮程序计数器的值的一个可以想到的方法包括如下步骤存贮把指令装入一个堆栈时获得的程序计数器的值,当可编程控制器中止时从堆栈取出该值。这种方法使控制更加复杂。此外,通过流水线寄存器传送程序计数器PC的值,以便用于分支指令。出于这些原因,向状态机STM传送在流水线寄存器ID/EX或EX/MEM中提供的程序计数器的值。然后,按照停止的规定把这个值再写回程序计数器PC。
状态机STM按照需要向相关危险检测单元HDU送出一个相关危险信号产生请求信号,借此产生一个相关危险信号。结果,使指令的执行无效,因而有可能在可编程控制器保持中止方式的同时执行一个无效指令。相关危险检测单元HDU产生相关危险信号HZD_PC、HZD_IF、HZD_ID、和HZD_EX。其中,信号HZD_PC中止程序计数器PC的增值,信号HZD_IF使IF级中的指令取出无效。信号HZD_ID使ID级中进行的解码操作的所有结果的寄存器写入操作和存贮器访问操作无效。信号HZD_EX使EX级中进行的解码操作的所有结果的寄存器写入操作和存贮器访问操作无效。
图56表示用于启动/停止控制目的的状态机的状态过渡过程。当可编程控制器休止时或接通可编程控制器的电源时,状态装置变到一个IDLE状态。当把用于可编程控制器的一个启动请求信号输入到状态机时,状态机从IDLE状态变到S0。结果,可编程控制器开始执行指令。如果状态机的状态是S0,则可编程控制器继续像原样执行指令。如果执行停止指令,则状态装置的状态从S0变到S11。在此之后,状态机依次变到S12和S13。在状态机的状态过渡期间执行所要求的停止操作,然后中止可编程控制器。状态机的状态又变到IDLE状态。
如果当状态机当前正在执行指令的状态是S0时产生一个中断请求信号,则状态机的状态由S0变到S21。结果,可编程控制器在执行指令的同时等待具有停止标志的指令的执行。如果当状态机的状态是S21时执行具有停止标志的指令,则状态机的状态从S21变到S22、S23、S24、和S25。在状态机的状态过渡期间执行所需的停止操作,状态机的状态然后变到IDLE状态,从而中止了可编程控制器。如果当状态装置的状态是S21并且可编程控制器等待带有停止标志的指令的同时执行停止指令,则状态机的状态从S21变到S11。结果,状态机的状态变到执行停止指令时进行的停止操作。如果状态机能够变到如处于S0或S21那样的多种状态,则预先确定状态机的状态转移的优先权,象图56中所示的优先权(1)和(2)那样。如果在状态S0执行该指令时同时出现停止指令的执行和中断请求信号的产生,则状态机的状态变到S11。此外,在执行停止指令时,该操作变到中止操作。
图57和58是表示该实施例的可编程控制器的中止操作的定时图。图57表示在执行停止指令时的中止操作,其中假定停止指令存贮在指令存贮器IM的地址3。在图57中,STATE代表用于启动/停止的控制目的的状态机的状态,PC KEEP代表当可编程控制器处在中止方式时用于临时存贮存在在状态机中的程序计数器PC的一个寄存器。PCWTRQ代表在状态机把一个值写入程序计数器PC中时使用的控制信号。IF_ID_IR代表一个指令寄存器,用于提取存在于流水线寄存器IF/ID中的指令。HZD_PC代表一个相关危险信号,用于中止程序计数器PC的增值,HZD_IF代表一个相关危险信号,用于利用NOP指令(即,空操作指令)改写从指令存贮器IM取出的指令。
当执行停止指令时,对该指令解码,并将1写入控制信号STOP,表示在流水线寄存器ID/EX中的相应指令是一个停止指令。当在流水线寄存器ID/EX中提供的控制信号STOP的值是1时,用于启动/停止控制目的的状态机从S0变到S1。随后,状态机无条件地变到S12、S13、和IDLE。当状态机的状态是S11时,把流水线寄存器ID/EX中的程序计数器PC的值写入PCKEEP。当状态是S12时,把PCKEEP的值写入程序计数器PC。这样写入的值代表停止指令的地址。
图58表示按照中断请求信号中止可编程控制器时的中止操作。假定在指令存贮器地址3存贮具有停止标志的一个指令,并且在执行该指令之前发出一个中断请求信号INT_RQ。图58中所示的相应信号与图57相同。当输入中断请求信号INT_RQ时,用于启动/停止控制目的的状态机从S0变到S21,借此使可编程控制器等待具有停止标志的指令的执行。为执行该具有停止标志的指令,对该指令解码,并把1写入流水线寄存器ID/EX的控制信号END,这表明相应的指令上设有停止标志。当流水线寄存器ID/EX中的控制信号END的值为1时,用于启动/停止控制目的的状态机从S21变到S22。随后,状态机无条件地变到S23、S24、S25、和IDLE。当状态机的状态是S23时,把流水线寄存器EX/MEM中的程序计数器PC的值加1所得的值写入PCKEEP。当状态装置的状态是S24时,把PCKEEP的值写入程序计数器PC。这样写入的值代表具有停止标志的指令的后边的另一个指令的地址。
在可编程控制器内,如果一个输入程序的指令码是一个顺序指令,则在一个地址上完成一次操作。准备计算的目标的变址意味着使用变址寄存器的数据和在一指令码中描述的常数立即值的和作为要操作的对象的地址。
图59表示一个ST指令的实例,ST指令是位操作指令之一,并且按照ST指令,累加器(ACC)读出要操作的位的细节。变址寄存器(IX)的数据代表15,指令码中的立即值是3。因此,它们的和是18。因此,图59(a)所示的STIXX3指令与图59(b)所示的STX18指令相同。图59(c)所示的存贮器的地址1处的字数据中的位8要按照STX18指令进行操作。硬件累加器ACC读出位8的细节。
处理器仅对先前在指令码中用立即值表示的地址处的存贮器数据进行操作。因此可以利用硬件来执行位处理。如果使用这样一种处理器来执行变址指令,那么必须服从图60所示的这种执行顺序。
开始,在步骤21,从变址寄存器读出数据(IX),并将这样读出的数据(IX)输入到寄存器部分中的通用寄存器的r2。在步骤22,把变址寄存器的数据(r2)加到指令码的一个立即值(m)上,并把所得的和输入到通用寄存器中的r1。在步骤23,把r1右移4位的位置以便把字地址和该字中的位的位置分开。分别把代表字地址的“结果”和代表该字中位的位置的“余数”输入到通用寄存器中的r3和r4。
在步骤24,读出由r3寻址的包括要操作的位的字数据。把这样读出的字数据输入到通用寄存器中的r5。在步骤25,把r5的字数据右移4位,从而把要操作的位移到位0。提取包括在r5中的待操作位,并把这样提取的位输入到通用寄存器的r6。在该实例中,把提取的位送到位0。
必须在步骤26保存原始数据,并且把地址0处的当前数据暂时送到r7。在步骤27,把具有送到位0的待操作位的r6的数据送到存贮器的预定地址0。因此,最后作出了对实际的位处理操作的安排。
在步骤28,执行STX0,它是一个针对地址0的位0的位处理指令。最后,在步骤29,把地址0的原始数据r7返回到地址0,并且完成了变址指令的执行。
如果输入程序的指令码是一个定时器或计数器指令,那么待操作的对象变为预置的数据。预置的数据的变址意味着,使用变址寄存器的一个值和在指令码中的描述的常数立即值的和作为在预置值数据区内的一个地址。图62表示一个TMR指令的实例。换言之,当输入条件变为接通时,对时间进行计数,直到输入条件变为断开为止,同时使用已规定的预置数据值作为经过时间值的初始值。当经过时间值变为0时,定时器的触点接通。这里,变址寄存器(IX)是15,指令码中的立即值是3。因此,图61(a)所示的指令TMR0和IXDT3与指令TMR0和DT18相同。通过使用存贮器地址18的字数据作为预置数据,并且通过用硬件读出该字数据的内容,来计算TMR指令,如图61(c)所示。
在使用硬件执行位处理操作的处理器中,通过作为执行定时器或计数器指令的结果的定时器数或计数器数来唯一地确定存贮预置数据的存贮器地址。有可能只计算这个数据作为预置值。如果试图使用这样一个处理器执行预置数据的变址指令,则必须按照如图62所示的执行顺序。
开始时,在步骤31,读出变址寄存器的数据(IX),并且把这样读出的数据输入到设在寄存器部分的通用寄存器的r1中。在步骤32,把变址寄存器的数据(r1)和指令码中的立即值(m)彼此相加。换言之,计算在有待实际操作的预置数据区中的存贮器地址,并把计算结果输入到通用寄存器的r3。在步骤33,读出由r3寻址的字数据,即预置数据,并且把这样读出的字数据输入到通用寄存器的r2。
必须在步骤34保存原始数据,并把在现行地址“n”的预置数据暂时送到r7。在步骤35,把r2中的字数据暂时送到由定时器的数或计数器数唯一确定的地址“n”。结果,最后作出了实际的定时器或计数器指令的安排。
在步骤36,执行TMRn,TMRn是针对待操作的预置值的一个操作指令。最后,在步骤37,把已保存的原始数据r7返回到地址“n”。结果,完成了变址指令的执行。
在以前描述的常规的可编程控制器中,当和顺序指令以及定时器或计数器指令一起执行变址指令时,如果把变址指令分成几条指令,并且如果按顺序执行该指令流,那么就有可能获得正确的结果。
然而,这种方法要求增大程序存贮器,这又导致一个较慢的执行速率。
现在参照图63-65描述按本发明的第八实施例的可编程控制器。
在附图中,A代表一包括5个部分的处理器。下面将要描述的一个指令码6执行一个由待执行的操作寻址的顺序指令。标号1代表一个指令取出部分,指令码6就输入到这个指令取出部分。标号2代表一个指令解码部分,包括r0-r7。指令解码部分2设有一个寄存器组21,它包括用于读、写数据的通用寄存器21a和指令解码器22。指令解码部分2对从指令取出部分1输入的指令码6进行解码,并且执行这样解码的指令。
标号3代表一个地址计算部分,它设有一个由CPU或者类似元件组成的操作单元(ALU)31。地址计算部分3根据由指令解码部分2解码的指令码6计算要执行的指令的地址。ALU 31设有一个选择器7,用于在该指令是一变址指令的条件下输出一个地址。下面将会详细地描述这个选择器7。
标号4代表一个存贮器访问部分,它设有外部存贮器41。从ALU 31向外存贮器41输入一个地址,并且还从通用寄存器21a向外存贮器41写入数据。从外存贮器41读出并输出数据。
标号5代表一个操作部分,它设有由CPU或类似元件组成的操作单元(ALU)51和位累加器(BACC)52。从存贮器访问部分4向操作部分5输入待操作的数据,并且把数据写入通用寄存器21a,并进行位操作。
现在描述处理器A的操作。指令码6设有一个一位的显示标记61、一个指令62、和一个立即值地址63。显示标记61显示变址指令是否存在,用于间接规定待计算的对象。当输入指令码6时,如果该指令是不变址的,则经地址计算部分3向外存贮器41直接输出包括在指令码6中的一个立即值。针对要计算的一个位,和包括在指令码6中的位的位置规定数据一起,执行一个规定的操作。
在指令变址的情况下,参照图64的方块图描述地址计算程序。指令码6设有显示标记61,用于显示该指令是否是变址指令。把显示标记61的标记位和包括在指令码6中的立即值地址数据输入到选择器7。选择器7连接到设在处理器中的通用寄存器21a上。由硬件预选确定通用寄存器21a中的哪个寄存器连接到选择器7上。在该例中,寄存器r1连接到选择器7,并把该寄存器的数据输入到选择器7。如果显示标记61显示包括在指令码6中的是变址指令,选择器7把r1寄存器的数据输出到外存贮器,以此作为要操作的地址。如果不是这种情况,则输出指令码6中的立即值63。随后的操作和常规的位处理指令的操作相同。
下面根据图65的流程图描述使用硬件的变址指令的执行程序。开始时,在步骤1读出变址寄存器的数据(IX),并将这样读出的数据输入到设在寄存器组21中的通用寄存器21a的r2寄存器。在步骤2,将r2寄存器的数据和包括在指令码6中的立即值相加在一起,并把要计算的地址输入到通用寄存器21a的寄存器r1。在步骤3执行变址指令STIXX3。
以此方式,通过只从变址寄存器读取数据,并且通过在通用寄存器21a的寄存器r1中设定一个操作地址计算值,就可执行变址指令。
在按本发明第八实施例的可编程控制器中,在指令码6中设置显示标记61,该显示标记61表示间接规定要计算的对象的变址指令是否存在。选择器7连接到通用寄存器21a,并且根据使用硬件对显示标记61的识别来执行一个变址指令,同是使用通用寄存器21a的内容作为要操作的对象的地址。与对包括在指令码6中的一个地址进行操作的常规可编程控制器相比,本发明的可编程控制器不需要各种预处理指令,这又导致较小的程序存贮器容量。因此,有可能缩短执行变址指令操作所需要的处理时间。
指令码6是由待操作的对象寻址的顺序指令,因此不再需要位处理指令的各种预处理指令。具有逻辑条件说明的顺序指令(逻辑条件包括例如变址的接触点或线圈)的执行缩短了处理时间。
选择器7设在地址计算部分3中。因此,如果作为显示标记61的识别结果是指令码6包括变址指令,则输出通用寄存器21a的内容,以此作为地址。如果不是这种情况,则输出指令码6的立即值,以此作为地址。可能利用一个简单的结构来执行顺序的变址指令。
包括通用寄存器21a、地址计算部分3、和存贮器访问部分4的处理器A的结构,具有1位的显示标记61的指令码6的结构;以及位指令的内容都不限于在第八实施例中公开的这些。
现在参照图66至68描述按本发明第九实施例的可编程控制器。在第九实施例中将只描述和第八实施例的可编程控制器不同的特点。用相同的标号表示和第一实施例的元件的特征大体相同的元件。
标号B代表一个包括5个部分的处理器。指令码6完成定时器或计数器指令,同时使用待操作的对象作为预置的数据。选择器7设在存贮器访问部分,并且连接到外存贮器41的读出数据通道,从而可从外存贮器读出数据。
现在描述处理器B的操作。在收到指令码6的输入时,如果该指令不是变址的,则经由地址计算部分3向外存贮器41输出由包括在指令码6中的定时器或计数器数所唯一确定的预置地址。经由选择器7把外存贮器41输出的数据输入到处理部分的ALU 51。ALU 51处理该数据,以此作为预置值。
在指令变址的情况下,指令码6设有显示标记61,用于显示该指令是否是变址指令,如图67方块图所示,把显示标记61的标记位输入到选择器7。
选择器7连接到设在处理器B中的通用寄存器21a。通过硬件预先确定通用寄存器21a中的哪个寄存器连接到选择器7上。在该例中,寄存器r2连到选择器7。向选择器7输入使用由包括在指令码6中的定时器或计数器数所唯一确定的地址来从外存贮器41读出的数据。
如果显示标记61是显示包括在指令码6中的变址指令,选择器7输出从寄存器r2或外存贮器41读出的数据。第九实施例的可编程控制器的随后的操作与常规的定时器或计数器指令的操作相同。
下面描述根据图68所示的流程图利用硬件来定时器或计数器指令的预置值的一个指令进行变址的执行程序。开始时,在步骤11,读出变址寄存器的数据(IX),并把这样读出的数据输入到设在寄存器组21中的通用寄存器21a中的寄存器r1。在步骤12,把寄存器r1的数据和指令码6中的立即值相加在一起,并把加法的结果输入到通用寄存器21a中的寄存器r3。在步骤13,读出寄存器r3寻址的字数据,即预置数据,并把如此读出的数据输入到寄存器r2。随后,在步骤14,执行TMRn指令,它是一个针对待操作的预置数据的操作。
以此方式,通过只从变址寄存器读出数据,并且通过在寄存器r2中设定预置值数据来执行变址指令修改的定时器或计数器指令。
在按照第九实施例的这样一种可编程控制器中,在指令码6中设有显示标记61,标记61表示是否存在用于间接规定待计算的对象的变址指令。连接到通用寄存器21a的选择器7根据使用硬件对显示标记61的识别来执行一个变址指令,同时使用通用寄存器21a的内容作为要操作的预置值数据。与计算通过包括在指令码6中的定时器或计数器数唯一确定的预置数据的常规可编程控制器相比,本发明的可编程控制器不需要各种预处理指令,这将使程序存贮器的容量较小。因此有可能缩短执行变址指令操作所需的处理时间。
指令码6是定时器或计数器指令,它使用待操作的对象作为预置数据,这又省去了位处理指令的各种预处理指令的必要性。结果,通过缩短处理时间就可执行具有控制条件说明的定时器或计数据指令,该控制条件包括这样一种变址定时器或计数。
在从外存贮器读出数据的数据通道中设有选择器7。因此,如果作为显示标记61的识别的结果是指令码6包括变址指令,则输出通用寄存器21a的内容,以此作为地址。如果不是这种情况,则输出从外存贮器41读出的数据。有可能执行结构简单的变址定时器或计数器指令。
包括通用寄存器21a、地址计算部分3和存贮器访问部分4的处理器A的结构、具有显示标记为1位的显示标记61的指令码6的结构、以及指令的内容都不限于在第九实施例中公开的这些。
专门设计的硬件的结构、指令集、指令结构、以及操作码部分的配置都不限于该实施例中公开的这些。
本发明的可编程控制器设有统一的指令结构和专门设计的硬件,使得该可编程控制器能和该统一的指令结构相适应。简化了该专门设计的硬件和它的控制。结果,由于把该专用硬件(处理器)的指令执行级形成多个级,所以减小了该专用硬件(处理器)及其控制的复杂性。由于很容易把指令执行级形成多级,所以可改善整个可编程控制器的处理速度。
对本发明的可编程控制器进行设计,使其能根据可编程控制器的基本处理操作之一的位操作指令的结果、把每个指令级的执行说明信息修改成一个预定的值。结果,不中断流水线处理过程而借助于专用于该可编程控制器的位操作处理过程,来执行使随后的应用指令无效(即,阻止其执行)的控制操作。
在本发明的可编程控制器中,通过对于每个时钟把流水线寄存器ID/EX的EX、M、WB级转移到随后一级来传送指令的执行说明信息。可以实现简单但有效的执行控制。
对本发明的可编程控制器进行安排,使其能实现统一的处理,即把每一级中处理的数据在完成该级中的处理之后保持在下一级的流水线寄存器中。可使专用硬件的数据总线简单,有效。
本发明的可编程控制器不需要插入NOP指令来解决由于读出通用寄存器而产生的流水线的相关危险问题。因此,和需要插入NOP指令的可编程控制器相比,有可能减小程序的长度和加快执行速度。
本发明的可编程控制器不需要插入NOP指令来解决按照装入指令后面的指令读出已由装入指令修改更新的通用寄存器时发生的流水线相关危险问题。因此,有可能减小程序长度。
如果装入指令之后的指令是用于读出料想已由装入指令更新的通用寄存器的存贮指令,则本发明的可编程控制器不要求中止存贮指令。因此有可能加快可编程控制器的处理过程。
如果在装入指令之后再之后的指令是用于读出料想由装入指令更新的通用寄存器的存贮指令,那么,本发明的可编程控制器不需要中止该存贮指令。因此有不可能加快可编程控制器加快的处理过程。
本发明的可编程控制器不需要插入NOP指令来解决在满足分支条件的情况下会执行无效指令的流水线相关危险问题。因此有可能减小程序长度。
按照5级流水线结构的可编程控制器,激励程序计数器的时钟信号变化的时刻和激励指令寄存器的时钟信号变化的时刻之间的时间间隔很小。即使必须使用比指令存贮器所需速度更快的存贮器作为指令存贮器,也有可能延长确定指令存贮器地址和读出指令存贮的值之间的时间。因此,可使用较慢的存贮器,这又有助于成本的降低。
按照本发明的可编程控制器,可编程控制器有可能正确执行分支指令以更新程序计数器。
按照本发明的可编程控制器,可编程控制器有可能正确执行微分指令以更新程序计数器。
按照本发明的可编程控制器,可编程控制器有可能在启动后立即正确地取出指令。
按照具有本发明的5级流水线结构的可编程控制器,对于其操作难以在一个流水线级的时间周期内完成的指令,通过中止流水线操作一段所需长度的时期就可能很容易地执行该指令。
按照具有本发明的5级流水线结构的可编程控制器,即使不满足其操作难以在一个流水线级的时间周期内完成的指令的执行条件,也有可能防止流水线的浪费时间的中止。
按照具有本发明的5级流水线结构的可编程控制器,没有必要按照流水线结构重新设计操作块,而是可以有效地利用过去的设计资源。
按照具有本发明的5级流水线结构的可编程控制器,有可能执行需要多次改写操作的指令,而这些改写操作是不能从普通的流水线操作得到的。
按照具有本发明的5级流水线结构的可编程控制器,有可能在流水线寄存器中保持一个操作的变元,这又可能减小操作块的尺寸。
按照本发明,在更新指令中的一位的情况下,或者在执行需要在执行指令时在存贮器读、写多个字的称作位处理指令的指令的情况下,借助于5级流水线结构的可编程控制器,通过采用本发明的地址计算方法和存贮器访问方法,有可能有效地执行该指令而不浪费一个流水线周期。此外,作为采用本发明的控制方法的结果,有可能协调地执行位处理指令之后的指令而不必把NOP指令插入指令存贮器中。在能以比具有3级流水线结构的常规可编程控制器更高的速度处理操作的具有5级流比线结构的可编程控制器中,由于采用了存贮器,所以能够执行和常规的微分指令相同的微分指令。结果,减少了用于地址总线的信号线数目。如果以此方式处理与微分指令一起使用的存贮器改写地址,那么,在执行该微分指令时实现控制操作就变得极其容易。有可能防止可编程控制器的误操作,同时,作为采用这种控制方法的结果能把微分指令写回存贮器而不必在指令存贮器中插入NOP指令。此外,作为控制的执行结果,即使在进行处理的条件下也可能协调地执行一个指令。
按照本发明,可编程控制器确定包括多个标记在内的指令执行条件,并且仅当在指令执行级中满足指令执行条件时才执行一个特定的指令。结果,有可能对是执行指令还是使指令无效的判定进行控制。
在借助于更新构成指令执行条件的标记的一个标记设定指令、或者借助于诸如算术操作指令之类的指令来更新指令执行条件之后,执行下一个紧跟的指令。因此,有可能协调地控制有关执行该指令还是使该指令无效的判定。
如果在构成指令执行条件的标记中包括一个由位处理指令的流水线级的最后部分更新的位累加器,那么,通过中止根据指令执行条件确定是执行指令还是使指令无效而勿需在指令存贮器中插入NOP指令,直到确定了指令执行条件时为止,就有可能协调地控制有关是执行该指令还是使该指令无效的判定。
按照具有本发明的5级流水线结构的可编程控制器,通过使用用于启动/停止控制目的的状态机来控制可编程控制器的启动/停止操作,就有可能处理各种复杂的要求,条件是必须满足各种停止条件以及可编程控制器在中止后的有关其状态的规格。如先前所述,通过流水线寄存器来传送取出指令时获得的程序计数器的值,并且根据传送的值设定程序计数器在可编程控制器处于中止模式时的值。因此,按照技术要求有可能很容易实现中止操作。作为采用可使指令无效的结构的结果,有可能防止在启动中止操作后执行无效的指令。
在本发明的可编程控制器中,在指令码中提供显示标记,用于显示间接规定要操作的对象的变址指令是否存在。连接到通用寄存器的选择器根据显示标记的识别结果利用硬件来执行该变址指令,同时使用通用寄存器的内容作为要计算的对象。结果,不再需要各种预处理指令,减小了程序长度,这又可能缩短完成变址指令操作所需的时间。
除了由可编程控制器获得的这些效果以外,该可编程控制器还包括一个指令码,它是一个由待操作的对象寻址的顺序指令。和对包括在指令码中的一个地址进行操作的常规可编程控制器相比,本发明的可编程控制器能通过缩短处理时间来执行具有说明的顺序指令,这些说明包含逻辑条件,例如变址的接触点或线圈。
除了由可编程控制器获得的这些效果以外,可编程控制器还包括一个选择器,它设在地址计算部分中。如果从显示标记的识别中得到的是该指令码包括一个变址指令,。那么,就输出通用寄存器的内容,以此作为地址。如果不是这种情况,就输出包括在指令码中的一个立即值,以此作为地址,并且有可能以简单的配置执行变址的顺序指令。
除了由可编程控制器获得的这些效果外,可编程控制器还包括一个指令码,它是一个定时器或计数器指令。该定时器或计数器指令使用预置数据作为要操作的对象。常规的可编程控制器计算由包括在指令码中的定时器或计数器数所唯一确定的预置数据。与该常规的可编程控制器相比,本发明的可编程控制器不使用各种预处理指令。通过缩短处理时间,有可能执行具有说明(包括控制条件,如变址的定时器或计数器)的定时器或计数器指令。
除了由可编程控制器获得的这些效果外,可编程控制器还包括一个选择器,它设在从外存贮器读出数据和一个数据通道中。如果作为显示标记的识别结果得到的是指令码包括一个变址指令,则选择器输出通用寄存器内容。如果不是这种情况,则选择器输出从外存贮器读出的数据。有可能利用一个简单的配置来执行一个变址的定时器或计数器指令。
权利要求
1.一种可编程控制器,包括一个指令执行级,包括第一级,用于执行指令取出操作,以便从指令存贮器取出指令;第二级,用于对指令解码并从一通用寄存器取出一个数值;第三级,用于执行算术指令或逻辑指令、数据地址计算、或目标分支有效地址的计算;第四级,用于访问数据存贮器;以及第五级,用于执行下列操作中的一种操作位操作、针对所述通用寄存器的写操作、和分支操作,其中,所述可编程控制器执行基本的位处理操作和包括多个位的应用处理,按照流水线方式执行第一级至第五级,每个指令执行级的执行说明信息根据位处理操作的结果而变为一个预定值,并且根据位处理指令的结果来判定使该位处理指令后边的一个指令变为无效指令或有效指令。
2.如权利要求1的可编程控制器,其中直到按照装入(LOAD)指令获得的数据写入所述通用寄存器之前,如果所述数据对所述装入指令之后的指令是必要的,则暂停执行所述装入指令后的一个指令。
3.如权利要求2的可编程控制器,其中如果在所述装入指令之后的指令是一存贮指令,并且如果用所述装入指令更新所述通用寄存器,而所述通用寄存器保持一所述存贮指令所需的值,则把按照所述装入指令存贮在第五级的通用寄存器中的数据取到所述存贮指令的第三级和第四级中的一级,并且将所述数据写入所述数据存贮器。
4.如权利要求1的可编程控制器,进一步包括选择装置,设在第二级中,用于从通用寄存器输出、第三级的ALU输出、和提供给第四级的ALU的输出中选择出第三级的ALU的一个输入。
5.如权利要求1的可编程控制器,进一步包括选择装置,设在第三级中,用于从自第二级输出至ALU的一个输入端的值、提供给第四级的ALU输出、以及提供给第五级的ALU的输出中选择第三级的ALU的一个输入。
6.如权利要求1的可编程控制器,其中第三级执行分支条件的判定,第五级执行分支操作,并且当满足分支条件时,禁止执行已经包括在流水线中的无效指令。
7.如权利要求1的可编程控制器,进一步包括一个操作块,用于执行其操作不可能在一个流水线级的时间周期内完成的指令,其中,当执行其操作不能在一个流水线级的时间周期内完成的指令时,通过只在完成指令操作所需的时间周期期间中断程序计数器的增值并使控制信号无效来中止所述流水线,所述控制信号包括把一个值写回寄存器的信号和把数据写入数据存贮器的信号,借此来执行所述指令。
8.如权利要求7的可编程控制器,当执行所需的操作时间不确定的指令时,中止所述流水线,直到从一个操作块收到了一个操作完成信号为止,借此执行所述指令,所述的这个操作块是通过中断一个程序计数器的增值并使控制信号无效来执行所述指令的,所述控制信号包括把一个值写回寄存器中的信号以及把数据写入数据存贮器的信号。
9.如权利要求7的可编程控制器,当执行多个指令时,中止所述流水线,直到从一个操作块收到了一个操作完成信号为止,借此执行所述指令,所述的这个操作块是通过中断一个程序计数器的增值并使控制信号无效来执行该指令的,所述控制信号包括把一个值写回寄存器中的信号和把数据写入数据存贮器的信号。
10.如权利要求8的可编程控制器,当执行多个指令时,中止所述流水线,直到从一个操作块收到了一个操作完成信号为止,借此执行所述指令,所述的这个操作块是通过中断一个程序计数器的增值并使控制信号无效来执行该指令的,所述控制信号包括把一个值写回寄存器中的信号和把数据写入数据存贮器的信号。
11.如权利要求7-10中任何一个权利要求所述的可编程控制器,其中对操作块进行这样安排,使之能适应多种类型数据的宽度操作,并且还使之接收具有设定在预定位位置的值的输入,并且使之根据需要清除不使用位位置的值。
12.如权利要求7的可编程控制器,其中当执行其操作不可能在一个流水线级的时间周期内执行的指令时,保持预定的信息,直到在所述指令将操作结果存贮到多个通用寄存器的条件下把所述操作结果写回所述寄存器的操作全部完成时为止。
13.如权利要求7的可编程控制器,其中当执行其操作不可能在一个流水线级的时间周期内执行的指令时,对设在指令解码级和执行所述指令级之间的流水线寄存器中的指令的控制信号和变元中的一个按需要保持一段时间周期。
14.如权利要求1的可编程控制器,进一步包括一个存贮地址计算块,除了利用包括装入指令和存贮指令在内的存贮器访问指令外,还专门使用了位处理指令。
15.如权利要求14的可编程控制器,其中专门设计用于所述位处理指令的存贮地址计算块通过在多个流水线周期计算数据存贮器地址并且发出存贮器访问请求信号而在多个连续的流水线级中完成对所述存贮器的访问。
16.如权利要求1的可编程控制器,进一步包括一个电路块专用于执行位处理操作,其中,所述电路块输出存贮地址和至少一个存贮器写数据以及一个存贮器写请求信号,以将数据写入所述存贮器或从所述存贮器中读出数据。
17.如权利要求14-16中任何一个权利要求所述的可编程控制器,其中在流水线寄存器中提供表示前面的指令是一位处理指令的控制信号,并且如果必须中止执行所述位处理指令后的指令,则可编程控制器中止程序计数器的增值,即使只通过中止程序计数器的增值不可能中止所述指令的执行,也通过进一步改写所述指令的解码结果来中止所述位处理指令后边的所述指令。
18.如权利要求17的可编程控制器,其中,所述电路块输出所述控制信号。
19.如权利要求1的可编程控制器,进一步包括一个数据存贮器,专用于仅当输入改变时要执行的微分指令,其中,所述存贮器的地址总线在所述数据存贮器和可编程控制器的指令存贮器之间共享。
20.如权利要求19的可编程控制器,进一步包括一个电路块,专用于执行位处理指令,其中,在取出所述指令时指令存贮器地址就被取到一个流水线寄存器中,并且取出的地址通过所述流水线寄存器依次传送到专用于位处理指令的所述电路块,以及其中,当把微分指令的结果写回数据存贮器时,使用传送的指令存贮器地址作为用于向所述存贮器内写入数据的地址。
21.如权利要求19和20中任何一个权利要求所述的可编程控制器,其中,当把微分指令的结果写回到数据存贮器中时,中止程序计数器加1,以保证指令的取出,并且用对随后的操作不会有任何影响的指令改写从指令存贮器获得的指令。
22.如权利要求1的可编程控制器,进一步包括一个存贮地址计算块,专用于位处理指令;一个电路块,具体执行位处理操作;一个数据存贮器,专用于仅当输入改变时要执行的微分指令;其中,对于位处理指令和微分指令,通过按需要中止一个指令来保证一个指令的取出。
23.如权利要求1的可编程控制器,其中在位处理指令的指令码中提供向变址指令表示的一个标记,当存在所述变址指令时,从一通用寄存器读出一个预定值,并使用所述预定数据作为一数据存贮器读出数据的地址,以代替位处理指令的指令码中用一立即值(零级值)提供的地址,以便执行位处理。
24.如权利要求1的可编程控制器,其中在对应于一部分位处理指令的一个定时器或计数器指令的一个指令码中提供向用变址指令修改的一个预置值表示的标记,当用变址指令修改预置值时,从一通用寄存器读出一预定值、并且使用所述预定数据作为执行定时器或计数器指令的一个预置值,以代替从位处理指令的指令码中提供的地址的数据存贮器读出的预置数据。
25.如权利要求1的可编程控制器,进一步包括一个寄存器,由时钟信号激励,所述时钟信号的定时变化比激励程序计数器的时钟信号更快;其中,和中止程序计数器增值的控制信号的值无关地把通过使程序计数器的加1获得的值锁存到寄存器中,并且使用所述寄存器的值作为指令存贮器的地址以代替程序计数器的值去取出指令,如果中止程序计数器增值的控制信号对应于中止一个增值操作的信号,则从指令存贮器读出的值就不装入从中取出指令的指令寄存器,但却将所述指令寄存器的值保持在其自身中。
26.如权利要求25的可编程控制器,其中如果当执行分支指令时满足分支条件,则使用在执行分支指令过程中计算出来的目标分支地址作为指令存贮器的地址,这就使取出指令成为可能。
27.如权利要求25的可编程控制器,其中通过使用在执行微分指令时计算的位存贮器地址可改写位存贮器。
28.如权利要求25的可编程控制器,其中当可编程控制器启动时,可根据可编程控制器启动之前从外部设定的程序计数器的初始值从指令存贮器的一个正确地址取出指令。
29.如权利要求1的可编程控制器,其中当取出一个指令时,把程序计数器的值传递到流水线寄存器,并使用通过流水线寄存器传递的程序计数器的值来计算可编程控制器中止时程序计数器的值。
30.如权利要求29的可编程控制器,进一步包括一个状态机,用于实现启动停止控制操作,所述状态机读出设在流水线寄存器中的程序计数器的值、根据按照中止操作的规定在先前获得的值来计算程序计数器中止时的值、并且在可编程控制器中止之前将所计算的值写入所述程序计数器。
31.如权利要求30的可编程控制器,其中当停止条件满足并且中止操作开始时,使已经引入该流水线中的指令的执行无效,以防止无效指令的执行。
32.如权利要求1的可编程控制器,其中确定包括多个标记值的指令执行条件,并且仅在满足第三级的指令执行条件时才执行一个特定的指令。
33.如权利要求32的可编程控制器,其中完成用于更新包括指令执行条件在内的标记的标记设定指令,以便在启动紧跟该标记设定指令后的一个指令的指令执行级时更新标记,并且在协调地控制是执行该指令还是使所述指令无效的判定的同时执行所述指令。
34.如权利要求32的可编程控制器,其中完成用于更新包括指令执行条件在内的指令标记的各种类型的算术操作指令,以便启动紧跟该算术操作指令之后的一个指令的指令执行级,并且在协调地控制有关是执行该指令还是使该指令无效地判定的同时执行所述指令。
35.如权利要求32的可编程控制器,其中由在第五级中实现位操作处理的位处理指令来更新标记以形成指令执行条件,提供流水线寄存器中的控制信号,所述控制信号表示现行指令是位处理指令,所述位处理指令用于更新和指令执行条件有关的标记,当指令执行条件未判定时根据所述控制信号来中止指令的执行,而在协调地控制有关是否要执行该指令还是使所述指令无效的判定的同时执行所述执令。
全文摘要
一种可编程控制器,包括一个流水线级,其中按流水线方式执行5级第一级IF执行指令取出操作,第二级ID/RF对指令解码并从通用寄存器取出数据,第三级EX执行算术和逻辑操作、数据地址计算、或目标分支有效地址的计算,第五级WB/BPU执行位操作,针对通用寄存器的号操作,或分支操作。因为在统一的指令结构中形成了一个流水线结构,所以可以实现简化硬件和控制,便于把流水线形成为多级。
文档编号G06F9/38GK1153933SQ9612110
公开日1997年7月9日 申请日期1996年9月29日 优先权日1995年9月29日
发明者增田达男, 薮田明, 坂井宏史 申请人:松下电工株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1