專利名稱:可編程控制器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種可編程控制器,它執(zhí)行主要用于位操作的基本指令和處理包含大量的位的數(shù)據(jù)的應(yīng)用指令,更準(zhǔn)確地說,本發(fā)明涉及一種配有專門設(shè)計(jì)以便能處理基本指令和應(yīng)用指令的硬件(處理器)的可編程控制器。
可編程控制器廣泛地用在工業(yè)設(shè)備、機(jī)器、以及工廠自動(dòng)化裝置中。隨著對(duì)象設(shè)備的復(fù)雜性的增加,已經(jīng)提出了高速處理大量輸入/輸出信號(hào)的要求以及高速操作的要求。為些,由專門設(shè)計(jì)的能處理主要用于位操作的基本指令和處理包含大量位的數(shù)據(jù)的應(yīng)用指令的硬件(一個(gè)處理器)來實(shí)現(xiàn)高速處理。由該硬件和執(zhí)行通信處理和外圍處理的通用微處理器的組合來構(gòu)成可編程控制器。
常規(guī)例子的專門設(shè)計(jì)的硬件(即,處理器)有三級(jí)流水線結(jié)構(gòu),并通過這種流水線結(jié)構(gòu)執(zhí)行指令。在這種情況下,在執(zhí)行級(jí)執(zhí)行的處理包括下列細(xì)節(jié)。
第一級(jí)指令的取出,用于從指令中取出后面要執(zhí)行的指令,第二級(jí)各種算術(shù)與邏輯操作,計(jì)算數(shù)據(jù)存貯器地址的數(shù)據(jù)地址計(jì)算,或處理后面的指令解碼的目標(biāo)分支操作處理和寄存器讀數(shù)處理,第三級(jí)針對(duì)數(shù)據(jù)存貯器進(jìn)行讀/寫操作的存貯器訪問處理(即,讀/寫處理),分支操作,位操作,或針對(duì)通用寄存器的寫操作。
在流水線結(jié)構(gòu)中,指令執(zhí)行的整個(gè)速度取決于所有級(jí)中最慢的指令執(zhí)行級(jí)的處理速率。為了加速這樣的流水線處理,必須提供具有相同速度的每一指令執(zhí)行級(jí)。然而,在前面所述的三級(jí)流水線結(jié)構(gòu)中,如果用具有相同訪問時(shí)間的存貯器作為指令存貯器和數(shù)據(jù)存貯器,則執(zhí)行的整個(gè)速度會(huì)變慢并且需要更長的處理時(shí)間,因?yàn)榈诙虻谌?jí)執(zhí)行例如位操作處理比第一級(jí)執(zhí)行的處理花費(fèi)更長的處理時(shí)間。
鑒于已有技術(shù)的上述缺點(diǎn)而設(shè)想出本發(fā)明,本發(fā)明的目的是提供一種能容易實(shí)現(xiàn)并能加速執(zhí)行指令的可編程控制器的結(jié)構(gòu)。
本發(fā)明的另一目的是提供一種可編程控制器的結(jié)構(gòu),能在不因插入處理流水線相關(guān)危險(xiǎn)的NOP指令而增加程序長度的情況下使處理加速。
本發(fā)明的另一目的是提供一種具有五級(jí)流水線結(jié)構(gòu)的可編程控制器,能在不使用高速存貯順的情況下以較高的速度執(zhí)行處理。
本發(fā)明的另一目的是提供一種具有五級(jí)流水線結(jié)構(gòu)的可編程控制器,能容易地執(zhí)行在一個(gè)流水線級(jí)的時(shí)間周期內(nèi)不能完成操作的指令。
本發(fā)明的另一目的是提供一種具有五級(jí)流水線結(jié)構(gòu)的可編程控制器,能迅速地執(zhí)行需要大量存貯器存取周期的位處理指令和迅速執(zhí)行其它指令。這種可編程控制器除了包括存儲(chǔ)器地址計(jì)算塊和專為位處理指令設(shè)置的流水線寄存器以外,還包括數(shù)據(jù)通路和控制電路,數(shù)據(jù)通路用于從位處理指令操作塊發(fā)送和接收訪問存儲(chǔ)器所需的數(shù)據(jù),控制電路在執(zhí)行位處理操作期間按要求暫停執(zhí)行在位處理操作指令后面的指令。本發(fā)明的又一目的是提供一種能協(xié)調(diào)地執(zhí)行每一條指令的具有五級(jí)流水線結(jié)構(gòu)的可編程控制器,并且該可編程控制器配有一個(gè)控制電路,當(dāng)重寫供微分指令使用的存儲(chǔ)器時(shí)該控制電路按要求暫停執(zhí)行指令。
本發(fā)明的另一目的是提供一種具有五級(jí)流水線結(jié)構(gòu)的可編程控制器,通過下列兩點(diǎn)能在協(xié)調(diào)地控制關(guān)于是執(zhí)行指令還是使指令無效的決定的同時(shí)執(zhí)行指令一、在流水線寄存器中提供控制信號(hào),控制信號(hào)表現(xiàn)當(dāng)前指令是一個(gè)位操作指令,該位操作指令用于更新建立指令執(zhí)行狀態(tài)的標(biāo)記BITACC;二、當(dāng)執(zhí)行指令(按照指令執(zhí)行狀態(tài)根據(jù)控制信號(hào)的值確定要被執(zhí)行或要被無效的指令)時(shí)暫停執(zhí)行該指令直到確定指令執(zhí)行狀態(tài)為止。
本發(fā)明的另一目的是提供一種可編程控制器,它具有五級(jí)流水線結(jié)構(gòu),并且能按規(guī)程中所要求的方式根據(jù)各種停止?fàn)顟B(tài)協(xié)調(diào)地執(zhí)行暫停操作。
本發(fā)明的另一目的是提供一種通過抑制程序長度能以高速執(zhí)行變址指令的可編程控制器。
為此,本發(fā)明的可編程控制器執(zhí)行基本位處理操作和包含大量位的應(yīng)用處理,包括下列步驟由五級(jí)形成一個(gè)指令執(zhí)行級(jí),即,一個(gè)指令執(zhí)行級(jí)包括用于執(zhí)行取指令操作以便從指令存貯器取出指令的第一級(jí),用于指令解碼并從一通用寄存器取出一個(gè)數(shù)值的第二級(jí),用于執(zhí)行算術(shù)操作和邏輯操作、數(shù)據(jù)地址計(jì)算、或目標(biāo)分支有效地址的計(jì)算的第三級(jí),用于訪問數(shù)據(jù)存貯器的第四級(jí),以及用于執(zhí)行位操作,針對(duì)通用寄存器的寫操作、或分支操作的第五級(jí);以及以流水線方式執(zhí)行該指令執(zhí)行級(jí)。
本發(fā)明的可編程控制器包括下列部分,它們作為流水線處理的各指令執(zhí)行級(jí)的硬件;具有指令存儲(chǔ)器和程序計(jì)數(shù)器的IF部分;具有指令解碼器和通用寄存器的ID部分;具有算術(shù)與邏輯單元的EX部分;具有數(shù)據(jù)存儲(chǔ)器和用于控制訪問數(shù)據(jù)存儲(chǔ)器的存儲(chǔ)器訪問接口的MEM部分;以及用于執(zhí)行位操作處理的BPU。
按照本發(fā)明的可編程控制器,根據(jù)可編程控制器的基本處理操作之一的位操作指令的結(jié)果將每一指令執(zhí)行級(jí)的執(zhí)行說明信息改變?yōu)橐粋€(gè)預(yù)定值,并使位操作指令后面的指令無效。
按照本發(fā)明的可編程控制器,在與各指令執(zhí)行級(jí)對(duì)應(yīng)的硬件之間設(shè)有多個(gè)流水線寄存器,以及將指令執(zhí)行級(jí)的執(zhí)行結(jié)果存貯在每一流水線寄存器中。
按照本發(fā)明的可編程控制器,將各指令執(zhí)行級(jí)的執(zhí)行說明信息存貯在多個(gè)流水線寄存器的各流水線寄存器中,并且每當(dāng)執(zhí)行一個(gè)指令執(zhí)行級(jí)時(shí)將執(zhí)行說明信息饋送給下一指令執(zhí)行級(jí)的流水線寄存器。
按照本發(fā)明的可編程控制器,在指令執(zhí)行級(jí)能執(zhí)行的精簡的指令集結(jié)構(gòu)包括存儲(chǔ)器訪問指令、寄存器到寄存器的操作指令、立即值指令、分支指令、以及位操作指令。
按照本發(fā)明的可編程控制器,一個(gè)精簡的指令集結(jié)構(gòu)包括存儲(chǔ)器訪問指令,在第三級(jí)執(zhí)行要訪問的數(shù)據(jù)存儲(chǔ)器的有效地址的計(jì)算,在第四級(jí)從數(shù)據(jù)存儲(chǔ)器讀數(shù)據(jù)和將數(shù)據(jù)寫入數(shù)據(jù)存儲(chǔ)器,以及如果指令要求將數(shù)據(jù)從數(shù)據(jù)存儲(chǔ)器寫入通用寄存器則在第五級(jí)寫數(shù)據(jù);寄存器到寄存器操作指令,在第三級(jí)執(zhí)行通用寄存器之間的算術(shù)和邏輯操作,在第五級(jí)將數(shù)據(jù)寫入通用寄存器;立即值操作指令,用包含在該指令中的立即值和存儲(chǔ)在預(yù)定通用寄存器中的值進(jìn)行算術(shù)和邏輯操作;分支指令,在第三級(jí)執(zhí)行比較并且在第五級(jí)根據(jù)比結(jié)果執(zhí)行分支操作;以及位操作指令,在第四級(jí)執(zhí)行將數(shù)據(jù)從數(shù)據(jù)存儲(chǔ)器取出送到通用寄存器的操作和操作處理,以及在第五級(jí)執(zhí)行針對(duì)每位數(shù)據(jù)的操作處理。
為此,提供一種本發(fā)明的可編程控制器,它按流水線方式執(zhí)行如下的第一至第五級(jí),即,用于執(zhí)行取指令操作以便從指令存貯器取出指令的第一級(jí),用于指令解碼并從一通用寄存器取出一個(gè)數(shù)值的第二級(jí),用于執(zhí)行算術(shù)和邏輯操作、數(shù)據(jù)地址計(jì)算、目標(biāo)分支有效地址的計(jì)算或分支狀態(tài)確定的第三級(jí),用于訪問數(shù)據(jù)存貯器或執(zhí)行分支操作的第四級(jí),以及用于執(zhí)行位操作,針對(duì)通用寄存器的寫操作、或分支操作的第五級(jí);該可編程控制器包括選擇裝置,設(shè)在第二級(jí)中,用于從通用寄存器的輸出、第三級(jí)的ALU的輸出、和提供給第四級(jí)的ALU的輸出中選擇出第三級(jí)的ALU的一個(gè)輸入。
本發(fā)明的可編程控制器以流水線的方法執(zhí)行第一至第五級(jí),即,用于執(zhí)行取指令操作以便從指令存貯器取出指令的第一級(jí),用于指令解碼并從一通用寄存器取出一個(gè)數(shù)值的第二級(jí),用于執(zhí)行算術(shù)和邏輯操作、數(shù)據(jù)地址計(jì)算、目標(biāo)分支有效地址的計(jì)算、或分支狀態(tài)確定的第三級(jí),用于訪問數(shù)據(jù)存貯器或執(zhí)行分支操作的第四級(jí),以及用于執(zhí)行位操作、針對(duì)通用寄存器的寫操作、或分支操作的第五級(jí),該可編程控制器包括選擇裝置,設(shè)在第三級(jí)中,用于從自第二級(jí)輸出至ALU的一個(gè)輸出端的值、提供給第四級(jí)的ALU的輸出、以及提供給第五級(jí)的ALU的輸出中選擇第三級(jí)的ALU的一個(gè)輸入。
本發(fā)明的可編程控制器以流水線的方式執(zhí)行第一至第五級(jí),即,用于執(zhí)行取指令操作以便從指令存貯器取出指令的第一級(jí),用于指令解碼并從一通用寄存器取出一個(gè)數(shù)值的第二級(jí),用于執(zhí)行算術(shù)和邏輯操作、數(shù)據(jù)地址計(jì)算、目標(biāo)分支有效地址的計(jì)算、或確定分支狀態(tài)的第三級(jí),用于訪問數(shù)據(jù)存貯器或執(zhí)行分支操作的第四級(jí),以及用于執(zhí)行位操作、針對(duì)通用寄存器的寫操作、或分支操作的第五級(jí),該可編程控制器包括如下功能暫停執(zhí)行裝入(LOAD)指令后的一個(gè)指令直到按照該裝入(LOAD)指令獲得的數(shù)據(jù)寫入通用寄存器為止,如果該數(shù)據(jù)對(duì)LOAD指令之后的指令是必要的。
只要如在寄存器到寄存器的操作或變?cè)僮髦兴龅哪菢佑葾LU計(jì)算要寫入通用寄存器的值,即使還沒有將該值寫入通用寄存器中,該值也會(huì)出現(xiàn)在流水線中的某個(gè)地方。與可編程控制器類似地,有可能通過提供一個(gè)數(shù)據(jù)通路來處理流水線相關(guān)危險(xiǎn),該數(shù)據(jù)通路用于從流水線中的預(yù)定位置獲得一個(gè)作為ALU變?cè)枰闹?。然而,如果按照前面的LOAD指令從數(shù)據(jù)存儲(chǔ)器獲取要寫入通用寄存器的一個(gè)值,則該值在執(zhí)行存儲(chǔ)器訪問操作的第四級(jí)第一次出現(xiàn)在流水線中。如果后面的指令與把由該LOAD指令更新其值作為變?cè)耐ㄓ眉拇嫫饔嘘P(guān),那么使用可編程控制器中設(shè)置的數(shù)據(jù)通路可能難以解決問題。
為了解決這一問題,必須暫停執(zhí)行后面的指令直到將需要的值寫入通用寄存器為止。該方法相當(dāng)于插入NOP指令。但是,如果實(shí)際地將NOP指令插入程序中,則程序長度增大。為了避免此問題,當(dāng)在第二級(jí)解碼當(dāng)前指令時(shí)檢驗(yàn)流水線上的前面指令。并進(jìn)一步地檢驗(yàn)是否由前面指令更新了當(dāng)前解碼指令所需要的通用寄存器的值。如果情況是這樣,暫停執(zhí)行當(dāng)前解碼的指令直到該值實(shí)際寫入通用寄存器為止。同時(shí),也防止程序計(jì)數(shù)器計(jì)數(shù)值增加。結(jié)果是,實(shí)現(xiàn)了與插入NOP指令等效的操作。
按照本發(fā)明的可編程控制器,該可編程控制器的特征在于如果LOAD指令后面的指令是STORE指令,并且如果由LOAD指令對(duì)保持STORE指令所需要的一個(gè)值的通用寄存器更新,那么按照該LOAD指令在第五級(jí)存儲(chǔ)到通用寄存器中的數(shù)據(jù)在第四級(jí)被取出并寫入數(shù)據(jù)存儲(chǔ)器。
正如前面已經(jīng)描述的,如果由LOAD指令更新在第三級(jí)執(zhí)行操作所需的通用寄存器的值,必須暫停執(zhí)行指令直到能從通用寄存器中取出所需要的值為止。然而,在STORE指令的情況下,從通用寄存器中獲取的值直接通過流水線寄存器而不加處理,并且將這樣移動(dòng)的值在第四級(jí)寫入數(shù)據(jù)存儲(chǔ)器。因此,不需等待按LOAD指令供給通用寄存器的值寫入到通用寄存器,并且不需隨后按照STORE指令將從通用寄存器中取出的值寫入數(shù)據(jù)存儲(chǔ)器。在用于將由LOAD指令更新的通用寄存器的值寫入數(shù)據(jù)存儲(chǔ)器的STORE指令位于LOAD指令之后的情況下,如果由可編程控制器執(zhí)行流水線相關(guān)危險(xiǎn)操作,則花費(fèi)浪費(fèi)的停止時(shí)間。
為了避免這樣的問題,給可編程控制器提供數(shù)據(jù)通路,在用于將LOAD指令更新的通用寄存器的值寫入數(shù)據(jù)存儲(chǔ)器的STORE指令位于LOAD指令之后的情況下,通過代替暫停執(zhí)行STORE指令的數(shù)據(jù)通路將按照前面的LOAD指令(在第五級(jí))從數(shù)據(jù)存儲(chǔ)器中取出的值供給第四級(jí)作為用于后面STORE指令的數(shù)據(jù)。簡言之,在LOAD指令更新的通用寄存器的值被寫入數(shù)據(jù)存儲(chǔ)器的STORE指令位于LOAD指令之后的情況下,能繼續(xù)進(jìn)行處理而不暫停STORE指令的執(zhí)行。
給本發(fā)明的可編程控制器提供數(shù)據(jù)通路。在用于將LOAD指令所更新的通用寄存器的值寫入數(shù)據(jù)存儲(chǔ)器的STORE指令位于LOAD指令之后隔一條指令的情況下,通過代替暫停執(zhí)行STORE指令的數(shù)據(jù)通路將按照前面的LOAD指令(在第五級(jí))從數(shù)據(jù)存儲(chǔ)器中取出的值作為用于后面STORE指令的數(shù)據(jù)。簡言之,在將LOAD指令更新的通用寄存器的值寫入數(shù)據(jù)存儲(chǔ)器的STORE指令位于LOAD指令之后隔一條指令的情況下,能繼續(xù)進(jìn)行處理而不暫停STORE指令的執(zhí)行。
本發(fā)明的可編程控制器以流水線的方式執(zhí)行以下的第一至五級(jí),即,用于執(zhí)行取指令操作以便從指令存貯器取出指令的第一級(jí),用于指令解碼并從一通用寄存器取出一個(gè)數(shù)值的第二級(jí),用于執(zhí)行算術(shù)和邏輯操作、數(shù)據(jù)地址計(jì)算、目標(biāo)分支有效地址的計(jì)算或確定分支狀態(tài)的第三級(jí),用于訪問數(shù)據(jù)存貯器或執(zhí)行分支操作的第四級(jí),以及用于執(zhí)行位操作、針對(duì)通用寄存器的寫操作、或分支操作的第五級(jí),該可編程控制器的特點(diǎn)是包括如下功能當(dāng)滿足分支條件時(shí)禁止執(zhí)行已經(jīng)包含在流水線中的無效的指令。
本發(fā)明的可編程控制器按流水線方式執(zhí)行以下的第一至第五級(jí),即,用于執(zhí)行取操作指令以便從指令存貯器取出指令的第一級(jí),用于指令解碼并從一通用寄存器取出一個(gè)數(shù)值的第二級(jí),用于執(zhí)行算術(shù)和邏輯操作、數(shù)據(jù)地址計(jì)算、目標(biāo)分支有效地址的計(jì)算、或確定分支狀態(tài)的第三級(jí),用于訪問數(shù)據(jù)存貯器或執(zhí)行分支操作的第四級(jí),以及用于執(zhí)行位操作、針對(duì)通用寄存器的寫操作、或分支操作的第五級(jí),該可編程控制器的特點(diǎn)是包括如下功能當(dāng)滿足分支條件時(shí)禁止執(zhí)行已經(jīng)包含在流水線中的無效的指令。
當(dāng)按照本發(fā)明具有五級(jí)流水線結(jié)構(gòu)的RISC可編程控制器執(zhí)行分支指令時(shí),在第三級(jí)計(jì)算分支地址并確定分支狀態(tài)??梢栽诘谌?jí)準(zhǔn)備好形成分支所需要的所有值,因此可以在后面的第四級(jí)執(zhí)行分支操作。然而,由于實(shí)際電路的限制,在某些電路結(jié)構(gòu)中不是在第四級(jí)而是在第五級(jí)執(zhí)行分支操作。在任何情況下,如果滿足分支條件,都將在第三級(jí)獲得的分支地址寫入執(zhí)行分支操作的那一級(jí)的程序計(jì)數(shù)器中。按照程序計(jì)數(shù)器的值取出指令,從而完成分支操作。此時(shí),如果不滿足分支條件,流水線已包括要執(zhí)行的指令。如果滿足分支條件,決不能執(zhí)行這樣的指令。為了防止執(zhí)行這樣的指令,如果滿足分支條件,禁止執(zhí)行在流水線中已取的指令直到從分支地址中取出指令為止。具體說,如果滿足分支條件,則禁止用在流水線中已取的指令改寫數(shù)據(jù)存儲(chǔ)器或通用寄存器??删幊炭刂破髟诘谖寮?jí)執(zhí)行分支指令并執(zhí)行前面描述的處理??删幊炭刂破髟诘谒募?jí)執(zhí)行分支指令。
根據(jù)本發(fā)明,可編程控制器以流水線方式執(zhí)行五級(jí),即,用于執(zhí)行取指令操作以便從指令存貯器取出指令的第一級(jí),用于執(zhí)行指令解碼操作和從一通用寄存器取出一個(gè)數(shù)值的寄存器取出操作的第二級(jí),用于執(zhí)行算術(shù)和邏輯操作、數(shù)據(jù)地址計(jì)算、目標(biāo)分支有效地址的計(jì)算、或確定分支狀態(tài)的第三級(jí),用于訪問數(shù)據(jù)存貯器或執(zhí)行分支操作的第四級(jí),以及用于執(zhí)行位操作、針對(duì)通用寄存器的數(shù)據(jù)寫操作、或分支操作的第五級(jí),該可編程控制器包括下列功能不考慮暫停程序計(jì)數(shù)器增值的控制信號(hào)的值,將由1加上程序計(jì)數(shù)器的值所獲得的值鎖存到寄存器中,由定時(shí)關(guān)系變化驅(qū)動(dòng)程序計(jì)數(shù)器的時(shí)鐘信號(hào)早的時(shí)鐘信號(hào)驅(qū)動(dòng)該寄存器;用該寄存器的值(代替程序計(jì)數(shù)器的值)作為指令存儲(chǔ)器的地址來取指令。
為了克服前面所述的缺點(diǎn),給本發(fā)明的可編程控制器設(shè)置了一個(gè)由定時(shí)關(guān)系變化比驅(qū)動(dòng)程序計(jì)數(shù)器的時(shí)鐘信號(hào)早的時(shí)鐘信號(hào)驅(qū)動(dòng)的寄存器。由于取出存在寄存器中的值作為指令存儲(chǔ)器的地址,因而可較早地確定指令存儲(chǔ)器的地址,借此能保證指令存儲(chǔ)器的訪問時(shí)間所需要的提前時(shí)間。
根據(jù)本發(fā)明,可編程控制器是這樣的設(shè)置如果暫停程序計(jì)數(shù)器計(jì)數(shù)值增加的控制信號(hào)是一個(gè)暫停增值操作的信號(hào),不將從指令存儲(chǔ)器中讀出的值裝入用于取指令的指令寄存器中,而是將該指令寄存器的值保留在其自身之中。
根據(jù)本發(fā)明,具有五級(jí)流水線結(jié)構(gòu)的可編程控制器的特點(diǎn)是如果在執(zhí)行分支指令時(shí)滿足分支條件,將在執(zhí)行分支指令的過程中計(jì)算的目標(biāo)分支地址用作指令存儲(chǔ)器的地址,從而取出指令。
根據(jù)本發(fā)明,具有五級(jí)流水線結(jié)構(gòu)的可編程控制器滿足能由執(zhí)行微分指令時(shí)計(jì)算的位存儲(chǔ)器的地址重寫位存儲(chǔ)器。
根據(jù)本發(fā)明,具有五級(jí)流水線結(jié)構(gòu)的可編程控制器滿足當(dāng)可編程控制器開始開作時(shí),能根據(jù)在可編程控制器開始工作之前從外面設(shè)置的程序計(jì)數(shù)器的初值從指令存儲(chǔ)器的正確地址來取指令。
為此,使本發(fā)明的具有五級(jí)流水線結(jié)構(gòu)的可編程控制器滿足當(dāng)執(zhí)行其操作不能在一個(gè)流水線級(jí)的時(shí)間周期內(nèi)完成的指令時(shí),通過只在完成指令操作所需的時(shí)間周期期間中斷程序計(jì)數(shù)器的增值及通過使控制信號(hào)無效來中止該流水線,(該控制信號(hào)是把一個(gè)值寫回寄存器的控制信號(hào)或把數(shù)據(jù)寫入數(shù)據(jù)存貯器的控制信號(hào))借此來執(zhí)行指令。
根據(jù)本發(fā)明,具有五級(jí)流水線結(jié)構(gòu)的可編程控制器滿足當(dāng)執(zhí)行其操作不能在一個(gè)流水線級(jí)的時(shí)間周期內(nèi)完成并且需要不確定的操作時(shí)間的指令時(shí),暫停該流水線,直到從執(zhí)行指令的一個(gè)操作塊收到一個(gè)操作完成信號(hào)為止,借此執(zhí)行該指令,所說的這個(gè)操作塊是通過中斷一個(gè)程序計(jì)數(shù)器的增值并使控制信號(hào)無效來執(zhí)行該指令的,所說控制信號(hào)是把一個(gè)值寫回寄存器中的控制信號(hào)或把數(shù)據(jù)寫入數(shù)據(jù)存貯器的控制信號(hào)。
根據(jù)本發(fā)明,具有五級(jí)流水線結(jié)構(gòu)的可編程控制器滿足當(dāng)執(zhí)行其操作不能在一個(gè)流水線級(jí)的時(shí)間周期內(nèi)完成的多種類型的指令時(shí),利用適合該類指令的判定操作是否完成的方法,通過中斷程序計(jì)數(shù)器的增值并使控制信號(hào)無效來暫停該流水線,借此來執(zhí)行指令,所說控制信號(hào)是把一個(gè)值寫回寄存器中的控制信號(hào)或把數(shù)據(jù)寫入數(shù)據(jù)存貯器的控制信號(hào)。
根據(jù)本發(fā)明,具有五級(jí)流水線結(jié)構(gòu)的可編程控制器,包括一個(gè)用于確定是否執(zhí)行其操作不能在一個(gè)流水線級(jí)的時(shí)間周期內(nèi)完成的指令的標(biāo)記,其中,如果已經(jīng)確定該指令不應(yīng)執(zhí)行則阻止開始執(zhí)行該指令,以便避免流水線操作的浪費(fèi)時(shí)間的暫停。
根據(jù)本發(fā)明,具有五級(jí)流水線結(jié)構(gòu)的可編程控制器包括一個(gè)執(zhí)行其操作不能在一個(gè)流水線級(jí)的時(shí)間周期內(nèi)完成的指令的操作塊,對(duì)該操作塊進(jìn)行安排,使其能適應(yīng)多種類型數(shù)據(jù)的寬度操作,并且還使它能夠接收具有設(shè)定在預(yù)定位位置的值的輸入,并且能根據(jù)需要清除在不使用的位位置的值。
根據(jù)本發(fā)明,具有五級(jí)流水線結(jié)構(gòu)的可編程控制器的特點(diǎn)是當(dāng)執(zhí)行其操作不可能在一個(gè)流水線級(jí)的時(shí)間周期內(nèi)執(zhí)行的指令時(shí),保持預(yù)定的信息,直到在該指令將操作結(jié)果存儲(chǔ)到寄存器的條件下把操作結(jié)果寫回到多個(gè)通用寄存器的操作全部完成時(shí)為止。
根據(jù)本發(fā)明,具有五級(jí)流水線結(jié)構(gòu)的可編程控制器滿足當(dāng)執(zhí)行其操作不可能在一個(gè)流水線級(jí)的時(shí)間周期內(nèi)執(zhí)行的指令時(shí),對(duì)設(shè)在指令解碼級(jí)和執(zhí)行該指令的級(jí)之間的流水線寄存器中的指令的控制信號(hào)或變?cè)M(jìn)行保持一段按需要確定的時(shí)間周期。
給本發(fā)明的具有五級(jí)流水線結(jié)構(gòu)的可編程控制器設(shè)置一個(gè)操作塊和一個(gè)指令執(zhí)行控制塊,操作塊是專門設(shè)計(jì)的以便執(zhí)行可編程控制器需要的所有操作中的一個(gè)操作,例如在多個(gè)流水線級(jí)的時(shí)間中花費(fèi)長時(shí)間的乘法操作或除法操作,而指令執(zhí)行控制塊用于控制操作塊和流水線結(jié)構(gòu)的需要部分。
為了克服前面所述的已有技術(shù)的缺點(diǎn),本發(fā)明的可編程控制器按流水線方式執(zhí)行五級(jí),即用于執(zhí)行取指令操作,即,從指令存貯器IM取出指令的第一級(jí)IF,用于執(zhí)行指令解碼操作和從一通用寄存器取出一個(gè)數(shù)值的寄存器取數(shù)操作的第二級(jí)ID,用于執(zhí)行算術(shù)和邏輯操作、數(shù)據(jù)地址計(jì)算、目標(biāo)分支有效地址的計(jì)算、以及確定分支狀態(tài)的第三級(jí)EX,用于訪問數(shù)據(jù)存貯器DM或執(zhí)行分支操作的第四級(jí)MEM,以及用于執(zhí)行位操作,針對(duì)通用寄存器的寫數(shù)據(jù)、或分支操作的第五級(jí)WB。該可編程控制器的設(shè)置包括一個(gè)專門設(shè)計(jì)的為與位處理指令一起用的存儲(chǔ)地址計(jì)算塊BPUADR,以便除執(zhí)行裝入指令、存儲(chǔ)指令、以及存儲(chǔ)器訪問指令外還執(zhí)行位處理指令。專門設(shè)計(jì)用于位處理指令的存儲(chǔ)地址計(jì)算塊BPUADR在多個(gè)流水線周期計(jì)算數(shù)據(jù)存儲(chǔ)器DM的地址,從而發(fā)出存儲(chǔ)器訪問請(qǐng)求信號(hào)。結(jié)果,能在多個(gè)連續(xù)的流水線級(jí)中訪問存儲(chǔ)器。進(jìn)一步地,給可編程控制器配有專門設(shè)計(jì)用于執(zhí)行位處理操作的電路塊BPU。從該電路模塊中輸出存儲(chǔ)器地址和存儲(chǔ)器讀請(qǐng)求信號(hào),借此,執(zhí)行從數(shù)據(jù)存儲(chǔ)器DM中讀數(shù)據(jù)的操作。作為替換,從該電路塊輸出存儲(chǔ)器地址、要寫入存儲(chǔ)器中的數(shù)據(jù)、以及存儲(chǔ)器寫請(qǐng)求信號(hào),借此執(zhí)行將數(shù)據(jù)寫入數(shù)據(jù)存儲(chǔ)器DM的操作。
在流水線寄存器中根據(jù)指令解碼結(jié)果提供表示隨后的指令是一條位處理指令的控制信號(hào)。如果必須暫停執(zhí)行位處理指令后面的指令,則可編程控制器暫停程序計(jì)數(shù)器增值。即使只通過暫停程序計(jì)數(shù)器PC的增值不可能暫停該指令的執(zhí)行,也通過進(jìn)一步改寫指令的解碼結(jié)果來暫停位處理指令后面的指令。
給可編程控制器提供專門設(shè)計(jì)用于僅當(dāng)輸入改變時(shí)與要執(zhí)行的微分指令一起使用的一個(gè)數(shù)據(jù)存儲(chǔ)器BM。該存儲(chǔ)器的地址總線在該數(shù)據(jù)存儲(chǔ)器BM和指令存儲(chǔ)器IM之間共享。在這種情況下,指令存儲(chǔ)器地址在取出一指令時(shí)就輸入到流水線寄存器中,并且如此取出的地址通過該流水線寄存器依次傳送到專門設(shè)計(jì)與位處理指令一起使用的電路塊。當(dāng)把微分指令寫回專門設(shè)計(jì)與微分指令一起使用的數(shù)據(jù)存儲(chǔ)器BM時(shí),傳送的指令存儲(chǔ)器IM地址被用作向該存儲(chǔ)器內(nèi)寫入數(shù)據(jù)的地址。當(dāng)把微分指令寫回到專門設(shè)計(jì)與微分指令一起使用的數(shù)據(jù)存儲(chǔ)器中時(shí),暫停程序計(jì)數(shù)器的增值,以保證指令的取出。進(jìn)一步地,當(dāng)把微分指令寫回到專門設(shè)計(jì)與微分指令一起使用的數(shù)據(jù)存儲(chǔ)器中時(shí),用對(duì)隨后的操作不會(huì)有任何影響的指令改寫從指令存儲(chǔ)器獲得的指令。另外,如果這些操作同時(shí)出現(xiàn),通過按要求暫停執(zhí)行指令來保證指令的取出。
使本發(fā)明的可編程控制器設(shè)計(jì)成能解決前面所述的已有技術(shù)的問題并以流水線方式執(zhí)行五級(jí),即用于執(zhí)行取指令操作以便從指令存貯器IM取出指令的第一級(jí)IF,用于執(zhí)行指令解碼操作和從一通用寄存器取出一個(gè)數(shù)值的寄存器取數(shù)操作的第二級(jí)ID,用于執(zhí)行算術(shù)和邏輯操作、數(shù)據(jù)地址計(jì)算、目標(biāo)分支有效地址的計(jì)算、以及確定分支條件的第三級(jí)EX,用于訪問數(shù)據(jù)存貯器DM或執(zhí)行分支操作的第四級(jí)MEM,以及用于執(zhí)行位操作,針對(duì)通用寄存器的寫數(shù)據(jù)操作或分支操作的第五級(jí)WB。該可編程控制器包括確定包括多個(gè)標(biāo)記值的指令執(zhí)行狀態(tài),僅當(dāng)在指令執(zhí)行級(jí)中滿足指令執(zhí)行狀態(tài)時(shí)才執(zhí)行一特定的指令。
進(jìn)一步地,該本可編程控制器還包括一個(gè)結(jié)構(gòu),該結(jié)構(gòu)的功能是當(dāng)啟動(dòng)緊跟在標(biāo)記設(shè)置指令之后的一個(gè)指令的指令執(zhí)行級(jí)時(shí),能使標(biāo)記設(shè)置指令已經(jīng)完成更新用于設(shè)立指令執(zhí)行狀態(tài)的標(biāo)記;能在協(xié)調(diào)地控制是執(zhí)行該指令還是使該指令無效的判定的同時(shí)執(zhí)行該指令。更進(jìn)一步地,該可編程控制器還包括一個(gè)具有如下功能的結(jié)構(gòu)當(dāng)啟動(dòng)緊跟在算術(shù)操作指令之后的一個(gè)指令的指令執(zhí)行級(jí)時(shí),能使各種類型的算術(shù)操作指令已經(jīng)完成更新用于設(shè)立指令執(zhí)行狀態(tài)的標(biāo)記;并且能在協(xié)調(diào)地控制是執(zhí)行該指令還是使該指令無效的判定的同時(shí)執(zhí)行該指令。
本可編程控制器還包括這樣一個(gè)結(jié)構(gòu)能由在第五級(jí)中實(shí)現(xiàn)位操作處理的位處理指令來更新標(biāo)記以形成位處理指令;能提供流水線寄存器中的控制信號(hào),該控制信號(hào)表示當(dāng)前指令是更新與指令執(zhí)行條件有關(guān)的標(biāo)記的位處理指令;能根據(jù)該控制信號(hào)暫停執(zhí)行指令,而不對(duì)指令執(zhí)行條件進(jìn)行判定;并且能在協(xié)調(diào)地控制是要執(zhí)行該指令還是使該指令無效的判定的同時(shí)執(zhí)行該指令。
為了克服前面所述的缺點(diǎn),本發(fā)明的可編程控制器以流水線方式執(zhí)行五級(jí),即,用于執(zhí)行取指令操作以便從指令存貯器IM取出指令的第一級(jí)IF,用于執(zhí)行解碼操作和從一通用寄存器取出一個(gè)數(shù)值的寄存器讀取數(shù)操作的第二級(jí)ID,用于執(zhí)行算術(shù)和邏輯操作、數(shù)據(jù)地址計(jì)算、目標(biāo)分支有效地址的計(jì)算、以及確定分支條件的第三級(jí)EX,用于訪問數(shù)據(jù)存貯器DM或執(zhí)行分支操作的第四級(jí)MEM,以及用于執(zhí)行位操作、針對(duì)通用寄存器的寫數(shù)據(jù)操作或分支操作的第五級(jí)WB。可編程控制器包括用于執(zhí)行啟動(dòng)/停止控制操作的狀態(tài)機(jī)。將取指令時(shí)獲得的程序計(jì)數(shù)器的值輸入到流水線寄存器中,并且通過流水線寄存器照原樣傳遞該值。根據(jù)流水線寄存器中的程序計(jì)數(shù)器的值,在可編程控制器處于暫停模式時(shí),由用于啟動(dòng)/停止控制的狀態(tài)機(jī)計(jì)算要寫入程序計(jì)數(shù)器的值。在通過用于啟動(dòng)/停止控制的狀態(tài)機(jī)探測(cè)停止條件滿足、從而使可編程控制器已變?yōu)闀和DJ街螅柚箞?zhí)行在滿足停止條件的指令后面的另一指令,即使已將該后面的指令調(diào)入流水線級(jí)。這樣,能避免執(zhí)行無效指令。由于采用了這樣的一個(gè)結(jié)構(gòu),所以能提供具有五級(jí)結(jié)構(gòu)的可編程控制器,該可編程控制器能按照規(guī)程根據(jù)各種停止條件協(xié)調(diào)地執(zhí)行暫停操作。
為了解決前面所述的問題,本發(fā)明的可編程控制器具有一個(gè)處理器,該處理器根據(jù)輸入程序的指令碼來執(zhí)行位處理操作和包含多個(gè)字的應(yīng)用處理,其中每一字由多個(gè)位構(gòu)成作為要計(jì)算的對(duì)象,并且該處理器進(jìn)一步包括用于讀和寫數(shù)據(jù)的通用寄存器,計(jì)算要執(zhí)行的指令的地址的地址計(jì)算部分、以及從外部存儲(chǔ)器讀數(shù)據(jù)和將數(shù)據(jù)寫入外部存儲(chǔ)器的存儲(chǔ)器訪問部分,可編程控制器包括一個(gè)選擇器,該選擇器與通用寄存器相連,并且該選擇器根據(jù)顯示標(biāo)記的識(shí)別結(jié)果通過操作通用寄存器的內(nèi)容用硬件執(zhí)行變址指令,顯示標(biāo)記用于顯示有或沒有變址指令,變址指令間接地將要操作的對(duì)象規(guī)定在指令碼中。
使本發(fā)明所限定的可編程控制器滿足指令碼是由要操作的對(duì)象訪問的一個(gè)順序指令。
使本發(fā)明的可編程控制器滿足將選擇器設(shè)置在地址計(jì)算部分。
規(guī)定本發(fā)明的可編程控制器滿足指令碼是使用要計(jì)算的對(duì)象作為預(yù)置數(shù)據(jù)的計(jì)時(shí)器或計(jì)數(shù)器指令。
規(guī)定本發(fā)明的可編程控制器滿足將選擇器設(shè)置在用于從外部存儲(chǔ)器中讀數(shù)據(jù)的數(shù)據(jù)通路中。
根據(jù)本發(fā)明的可編程控制器,改善了處理的整個(gè)速度。這是通過下面的方式實(shí)現(xiàn)的將專門設(shè)計(jì)的硬件(即,處理器)的指令執(zhí)行級(jí)分為五級(jí)以便提供指令集和指令結(jié)構(gòu);并改善專門設(shè)計(jì)的硬件(即,處理器)的組成單元的可用性因數(shù)。通常,如果使指令執(zhí)行級(jí)分為多級(jí),將使指令的執(zhí)行的控制復(fù)雜化。統(tǒng)一的指令結(jié)構(gòu)大大地簡化了專門設(shè)計(jì)的硬件和簡化了控制,因而使本發(fā)明的可編程控制器的安排容易配置成多級(jí)。結(jié)果,能用簡單的硬件實(shí)現(xiàn)對(duì)五級(jí)流水線結(jié)構(gòu)的控制,另外,將可編程控制器安排成能根據(jù)位處理指令的結(jié)果將每一指令執(zhí)行級(jí)的執(zhí)行說明信息改變成預(yù)定值,其中位處理指令是可編程控制器的基本處理操作之一。因而,能通過可編程控制器所特有的位操作處理在不中斷流水線處理的情況下使隨后的應(yīng)用指令無效(不被執(zhí)行)。
以下結(jié)合附圖詳述本發(fā)明的實(shí)施例,其中
圖1是一個(gè)說明性的圖表,表示本發(fā)明的可編程控制器的一個(gè)五級(jí)流水線結(jié)構(gòu);圖2是一個(gè)示意圖,表示本發(fā)明可編程控制器的指令集和指令結(jié)構(gòu)的一個(gè)實(shí)施例;圖3是一張表,表示本發(fā)明可編程控制器的一個(gè)操作碼的配置的一個(gè)例子;圖4是一個(gè)方框圖,表示根據(jù)本發(fā)明一個(gè)實(shí)施例的可編程控制器;圖5是一張表,表示處理本發(fā)明可編程控制器的指令的順序;圖6是一張表格圖,表示本發(fā)明可編程控制器的操作碼ALUOP的分配的一個(gè)例子。
圖7是表示圖4所示的可編程控制器的數(shù)據(jù)通路的一個(gè)方框圖;圖8是表示按照本發(fā)明一個(gè)實(shí)施例的可編程控制器的一個(gè)方框圖;圖9是表示圖8所示的可編程控制器的數(shù)據(jù)通路的一個(gè)方框圖;圖10是一個(gè)方框圖,表示圖8所示可編程控制器的選擇裝置SRCFB的部分電路;圖11是一個(gè)解釋本發(fā)明可編程控制器操作的圖表;圖12是一個(gè)解釋本發(fā)明可編程控制器操作的圖表;圖13是表示本發(fā)明可編程控制器另一實(shí)施例的方框圖;圖14是表示圖13所示可編程控制器的數(shù)據(jù)通路的方框圖;圖15是解釋本發(fā)明可編程控制器操作的圖表;圖16是解釋本發(fā)明可編程控制器操作的圖表;圖17是表示本發(fā)明可編程控制器的又另一實(shí)施例的方框圖18是解釋本發(fā)明可編程控制器操作的圖表;圖19是表示本發(fā)明可編程控制器的再另一實(shí)施例的方框圖;圖20是解釋本發(fā)明可編程控制器操作的圖表;圖21是解釋本發(fā)明可編程控制器操作的圖表;圖22是表示本發(fā)明可編程控制器的再一實(shí)施例的方框圖;圖23是表示本發(fā)明可編程控制器的又再一實(shí)施例的方框圖;圖24是與圖4對(duì)應(yīng)的簡化方框圖;圖25是按照本發(fā)明第三實(shí)施例的可編程控制器的方框圖;圖26(a)~圖26(d)是一個(gè)定時(shí)關(guān)系圖,表示按照本發(fā)明第三實(shí)施例的可編程控制器的定時(shí)關(guān)系;圖27是按照本發(fā)明另一實(shí)施例的可編程控制器的方框圖;圖28(a)~圖28(c)是一個(gè)定時(shí)關(guān)系圖,表示圖24所示可編程控制器的定時(shí)關(guān)系的一個(gè)實(shí)例;圖29是按照本發(fā)明第四實(shí)施例的具有五級(jí)流水線結(jié)構(gòu)的可編程控制器的方框圖;圖30是一個(gè)定時(shí)關(guān)系圖,表示具有五級(jí)流水線結(jié)構(gòu)的可編程控制器的操作定時(shí)關(guān)系的第四實(shí)施例;圖31是一個(gè)狀態(tài)轉(zhuǎn)移圖,表示設(shè)在具有五級(jí)流水線結(jié)構(gòu)的可編程控制器的操作執(zhí)行控制塊SUBALU中的狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移的第四實(shí)施例;圖32是一個(gè)狀態(tài)轉(zhuǎn)移圖,表示設(shè)在具有五級(jí)流水線結(jié)構(gòu)的可編程控制器的操作執(zhí)行控制塊SUBALU中的狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移的另一實(shí)施例;圖33是按照本發(fā)明另一實(shí)施例的具有五級(jí)流水線結(jié)構(gòu)的可編程控制器的方框圖;圖34是具有五級(jí)流水線結(jié)構(gòu)的可編程控制器的示意結(jié)構(gòu)的第五實(shí)施例的方框圖;圖35是按照本發(fā)明第五實(shí)施例的具有五級(jí)流水線結(jié)構(gòu)的可編程控制器的方框圖;圖36(a)~圖36(c)是一個(gè)說明性的圖表,表示本發(fā)明可編程控制器的五級(jí)流水線結(jié)構(gòu);圖37是本發(fā)明的一個(gè)實(shí)施例的方框圖;圖38(a)~圖38(b)是一個(gè)定時(shí)關(guān)系圖,表示圖37所示可編程控制器的操作定時(shí)關(guān)系;圖39是本發(fā)明的另一實(shí)施例的方框圖;圖40是一個(gè)定時(shí)關(guān)系圖,表示位處理指令的操作定時(shí)關(guān)系,按照該位處理指令,從數(shù)據(jù)存儲(chǔ)器讀出數(shù)據(jù)的一個(gè)字并在已修改該數(shù)據(jù)的一位后把這樣讀出的數(shù)據(jù)再寫到數(shù)據(jù)存儲(chǔ)器中;圖41是在執(zhí)行圖40所示指令時(shí)電路中信號(hào)的定時(shí)關(guān)系圖;圖42是表示位處理指令的操作定時(shí)關(guān)系的一個(gè)定時(shí)關(guān)系圖,按照該位處理指令,從數(shù)據(jù)存儲(chǔ)器讀出數(shù)據(jù)的三個(gè)字并在執(zhí)行該指令時(shí)把這樣讀出的數(shù)據(jù)寫回到數(shù)據(jù)存儲(chǔ)器中;圖43是在執(zhí)行圖42所示指令時(shí)電路中信號(hào)的定時(shí)關(guān)系圖;圖44是在執(zhí)行微分指令時(shí)所獲得的電路的定時(shí)關(guān)系圖;圖45是表示圖44所示可編程控制器的操作定時(shí)關(guān)系的定時(shí)關(guān)系圖;圖46是定時(shí)關(guān)系圖,解釋在微分指令的相關(guān)危險(xiǎn)處理中引起的矛盾;圖47是定時(shí)關(guān)系圖,表示在執(zhí)行微分指令和位處理指令時(shí)的防范措施;圖48是一個(gè)圖表,表示本發(fā)明可編程控制器的操作碼PC-REHZDB的分配的一個(gè)實(shí)例;圖49是一個(gè)方框圖,表示本發(fā)明第六實(shí)施例的具有五級(jí)結(jié)構(gòu)的可編程控制器的第一和第二級(jí)的配置;圖50是表示本發(fā)明的具有五級(jí)結(jié)構(gòu)的可編程控制器的第三至第五級(jí)的配置的方框圖;圖51(a)~圖51(c)是表示本發(fā)明可編程控制器的流水線級(jí)的說明性例圖;圖52是表示可編程控制器的操作的定時(shí)關(guān)系圖;圖53是表示可編程控制器的操作的定時(shí)關(guān)系圖;圖54是一個(gè)方框圖,表示本發(fā)明第七實(shí)施例的具有五級(jí)流水線結(jié)構(gòu)的可編程控制器的第一和第二級(jí)的構(gòu)造;圖55是表示本發(fā)明的具有五級(jí)結(jié)構(gòu)的可編程控制器的第三至第五級(jí)的構(gòu)造的方框圖;圖56是示意圖,表示本發(fā)明的狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移;圖57是表示可編程控制器在執(zhí)行停止指令時(shí)的操作的定時(shí)關(guān)系圖;圖58是表示可編程控制器在因中斷而暫停時(shí)的操作的定時(shí)關(guān)系圖59(a)~圖59(c)表示根據(jù)可編程控制器的一個(gè)例子的順序指令和該指令的地址的一個(gè)例子;圖60是一個(gè)流程圖,表示圖7所示的順序指令的操作;圖61(a)~圖61(c)是在圖59所示可編程控制器的預(yù)置數(shù)據(jù)區(qū)中的計(jì)時(shí)器或計(jì)數(shù)器指令和該指令地址的一個(gè)例子;圖62是圖59所示計(jì)時(shí)器或計(jì)數(shù)器指令的操作的流程圖;圖63是本發(fā)明第八實(shí)施例的可編程控制器的電路圖;圖64是表示圖63所示可編程控制器的選擇器的連接的框圖;圖65是表示圖63所示的可編程控制器的操作的流程圖;圖66是根據(jù)本發(fā)明第九實(shí)施例的可編程控制器的電路圖;圖67是表示圖66所示的可編程控制器的選擇器的連接的框圖;圖68是表示圖66所示的可編程控制器的操作的流程圖。
圖1表示本發(fā)明的可編程控制器的一個(gè)五級(jí)流水線結(jié)構(gòu)。圖1是每一執(zhí)行級(jí)的流水線處理的細(xì)節(jié)的示意表示。在該圖中,由IF(指令取出)表示第一級(jí),在第一級(jí)由指令寄存器從指令存儲(chǔ)器中取出要執(zhí)行的下一條指令。在由ID/RF表示的第二級(jí)進(jìn)行指令解碼和從通用寄存器中取出一個(gè)值。在由EX表示的第三級(jí),執(zhí)行算術(shù)與邏輯操作、數(shù)據(jù)地址計(jì)算,或計(jì)算目標(biāo)分支的有效地址的分支操作。在由MEM表示的第四級(jí),訪問數(shù)據(jù)存儲(chǔ)器。最后,在由WB/BPU表示的第五級(jí),執(zhí)行位操作,針對(duì)通用寄存器的寫操作,或分支操作。
下面參見圖2描述本發(fā)明的指令集和指令結(jié)構(gòu)的一個(gè)例子。如圖2所示,指令包括訪問存儲(chǔ)器的存儲(chǔ)器存取指令(M型指令),執(zhí)行寄存器到寄存器操作的寄存器-寄存器操作指令(R型指令),執(zhí)行包含在指令中的立即值數(shù)據(jù)和存儲(chǔ)在通用寄存器中的值操作的立即值指令(I型指令),進(jìn)行比較和響應(yīng)比較結(jié)果執(zhí)行分支操作的分支指令(J型指令),以及執(zhí)行位操作處理的位操作指令(B型指令)。
M型指令包括op-code(操作碼)字段、隨后的src1(源1)字段、dst1(目的1)字段、以及偏移(offset)字段。例如,M型指令(即,裝入指令)進(jìn)行下面的操作。也就是說,將存儲(chǔ)在由src1字段規(guī)定的通用寄存器中的地址值與存儲(chǔ)在偏移字段的偏移值相加,得到有效地址。將以該有效地址存儲(chǔ)在數(shù)據(jù)存儲(chǔ)器中的值裝入由dst1字段規(guī)定的通用寄存器中。
R型指令包括op-code(操作碼)字段、隨后的src1(源1)字段、src2(源2)字段、dst1(目的1)字段以及功能字段。例如,R型指令有如下功能將存儲(chǔ)在由src1字段規(guī)定的通用寄存器中的值與存儲(chǔ)在由src2字段規(guī)定的通用寄存器中的值的操作結(jié)果裝入由dst1字段規(guī)定的通用寄存器中。例如,用功能字段規(guī)定操作方法說明的細(xì)節(jié)。
I型指令包括op-code(操作碼)、隨后的src1(源1)字段、dst1(目的1)字段以及立即數(shù)字段。例如,I型指令有如下功能將存儲(chǔ)在由src1字段規(guī)定的通用寄存器中的值與存儲(chǔ)在立即數(shù)字段中的值的操作結(jié)果裝入由dst1字段規(guī)定的通用寄存器中。
J型指令包括op-code(操作碼)、隨后的src1(源1)字段、src2(源2)字段以及偏移(offset)字段。例如,J字段有如下功能將存儲(chǔ)在偏移字段中的偏移值加到程序計(jì)數(shù)器并且根據(jù)存儲(chǔ)在由src1字段規(guī)定的通用寄存器中的值與存儲(chǔ)在由src2字段規(guī)定的通用寄存器中的值的比較結(jié)果執(zhí)行分支操作。
B型指令包括op-code(操作碼)字段和隨后的位操作指令字段。例如,B型指令具有將數(shù)據(jù)的規(guī)定位置設(shè)置成1的功能。
對(duì)于本發(fā)明的可編程控制器的指令,操作碼字段的位寬度是統(tǒng)一的,規(guī)定通用寄存器的兩個(gè)字段接在除B型指令外的指令的操作碼字段之后。使字段的位置統(tǒng)一以便規(guī)定兩個(gè)通用寄存器。結(jié)果是,能以下面將要描述的方式簡化特定設(shè)計(jì)的硬件結(jié)構(gòu)和流水線控制。
圖3表示本發(fā)明的可編程控制器的指令集的一個(gè)實(shí)施例。圖3是一張表,表示具有6位操作碼字段的指令集的一個(gè)實(shí)施例。在該表中,類型表示指令的類型,指令表示指令的名稱,操作表示指令的功能。
現(xiàn)參考圖4,描述根據(jù)本發(fā)明一個(gè)實(shí)施例的可編程控制器。圖4是一個(gè)方框圖,表示特定設(shè)計(jì)的供本發(fā)明可編程控制器使用的硬件結(jié)構(gòu)。在該圖中,IF部分1包括存儲(chǔ)指令的指令存儲(chǔ)器2和程序計(jì)數(shù)器PC,程序計(jì)數(shù)器PC對(duì)在接收來自程序計(jì)數(shù)器控制電路PCCAL的信號(hào)時(shí)就存儲(chǔ)要執(zhí)行的下一條指令的指令存儲(chǔ)器2的地址計(jì)數(shù)。根據(jù)程序計(jì)數(shù)器PC計(jì)數(shù)的地址保持從指令存儲(chǔ)器2中讀出的指令的指令寄存器IR作為流水線寄存器IF/ID起到以下兩個(gè)作用保持IF部分1的操作結(jié)果并且將該結(jié)果送到F一級(jí)的ID部分3。
ID部分3包括主要用于對(duì)指令的操作碼部分進(jìn)行解碼的指令解碼器CONTROL,由多個(gè)通用寄存器構(gòu)成的通用寄存器塊REGFILE;以及與指令解碼器CONTROL的后讀級(jí)相連以便轉(zhuǎn)換輸出到流水線寄存器ID/EX的信號(hào)的多路轉(zhuǎn)換器。在能用寄存器塊REGFILE中,RDREG1代表接收通用寄存器中的哪一個(gè)從RDDATA1輸出一個(gè)值的信號(hào)的一端。RDREG2代表接收規(guī)定通用寄存器中的哪一個(gè)從RDDATA2輸出一個(gè)值的信號(hào)的一個(gè)輸入端。WTREG代表接收一個(gè)規(guī)定從WTDATA輸入的值寫入通用寄存器中的哪一個(gè)的信號(hào)的輸入端。將指令解碼器CONTROL的輸出存儲(chǔ)在流水線寄存器ID/EX的WB、MEM和EX級(jí)。將從RDDATA1和RDDATA2輸出的值存儲(chǔ)在流水線寄存器ID/EX的src1和src2字段。將包含在指令中的立即值數(shù)據(jù)存儲(chǔ)在流水線寄存器ID/EX的IREX1,將M和I型指令的dst1字段的值存儲(chǔ)在流水線寄存器ID/EX的IREX2中。將R型指令的dst2字段的值存儲(chǔ)在流水線寄存器ID/EX的IREX3中。
EX部分4包括執(zhí)行算術(shù)和邏輯操作的算術(shù)與邏輯單元ALU(以后稱為ALU),用于將ALU的輸入之一切換到流水線寄存器ID/EX的src2字段的輸出或IREX1的輸出的切換控制部分ARGCAL(以后稱為ARGCAL),接在流水線寄存器ID/EX的WB和流水線寄存器EX/MEM的WB之間并將輸出轉(zhuǎn)換給流水線寄存器EX/MEM的WB的多路轉(zhuǎn)換器MUX2,接在流水線寄存器ID/EX的MEM和流水線寄存器EX/MEM的MEM之間并將輸出轉(zhuǎn)換給流水線寄存器EX/MEM的WB的多路轉(zhuǎn)換器MUX3,用于在存儲(chǔ)在IREX2中的值和存儲(chǔ)在IREX3中的值之間轉(zhuǎn)換并將結(jié)果輸出給流水線寄存器EX/MEM的WTREGMEM的多路轉(zhuǎn)換器MUX4。來自ALU的輸出存儲(chǔ)在流水線寄存器EX/MEM的AULRSLT中。流水線寄存器ID/EX的src2的輸出也保持在流水線寄存器EX/MEM的SRCMEM中。
MEM部分5包括用于控制訪問數(shù)據(jù)存儲(chǔ)器6的存儲(chǔ)器訪問接口7,以及接在流水線寄存器EX/MEM的WB和流水線寄存器MEM/WB的WB之間并將輸出轉(zhuǎn)換給流水線寄存器MEM/WB的WB的多路轉(zhuǎn)換器MUX5。將來自流水線寄存器EX/MEM的輸出保持在流水線寄存器MEM/WB的ALURSLT中,并且將此輸出用于訪問數(shù)據(jù)存儲(chǔ)器6。將來自流水線寄存器EX/MEM的MEM的輸出輸入給存儲(chǔ)器訪問接口7。將來自流水線寄存器EX/MEM的SRCMEM的輸出寫入數(shù)據(jù)存儲(chǔ)器6。將流水線寄存器EX/MEM的WTREGMEM的輸出輸出給流水線寄存器MEM/WB的WTREGMEM。數(shù)據(jù)存儲(chǔ)器6的RDDATA的輸出保持在流水線寄存器MEM/WB的MEMDATA中。
WB部分8包括執(zhí)行位操作的位操作單元BPU(此后稱為BPU),用于根據(jù)BPU的輸出使隨后的應(yīng)用指令無效(即,不執(zhí)行)的位累加器BITACC(此后稱為BITACC),以及用于將要寫入通用寄存器塊REGFILE的值切換到流水線寄存器MEM/WB的ALURSLT的輸出或者流水線寄存器MEM/WB的MEMDATA的輸出中的一個(gè)輸出。
在以圖4所示的方式構(gòu)成專門設(shè)計(jì)的硬件的情況下,如圖5所示的處理每一種類型指令的順序是必須的。在M型指令的情況下,在第一級(jí)執(zhí)行指令的取出,在第二級(jí)進(jìn)行指令解碼和從寄存器中取出數(shù)據(jù)。在第三級(jí)執(zhí)行數(shù)據(jù)地址的計(jì)算,在第四級(jí)訪問存儲(chǔ)器。在第五級(jí)進(jìn)行針對(duì)寄存器的寫操作。
在R型和I型指令的情況下,在第一級(jí)執(zhí)行指令的取出,以及在第二級(jí)進(jìn)行指令的解碼并從寄存器中取出一個(gè)數(shù)值。在第三級(jí)執(zhí)行算術(shù)與邏輯操作,在第五級(jí)進(jìn)行針對(duì)寄存器的寫操作。
在J型指令的情況下,在第一級(jí)執(zhí)行指令的取出,在第二級(jí)進(jìn)行指令的解碼并從寄存器中取出一個(gè)值。在第三級(jí)執(zhí)行用于比較目的算術(shù)與邏輯運(yùn)算,以及在第五級(jí)執(zhí)行分支操作。
在B型指令的情況下,在第一級(jí)執(zhí)行指令的取出,在第二級(jí)進(jìn)行指令的解碼。在第四級(jí)從數(shù)據(jù)存儲(chǔ)器6中讀數(shù)據(jù),在第五線執(zhí)行位操作處理。
下面就一個(gè)流水線級(jí)描述圖4所示的本發(fā)明的可編程控制器的每一指令處理級(jí)的操作。首先,用更新的程序計(jì)數(shù)器PC的值作為指令存儲(chǔ)器2的地址,并且將從指令存儲(chǔ)器2中讀取的指令裝入流水線寄存器IF/ID。除J型指令改變指令地址的情況外,將在下一時(shí)鐘的上升沿增加1的值作為程序計(jì)數(shù)器PC的值存儲(chǔ)。類似地,將新的指令一條接一條地裝入程序計(jì)數(shù)器PC。
在第二級(jí)的指令解碼操作中由指令解碼器CONTROL的組合電路主要對(duì)裝入指令的操作碼部分解碼。由此得到的解碼信號(hào)包括所有的用在隨后的第三級(jí)、第四級(jí)和第五級(jí)中的指令執(zhí)行說明。在時(shí)鐘的下一上升沿將指令執(zhí)行說明裝入流水線寄存器ID/EX的EX、MEM、和WB級(jí)。同時(shí)從由包含在指令中的src1和src2字段規(guī)定的寄存器中讀取數(shù)據(jù)。還將這樣讀出的數(shù)據(jù)存儲(chǔ)在流水線寄存器ID/EX的src1和src2字段。進(jìn)一步地,包含在指令中的立即(偏移)字段、M和I型指令的dst1字段,以及R型指令的dst1字段也保持在流水線寄存器ID/EX的IREX1、IREX2以及IREX3中。
在第三級(jí),ALU對(duì)保持在流水線寄存器ID/EX中的數(shù)據(jù)執(zhí)行算術(shù)與邏輯運(yùn)算。要運(yùn)算的數(shù)據(jù)的組合如下(1)要裝入并且在ALU中須經(jīng)算術(shù)與邏輯運(yùn)算的一個(gè)數(shù)據(jù)是src1字段。
(2)要裝入并且在ALU中須經(jīng)算術(shù)與邏輯運(yùn)算的另一數(shù)據(jù)按下面的方式由ARGCAL的值來選取。還按需要使數(shù)據(jù)項(xiàng)經(jīng)受位擴(kuò)展。
(a)對(duì)于R和J型指令……src2(b)對(duì)于M和I型指令……IREX1在R和I型指令的情況下,通過向ALU發(fā)出相應(yīng)的操作碼使由ALUOP標(biāo)志的操作執(zhí)行說明經(jīng)受所需要的操作。例如,圖6示出了操作碼ALUOP賦值的一個(gè)例子。
在M型指令的情況下,由ALU計(jì)算要訪問的數(shù)據(jù)的地址。結(jié)果是,ALUOP命令A(yù)LU進(jìn)行加法處理。換句話說,通過將存儲(chǔ)在IREX1中的偏移字段中包含的地址與src1的寄存器的值相加來得到數(shù)據(jù)存儲(chǔ)器6的有效地址,這意味著是一個(gè)變址操作。只要將接收0輸入值的通用寄存器規(guī)定為scr1字段,就能將在偏移字段中包含的地址規(guī)定為絕對(duì)地址。
在J型指令的情況下,通過在ALU中比較來確定分支狀態(tài)。為此,ALUOP命令A(yù)LU在此例中執(zhí)行減法。換句話說,從src1字段規(guī)定的寄存器的值中減去由src2字段規(guī)定的寄存器的值,并將相減得到的結(jié)果與分支狀態(tài)進(jìn)行相互比較。對(duì)于J型指令,為了簡便起見,將除執(zhí)行用于分支的比較的電路以外的電路從圖4所示的方框圖中省去。
在下一時(shí)鐘信號(hào)的上升沿將ALU的操作結(jié)果保持在流水線寄存器EX/MEM的ALURSLT中。與此同時(shí),src2字段完全照原樣保持在流水線寄存器EX/MEM的SRCMEM中。由多路轉(zhuǎn)換器MUX4選擇以下二者之一或者是對(duì)于M和I型指令的用于保持dst1字段的IREX2或者是對(duì)于R型指令的用于保持dst2字段的IREX3。這樣選擇的一個(gè)結(jié)果保持在流水線寄存器EX/MEM的WTRGMEM中。在M和I型指令的情況下選擇控制信號(hào)REGDST為0,但在R型指令的情況下選擇該控制信號(hào)為1。
在第四級(jí)的存儲(chǔ)器訪問處理中,根據(jù)流水線寄存器EX/MEM中保留的值訪問存儲(chǔ)器。換句話說,用ALURSLT訪問數(shù)據(jù)存儲(chǔ)器6,用SRCMEM將數(shù)據(jù)寫到存儲(chǔ)器中。普通位處理指令包括從數(shù)據(jù)存儲(chǔ)器中讀取數(shù)據(jù),因而在這一級(jí)以與處理大量位(字)情況相同的方式來執(zhí)行訪問存儲(chǔ)器的操作。
由流水線寄存器EX/MEM的MEM控制針對(duì)數(shù)據(jù)存儲(chǔ)器6的讀/寫操作。由存儲(chǔ)器存取接口7產(chǎn)生實(shí)際的存儲(chǔ)器讀/寫時(shí)鐘,并將這樣產(chǎn)生的時(shí)鐘輸出給數(shù)據(jù)存儲(chǔ)器6。
對(duì)于位處理指令,BPU在第五線執(zhí)行由BPUOP指定的位處理。由BITACC在下一時(shí)鐘信號(hào)的上升沿保持位處理的結(jié)果。對(duì)于R和I型指令,將ALURSLT的值寫入通用寄存器塊REGFILE中。對(duì)于M型裝入指令,將MEMDATA的值寫入通用寄存器塊REGFILE。在此時(shí),如果BITACC的值為1,則執(zhí)行隨后的應(yīng)用指令(字處理)。另一方面,如果BITACC的值為0,則必須使隨后的應(yīng)用指令(字處理)無效。結(jié)果是,能實(shí)現(xiàn)將BITACC數(shù)據(jù)的反饋?zhàn)鳛橛糜诋?dāng)前級(jí)的流水線的控制信號(hào)。換句話說,可編程控制器附加有使下一流水線級(jí)的執(zhí)行說明信息取消的電路。采用下列形式的一個(gè)電路作為這樣一個(gè)電路的例子用于執(zhí)行說明信息和BITACC的邏輯乘(與)的電路;或者多路轉(zhuǎn)換器(MUX1,MUX2,MUX3和MUX4),所述多路轉(zhuǎn)換器用BITACC作為圖4中所示的選擇信號(hào)并且選擇在前級(jí)的流水線寄存器中保留的控制信號(hào)或者選擇使下一應(yīng)用指令(即字處理)無效的執(zhí)行說明信息(在圖5所示結(jié)構(gòu)的例子中為0)作為保持執(zhí)行說明信息(例如流水線寄存器ID/EX的WB)的每一流水線寄存器的區(qū)域的輸入。
從前面描述的電路操作中能看出,在每個(gè)時(shí)鐘通過移位流水線寄存器ID/EX的EX,M和WB將執(zhí)行說明信息傳送到下一級(jí)。因而,能實(shí)現(xiàn)簡單而有效地控制指令的執(zhí)行。此外,將本發(fā)明的可編程控制器設(shè)置成執(zhí)行協(xié)調(diào)的處理,也就是說,在當(dāng)前級(jí)處理完成之后將每一級(jí)處理的數(shù)據(jù)保留在下一流水線寄存器中。由此,能使專門設(shè)計(jì)的硬件的數(shù)據(jù)通路簡單然而有效。
可由例如前沿型D觸發(fā)電路實(shí)現(xiàn)流水線寄存器IF/ID、ID/EX、EX/MEM、MEM/WB、WB/IE和PC。進(jìn)一步地,可由例如觸發(fā)電路或存儲(chǔ)器形成通用寄存器塊REGFILE。其它電路元件可由組合電路來形成。
用圖4所示的五級(jí)流水線結(jié)構(gòu),下面將參考圖7所示的方框圖描述用于執(zhí)行寄存器到寄存器操作的數(shù)據(jù)通路。通過兩個(gè)流水線寄存器EX/MEM和MEM/WB的每一個(gè)的ALURSLT將由ALU執(zhí)行的操作結(jié)果寫入通用寄存器塊REGFILE的任一通用寄存器中。如果將一個(gè)值寫入某一通用寄存器的指令緊接在用此通用寄存器的該值作為變?cè)闹噶钪?,例如,存?chǔ)在通用寄存器R1中的值和存儲(chǔ)在通用寄存器R2中的值進(jìn)行邏輯乘(即,對(duì)它們進(jìn)行與操作)。進(jìn)一步地,如果用于將與操作的結(jié)果寫入通用寄存器R3的指令(AND R1R2 R3)緊接在用于實(shí)現(xiàn)通用寄存器R3中存儲(chǔ)的值和存儲(chǔ)在通用寄存器R4的值的邏輯和(OR)(即,使這些值經(jīng)過OR操作)并將OR操作的結(jié)果寫入通用寄存器R5的指令(OR R3 R4 R5)之后,則用于執(zhí)行OR操作的變?cè)猂3必須是在OR操作之前剛執(zhí)行的AND操作的結(jié)果。然而,為了OR操作,在寄存器取數(shù)操作時(shí)將執(zhí)行OR操作所必須的要寫入通用寄存器R3中的值存儲(chǔ)在流水線寄存器EX/MEM中。正因?yàn)槿绱?,問題出現(xiàn)在將操作結(jié)果實(shí)際寫入通用寄存器之前操作結(jié)果變成為后來的指令所必需的時(shí)候。
為了解決在訪問通用寄存器時(shí)出現(xiàn)的這種流水線相關(guān)危險(xiǎn),必須插入所需數(shù)量的NOP指令直到消除流水線相關(guān)危險(xiǎn)為止。插入NOP指令不需對(duì)電路結(jié)構(gòu)進(jìn)行修改,因而可容易地實(shí)現(xiàn)。然而,插入NOP指令導(dǎo)致指令數(shù)目相應(yīng)增加,這又增加了程序的大小。
現(xiàn)在將參考圖8至12描述本發(fā)明第二實(shí)施例的可編程控制器?;趫D4所示可編程控制器的電路來描述本發(fā)明特有的結(jié)構(gòu)。按需要將省去該結(jié)構(gòu)的其它部分的描述和解釋。首先,參考圖8描述和于寄存器到寄存器操作的數(shù)據(jù)通路。正如前面所述,圖7所示的常規(guī)數(shù)據(jù)通路有這樣一個(gè)問題如果在將寄存器到寄存器操作的結(jié)果寫入通用寄存器塊REGFILE的一個(gè)通用寄存器之前下一指令涉及該通用寄存器,則從寄存器中取出的數(shù)據(jù)是未經(jīng)更新的并因此變得無用。因而,通過配置用在流水線操作的第二級(jí)中的ALU上用于選擇變?cè)倪x擇裝置SRCFB給本發(fā)明的可編程控制器提供附加的數(shù)據(jù)通路,如圖8的方框圖所示。
如圖8所示,將一個(gè)通用寄存器REGFILE的輸出(即,一個(gè)通用寄存器的輸出)、第三級(jí)的ALU的輸出、以及一個(gè)流水線寄存器EX/MEM的ALURSLT的輸出(即,在第四級(jí)中采用的ALU的輸出)與選擇裝置SRCFB的輸入相連。選擇裝置SRCFB輸出與流水線寄存器ID/EX的SRC1的輸入相連。將選擇裝置設(shè)置成能從通用寄存器的輸出、ALU的輸出、以及流水線寄存器EX/MEM的ALURSLT(即,提供給第四級(jí)的ALU的輸出)中選擇一個(gè)保持用于ALU的一個(gè)變?cè)囊斎虢o流水線寄存器ID/EX的SRC1的值。圖8僅表示了與ALU的兩個(gè)變?cè)幌噙B并與由SRC1執(zhí)行的從寄存器中取出數(shù)據(jù)有關(guān)的數(shù)據(jù)通路。
圖9是一個(gè)方框圖,表示圖8所示的數(shù)據(jù)通路的更詳細(xì)的結(jié)構(gòu)。在該圖中僅示出了與本發(fā)明有關(guān)的那些部分。如圖所示,在第二級(jí)(以后稱為ID級(jí))設(shè)置選擇裝置SRCFB。將MUX的輸出和流水線寄存器EX/MEM的ALURSLT的輸出分別作為信號(hào)EX-SRC和MEM-SRC傳送給選擇裝置。將通用寄存器堆REGFILE的讀寄存器標(biāo)志信號(hào)輸出給選擇裝置SRCFB(也將該讀寄存器標(biāo)志信號(hào)饋入端RDSEL1,該端RDSEL1接收用于規(guī)定從通用寄存器堆REGFILE的RDDATA1中輸出一個(gè)值的通用寄存器的信號(hào))。
EX-SEL信號(hào)是第三級(jí)(以后稱為EX級(jí))的寫寄存器標(biāo)志信號(hào),而MEM-SEL信號(hào)是第四級(jí)(以后稱為MEM級(jí))的寫寄存器標(biāo)志信號(hào)。將流水線寄存器ID/EX的IREX2或IREX3的值作為EX級(jí)的寫寄存器標(biāo)志信號(hào)EX-SEL輸出給選擇裝置SRCFB。進(jìn)一步地,將流水線寄存器EX/MEM的WTREG的值作為MEM級(jí)的寫寄存器標(biāo)志信號(hào)MEM-SEL輸出給選擇裝置SRCFB。
將存儲(chǔ)在流水線寄存器ID/EX的WB中的值作為EX級(jí)的一個(gè)寄存器寫有效信號(hào)EX-WTEN輸出給選擇裝置SRCFB。將存儲(chǔ)在流水線寄存器EX/MEM的WB中的值作為MEM級(jí)的寄存器寫有效信號(hào)MEM-WTEN輸出給選擇裝置SRCFB。將通用寄存器堆REGFILE的輸出端RDDATA1的輸出作為信號(hào)ID-SRC輸出給選擇裝置SRCFB。選擇裝置SRCFB的輸出與流水線寄存器ID/EX的SRC1相連。圖9表示一個(gè)電路,在該電路中將前面指令的操作結(jié)果再返回給流水線寄存器ID/EX的SRC1。
例如,由兩個(gè)多路轉(zhuǎn)換器的組合構(gòu)成選擇裝置SRCBF,如圖10所示,并且將選擇裝置SRCFB設(shè)置成能選擇要輸出給流水線寄存器ID/EX的SRC1的數(shù)據(jù)。在圖10中,由第一多路轉(zhuǎn)換器選擇信號(hào)ID-SRC或信號(hào)MEM-SRC,由第二多路轉(zhuǎn)換器選擇由第一多路轉(zhuǎn)換器如此選擇的信號(hào)或信號(hào)EX-SRC。
下面參照?qǐng)D11描述圖9所示的電路在有因訪問通用寄存器而產(chǎn)生的流水線相關(guān)危險(xiǎn)存在的情況下的操作。在圖11所示的處理中,執(zhí)行三條寄存器的寄存器指令(即AND R1 R3 R4,OR R1 R3 R5,和AND R2 R3 R6),其中,根據(jù)第一條AND指令(即,AND R1 R2 R3)更新通用寄存器R3的值,并用通用寄存器R3的更新值作為變?cè)?。以下的描述基于如下假設(shè)一級(jí)的處理時(shí)間是1并且具有與參考時(shí)鐘信號(hào)PHI 1的一個(gè)周期相對(duì)應(yīng)的長度,并且與參考時(shí)鐘PHI 1的上升時(shí)間同步地執(zhí)行在每一級(jí)的處理。下面的描述進(jìn)一步基于如下假設(shè)與第一條指令相應(yīng)的處理的開始時(shí)間是時(shí)刻0,并取每一級(jí)的停止時(shí)間分別為時(shí)刻1至?xí)r刻8。
首先,描述第一條指令(AND指令)的處理。在時(shí)刻1將第一條指令從指令存儲(chǔ)器中讀到指令寄存器IR(IF/ID/IR)中。在時(shí)刻2分別將通用寄存器R1和R2的值存儲(chǔ)在流水線寄存器ID/EX的SRC1(ID/EX/SRC1)和SRC2(ID/EX/SRC 2)中,由此準(zhǔn)備好用于ALU的變?cè)?。在時(shí)刻3 ALU執(zhí)行AND操作,并且將要存在通用寄存器R3中的操作結(jié)果存儲(chǔ)在流水線寄存器EX/MEM的ALURSLT(EX/MEM/ALURSLT)中。在時(shí)刻4將存儲(chǔ)在流水線寄存器EX/MEM的ALURSLT(EX/EME/ALURSLT)中的值存儲(chǔ)到流水線寄存器MEM/WB的ALURSLT(MEM/WB/ALURSLT)中,為在通用寄存器R3中存儲(chǔ)數(shù)值作準(zhǔn)備。在時(shí)鐘信號(hào)PHI 3的上升沿(即,時(shí)間4.5)將存儲(chǔ)在流水線寄存器MEM/WB的ALURSLT(MEM/WB/ALURSLT)中的值寫入通用寄存器堆REGFILE的通用寄存器R3中,其中時(shí)鐘信號(hào)PHI 3與參考時(shí)鐘信號(hào)PHI 1相位相差180°。
其次,描述第二條指令(AND指令,AND R1 R3 R4)的處理。通用寄存器R3的值在時(shí)刻3開始的EX級(jí)是必要的。在此情況下,通過選擇裝置SRCFB將ALU的輸出反饋給EX級(jí),并且在時(shí)刻3將該輸出存儲(chǔ)在流水線寄存器ID/EX的SRC 2(ID/EX/SRC2)中。
對(duì)于第三條指令(OR指令,OR R1 R3 R5),通用寄存器R3的值在時(shí)刻4開始的EX級(jí)是必要的。在此情況下,通過選擇裝置將存儲(chǔ)在流水線寄存器EX/MEM的ALURSLT(EX/MEM/ALURSLT)中的值反饋給EX級(jí),并將該值存儲(chǔ)在流水線寄存器ID/EX的SRC 2(ID/EX/SRC 2)中。
對(duì)于第四條指令(AND指令,AND R2 R3 R6),在時(shí)刻4.5將第一條AND指令的結(jié)果寫入通用寄存器R3中。從通用寄存器R3中取出該值并將該值提供給流水線寄存器ID/EX的SRC 2(ID/EX/SRC2),借此處理該值。
如上所述,在時(shí)刻4.5將第一條指令的操作結(jié)果寫入通用寄存器R3。因而,對(duì)于必須在時(shí)刻4.5之前從通用寄存器中取值的第二和第三條指令不可能從通用寄存器R3中讀出正確的值。為此,在第二條指令情況下(即,當(dāng)由緊接著的前一指令來更新要用作為變?cè)耐ㄓ眉拇嫫鞯闹档臅r(shí)候),用ALU的輸出作為變?cè)嫱ㄓ眉拇嫫鞯妮敵?。進(jìn)一步地,在第三條指令的情況下(即,當(dāng)用由當(dāng)前指令之前再之前的指令來更新要用作變?cè)耐ㄓ眉拇嫫鞯闹档臅r(shí)候),用存儲(chǔ)在流水線寄存器EX/MEM的ALURSLT中的值代替通用寄存器的輸出作為變?cè)?br>
下面描述判斷是否由在先指令更新存儲(chǔ)在通用寄存器中并用作ALU的變?cè)闹档姆椒āS锌赡苡赏ㄓ眉拇嫫鞫裄EGFILE的讀寄存器標(biāo)志信號(hào)ID-SEL、EX級(jí)的寫寄存器標(biāo)志信號(hào)EX-SEL、以及MEM級(jí)的寫寄存器標(biāo)志信號(hào)MEM-SEL來確定通用寄存器中的哪一個(gè)成為對(duì)象寄存器。
也能由EX級(jí)的寄存器寫有效信號(hào)EX-WTEN和MEM級(jí)的寄存器寫有效信號(hào)MEM-WTEN來確定是否針對(duì)通用寄存器執(zhí)行寫操作。簡言之,如果從寄存器中取值所需要的讀寄存器號(hào)數(shù)(即,通用寄存器堆REGFILE的讀寄存器標(biāo)志信號(hào)ID-SEL)和EX級(jí)的寫寄存器號(hào)數(shù)(即,EX級(jí)的寫寄存器標(biāo)志信號(hào)EX-SEL)之間匹配,并且如果EX級(jí)的寄存器寫有效信號(hào)EX-WTEN為“有效”,則用EX的寄存器寫數(shù)據(jù)(即,ALU的輸出)作為從寄存器取值的一個(gè)信號(hào),代替通用寄存器的輸出。進(jìn)一步地,如果從寄存器中取一個(gè)值所需要的讀寄存器號(hào)數(shù)(即,通用寄存器堆REGFILE的讀寄存器標(biāo)志信號(hào)ID-SEL)和MEM級(jí)的寫寄存器標(biāo)志號(hào)數(shù)據(jù)MEM-SEL之間匹配,并且如果MEM級(jí)的寄存器寫有效信號(hào)MEM-WTEN為“有效”,那么用MEM級(jí)的寄存器寫數(shù)據(jù)(即,流水線寄存器EX/MEM的ALURSLT的輸出)作為用于從寄存器中取出一個(gè)值的一個(gè)信號(hào),代替通用寄存器的輸出。
此外,如果所有從寄存器中取出一個(gè)值所需的讀寄存器號(hào)數(shù)(即,通用寄存器堆REGFILE的讀寄存器標(biāo)志信號(hào)ED-SEL)、EX級(jí)的寫寄存器號(hào)數(shù)(即,EX級(jí)的寫寄存器標(biāo)志信號(hào)EX-SEL)、以及MEM級(jí)的寫寄存器標(biāo)志號(hào)數(shù)MEM-SEL之間都匹配,并且如果EX級(jí)的寄存器寫有效信號(hào)EX-WTEN和MEM級(jí)的寄存器寫有效信號(hào)MEM-WTEN都為“有效”,則將EX級(jí)的寄存器寫數(shù)據(jù)(即,ALU的輸出)用作從寄存器中取出一個(gè)值的一個(gè)信號(hào)。這可歸因于如下事實(shí)如果由緊接在當(dāng)前指令之前的指令和在當(dāng)前指令之前再之前的指令更新要用作某一指令的變?cè)耐ㄓ眉拇嫫?,則必須將由緊接在前指令更新的結(jié)果用作變?cè)?br>
下面參考圖12描述處理依次的四條指令的方法,用此方法依次地改寫通用寄存器R3的值。為了簡便起見,下面的描述基于如下假設(shè)通用寄存器是8位長,00001111(0×0F)和01010101(0×55)分別存儲(chǔ)在通用寄存器R1和R2中。對(duì)于第一條指令(AND R1 R2 R3),在時(shí)刻2分別將0×0F和0×55存貯在流水線寄存器ID/EX的SRC1(ID/EX/SRC1)和SRC 2(ID/EX/SRC2)中。在時(shí)刻3將操作結(jié)果0×05存貯在流水線寄存器EX/MEM的ALURSLT(EX/MEM/ALURSLT)中。在時(shí)刻4將操作結(jié)果0×55存貯在流水線寄存器MEM/WB的ALURSLT(EX/MEM/ALURSLT)中。在時(shí)刻4.5將操作結(jié)果0×05寫入通用寄存器R3。
對(duì)于第二條指令(OR R3 R2 R3),在時(shí)刻3通過SRCFB將存儲(chǔ)在流水線寄存器EX/MEM的ALURSLT中的操作結(jié)果0×05反饋給流水線寄存器ID/EX的SRC1(ID/EX/SRC1)。在時(shí)刻4將該指令的操作結(jié)果(0×55)存儲(chǔ)在流水線寄存器EX/MEM的ALURSLT(EX/MEM/ALURSLT)中。
對(duì)于第三條指令(XOR R3 R1 R3),在時(shí)刻4將存儲(chǔ)在流水線寄存器EX/MEM的ALURSLT(EX/MEM/ALURST)中。
下面參考圖13所示的方框圖描述本發(fā)明的另一個(gè)不同實(shí)施例的可編程控制器。在圖8所示的可編程控制器中,在流水線操作的第二級(jí)(即ID級(jí))設(shè)置了選擇用在ALU中變?cè)臄?shù)據(jù)通路。正相反,按圖13所示的實(shí)施例,在第三級(jí)(即,EX級(jí))設(shè)置數(shù)據(jù)通路以完成與圖8所示實(shí)施例相同的功能。
如圖13所示,在流水線操作的第三級(jí)設(shè)置選擇裝置SRCFB,用于選擇用在ALU中的變?cè)?。從第二?jí)輸出給ALU的一個(gè)輸入端的值(即,流水線寄存器ID/EX的SRC 1的輸出)、提供給第四級(jí)的ALU的輸出(即,流水線寄存器EX/MEM的ALURSLT的輸出)、以及提供給第五級(jí)的ALU的輸出(即,流水線寄存器MEM/WB的ALURSLT的輸出)與選擇裝置SRCFB的輸入端相連,并且SRCFB的輸出與ALU的一個(gè)輸入相連,選擇裝置SRCFB設(shè)置成能從下列值中選擇一個(gè)要輸入給ALU的一個(gè)輸入端的值從第二級(jí)輸出給ALU的一個(gè)輸入端的值(即,流水線寄存器ID/EX的SRC1的輸出)、提供給第四級(jí)的ALU的輸出(即,流水線寄存器EX/MEM的ALURSLT的輸出)、以及提供給第五級(jí)的ALU的輸出(即,流水線寄存器MEM/WB的ALURST的輸出)。圖8僅表示了與ALU的兩個(gè)變?cè)幌噙B的數(shù)據(jù)通路,它與由SRC1執(zhí)行的從通用寄存器中取出數(shù)據(jù)有關(guān)。
圖14是方框圖,表示圖13所示的數(shù)據(jù)通路的更詳細(xì)的結(jié)構(gòu)。在圖中僅示出了與本發(fā)明有關(guān)的部分。如圖所示,將選擇裝置SRCFB設(shè)置在第三級(jí)(以后稱為EX級(jí))。將流水線寄存器EX/MEM的ALURSLT的輸出和流水線寄存器EX/WB的ALURSLT的輸出分別作為信號(hào)MEM-SRC和WB-SRC饋送給選擇裝置SRCFB。進(jìn)一步地,將流水線寄存器ID/EX的SRC1的輸出輸出給選擇裝置SRCFB。
MEM-SEL信號(hào)為MEM級(jí)的寫寄存器標(biāo)志信號(hào),WB-SEL信號(hào)為WB級(jí)的寫寄存器標(biāo)志信號(hào)。EX-SEL信號(hào)為EX級(jí)的寫寄存器標(biāo)志信號(hào)。將流水線寄存器EX/MEM的WTREG的值作為MEM級(jí)的寫寄存器標(biāo)志信號(hào)MEM-SEL輸出給選擇裝置SRCFB。將流水線寄存器MEM/WB的WTREG的輸出值作為WB級(jí)的寫寄存器標(biāo)志信號(hào)WB-SEL輸出給選擇裝置SRCFB。將流水線寄存器ID/EX的IREX2或IREX3的值作為EX級(jí)的寫寄存器標(biāo)志信號(hào)EX-SEL輸出給選擇裝置SRCFB。
將存貯在流水線寄存器EX/MEM的WB中的值作為MEM級(jí)的寄存器寫有效信號(hào)MEM-WTEN輸出給選擇裝置SRCFB,將存儲(chǔ)在流水線寄存器MEM/WB的WB中的值作為寄存器寫有效信號(hào)WB-WTEN輸出給選擇裝置。選擇裝置SRCFB的輸出與ALU的兩個(gè)輸入端之一相連。圖14表示將在先指令的操作結(jié)果返回給ALU的兩個(gè)輸入端之一的電路。
參見圖15,描述圖13所示電路的操作。下面將描述圖15所示電路在有因訪問通用寄存器而形成的流水線相關(guān)危險(xiǎn)的情況下的操作。執(zhí)行兩條寄存器到寄存器指令(即,AND R1 R3 R4,OR R1 R3 R5)其中根據(jù)第一條AND指令(即,AND R1 R2 R3)更新通用寄存器R3的值,并且用通用寄存器R3的更新值作為一個(gè)變?cè)?br>
首先,描述第一條指令(AND指令)的處理。在時(shí)刻1將第一條指令從指令存儲(chǔ)器中讀到指令寄存器IR(IF/ID/IR)中。在時(shí)刻2分別將通用寄存器R1和R2的值存儲(chǔ)在流水線寄存器(ID/EX)的SRC 1(ID/EX/SRC 1)和SRC2(ID/EX/SRC 2)中,由此準(zhǔn)備用于ALU的變?cè)T跁r(shí)刻3 ALU執(zhí)行AND操作,并且將要存貯在通用寄存器R3中的操作結(jié)果存儲(chǔ)在通用寄存器EX/MEM的ALURSLT(EX/MEM/ALURSLT)中。在時(shí)刻4將存儲(chǔ)在流水線寄存器EX/MEM的ALURSLT(EX/MEM/ALURSLT)中的值存儲(chǔ)在流水線寄存器MEM/WB的ALURSLT(MEM/WB/ALURSLT)中,為在通用寄存器R3中存儲(chǔ)數(shù)值作準(zhǔn)備。在時(shí)鐘信號(hào)PHI 3的上升沿(即,時(shí)間4.5)將存儲(chǔ)在流水線寄存器MEM/WB的ALURSLT(MEM/WB/ALURSLT)中的值寫入通用寄存器堆REGFILE的通用寄存器R3中。
然后,描述第二條指令(AND指令,AND R1 R3 R4)的處理。通用寄存器R3的值在時(shí)刻3開始的EX級(jí)中是必要的。在此情況下,通過選擇裝置SRCFB將流水線寄存器EX/MEM的ALURSLT(EX/MEM/ALURSLT)的輸出作為SRC 2的輸出反饋和輸入到ALU的兩個(gè)輸入端之一。
對(duì)于第三條指令(OR指令,OR R1 R3 R5),通用寄存器R3的值在時(shí)刻4開始的EX級(jí)中是必需的。在此情況下,通過選擇裝置將存儲(chǔ)在流水線寄存器EX/MEM的ALURSLT(EX/MEM/ALURSLT)中的值作為SRC 2的輸出反饋并輸入到ALU的兩個(gè)輸入端之一。
在圖8和13所示的可編程控制器中,由在當(dāng)前指令之前的緊接著的在前指令或隔一個(gè)的指令修改用于提供某一指令的變?cè)耐ㄓ眉拇嫫?,不從通用寄存器中取?shù)據(jù)而從流水線寄存器上的某一位置反饋數(shù)據(jù)。但是,如果前面的指令是裝入(LOAD)指令,則對(duì)象數(shù)據(jù)僅在MEM級(jí)完成訪問存儲(chǔ)器之后出現(xiàn)在流水線寄存器上。下面參見圖16描述電路在下面情況下的操作,將要由LOAD指令更新的通用寄存器的一個(gè)值用作后面指令的一個(gè)變?cè)?br>
第一裝入指令作出以下指示將0×0005加到存儲(chǔ)在通用寄存器R0的值來計(jì)算要讀出數(shù)據(jù)的存儲(chǔ)器的地址,并且將從該地址存儲(chǔ)在存儲(chǔ)器的值存儲(chǔ)在通用寄存器R3中。與LOAD指令相應(yīng)的數(shù)據(jù)在MEM級(jí)的停止點(diǎn)(即時(shí)刻4)之前沒有出現(xiàn)在流水線寄存器上。因此,緊接在LOAD指令之后的AND指令不可能在時(shí)刻4之前從流水線寄存器中取數(shù)據(jù)。
換句話說,在第五級(jí)(即WB級(jí))的操作過程中將一個(gè)值寫入通用寄存器REGFILE中。將在時(shí)刻4出現(xiàn)在流水線寄存器MEM/WB中的數(shù)據(jù)存儲(chǔ)器的值(流水線寄存器MEM/WB的MEMDATA)在時(shí)間4.5存儲(chǔ)在通用寄存器R3中。根據(jù)后面的指令在時(shí)刻5取出存儲(chǔ)在通用寄存器R3的值。
如果在前的指令要求執(zhí)行ALU的操作,如寄存器到寄存器操作或立即操作,則要寫入通用寄存器中的數(shù)據(jù)存在于流水線寄存器上。然而,在LOAD指令的情況下,直到在第四級(jí)(即MEM級(jí))從數(shù)據(jù)存儲(chǔ)器中讀出一個(gè)值才能獲得該數(shù)據(jù)。因此,必須暫停執(zhí)行隨后的指令直到將正確的值供給寄存器為止。圖17表示實(shí)現(xiàn)上述功能的可編程控制器的一個(gè)實(shí)施例。
圖17表示了一個(gè)電路,在該電路中用于控制指令執(zhí)行的執(zhí)行控制塊HDU設(shè)置在第二級(jí)。執(zhí)行控制塊HDU接收從流水線寄存器IF/ID反饋的兩個(gè)讀寄存器標(biāo)志信號(hào)(與通用寄存器堆REGFILE的RDREG 1和RDREG 2對(duì)應(yīng)的信號(hào))、從流水線寄存器ID/EX反饋的寫寄存器標(biāo)志信號(hào)IREX 2和數(shù)據(jù)存儲(chǔ)器存取控制信號(hào)MEM、以及從流水線寄存器EX/MEM反饋的寫寄存器標(biāo)志信號(hào)WTREG和數(shù)據(jù)存儲(chǔ)器存取控制信號(hào)MEM。
可以看出,由緊接在前的LOAD指令在下列狀態(tài)下更新要求當(dāng)前在ID級(jí)對(duì)指令解碼的通用寄存器。換句話說,ID級(jí)的讀寄存器號(hào)數(shù)(即讀寄存器)和EX級(jí)的寫寄存器號(hào)數(shù)(即流水線寄存器ID/EX的寫寄存器標(biāo)志信號(hào)IREX 2)存在匹配,并由EX級(jí)的存儲(chǔ)器訪問來讀數(shù)據(jù)(即流水線寄存器ID/EX的數(shù)據(jù)存儲(chǔ)器存取控制信號(hào)MEM)。類似地,如果用MEM級(jí)的對(duì)應(yīng)信號(hào)進(jìn)行相同的檢驗(yàn),則能確定是否由當(dāng)前指令之前再之前的LOAD指令來更新要求當(dāng)前在ID級(jí)對(duì)指令解碼的通用寄存器。如果已經(jīng)檢測(cè)出由當(dāng)前指令之前再之前的LOAD指令或緊接在當(dāng)前指令之前的LOAD指令更新要求當(dāng)前對(duì)指令解碼的通用寄存器,那么需暫停執(zhí)行當(dāng)前正在解碼的指令。為此,執(zhí)行控制塊HDU輸出控制信號(hào)PC-HZD和ID-HZD。如果PC-HZD信號(hào)為零,按通常的方式增加程序計(jì)數(shù)器的計(jì)數(shù)值。然而,如果PC-HZD信號(hào)為1,則使程序計(jì)數(shù)器安排成不變值(即,根據(jù)控制信號(hào)PC-HZD使加到程序計(jì)數(shù)器PC上的值在0和1之間轉(zhuǎn)換)。如果ID-HZD為1,由控制信號(hào)ID-HZD控制的多路轉(zhuǎn)換器(即,將零或由指令操作碼解碼所得到的值輸出給流水線寄存器ID/EX的WB的多路轉(zhuǎn)換器,或類似的多路轉(zhuǎn)換器)用0重寫控制信號(hào),該控制信號(hào)是以前用對(duì)指令操作碼解碼的指令解碼器CONTROL解碼的。結(jié)果是,禁止寫入數(shù)據(jù)存儲(chǔ)器和通用寄存器。執(zhí)行控制塊HDU有可能通過輸出一個(gè)作為PC-HZD和ID-HZD信號(hào)的信號(hào)來暫停執(zhí)行指令。
如前所述,如果由緊拉在前的LOAD指令或在當(dāng)前指令之前再之前的LOAD指令來更新要求當(dāng)前對(duì)指令解碼的通用寄存器,必須暫停執(zhí)行當(dāng)前解碼的指令直到將更新的值寫入通用寄存器為止。然而,如果當(dāng)前解碼的指令是將要由LOAD指令更新的通用寄存器的值存入數(shù)據(jù)存儲(chǔ)器的存儲(chǔ)(STORE)指令,則不必暫停該指令的執(zhí)行。下面參見圖18來描述當(dāng)在LOAD指令之后執(zhí)行將LOAD指令所更新的通用寄存器的值存入數(shù)據(jù)存儲(chǔ)器的STORE指令時(shí)所執(zhí)行的電路操作。在時(shí)刻4將根據(jù)第一條LOAD指令(LOADWRZ R0 R1 ox0002)已得到的數(shù)據(jù)供給流水線寄存器MEM/WB的MEMDATA。為了根據(jù)第二條STORE指令將存儲(chǔ)在MEMDATA中的數(shù)據(jù)寫入數(shù)據(jù)存儲(chǔ)器,需要在時(shí)刻4至?xí)r刻5之間的某一時(shí)間設(shè)置要寫在數(shù)據(jù)存儲(chǔ)器的數(shù)據(jù)總線上的值。
如果按照第一條LOAD指令將一個(gè)值寫入某一通用寄存器,并且如果按照緊接在后面的STORE指令將這樣寫入的值寫到數(shù)據(jù)存儲(chǔ)器中,則可能從流水線寄存器MEM/WB的MEMDATA獲得按照第二條STORE指令在MEM級(jí)將要寫入的數(shù)據(jù),因?yàn)楦緵]有修改數(shù)據(jù)。如果流水線寄存器EX/MEM的WTREG的值和流水線寄存器MEM/WB的WTREG的值彼此相同,并且如果流水線寄存器MEM/WB的MEM的數(shù)據(jù)表示LOAD指令,則將存儲(chǔ)在流水線寄存器MEM/WB的MEMDATA中的值寫入數(shù)據(jù)存儲(chǔ)器。然而,如果不是這種情況,將流水線寄存器的SRCMEM的數(shù)據(jù)(即在流水線上移動(dòng)的原始數(shù)據(jù))寫入數(shù)據(jù)存儲(chǔ)器。用此方案,如果在LOAD指令之后立即出現(xiàn)將由LOAD指令更新了的通用寄存器的值存入數(shù)據(jù)存儲(chǔ)器的STORE指令,則可能在不暫停執(zhí)行STORE指令的情況下將一個(gè)正確的值寫入數(shù)據(jù)存儲(chǔ)器。進(jìn)一步地,為了處理由當(dāng)前指令之前再之前的LOAD指令更新按照STORE指令寫入一個(gè)值的通用寄存器的情況,將存儲(chǔ)在流水線寄存器MEM/WB的MEMDATA中的數(shù)據(jù)寫入數(shù)據(jù)存儲(chǔ)器,只要流水線寄存器ID/EX的IREX 2的數(shù)據(jù)和流水線寄存器MEM/WB的WTREG的值彼此相同,并且流水線寄存器MEM/WB的MEM的數(shù)據(jù)表示LOAD指令。如果這不是事實(shí),需要做的一切是將流水線寄存器ID/EX的SRC2的數(shù)據(jù)(即在流水線上移動(dòng)的原始數(shù)據(jù))寫入數(shù)據(jù)存儲(chǔ)器。
下面參見圖19來描述具有上述功能的可編程控制器的一個(gè)實(shí)施例。在此圖中僅表示了與本發(fā)明有關(guān)的部分。如圖所示,在EX和MEM級(jí)設(shè)置了數(shù)據(jù)選擇塊MEMFB1和MEMFB2。數(shù)據(jù)選擇塊MEMFB1和MEMFB2分別將從WB級(jí)輸出的和存貯在通用寄存器中的數(shù)據(jù)反饋給EX級(jí)和MEM級(jí)。數(shù)據(jù)選擇塊MEMFB1接收自流水線寄存器ID/EX輸出的值和自流水線寄存器MEM/WB(ALURSLT或MEMDATA)輸出的值,并有選擇地將所接收的兩值中的一個(gè)輸出給流水線寄存器EX/MEM的SRCMEM。數(shù)據(jù)選擇塊MEMFB2接收從流水線寄存器EX/MEM的SRCMEM中輸出的值和從MEM/WB(ALURSLT或MEMDATA)流水線寄存器中輸出的值,并有選擇地將所接收的兩值中的一個(gè)輸出給數(shù)據(jù)存儲(chǔ)器DM/EM。
下面描述在WB級(jí)進(jìn)行分支操作的電路的結(jié)構(gòu)。該電路的操作如圖20和21所示,用圖22中的方框圖表示該電路的一個(gè)實(shí)施例。如果分支狀態(tài)滿足要求,并且如果執(zhí)行分支操作,則圖22所示的電路按下面將要描述的方式操作。
如圖20所示,首先在時(shí)刻1從流水線寄存器IF/ID的指令寄存器IR中取出一條指令。將該指令的地址存儲(chǔ)在流水線寄存器IF/ID的PC級(jí)。在隨后的ID級(jí)讀出確定分支狀態(tài)所需的通用寄存器的值。將這樣讀出的值存在流水線寄存器ID/EX的SRC1和SRC2中。將流水線寄存器IF/EX的PC的值存貯在流水線寄存器ID/EX的PC級(jí)。在隨后的EX級(jí),用ALU將兩個(gè)變?cè)飨嗷ケ容^。將比較的結(jié)果存貯在流水線寄存器EX/MEM的EQ、GT和LT中。在EX級(jí),用與ALU不同的加法器ADDER計(jì)算目標(biāo)地址,并將所獲得的結(jié)果存貯在流水線寄存器EX/MEM的PC中。在隨后的MEM級(jí),由在EX級(jí)獲得的比較結(jié)果和分支指令的類型確定是否滿足分支狀態(tài)。根據(jù)確定結(jié)果,設(shè)置在MEM級(jí)的執(zhí)行控制塊HDU產(chǎn)生各種類型的控制信號(hào)。將流水線寄存器EX/MEM的PC的值存貯在流水線寄存器MEM/WB的PC級(jí)。如果已滿足分支狀態(tài),在最后的WB級(jí)用以存儲(chǔ)的目標(biāo)地址值更新程序計(jì)數(shù)器PC的值。
另一方面,如果不滿足分支狀態(tài),則直接執(zhí)行隨后的指令,這不存在問題。然而,如果滿足分支狀態(tài),必須在取出目標(biāo)地址處的指令之前暫停執(zhí)行流水線中取用的指令。在圖21中,如果指令(1)是一條分支指令,并且如果滿足分支指令(1)的分支狀態(tài),則將目標(biāo)分支的地址寫入程序計(jì)數(shù)器PC。在時(shí)刻5根據(jù)該地址取出指令(即執(zhí)行分支操作)。盡管已將指令(2)至(4)取入流水線,但僅在不滿足分支狀態(tài)時(shí)才打算執(zhí)行這些指令。因而,如果滿足分支狀態(tài),則不該執(zhí)行這些指令。為了防止指令被執(zhí)行,如果在MEM級(jí)分支狀態(tài)的確定結(jié)果是滿足分支狀態(tài)就通過使用由執(zhí)行控制塊HDU產(chǎn)生的各種類型的控制信號(hào)來防止執(zhí)行在流水線中取用的指令。用于防止指令執(zhí)行的控制信號(hào)為PC-SEL、IF-HZD、ID-HZD、以及EX-HZD信號(hào)。PC-SEL信號(hào)是一個(gè)選擇信號(hào),用于確定是否將分支地址寫入程序計(jì)數(shù)器PC。IF-HZD、ID-HZD、以及EX-HZD是控制信號(hào),使在對(duì)應(yīng)的IF、ID、以及EX級(jí)的指令變?yōu)闊o效。
如果IF-HZD控制信號(hào)為1,將取出的具有用NOP指令碼改寫的操作碼的指令再寫入NOP指令。如果ID-HZD和EX-HZD控制信號(hào)1,則在ID級(jí)解碼的控制信號(hào)都用0改寫,結(jié)果是禁止數(shù)據(jù)存儲(chǔ)器或通用寄存器的寫入。最后,使在ID或EX級(jí)中取用的指令變得無效。圖22所示的電路是在WB級(jí)執(zhí)行分支操作的一個(gè)電路的一個(gè)實(shí)例。在該電路中,用PHI 1時(shí)鐘信號(hào)鎖存在MEM級(jí)產(chǎn)生的PC-SEL信號(hào)。然后在從流水線寄存器MEM/WB的PC級(jí)輸出一個(gè)值的同時(shí)將這樣鎖存的信號(hào)輸出給程序計(jì)數(shù)器PC,借此控制分支操作。
在圖22所示的電路中,在WB級(jí)執(zhí)行分支操作。然而,由于已經(jīng)在EX級(jí)完成分支操作所需的分支狀態(tài)的確定和目標(biāo)分支地址的計(jì)算,所以,只要有執(zhí)行分支操作的足夠時(shí)間在MEM級(jí)也能執(zhí)行分支操作。圖23表示在MEM級(jí)執(zhí)行分支操作的一個(gè)電路的一個(gè)實(shí)施例。在使用該電路的情況下,不需要提供帶PC級(jí)的流水線寄存器MEM/WB,這又導(dǎo)致較小的電路尺寸。進(jìn)一步地,圖23所示電路需要的指令數(shù)比在WB級(jí)執(zhí)行分支操作的電路所需的指令少一條,這將改善執(zhí)行速率。
為了解釋本發(fā)明的第三實(shí)施例,用圖24代替圖4。圖24實(shí)際上是由圖4簡化而來。
雖然圖24所示的具有五級(jí)流水線結(jié)構(gòu)流水線級(jí)具有采用較短流水線級(jí)時(shí)間周期的優(yōu)點(diǎn),這一優(yōu)點(diǎn)也意味著它必須用較短的時(shí)間訪問指令存儲(chǔ)器1或數(shù)據(jù)存儲(chǔ)器4。由于流水線級(jí)增加到五級(jí),尤其在針對(duì)指令存儲(chǔ)器1進(jìn)行存取時(shí)需執(zhí)行復(fù)雜的狀態(tài)確定。訪問指令存儲(chǔ)器1所需要的時(shí)間妨礙流水線級(jí)所需時(shí)間的減少。結(jié)果,必須降低訪問指令存儲(chǔ)器1的總性能或者必須使用高速指令存儲(chǔ)器1,這會(huì)大大增加成本。
圖28(a)至(c)是定時(shí)關(guān)系圖,表示與具有五級(jí)流水線結(jié)構(gòu)的可編程控制器的指令取出有關(guān)的定時(shí)關(guān)系。為簡便起見,該可編程控制器基于如下假設(shè)僅一個(gè)控制信號(hào)PC-HZD對(duì)圖24所示的程序計(jì)數(shù)器控制電路ADDRCALC起作用,可編程控制器設(shè)計(jì)成在控制信號(hào)PC-HZD為0時(shí)將1加到程序計(jì)數(shù)器PC;當(dāng)控制信號(hào)為1時(shí)不更新程序計(jì)數(shù)器PC。從圖26所示的定時(shí)關(guān)系圖中省去了指令(例如改變程序計(jì)數(shù)器PC的分支指令)的定時(shí)關(guān)系。進(jìn)一步地,可編程控制器基于如下假設(shè)用具有相φ1至φ4的四相時(shí)鐘信號(hào)來操作可編程控制器,由時(shí)鐘信號(hào)φ1驅(qū)動(dòng)用IF/ID開始的流水線寄存器,由時(shí)鐘信號(hào)φ3驅(qū)動(dòng)程序計(jì)數(shù)器PC。
圖28(a)至(c)表示按遞增的順序由指令存儲(chǔ)器1的地址1取出指令。圖28(a)表示程序計(jì)數(shù)器PC的值,圖28(b)表示控制信號(hào)PC-HZD的值。圖28(c)表示指令寄存器IR的值,指令寄存器IR將指令取出的結(jié)果送到第二級(jí)ID并兼作流水線寄存器IF/ID之用。
在圖28(a)至(c)所示的例子中,僅在程序計(jì)數(shù)器PC為3時(shí)的一個(gè)流水線級(jí)的時(shí)間周期控制信號(hào)PC-HZD才變?yōu)?,并且暫停程序計(jì)數(shù)器PC的增加計(jì)數(shù)。位于指令存儲(chǔ)器1地址3的指令取兩次。然后,依次從地址4、地址5取指令。在取指令時(shí),由時(shí)鐘信號(hào)φ3確定指令存儲(chǔ)器1的地址。必須輸出存儲(chǔ)器的該地址的值直到下一時(shí)鐘信號(hào)φ1到來為止。換句話說,從確定指令存儲(chǔ)器1的地址到讀出指令存儲(chǔ)器1的內(nèi)容所用的訪問時(shí)間必須小于時(shí)鐘信號(hào)φ3至φ1之間的時(shí)間。如果進(jìn)行流水線結(jié)構(gòu)的最優(yōu)化,并且如果一個(gè)流水線級(jí)需要的時(shí)間變短,那么,在時(shí)鐘信號(hào)φ3至φ1之間的時(shí)間變?yōu)樾∮谥钡浆F(xiàn)在一直取用的指令存儲(chǔ)器1的訪問時(shí)間。因此,需要使用更高速和更昂貴的指令存儲(chǔ)器1。
如果能用定時(shí)變化比時(shí)鐘信號(hào)φ3快的時(shí)鐘信號(hào)φ2來啟動(dòng)程序計(jì)數(shù)器PC,就解決了上述問題。但是,為了輸出控制程序計(jì)數(shù)器PC增值的控制信號(hào)PC-HZD,要確定復(fù)雜的狀態(tài)。不可能在時(shí)鐘信號(hào)φ2到達(dá)之前確定控制信號(hào)PC-HZD。因而,不能用時(shí)鐘φ2啟動(dòng)程序計(jì)數(shù)器PC。
現(xiàn)參照?qǐng)D24至27描述根據(jù)本發(fā)明第三實(shí)施例的可編程控制器。在這些圖中僅僅描述本發(fā)明的特征部分。這里將省略與圖24所示的相同的其它部分以及對(duì)它們的詳細(xì)解釋。
圖25是僅表示由IF代表的第一級(jí)的方框圖。在該圖中,ADD1是一個(gè)加法器,用于將1加到由時(shí)鐘信號(hào)φ3啟動(dòng)的程序計(jì)數(shù)器PC的值中(即,將程序計(jì)數(shù)器的值增加1)。MUX1代表由控制信號(hào)PC-HZD控制的用于暫停程序計(jì)數(shù)器PC的計(jì)數(shù)增值的多路轉(zhuǎn)換器,并且將打算設(shè)置到程序計(jì)數(shù)器PC的值轉(zhuǎn)換到加法器ADD1輸出或轉(zhuǎn)換到程序計(jì)數(shù)器PC的值。ADD2是一個(gè)加法器,用于將1與程序計(jì)數(shù)器PC的輸出相加(即,將程序計(jì)數(shù)器的值加1)。PC1是一個(gè)由時(shí)鐘信號(hào)φ2啟動(dòng)的寄存器,用于寄存加法器ADD2的輸出,時(shí)鐘信號(hào)φ2比啟動(dòng)程序計(jì)數(shù)器的時(shí)鐘信號(hào)φ3快。
標(biāo)號(hào)1代表指令存儲(chǔ)器,用于輸出在由寄存器PC1指出的地址中存儲(chǔ)的指令。MUX2表示由控制信號(hào)PC-HZD控制的多路轉(zhuǎn)換器,MUX2將要存儲(chǔ)在指令寄存器IR中的值轉(zhuǎn)換到指令存儲(chǔ)器1的輸出或存儲(chǔ)在指令寄存器IR中的值。當(dāng)控制信號(hào)PC-HZD為0時(shí),將指令存儲(chǔ)器1的輸出存儲(chǔ)在指令寄存器IR中。當(dāng)控制信號(hào)PC-HZD為1時(shí),將存儲(chǔ)在指令寄存器IR中的值設(shè)置到指令寄存器IR中。
換句話說,與圖24所示的可編程控制器不同,圖25所示的可編程控制器配有與程序計(jì)數(shù)器PC相同數(shù)據(jù)寬度的并由時(shí)鐘信號(hào)φ2啟動(dòng)的寄存器PC1。不論控制信號(hào)PC-HZD為何值都鎖存由1加上程序計(jì)數(shù)器PC的值所得到的值。用這樣得到的值作為存儲(chǔ)要讀出的指令的指令存儲(chǔ)器1的地址來取出該指令。對(duì)指令寄存器這樣設(shè)計(jì),當(dāng)控制信號(hào)PC-HZD為1時(shí)不是取指令存儲(chǔ)器1的值而是取指令寄存器本身的值。
圖26是定時(shí)關(guān)系圖,表示圖25所示的可編程控制器的取出指令的時(shí)間關(guān)系。將由1加程序計(jì)數(shù)器PC的值所得到的值鎖存到寄存器PC 1中,由圖26(a)所示的時(shí)鐘信號(hào)φ3來更新程序計(jì)數(shù)器PC的值,由圖26(b)所示的時(shí)鐘信號(hào)φ2來啟動(dòng)寄存器PC 1。如圖26(d)所示的指令寄存器IR用保留在寄存器PC 1中的值作為地址取出指令存儲(chǔ)器1的內(nèi)容。當(dāng)圖26(c)所示的控制信號(hào)PC-HZD的值為1時(shí),取出指令寄存器本身的值而不是指令存儲(chǔ)器1的值。
借助于圖25所示的寄存器PC 1,能比程序計(jì)數(shù)器PC更早地確定指令存儲(chǔ)器1的地址,并且使使用花費(fèi)較長訪問時(shí)間的指令存儲(chǔ)器1成為可能。此外,如果暫停程序計(jì)數(shù)器PC增值的控制信號(hào)PC-HZD是一個(gè)暫停程序計(jì)數(shù)器增值的信號(hào)(即信號(hào)為1),則不將從指令存儲(chǔ)器1中讀出的值裝入取出指令的指令寄存器IR,而是將從指令存儲(chǔ)器1中讀出的值裝入指令存儲(chǔ)器本身。即使在執(zhí)行用于暫停程序計(jì)數(shù)器PC增值的指令時(shí),也能使用訪問時(shí)間長得多的存儲(chǔ)器作為指令存儲(chǔ)器1。
如果僅執(zhí)行程序計(jì)數(shù)器PC加1或完全照原樣保留一個(gè)值的指令,可編程控制器僅用圖25所示的電路按規(guī)定操作。但是,除此指令之外,可編程控制器還執(zhí)行例如用于更新程序計(jì)數(shù)器PC的條件分支和無條件分支指令。進(jìn)一步地,有一可編程控制器特有的微分指令,從與指令存儲(chǔ)器共享地址總線的位存儲(chǔ)器(沒有示出)中讀出一個(gè)值和將一個(gè)值寫入該位存儲(chǔ)器。當(dāng)可編程控制器處于暫停狀態(tài)時(shí)從外面設(shè)置程序計(jì)數(shù)器PC的初值,當(dāng)可編程控制器開始工作時(shí)由這樣設(shè)置的地址開始取出指令存儲(chǔ)器1的內(nèi)容。象圖25所示的可編程控制器那樣,如果用1加程序計(jì)數(shù)器PC的值所獲得的值作為指令存儲(chǔ)器1的地址,在可編程控制器處于暫停狀態(tài)時(shí)不可能由程序計(jì)數(shù)器設(shè)置的地址取出指令。
圖27是解決上述問題的本發(fā)明的一個(gè)實(shí)施例的可編程控制器的方框圖。與圖25所示的可編程控制器相對(duì)比,圖27所示的可編程控制器設(shè)有多路轉(zhuǎn)換器MUX3,MUX3將要存貯在寄存器PC 1中的值轉(zhuǎn)換到以下的任一個(gè)程序計(jì)數(shù)器PC的值、加法器ADD2輸出的值、以及從下一級(jí)流水線寄存器輸出的分支的目標(biāo)地址或用于改寫的位存儲(chǔ)器地址。程序計(jì)數(shù)器PC的值在可編程控制器已開始工作之后立即直接鎖存到寄存器PC 1中。
當(dāng)由于滿足分支條件而執(zhí)行分支指令時(shí),當(dāng)通過微分指令將該值寫回到位存儲(chǔ)器時(shí),或者當(dāng)在可編程控制器已開始工作之后要立即執(zhí)行的第一條指令被取出時(shí),選擇除由1加程序計(jì)數(shù)器的值所獲得的值以外的輸入值作為要存入寄存器PC 1的一個(gè)值。圖27中省略了用于選擇這些輸入的信號(hào)。
盡管有五級(jí)流水線結(jié)構(gòu)的流水線級(jí)具有花費(fèi)較短時(shí)間周期的優(yōu)點(diǎn),但這一優(yōu)點(diǎn)在執(zhí)行鑒于可編程控制器的規(guī)定所需要的應(yīng)用指令時(shí)出現(xiàn)一個(gè)問題。設(shè)置在流水線的第三級(jí)EX的算術(shù)與邏輯單元ALU執(zhí)行算術(shù)操作、邏輯操作、以及計(jì)算用于訪問存儲(chǔ)器的地址。但ALU不能在一個(gè)流水線級(jí)的時(shí)間周期內(nèi)執(zhí)行例如特別復(fù)雜的應(yīng)用指令的乘法和除法操作。
一般來說,如果想要減少操作時(shí)間,執(zhí)行操作的電路的尺寸就會(huì)大大增加。在如圖24所示具有五級(jí)流水線結(jié)構(gòu)的可編程控制器中,如果企圖在一個(gè)流水線級(jí)的時(shí)間周期內(nèi)執(zhí)行包含在規(guī)程中的乘法和除法,則會(huì)需要一個(gè)大到不能在LSI上實(shí)現(xiàn)的操作塊。即使不顧尺寸問題而使用有快速算法的操作塊,也不可能在一個(gè)流水線級(jí)的時(shí)間周期內(nèi)完成操作。為了執(zhí)行這樣的操作,必須延長流水線級(jí)的時(shí)間周期。
下面參考圖34描述本發(fā)明的具有五級(jí)流水線結(jié)構(gòu)的可編程控制器的示意結(jié)構(gòu)。與圖24所示的可編程控制器相對(duì)比,圖34所示的可編程控制器具有設(shè)置在流水線結(jié)構(gòu)的第三級(jí)EX中的下述附加塊,即,除算術(shù)與邏輯單元ALU以外的操作塊MULT和DIV、操作執(zhí)行控制塊SUBALU、以及多路轉(zhuǎn)換器MUX。ALU執(zhí)行算術(shù)操作、邏輯操作、以及計(jì)算訪問存儲(chǔ)器用的地址;對(duì)MULT和DIV進(jìn)行專門設(shè)計(jì)以便執(zhí)行所有應(yīng)用指令中的復(fù)雜操作,例如乘法和加法;SUBALU控制操作塊操作的執(zhí)行;MUX將輸出給流水線寄存器EX/MEM的操作結(jié)果轉(zhuǎn)換到算術(shù)與邏輯單元ALU的一個(gè)輸出或操作執(zhí)行控制塊SUBALU的一個(gè)輸出。
從執(zhí)行流水線的觀點(diǎn)來看,操作執(zhí)行控制塊SUBALU與算術(shù)與邏輯單元ALU處于相同位置。如圖所示,操作執(zhí)行控制塊接收變?cè)猄1、S2和來自流水線寄存器ID/EX的操作所需要的控制信號(hào)(由解碼器2解碼的信號(hào))。操作執(zhí)行控制塊還給操作塊MULT或DIV輸出需要的數(shù)據(jù)。通過多路轉(zhuǎn)換器MUX將操作結(jié)果傳送給流水線寄存器EX/MEM。在一個(gè)流水線級(jí)的時(shí)間周期內(nèi)不能完成這些操作,因而操作執(zhí)行控制塊SUBALU執(zhí)行如下的控制操作(1)暫停程序計(jì)數(shù)器PC的增值和流水線操作;以及(2)如果專門設(shè)計(jì)的操作塊正在操作,則使有關(guān)在第二級(jí)ID和第三級(jí)EX將一個(gè)值寫回到通用寄存器(即寄存器堆3)中的請(qǐng)求信號(hào)和有關(guān)向數(shù)據(jù)存儲(chǔ)器4寫數(shù)據(jù)的請(qǐng)求信號(hào)無效。下面將參考圖示的實(shí)施例描述更具體的功能。
現(xiàn)參照?qǐng)D29更詳細(xì)地描述本發(fā)明第四實(shí)施例的具有五級(jí)流水線結(jié)構(gòu)的可編程控制器。圖29僅表示整個(gè)五級(jí)流水線級(jí)中的第一級(jí)IF、第二ID、以及第三級(jí)EX的結(jié)構(gòu)。此外,該圖省略了與本發(fā)明無關(guān)的流水線結(jié)構(gòu)的部件。與圖34所示的元件相同的元件用相同的參考符號(hào)和標(biāo)號(hào)表示。
在第一級(jí)IF,程序計(jì)數(shù)器對(duì)下一次要取出的指令存儲(chǔ)器1的地址計(jì)數(shù)。程序計(jì)數(shù)器控制電路ADDRCALC更新存貯在程序計(jì)數(shù)器PC中的值。在圖29所示的可編程控制器中,從圖中省略了處理例如用于修改程序計(jì)數(shù)器PC的分支指令的電路的結(jié)構(gòu),并且也省去對(duì)該電路的解釋。下面的描述基于如下假設(shè)程序計(jì)數(shù)器PC的值基本上逐一地增加,并且當(dāng)控制信號(hào)HZD_PC為1時(shí)程序計(jì)數(shù)器PC保留原來的值。
指令寄存器IR放在第一級(jí)IF和第二級(jí)ID之間并且兼作流水線寄存器IF/ID,指令寄存器IR從指令存儲(chǔ)器1中取出以指令存儲(chǔ)器1的預(yù)定地址存儲(chǔ)的指令,而該預(yù)定地址存儲(chǔ)在程序計(jì)數(shù)器PC中。
在第二級(jí)ID,根據(jù)指令寄存器IR的值對(duì)指令的內(nèi)容解碼。第二級(jí)設(shè)有寄存器堆3、解碼器2、以及相關(guān)危險(xiǎn)控制單元HDU,寄存器堆3包括多個(gè)位寬度由規(guī)程確定的通用寄存器,解碼器2(以后稱為解碼器DC)通過解碼指令產(chǎn)生用在后面流水線級(jí)的各種類型的控制信號(hào),相關(guān)危險(xiǎn)控制單元HDU輸出在進(jìn)行流水線操作中異常的控制信號(hào)。設(shè)在第二級(jí)ID和第三級(jí)EX之間的流水線寄存器ID/EX有S1和S2、以及REG,S1和S2用于讀取和存儲(chǔ)具有指定號(hào)數(shù)的通用寄存器的值,REG表示在后面的每一流水線級(jí)要用的控制信號(hào)EX、MEM和WB以及表示要用于將一個(gè)值寫回到寄存器中的寄存器號(hào)數(shù)。
控制信號(hào)EX、MEM和WB是所需控制信號(hào)的集合。假定當(dāng)控制信號(hào)WB或控制信號(hào)MEM中的一個(gè)為1時(shí)寫操作有效,控制信號(hào)WB控制將一個(gè)值寫回到寄存器中,控制信號(hào)MEM控制將數(shù)據(jù)寫入數(shù)據(jù)存貯器中。多路轉(zhuǎn)換器MUX1插在第二級(jí)ID中的解碼器DC與流水線寄存器ID/EX之間。當(dāng)控制信號(hào)HZD-ID為1時(shí),多路轉(zhuǎn)換器MUX1用0改寫這些控制信號(hào)EX、MEM和WB的全部,借此使針對(duì)通用寄存器(即寄存器堆3)或數(shù)據(jù)存貯器4的寫請(qǐng)求信號(hào)無效。
實(shí)際上,算術(shù)與邏輯單元在執(zhí)行操作的第三級(jí)EX根據(jù)流水線寄存器ID/EX的S1和S2的值執(zhí)行由控制信號(hào)EX指示的操作。將這樣操作的結(jié)果存貯在流水線寄存器EX/MEM的DST中。
圖29所示的可編程控制器設(shè)有操作執(zhí)行控制塊SUBALU,它設(shè)在第三級(jí)EX中,用于執(zhí)行其操作不能在一個(gè)流水線級(jí)的時(shí)間周期內(nèi)完成的指令。該操作執(zhí)行控制塊的功能與算術(shù)及邏輯單元ALU相同在流水線操作過程中從流水線寄存器ID/EX接收輸入并且向流水線寄存器EX/MEM輸出操作結(jié)果。該操作執(zhí)行控制塊不執(zhí)行實(shí)際的操作,并且分開設(shè)置專用的操作塊(執(zhí)行乘法的操作塊MULT和執(zhí)行除法的操作塊DIV)。該操作執(zhí)行控制塊SUBALU向這些操作塊提供變?cè)?、接收一個(gè)操作結(jié)果、并且向流水線寄存器EX/MEM輸出這樣收到的結(jié)果。這些操作不能在一個(gè)流水線級(jí)的時(shí)間周期內(nèi)完成,因此必須在操作期間中止流水線操作。為此,操作執(zhí)行控制塊SUBALU要輸出一個(gè)控制信號(hào)RQ_HZD給相關(guān)危險(xiǎn)控制電路HDU。
當(dāng)向流水線寄存器EX/MEM輸出操作結(jié)果或要改寫的寄存器號(hào)數(shù)時(shí),必須把向流水線EX/MEM的輸出轉(zhuǎn)接到算術(shù)及邏輯單元ALU的輸出,或者轉(zhuǎn)接到操作執(zhí)行控制塊SUBALU的輸出這二個(gè)輸出中的一個(gè)。類似地,必須把要改寫的通用寄存器的號(hào)數(shù)轉(zhuǎn)接到流水線寄存器ID/EX的REG值,或者轉(zhuǎn)接到操作執(zhí)行控制塊SUBALU的輸出這二個(gè)輸出中的一個(gè)。出于這些理由,操作執(zhí)行控制塊SUBALU向多路轉(zhuǎn)換器MUX 2和3輸出一個(gè)控制信號(hào)RQ-WT以便進(jìn)行轉(zhuǎn)接。多路轉(zhuǎn)換器MUX 2向流水線寄存器EX/MEM轉(zhuǎn)接要輸出的操作結(jié)果,從而把如此轉(zhuǎn)接的結(jié)果經(jīng)過多路轉(zhuǎn)換器3傳遞到流水線寄存器EX/MEM。結(jié)果,轉(zhuǎn)接了要改寫的通用寄存器的號(hào)數(shù)。
控制信號(hào)MEM或MB在第三級(jí)EX中全然不起作用,該控制信號(hào)只是從流水線寄存器ID/EX簡單地傳遞到流水線寄存器EX/MEM。像在第二級(jí)ID中一樣,第三級(jí)EX也沒有多路轉(zhuǎn)換器4和5,并把送到多路轉(zhuǎn)換器4和5的控制信號(hào)HZD_EX置成1,這就可能使控制信號(hào)無效。多路轉(zhuǎn)換器MUX4通過用零改寫控制信號(hào)WB而使向通用寄存器(即,寄存器堆3)寫一數(shù)值的請(qǐng)求無效。多路轉(zhuǎn)換器MUX5通過用零改寫控制信號(hào)MEM而使向數(shù)據(jù)存貯器4寫一數(shù)值的請(qǐng)求無效。
現(xiàn)在參照?qǐng)D30所示的定時(shí)關(guān)系圖描述操作執(zhí)行控制塊SUBALU的操作。圖30所示的定時(shí)關(guān)系圖說明了一個(gè)實(shí)例,其中乘法指令(MULT)設(shè)在指令存貯器1的地址10中,它前邊的指令F1和F2設(shè)在地址10之前的地址9和地址8,隨后的指令R1、R2、R3和R4設(shè)在地址11及隨后的地址中。
圖29所示的可編程控制器基于以下的假設(shè)該電路中的寄存器是由4相時(shí)鐘信號(hào)φ1-φ4中的任何一個(gè)驅(qū)動(dòng)的,并且每個(gè)流水線寄存器是由時(shí)鐘信號(hào)φ1驅(qū)動(dòng)的。附圖表示出兼作流水線寄存器IF/ID的指令寄存器IR、程序計(jì)數(shù)器PC、控制信號(hào)HZD_PC、流水線寄存器ID/EX的S1和EX、設(shè)在操作執(zhí)行控制塊SUBALU中的狀態(tài)機(jī)的狀態(tài)STATE、乘法塊MULT的操作結(jié)束信號(hào)DONE、流水線寄存器EX/MEM的DST和WB、控制信號(hào)HZD_EX、以及從操作執(zhí)行控制塊SUBALU輸出的控制信號(hào)RQ_WT。
在圖30所示的實(shí)例中,具有驅(qū)動(dòng)流水線寄存器的時(shí)鐘信號(hào)φ1的一個(gè)流水線級(jí)變?yōu)樵摿魉€的一級(jí)。按時(shí)間順序設(shè)置流水線級(jí)T1至T5及Ta至Te,并且在流水線級(jí)T1→T5及流水線級(jí)Ta→Te之間插有一個(gè)很小的時(shí)間間隔。在流水線級(jí)T1中取出乘法指令之前的指令(即,在先指令F1),并且在流水線級(jí)T2中取出乘法指令。把乘法指令引入到流水線級(jí)T3中的第三級(jí)EX。通過已從流水線寄存器ID/EX的EX收到的乘法請(qǐng)求并且收到已由相關(guān)危險(xiǎn)控制單元HDC產(chǎn)生的控制信號(hào)HZD_PC的操作執(zhí)行控制塊SUBALU,來中止程序計(jì)數(shù)器PC的增值。在操作執(zhí)行控制塊SUBALU中設(shè)置的狀態(tài)機(jī)的狀態(tài)從表示狀態(tài)機(jī)等待著操作請(qǐng)求信號(hào)的初始態(tài)IDLE轉(zhuǎn)移到MULT1,并進(jìn)一步轉(zhuǎn)移到MULT2。當(dāng)設(shè)在狀態(tài)執(zhí)行控制塊SUBALU中的狀態(tài)機(jī)的狀態(tài)是MULT2時(shí),該狀態(tài)機(jī)仍舊保持在等待模式中,直到從乘法模塊MULT送回操作結(jié)束信號(hào)DONE時(shí)為止。當(dāng)收到操作結(jié)束信號(hào)DONE時(shí),狀態(tài)機(jī)轉(zhuǎn)移到狀態(tài)MULT3,并且進(jìn)一步轉(zhuǎn)移到表示該狀態(tài)機(jī)等待操作請(qǐng)求信號(hào)的初始狀態(tài)IDLE。操作執(zhí)行控制塊SUBALU向相關(guān)危險(xiǎn)控制單元HDU提供有關(guān)設(shè)在SUBAL中的狀態(tài)機(jī)的狀態(tài)的信息,相關(guān)危險(xiǎn)控制單元HDU根據(jù)這樣收到的狀態(tài)信息更新控制信號(hào)HZD_PC和HZD_EX。
圖31示意地表示在執(zhí)行圖30所示乘法指令的情況下設(shè)在操作執(zhí)行控制塊SUBALU中的狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移的情況。當(dāng)將乘法指令移入流水線的第三級(jí)EX時(shí),狀態(tài)機(jī)從表示狀態(tài)裝置等待操作請(qǐng)求信號(hào)的初始狀態(tài)轉(zhuǎn)移到狀態(tài)MULT1。狀態(tài)機(jī)無條件地從狀態(tài)MULT1變化到狀態(tài)MULT2,并在狀態(tài)MULT2中等待操作的完成。作為操作終止信號(hào)DONE向乘法塊MULT輸出的結(jié)果確定了操作的完成。如果對(duì)可編程控制器的規(guī)格指標(biāo)進(jìn)行的設(shè)計(jì)使該操作塊因執(zhí)行操作的時(shí)間恒定而不向狀態(tài)機(jī)傳回操作終止信號(hào)DONE,則要在操作執(zhí)行控制塊SUBALU中設(shè)置一個(gè)計(jì)數(shù)器,例如時(shí)間計(jì)數(shù)裝置。還可能利用以下事實(shí)將計(jì)數(shù)器的計(jì)數(shù)值超過一預(yù)先設(shè)定值作為狀態(tài)轉(zhuǎn)移的條件(即,確定操作完成的條件)。
圖30中所示的定時(shí)關(guān)系圖只表示乘法情況。和圖29所示的可編程控制器相似,如果把多個(gè)操作塊連接到操作執(zhí)行控制塊SUBALU,并且如果要完成多種類型的操作,所要作的全部工作只是制作一個(gè)能夠從等待操作請(qǐng)求信號(hào)的初始狀態(tài)IDLE轉(zhuǎn)移到多種類型操作的狀態(tài)(圖32中的乘法或除法狀態(tài))的狀態(tài)機(jī)。這時(shí),需要作的全部工作是從以下方法中選出一個(gè)比較方便的方法一是根據(jù)從每一操作塊送回的操作完成信號(hào)確定操作的完成的方法,二是根據(jù)設(shè)在操作執(zhí)行控制塊SUBALU中的計(jì)數(shù)器的值(即定時(shí)計(jì)數(shù)裝置的值)確定操作的完成的方法。
在可編程控制器執(zhí)行的指令當(dāng)中,某些指令(那些不可能在一個(gè)流水線級(jí)的時(shí)間周期內(nèi)完成的指令)要經(jīng)受有關(guān)是否已被執(zhí)行的判定。對(duì)于由算術(shù)及邏輯單元ALU處理的普通的指令,算術(shù)和邏輯單元ALU完成與指令執(zhí)行條件無關(guān)的指令。如果不執(zhí)行這些指令,那么,通過使數(shù)值寫回寄存器的或使數(shù)據(jù)寫到數(shù)據(jù)存貯器的控制信號(hào)無效,就基本上可使這些指令無效。上述完成操作的方式旨在使流水線處理中的流動(dòng)所受到的干擾最小。在操作執(zhí)行控制塊SUBALU無條件地執(zhí)行例如ALU的操作的情況下,如果指令執(zhí)行條件變成無效,則要浪費(fèi)在操作完成之前的等待時(shí)間。如果當(dāng)把完成該操作執(zhí)行控制塊SUBALU中的操作的指令引入流水線和第三級(jí)EX中時(shí)不滿足指令執(zhí)行條件,那么就能防止?fàn)顟B(tài)機(jī)初始狀態(tài)IDLE轉(zhuǎn)移到操作正在執(zhí)行的狀態(tài),從而不再浪費(fèi)時(shí)間。
在操作塊支持多種方式的操作(即,操作塊處理多個(gè)不同類型數(shù)據(jù)寬度的操作)的情況下,例如,如果一個(gè)乘法塊作8位數(shù)據(jù)乘8位數(shù)據(jù)的乘法并且也作16位數(shù)據(jù)乘16位數(shù)據(jù)的乘法,則可直接使用兩個(gè)寄存器的值作為變?cè)?。?duì)于8位數(shù)據(jù)的乘法,如果使用兩個(gè)寄存器中的每一個(gè)寄存器的高8位作變?cè)?,則在實(shí)際完成乘法的操作塊以8位操作方式操作的條件下必須把該變?cè)O(shè)置到輸入數(shù)據(jù)的低8位。操作執(zhí)行控制塊SUBALU必須把高8位值替換到低8位值而不向乘法模塊MULT直接傳送16位數(shù)據(jù)。
當(dāng)乘法塊MULT處在8位操作方式時(shí),操作執(zhí)行控制塊SUBALU必須按照該操作塊的規(guī)定處理數(shù)據(jù),例如,必須用零清除輸入數(shù)據(jù)的無用位位置。在某些情況下,還必須以類似的方式處理輸入數(shù)據(jù)和操作結(jié)果這兩者。應(yīng)該對(duì)該操作塊進(jìn)行設(shè)計(jì),使得不必進(jìn)行這樣的數(shù)據(jù)處理。然而,如果利用過去的設(shè)計(jì)資源來配置整個(gè)系統(tǒng),則上述的處理依然還是必須的。
在由圖29所示的5級(jí)流水線結(jié)構(gòu)的可編程控制器執(zhí)行的指令中,某些指令需要根據(jù)一個(gè)或兩個(gè)寄存器的值來執(zhí)行操作,并且需要把該操作的結(jié)果寫回?cái)?shù)據(jù)存貯器4或一個(gè)通用寄存器(即,寄存器堆3)的一個(gè)字中。與此相反,在由操作執(zhí)行控制塊SUBALU執(zhí)行的指令中,某些指令可能需要多個(gè)改寫操作。例如,如果16位數(shù)據(jù)乘以16位數(shù)據(jù),則結(jié)果變?yōu)?2位長度。如果包括在寄存器堆3中的通用寄存器具有16位寬度,則必須針對(duì)一個(gè)指令改寫寄存器兩次。在圖30所示的定時(shí)關(guān)系圖中,該通用寄存器相對(duì)于乘法指令只改寫一次。但在某些情況下,必須根據(jù)操作的數(shù)據(jù)寬度、通用寄存器和數(shù)據(jù)存貯器4的寬度、或類似的量來進(jìn)行幾次改寫操作。為處理這樣一種指令,要對(duì)狀態(tài)機(jī)進(jìn)行這樣設(shè)計(jì),使得操作執(zhí)行控制塊SUBALU在請(qǐng)求操作時(shí)保持從流水線寄存器收到的信息,并且使得不是從普通的流水線操作得到的改寫操作可以進(jìn)行幾次。
在圖30所示的定時(shí)圖中,在第三級(jí)EX中引入乘法請(qǐng)求。這時(shí),取出下一個(gè)指令R1,因此將下一個(gè)指令R1的變?cè)肓魉€寄存器ID/EX的下一個(gè)流水線級(jí)T4。乘法指令的變?cè)獌H在一個(gè)流水線級(jí)的時(shí)間周期在流水線寄存器ID/EX中退出。如果該變?cè)仨毎凑胀瓿刹僮鞯牟僮鲏KMULT的規(guī)定在流水線寄存器ID/EX中固定不變直到操作結(jié)束時(shí)為止,就不可能正確地完成操作。就要求向流水線寄存器ID/EX中的操作執(zhí)行控制塊SUBALU傳遞數(shù)值的指令而論,為可編程控制器提供一個(gè)多路轉(zhuǎn)換器MUX6,對(duì)MUX6進(jìn)行設(shè)計(jì),使它在存在保持請(qǐng)求信號(hào)的條件下保持存貯在流水線寄存器ID/EX中的這個(gè)數(shù)值(即S1的內(nèi)容)。操作執(zhí)行控制塊SUBALU產(chǎn)生保持請(qǐng)求信號(hào),以使多路轉(zhuǎn)換器MUX6能夠保持該數(shù)值。結(jié)果,即使把下一個(gè)按指令引入流水線寄存器ID/EX中,也有可能把操作執(zhí)行控制塊SUBALU當(dāng)前正在處理的指令的變?cè)虿僮鞣绞奖3炙栝L短時(shí)期,從而可以正確地完成操作。
在上述實(shí)施例中示出了進(jìn)行乘法和除法的操作塊。然而,操作塊不限于該實(shí)施例中公開的這種形式。
位處理指令是可編程控制器的必要功能之一,用于在執(zhí)行指令的過程中更新或訪問數(shù)據(jù)存貯器的一個(gè)字中的一位的數(shù)值,或者用于更新或訪問數(shù)據(jù)存貯器的多個(gè)字。為了執(zhí)行這個(gè)位操作指令,需要多個(gè)存貯器訪問周期。因此,如果按原樣使用上述的5級(jí)流水線結(jié)構(gòu),就不可能執(zhí)行該位操作指令。
該可編程控制器還設(shè)有一個(gè)所設(shè)謂的微分指令,用于檢測(cè)輸入的升或降。與微分指令一起使用的存貯器變得必需了,以記錄作為輸入信號(hào)的前一次掃描的結(jié)果而獲得的值。出于這個(gè)理由,執(zhí)行使用三級(jí)流水線結(jié)構(gòu)的指令的常規(guī)的可編程控制器設(shè)置了具和指令存貯器相同的地址、并且是一位寬度的存貯器(未經(jīng)審查的日本專利申請(qǐng)No.Hei-5-189014和189015)。例如,輸入x0從OFF態(tài)升高到ON態(tài),從而使輸出y1接通;在這種情況下,只通過檢查現(xiàn)行輸入x0是在ON態(tài)還是在OFF態(tài)是不可能檢測(cè)到輸入x0的升高的。根據(jù)存貯在存貯器中的前一個(gè)輸入x0,作出這樣的判斷只在前一個(gè)輸入x0是在OFF態(tài)并且當(dāng)前的輸入x0是在ON態(tài)時(shí)輸入x0才升高。如果接通輸入x0,將這一事實(shí)存貯在存貯器中。結(jié)果,即使輸入x0在下一個(gè)掃描操作時(shí)處在ON狀態(tài),也作不出輸入x0已經(jīng)升高的判斷。按此方式,檢測(cè)輸入信號(hào)升降的微分指令需要有存貯器來記錄作為輸入掃描的前一次掃描的結(jié)果而獲得的輸入信號(hào)值。出于這一理由,可編程控制器設(shè)有存貯器,其地址和指令存貯器相同并且寬度為一位。這種方法的好處是地址管理簡單。已經(jīng)開發(fā)出來具有5級(jí)流水線結(jié)構(gòu)并能執(zhí)行高速操作的可編程控制器也使用了這個(gè)方法。在地址存貯器和與微分指令一起使用的數(shù)據(jù)存貯器之間共享一個(gè)地址總線,從而減少了信號(hào)線數(shù)目。然而,當(dāng)改寫用于微分指令的存貯器時(shí),使用這種配置將使流水線操作受到干擾。結(jié)果是不執(zhí)行所需的指令。
圖35是表示按本發(fā)明第五實(shí)施例的5級(jí)流水線結(jié)構(gòu)的可編程控制器的總體配置的方塊圖。從和具有圖24所示結(jié)構(gòu)的可編程控制器的比較顯然可以看出,第五實(shí)施例的可編程控制器額外還設(shè)置了一個(gè)BPU(位處理單元)以執(zhí)行位處理指令,以及一個(gè)寄存器BITACC(位累加器),它作為位操作結(jié)果被更新。
在第五實(shí)施例的5級(jí)流水線結(jié)構(gòu)的可編程控制器中,先把一個(gè)指令合成例如如圖36(a)所示的5個(gè)流水線級(jí),然后再去執(zhí)行這個(gè)指令;這5個(gè)流水線級(jí)就是指令取出IF、指令解碼、寄存器取出ID,算術(shù)和邏輯操作、數(shù)據(jù)地址操作、以及目標(biāo)分支操作EX,存貯器訪問(讀/與操作)MEM,和分支操作及在寄存器中寫入數(shù)據(jù)WB。除了這些指令外,可編程控制器還需要其它指令,即一個(gè)“位處理指令”,用于訪問或更新數(shù)據(jù)存貯器的一個(gè)字中的一位的值。所謂位處理指令包括各種類型的指令。有一種指令用于根據(jù)從數(shù)據(jù)存貯器讀出的一個(gè)字中的某一位的狀態(tài)在可編程控制器中更新寄存器BITACC(位累加器)。圖36(b)和36(c)表示出在該流水線被中位處理指令的狀態(tài)。如圖所示,BPU級(jí)的存在位置對(duì)應(yīng)于WB級(jí),在該WB級(jí)中數(shù)據(jù)寫入寄存器是由除位處理指令之外的指令完成的。在BPU級(jí)中,執(zhí)行所有以下操作使用在MEM級(jí)中從數(shù)據(jù)存貯器讀出的值更新BITACC、在數(shù)據(jù)存貯器中更新一個(gè)位、并且把數(shù)據(jù)寫入數(shù)據(jù)存貯器。位處理指令有許多類型,并且根據(jù)指令以圖36(b)和36(c)所示的方式改變BPU級(jí)的所需數(shù)目。
某些位處理指令不需要從數(shù)據(jù)存貯器讀出一個(gè)字,而是要從數(shù)據(jù)存貯器讀出多個(gè)字以執(zhí)行一個(gè)指令。例如,在簡單地實(shí)現(xiàn)存貯器地址的讀寫的裝入和存貯指令的情況下,這些指令具有簡單的指令語言結(jié)構(gòu)。因此有可能通過向立即值數(shù)據(jù)加上一個(gè)指定的寄存器的內(nèi)容來得到一個(gè)存貯器地址。因此,如果使用進(jìn)行算術(shù)操作(如,寄存器至寄存器的操作)的ALU來計(jì)算用于存貯器訪問操作的一個(gè)地址,就可能實(shí)現(xiàn)一個(gè)有效的電路。然而,與裝入/存貯指令相比,位處理指令并非一定需要一個(gè)簡單的存貯器地址。因此,如果對(duì)電路進(jìn)行配置,使得通過ALU來計(jì)算該地址,那么這個(gè)電路將變得很復(fù)雜。為避免這一問題出現(xiàn),可編程控制器除ALU外還要設(shè)有一個(gè)地址計(jì)算塊,專用于位處理指令。當(dāng)執(zhí)行位處理指令時(shí),通過該地址計(jì)算塊計(jì)算存貯器地址。
如果和裝入/存貯指令相比,位處理指令需要多次存貯器訪問,不可能只通過計(jì)算一次存貯器地址(如裝入/存貯指令的情況那樣)來執(zhí)行該指令。因此在地址計(jì)算塊中設(shè)置了一個(gè)機(jī)構(gòu),用于記錄位處理指令的一個(gè)字中的用于計(jì)算地址所必須的部分。結(jié)果,使該可編程控制器具有在多個(gè)連續(xù)的流水線周期上計(jì)算地址的功能。從該機(jī)構(gòu)輸出用于訪問存貯器的控制信號(hào)。因此,使該可編程控制器具有在多個(gè)流水線周期上訪問存貯器的功能。
如果位處理指令穿過流水線寄存器后抵達(dá)用于執(zhí)行位處理指令的電路塊BPU,那么,除了地址計(jì)算塊外,BPU也有可能計(jì)算位處理指令需要的用于存貯器訪問的地址。在某些情況下,使用BPU比使用地址計(jì)算塊計(jì)算地址更好些,這是因?yàn)檫€要執(zhí)行位處理指令后邊的一個(gè)指令的緣故。出于這一理由,為可編程控制器設(shè)置了一個(gè)數(shù)據(jù)通道,以便有可能利用由BPU計(jì)算出來的地址以及數(shù)據(jù)讀出請(qǐng)求信號(hào)從數(shù)據(jù)存貯器讀出數(shù)據(jù)。
再者,如果位處理指令要求更新數(shù)據(jù)存貯器,則BPU計(jì)算要寫入數(shù)據(jù)存貯器的值。為此,為可編程控制器設(shè)置了一個(gè)數(shù)據(jù)通道,以便有可能通過使用由BPU計(jì)算出來的要寫入存貯器的值、地址、和數(shù)據(jù)存貯器的寫入請(qǐng)求而把數(shù)據(jù)寫入數(shù)據(jù)存貯器。
圖37表示用于實(shí)施本發(fā)明特征的電路配置。在圖37中示出了5級(jí)結(jié)構(gòu)中的3級(jí)EX、MEM和WB(BPU)中與數(shù)據(jù)存貯器訪問有特定關(guān)系的電路。除了按照裝入和存貯指令計(jì)算存貯器地址的ALU之外,還為圖37所示的EX級(jí)提供專用于位處理指令的地址計(jì)算部分BPUADR。在執(zhí)行位處理指令時(shí),使用BPUADR的輸出代替ALU的輸出作為用于存貯器訪問的地址。為此,在EX級(jí)中設(shè)置一個(gè)多路轉(zhuǎn)換器MUX,以從ALU和BPUADR的輸出中選擇一個(gè)輸出。把這樣選出的輸出寫入EX/MEM流水線寄存器的地址AD。當(dāng)用于位處理指令的地址計(jì)算塊BPUADR計(jì)算出用于存貯器訪問的地址。把這樣計(jì)算的地址經(jīng)多路轉(zhuǎn)換器MUX寫入EX/MEM流水線寄存器EX/MEM的地址AD。如果存貯器訪問是從存貯器讀出數(shù)據(jù),則流水線寄存器EX/MEM的存貯器讀出控制信號(hào)RD變?yōu)?。如果存貯器訪問是把數(shù)據(jù)寫入存貯器,則流水線寄存器EX/MEM的存貯器寫入控制信號(hào)WT變?yōu)?。以此方式,在位處理指令的情況下,專用于位處理指令的地址計(jì)算塊BPUADR計(jì)算數(shù)據(jù)存貯器DM的地址ADDR,并且輸出讀出控制信號(hào)RD或?qū)懭肟刂菩盘?hào)WT。在裝入指令或存貯指令的情況下,ALU計(jì)算存貯器地址,并且把這樣算出的存貯器地址經(jīng)多路轉(zhuǎn)換器MUX寫入流水線寄存器EX/MEM的地址AD。在裝入指令的情況下,流水線寄存器EM/MEM的存貯器讀出控制信號(hào)RD變?yōu)?,而在存貯指令的情況下,流水線寄存器EM/MEM的存貯器寫入控制信號(hào)WT變?yōu)?。
為MEM設(shè)置一個(gè)數(shù)據(jù)通道,以便有可能根據(jù)數(shù)據(jù)存貯器DM的地址ADDR、寫入值WTDT、以及從執(zhí)行位處理指令的塊BPU輸出的存貯器控制信號(hào)RD和WT、以及在EX流水線周期中計(jì)算出來的值執(zhí)行存貯器訪問。如果假定圖37所示的存貯器控制信號(hào)RD和WT意味著當(dāng)它們是1時(shí)是執(zhí)行存貯器訪問,那么即使流水線寄存器EX/MEM的存貯器控制信號(hào)WT和RD是0,也能通過從位處理指令塊BPU輸出一個(gè)存貯器訪問請(qǐng)求來執(zhí)行這種存貯器訪問。簡短地說,只要位處理指令執(zhí)行電路塊BPU從數(shù)據(jù)存貯器DM讀出數(shù)據(jù),就通過轉(zhuǎn)接多路轉(zhuǎn)換器MUX把存貯器地址ADDR從位處理指令執(zhí)行電路塊BPU送到數(shù)據(jù)存貯器DM來代替流水線寄存器EX/MEM的地址AD。此外,經(jīng)過或門把存貯器讀出控制信號(hào)RD從位處理指令執(zhí)行電路塊BPU送到數(shù)據(jù)存貯器DM。結(jié)果,從數(shù)據(jù)存貯器DM讀出的數(shù)據(jù)RDDT經(jīng)流水線寄存器MEM/WB輸入到位處理指令電路BPU。在位處理指令執(zhí)行電路塊BPU把數(shù)據(jù)寫入數(shù)據(jù)存貯器DM的情況下,通過轉(zhuǎn)接多路轉(zhuǎn)換器MUX把存貯器地址ADDR從位處理指令執(zhí)行電路塊BPU送到數(shù)據(jù)存貯器DM來代替流水線寄存器EM/MEM的地址AD。此外,把寫入數(shù)據(jù)WTDT從位處理指令執(zhí)行電路塊BPU送到數(shù)據(jù)存貯器DM來代替流水線寄存器EX/MEM的數(shù)據(jù)。此外,還經(jīng)過一個(gè)或門把存貯器寫入信號(hào)WT從位處理指令執(zhí)行電路塊BPU送到數(shù)據(jù)存貯器DM。結(jié)果,有可能把數(shù)據(jù)從位處理指令執(zhí)行電路塊BPU寫入數(shù)據(jù)存貯器DM。
圖38表示本發(fā)明第五實(shí)施例的可編程控制器的定時(shí)關(guān)系圖。圖38(a)表示裝入/存貯指令的定時(shí)圖,圖38(b)表示位處理指令的定時(shí)圖,按照此定時(shí)圖,在執(zhí)行該指令時(shí)從數(shù)據(jù)存貯器讀出數(shù)據(jù)的3個(gè)字,并將這3個(gè)字寫回?cái)?shù)據(jù)存貯器。在圖38(a)所示的定時(shí)圖中,通過EX級(jí)中的ALU計(jì)算一個(gè)地址,并且在MEM級(jí)中完成在數(shù)據(jù)存貯器中的數(shù)據(jù)的讀、寫。另一方面,通過在圖38(b)所示的定時(shí)關(guān)系中的EX級(jí)內(nèi)的BPUADR來計(jì)算一個(gè)地址。根據(jù)這樣計(jì)算的地址從MEM級(jí)中的數(shù)據(jù)存貯器讀出數(shù)據(jù)。在BPUADR中保持計(jì)算一個(gè)地址所必須的位處理指令的部分指令字。BPUADR即使在EX級(jí)后邊的MEM級(jí)中也計(jì)算地址,以便有可能即使在MEM級(jí)之后緊接著進(jìn)行的流水線周期中也能讀出數(shù)據(jù)存貯器,并且有可能輸出一個(gè)數(shù)據(jù)存貯器讀出請(qǐng)求信號(hào)。結(jié)果,即使在BPU1級(jí)中的BPU。因此,從BPU輸出在兩個(gè)BPU級(jí),也執(zhí)行數(shù)據(jù)從數(shù)據(jù)存貯器的讀出。必須從存貯器讀出數(shù)據(jù)的另一個(gè)字。然而,位處理指令的指令字已經(jīng)到達(dá)穿過流水線寄存器后的BPU1周期期間從數(shù)據(jù)存貯器讀出數(shù)據(jù)所必須的所有信號(hào),從而實(shí)現(xiàn)數(shù)據(jù)從數(shù)據(jù)存貯器的讀出。此外,在讀出操作之后實(shí)現(xiàn)的向數(shù)據(jù)存貯器寫入3個(gè)數(shù)據(jù)字的情況下,從BPU輸出所有必要的值并且在3個(gè)周期中執(zhí)行數(shù)據(jù)向數(shù)據(jù)存貯器中的寫入。
借助于本發(fā)明的可編程控制器,使具有5級(jí)流水線結(jié)構(gòu)的可編程控制器有可能執(zhí)行為執(zhí)行指令需進(jìn)行多次存貯器訪問的位處理指令。然而,位處理指令在多個(gè)流水線周期占據(jù)數(shù)據(jù)存貯器。因此必須中止位處理后面的一個(gè)指令的執(zhí)行直到隨后的指令可以訪問數(shù)據(jù)存貯器為止。出于這一理由,可編程控制器具有根據(jù)流水線寄存器提供的并且表示下一個(gè)信號(hào)是位處理指令的控制信號(hào)來中止程序計(jì)數(shù)器增值的功能。如果只通過中止程序計(jì)數(shù)器的增值不可能中止下一個(gè)指令的執(zhí)行,那么可編程控制器就具有根據(jù)在流水線寄存器中提供的并表示下一個(gè)信號(hào)是位處理指令的控制信號(hào),通過用指令解碼的結(jié)果改寫指令使該指令無效的功能。
此外,如果只通過使用該控制信號(hào)不可能實(shí)現(xiàn)所要求的中止下一個(gè)指令的執(zhí)行,可編程控制器就具有根據(jù)表示現(xiàn)在正在執(zhí)行的并是從BPU輸出的位處理指令的控制信號(hào)來中止程序計(jì)數(shù)器的增值的功能。類似地,如果通過中止程序計(jì)數(shù)器的增值不可能中止執(zhí)行隨后的指令,該可編程控制器就具有根據(jù)在流水線寄存器中設(shè)置的并且表明隨后的信號(hào)是在流水線寄存器中設(shè)置的位處理指令的控制信號(hào)、通過用指令解碼的結(jié)果改寫指令來使該指令無效的功能。
圖39表示用于實(shí)施這些特點(diǎn)的一個(gè)電路配置。把從圖39所示IF級(jí)中指令存貯器IM獲取的一個(gè)指令字存貯在設(shè)于流水線寄存器IF/ID上的一個(gè)指令寄存器IR中。在ID級(jí)的解碼器塊DC中解碼這樣存貯的指令字,并把解碼操作的結(jié)果寫入流水線寄存器ID/EX中。如果這樣解碼的指令是一個(gè)位處理指令,將1寫入設(shè)在流水線寄存器上的控制信號(hào)BPU。在流水線寄存器ID/EX、EX/MEM、和MEM/WB上依次傳送該控制信號(hào)BPU。然后把該控制信號(hào)送到相關(guān)危險(xiǎn)檢測(cè)塊HDU。相關(guān)危險(xiǎn)檢測(cè)塊HDU產(chǎn)生相關(guān)危險(xiǎn)信號(hào)HZD_PC、HZD_ID、和HZD_EX。相關(guān)危險(xiǎn)信號(hào)HZD_PC中止程序計(jì)數(shù)器PC的增值,相關(guān)危險(xiǎn)信號(hào)HZD_ID使存貯器訪問、以及在ID級(jí)獲得的結(jié)果的寄存器寫入操作無效。相關(guān)危險(xiǎn)信號(hào)HZD_EX使存貯器訪問、以及在EX級(jí)獲得的結(jié)果的寄存器寫入操作無效。除了在流水線寄存器上提供的控制信號(hào)BPU外,位處理指令執(zhí)行塊還輸出一個(gè)控制信號(hào),表示現(xiàn)正執(zhí)行位處理。通過相關(guān)危險(xiǎn)檢測(cè)塊HDU對(duì)這些信號(hào)一起進(jìn)行處理,借此產(chǎn)生相關(guān)危險(xiǎn)信號(hào)。
下面參照?qǐng)?zhí)行指令獲得的指令的定時(shí)圖來描述該可編程控制器的操作。圖40所示,對(duì)位處理指令予以說明,按照該指令,從數(shù)據(jù)存貯器讀出數(shù)據(jù)的一個(gè)字,并在修改該數(shù)據(jù)的一位后把這樣讀出的數(shù)據(jù)再次寫到數(shù)據(jù)存貯器中。對(duì)于圖40所示的定時(shí)圖,假定位處理指令存入指令存貯器的地址1中,隨后的指令存入地址2和3。按照在該圖中所示的位處理指令,開始時(shí)從MEM級(jí)中的數(shù)據(jù)存貯器讀出數(shù)據(jù),并且在BPU1級(jí)中處理這樣讀出的數(shù)據(jù)中的一位數(shù)據(jù)。把這樣處理過的數(shù)據(jù)在BPU2級(jí)中再次寫回?cái)?shù)據(jù)存貯器。因而,多個(gè)指令同時(shí)執(zhí)行對(duì)數(shù)據(jù)存貯器的訪問,除非和隨后的指令有關(guān)的存貯器訪問在位處理指令的BPU2級(jí)之后執(zhí)行。當(dāng)指令存貯器的地址1的位處理指令在ID級(jí)時(shí),指令存貯器的地址2的隨后的指令在IF級(jí)。因此,不可能阻止對(duì)隨后的指令的取出。此外,必須在用于前一個(gè)位處理指令的BPU2級(jí)之后執(zhí)行用于地址2處的指令的MEM級(jí)。因此,必須只在兩個(gè)流水線周期中止執(zhí)行指令。
圖41表示在執(zhí)行圖40所示指令時(shí)該電路中的信號(hào)的定時(shí)圖。在時(shí)刻1已經(jīng)完成在指令存貯器中地址1的位處理指令的取出,并把該指令字輸入到流水線寄存器IF/ID中的指令寄存器IR。然后解碼這樣輸入的指令字,由此在時(shí)刻2在流水線寄存器ID/EX的控制信號(hào)BPU中出現(xiàn)有關(guān)該取出的指令是一個(gè)位處理指令的信息。把這個(gè)控制信號(hào)BPU送到流水線寄存器EX/MEM和MEM/WB。當(dāng)控制信號(hào)BPU在流水線寄存器ID/EX和EX/MEM中時(shí),相關(guān)危險(xiǎn)檢測(cè)塊HDU輸出一相關(guān)危險(xiǎn)信號(hào)HZD_PC。結(jié)果,使程序計(jì)數(shù)器PC中止兩個(gè)周期。從時(shí)刻2到時(shí)刻5繼續(xù)取出地址2處的指令。如果前一個(gè)位處理指令不受直接解碼該取出的指令的影響,則解碼照原樣進(jìn)行。但如果由于取出的指令的解碼而產(chǎn)生了誤操作,則還要在相關(guān)危險(xiǎn)信號(hào)HZD_PC的同時(shí)輸出相關(guān)危險(xiǎn)信號(hào)HZD_ID。相關(guān)危險(xiǎn)信號(hào)HZD_ID使有關(guān)存貯器訪問的控制信號(hào)MEM、WB和EX無效,并且當(dāng)將指令寄存器IR的解碼結(jié)果寫入流水線寄存器ID/EX時(shí)使寫入寄存器的數(shù)據(jù)無效。當(dāng)相關(guān)危險(xiǎn)信號(hào)HZD_ID在產(chǎn)生的過程當(dāng)中,流水線寄存器ID/EX變到在解碼NOP指令時(shí)相同的狀態(tài)。由于使用了相關(guān)危險(xiǎn)信號(hào)HZD_ID和相關(guān)危險(xiǎn)信號(hào)HZD_PC,所以可能實(shí)現(xiàn)下述的控制即,象圖40所示的指令2那樣,指令的執(zhí)行只中止2個(gè)流水線周期,并且直到完成位處理指令的存貯器訪問才進(jìn)行下一個(gè)指令的存貯器訪問。
現(xiàn)在來說明一個(gè)位處理指令,按照該指令從存貯器讀出數(shù)據(jù)的3個(gè)字,并且當(dāng)執(zhí)行該指令時(shí)把這樣讀出的數(shù)據(jù)寫回存貯器。這種情況是基于下述假定在指令存貯器IM中的地址1中存貯該位處理指令,在相繼的地址2和3中還存貯其它指令。如圖42所示,位處理指令(1)進(jìn)行存貯器訪問用了6個(gè)連續(xù)的周期,下一個(gè)指令(2)必須延遲MEM級(jí)的執(zhí)行直到指令(1)的BPU6級(jí)為止。在這種情況下,不可能只通過流水線寄存器攜帶的控制信號(hào)BPU來中止執(zhí)行隨后的指令。因此,如圖43所示,從位處理指令執(zhí)行塊BPU輸出表示正在執(zhí)行位處理指令的控制信號(hào)。如果使用這個(gè)控制信號(hào)和控制信號(hào)BPU一起產(chǎn)生相關(guān)危險(xiǎn)信號(hào)HZD_PC,就有可能根據(jù)需要中止執(zhí)行隨后的指令。如果按照需要產(chǎn)生了相關(guān)危險(xiǎn)信號(hào)HZD_ID,還有可能使取出的指令的解碼結(jié)果無效。
該可編程控制器具有一微分指令,用于檢測(cè)輸入信號(hào)的升或降。為了記錄輸入信號(hào)前一次掃描結(jié)果獲得的值,必須配備與微分指令一道使用的存貯器。出于這一理由,該可編程控制器設(shè)有在執(zhí)行具有三級(jí)流水線結(jié)構(gòu)的指令的常規(guī)可編程控制器中使用的存貯器,即和指令存貯器具有相同的地址且寬度為1位的存貯器。在用于微分指令的數(shù)據(jù)存貯器和指令存貯器之間共享一個(gè)地址總線,從而減少了信號(hào)線數(shù)目。結(jié)果,即使對(duì)于能以較高速度操作并且具有5級(jí)流水線結(jié)構(gòu)的可編程控制器,也有可能執(zhí)行和常規(guī)的微分指令相同的微分指令。
借助于上述電路配置和與微分指令一道使用的存貯器,執(zhí)行微分指令時(shí)所需要的存貯器改寫地址變得與存貯該微分指令的指令存貯器的地址相同。按照存貯改寫地址的一種可能的方法,把以前取出微分指令時(shí)獲得的程序計(jì)數(shù)器的值存入一個(gè)堆棧,并且當(dāng)改寫該微分指令時(shí)獲得該地址。但這種方法將導(dǎo)致復(fù)雜的控制,并且把程序計(jì)數(shù)器PC的值一直傳遞到EX級(jí)以進(jìn)行分支指令之類的處理。為防止出現(xiàn)這些問題,使用如下的配置換言之,通過使用流水線寄存器把指令存貯器地址(即,PC的值)傳送到位處理指令執(zhí)行塊BPU,并且當(dāng)BPU執(zhí)行微分指令時(shí),再次使用這樣傳送的地址將微分指令改寫到該存貯器。
當(dāng)把微分指令寫回存貯器時(shí),指令存貯器的地址變得和把微分指令改寫到存貯器中所用的地址相同。如果照原樣連續(xù)提取指令,則當(dāng)前寫入存貯器的微分指令被再次取出,而不是原先想要提取出的指令。為防止這一問題發(fā)生,在把微分指令寫回存貯器的流水線周期期間中止程序計(jì)數(shù)器的增值,這就保證了取出想要執(zhí)行的指令。
只簡單地中止程序計(jì)數(shù)器PC的增值不可能防止執(zhí)行一個(gè)無效的指令。如果不可能使指令解碼的結(jié)果無效,則把用NOP(No Operation空操作指令)進(jìn)一步改寫從指令存貯器取出的值的結(jié)果輸入到指令寄存器IR。結(jié)果,防止了指令的無效執(zhí)行。
現(xiàn)在參照?qǐng)?zhí)行微分指令時(shí)獲得的電路的定時(shí)圖以及和執(zhí)行微分指令有關(guān)的電路部分,描述該可編程控制器。圖44表示在執(zhí)行微分指令時(shí)獲得的電路的定時(shí)圖。圖45是IF和ID級(jí)的方塊圖。該實(shí)施例基于下述假定微分指令存入指令存貯器的地址1,除位處理指令以外的指令存入地址2以及地址2之后的地址,并且首先執(zhí)行地址1的微分指令。再次把微分指令寫入BPU2級(jí)。這時(shí),從BPU塊輸出存貯器地址和存貯器寫入請(qǐng)求信號(hào)。在如圖44所示的把微分指令寫回存貯器的流水線周期期間,產(chǎn)生相關(guān)危險(xiǎn)信號(hào)HZD_PC以中止程序計(jì)數(shù)器PC的增值,借此保證對(duì)存貯在指令存貯器中地址6處的指令的取出。作為對(duì)PC的增值進(jìn)行簡單中止的結(jié)果,當(dāng)把微分指令寫回存貯器時(shí),指令存貯器的地址變到地址1。再將取出地址1處的指令。還有可能使這樣取出的指令在ID級(jí)中無效。但在這個(gè)實(shí)施例中,可以按照從指令存貯把表示NOP(空操作指令)的一個(gè)值寫回指令寄存器IR來代替從指令存貯器提出的值,從而避免了執(zhí)行無效指令。
和能夠確定處理相關(guān)危險(xiǎn)的方式的另一個(gè)指令的相關(guān)危險(xiǎn)處理過程相對(duì)比,在改寫微分指令的實(shí)現(xiàn)的相關(guān)危險(xiǎn)處理變得必須在完成執(zhí)行指令之前進(jìn)行。出于這個(gè)理由,在和指令的組合有關(guān)的相關(guān)危險(xiǎn)處理中就產(chǎn)生了矛盾,使可編程控制器出現(xiàn)誤操作。為避免出現(xiàn)這種問題,用相關(guān)危險(xiǎn)檢測(cè)塊HDU來監(jiān)視各種類型相關(guān)危險(xiǎn)的發(fā)生。如果矛盾出現(xiàn)在解決微分指令的相關(guān)危險(xiǎn)中,則要額外地中止指令的另外一個(gè)周期的執(zhí)行以防止電路的誤操作。
圖46表示出這種矛盾和一個(gè)實(shí)例。在圖46中,在地址1放置微分指令,在地址3放置如圖40所示的用于針對(duì)數(shù)據(jù)存貯器讀、寫數(shù)據(jù)的一個(gè)字的位處理指令。在地址2、地址4、和地址4后邊的地址放置除位處理指令以外的指令。從地址1的微分指令開始依次執(zhí)行這些指令。相關(guān)危險(xiǎn)信號(hào)代表在相關(guān)危險(xiǎn)檢測(cè)塊中產(chǎn)生的信號(hào)。相關(guān)危險(xiǎn)信號(hào)HZD_ID和HZD_PC1與地址3處的位處理指令有關(guān)。相關(guān)危險(xiǎn)信號(hào)HZD_PC2和HZD_IF與地址1的微分指令有關(guān)。通過相關(guān)危險(xiǎn)信號(hào)HZD_PC1和HZD_PC2的邏輯和(或),可獲得從相關(guān)危險(xiǎn)檢測(cè)塊HDU輸出的相關(guān)危險(xiǎn)信號(hào)HZD_PC。在從時(shí)刻4至?xí)r刻5及從時(shí)刻5至?xí)r刻6的兩個(gè)周期期間中止程序計(jì)數(shù)器PC的增值。通過相關(guān)危險(xiǎn)信號(hào)HZD_PC1解碼該指令,并且用NOP(空操作指令)改寫在時(shí)刻5到時(shí)刻6期間寫入流水線寄存器ID/EX的值。另一方面,用NOP改寫由指令寄存器IR在時(shí)刻6通過相關(guān)危險(xiǎn)信號(hào)HZD_IF獲得的指令。如果就象這樣執(zhí)行這兩個(gè)相關(guān)危險(xiǎn)處理操作,則在地址4的指令既不解碼又不執(zhí)行。如果在相關(guān)危險(xiǎn)處理中出現(xiàn)這樣的一種矛盾,則必須通過在相關(guān)危險(xiǎn)檢測(cè)塊HDU中在另一個(gè)周期期間產(chǎn)生相關(guān)危險(xiǎn)信號(hào)HZD_PC來排除這一不被執(zhí)行的指令。
圖47是表示當(dāng)執(zhí)行微分指令和位處理指令時(shí)的一種對(duì)抗的定時(shí)圖。當(dāng)微分指令寫位存貯器時(shí),信號(hào)BMWTRQ置成“1”,在其它情況下置成“0”。信號(hào)PC-REHZDB代表由和驅(qū)動(dòng)流水線寄存器的時(shí)鐘的相位相反的時(shí)鐘操作的信號(hào)。圖48是一個(gè)表格,表示本發(fā)明的可編程控制器的操作碼PC_REHZDB的分配實(shí)例。按以下所述來改變信號(hào)BMWTRQ的量在BMWTRQ等于“1”并且HZD_ID等于“1”的條件下,PC_REHZDB置成“1”;并且,在HZD_PC1或者HZD_PC2等于“0”的條件下,PC_REHZDB置成“0”。信號(hào)PC_REHZDB代表用驅(qū)動(dòng)流水線寄存器的時(shí)鐘鎖存流水線寄存器所產(chǎn)生的信號(hào)。信號(hào)HZD_PC代表HZD_PC1、HZD_PC2、和PC_REHZD的邏輯和。信號(hào)HZD_PC停止PC的增值。
在可編程控制器所需的指令當(dāng)中,有一些指令不是總是要執(zhí)行的,而是僅在滿足了預(yù)定的指令執(zhí)行條件時(shí)才執(zhí)行。在上述5級(jí)流水線結(jié)構(gòu)的多個(gè)位置上提供有構(gòu)成指令執(zhí)行條件的各個(gè)標(biāo)記。用位操作指令更新的標(biāo)記BITACC是在五級(jí)流水線結(jié)構(gòu)的第五級(jí)或者第五級(jí)之后的一級(jí)中更新的。為此,如果把根據(jù)指令執(zhí)行條件確定是執(zhí)行還是使其無效的指令設(shè)置在緊接在用于更新標(biāo)記BITACC的位操作指令之后,那么當(dāng)執(zhí)行隨后的指令時(shí)位操作指令尚未更新標(biāo)記BITACC。尚未確定指令執(zhí)行條件,因此不可能準(zhǔn)確完成執(zhí)行/無效的控制。
圖49和50是表示按本發(fā)明的第六實(shí)施例的具有5級(jí)流水線結(jié)構(gòu)和可編程控制器的總體配置的方塊圖。從比較圖35所示的可編程控制器實(shí)例和本發(fā)明的可編程控制器之間的結(jié)構(gòu)顯然可以看出,本發(fā)明的可編程控制器額外設(shè)有一個(gè)標(biāo)記寄存器FR和一個(gè)相關(guān)危險(xiǎn)檢測(cè)單元HDU。相關(guān)危險(xiǎn)檢測(cè)單元HDU根據(jù)標(biāo)記BITACC的值確定指令執(zhí)行條件,標(biāo)記BITACC由標(biāo)記寄存器FR中的一個(gè)強(qiáng)迫執(zhí)行標(biāo)記EXEFLG和一個(gè)誤差標(biāo)記ERRCNTR以及一個(gè)位處理指令執(zhí)行單元BPU來更新。如果不滿足指令執(zhí)行條件,向相關(guān)危險(xiǎn)信號(hào)HZD_EX輸入1。
例如,具有本發(fā)明的5個(gè)流水線結(jié)構(gòu)的可編程控制器在事先將一指令分成5個(gè)流水線級(jí)之后執(zhí)行該指令,這五個(gè)流水線級(jí)即,IF指令取出,ID指令解碼、從寄存器取數(shù),EX算術(shù)和邏輯運(yùn)算、數(shù)據(jù)地址計(jì)算、和目標(biāo)分支計(jì)算,MEM存貯器訪問(讀/寫操作),以及WB分支操作和寄存器寫操作,如圖51(a)所示。除了這樣一個(gè)指令而外,該可編程控制器還需要一個(gè)“位處理指令”,用于訪問或更新包括在數(shù)據(jù)存貯器的一個(gè)字中的一個(gè)位的值。位處理指令包括各種類型的指令。某些指令用來根據(jù)包括在從數(shù)據(jù)存貯器讀出的一個(gè)字中的某個(gè)位的狀態(tài)更新設(shè)在可編程控制器中的一個(gè)寄存器BITACC(位累加器),某些指令用來更新包括在數(shù)據(jù)存貯器以及BITTACC中的某一位的值。圖51(b)和51(c)表示位處理指令的流水線級(jí)和標(biāo)記BITACC的更新。如這些附圖所示,BPU級(jí)存在的位置對(duì)應(yīng)于WB級(jí),在該WB級(jí)中除位處理指令外的一個(gè)指令把一個(gè)值寫入寄存器。在BPU級(jí),完成借助于從MEM級(jí)的數(shù)據(jù)存貯器讀出的值來更新BITACC,更新包括在數(shù)據(jù)存貯器中的一位的值,以及針對(duì)數(shù)據(jù)存貯器的寫操作,或者類似的操作。存在各種類型的位處理指令,并且所需的BPU級(jí)的數(shù)目隨指令而變,如圖51(b)和51(c)所示。雖然在附圖中標(biāo)記BITACC從0變到1,但也可以按相反的方式從1變到0。
在該可編程控制器的指令當(dāng)中,某些指令不是總是執(zhí)行的,而是只在滿足了包括多個(gè)標(biāo)記值在內(nèi)的指令執(zhí)行條件時(shí)才執(zhí)行。在該實(shí)施例中,某些指令在滿足下述條件時(shí)執(zhí)行EXEFLG ∪(BITACC ∩ ERRCNTRL)=1在該表達(dá)式中,EXEFLG是一強(qiáng)迫執(zhí)行標(biāo)記,且RRCNTRL是一誤差標(biāo)記。這些標(biāo)記與其它一些標(biāo)記一起都包括在該電路中的標(biāo)記寄存器FR中。BITACC是由位處理指令更新的標(biāo)記。圖49和50表示的本發(fā)明的可編程控制器具有只在這些標(biāo)記滿足上述指令執(zhí)行條件時(shí)執(zhí)行一個(gè)特定指令的功能。
把從IF級(jí)的指令存貯器IM取出的指令字存貯在設(shè)于流水線寄存器IF/ID中的指令寄存器IR內(nèi)。在ID級(jí)的解碼器塊DC中解碼這樣存貯的指令字,并把解碼操作的結(jié)果寫入流水線寄存器ID/EX中。如果解碼的指令是一個(gè)位處理指令,則把1寫入在流水線寄存器中提供的控制信號(hào)BPU中。隨后通過流水線寄存器ID/EX和EX/MEM順序地傳送這個(gè)控制信號(hào)BPU。把這些控制信號(hào)輸出到相關(guān)危險(xiǎn)檢測(cè)塊HDU。相關(guān)危險(xiǎn)檢測(cè)塊HDU產(chǎn)生相關(guān)危險(xiǎn)信號(hào)HZD_PC、HZD_ID、HZD_EX。相關(guān)危險(xiǎn)信號(hào)HZD_PC中止程序計(jì)數(shù)器PC的增值,相關(guān)危險(xiǎn)信號(hào)HZD_ID使在ID級(jí)中實(shí)現(xiàn)的解碼操作的所有結(jié)果的寄存器寫入操作和存貯器訪問操作無效。相關(guān)危險(xiǎn)信號(hào)HZD_EX使在EX級(jí)中實(shí)現(xiàn)的解碼操作的所有結(jié)果的寄存器寫入操作和存貯器訪問操作無效。
圖49和50中所示的流水線寄存器ID/EX的一個(gè)INST信號(hào)表示是執(zhí)行現(xiàn)行指令還是使現(xiàn)行指令無效取決于指令執(zhí)行條件。如果結(jié)果是EX級(jí)中的指令是用于控制執(zhí)行該操作還是使操作無效的指令,則相關(guān)危險(xiǎn)檢測(cè)單元HDU根據(jù)標(biāo)記BITACC的值確定指令執(zhí)行條件,標(biāo)記BITACC的值由標(biāo)記寄存器FR中的強(qiáng)迫執(zhí)行標(biāo)記EXEFTG和誤差檔記ERRCNTR及由位處理指令執(zhí)行單元BPU來更新。如果不滿足指令執(zhí)行條件,則向相關(guān)危險(xiǎn)信號(hào)HZD_EX輸出1。如果相關(guān)危險(xiǎn)信號(hào)HZD_EX是1,則用代表“不進(jìn)行更新操作”的值改寫用于控制外部存貯器和寄存器堆RF的信號(hào)。即使在EX和MEM級(jí)進(jìn)行了任何操作,也不保持操作的結(jié)果,這就最終導(dǎo)致了阻止指令的執(zhí)行。
下面將要說明的情況是,在根據(jù)指令執(zhí)行條件執(zhí)行一個(gè)指令或使其無效之前直接提供用于改變指令執(zhí)行條件的指令。在構(gòu)成指令執(zhí)行條件的各標(biāo)記中,強(qiáng)迫執(zhí)行標(biāo)記EXEFLG和誤差標(biāo)記ERRCNTRL是由FLGSET指令更新的。在該實(shí)施例中,F(xiàn)LGSET指令更新當(dāng)前執(zhí)行指令的EX級(jí)中的標(biāo)記。即使根據(jù)指令執(zhí)行條件或執(zhí)行或無效的這個(gè)指令直接放在FLGSET指令之后,在執(zhí)行下一個(gè)指令時(shí)執(zhí)行條件也已被確定。結(jié)果,變得有可能在協(xié)調(diào)地控制有關(guān)是執(zhí)行指令還是使指令無效的判定的同時(shí)執(zhí)行該指令。圖52是表示上述操作的一個(gè)定時(shí)關(guān)系圖。
誤差標(biāo)記ERRCNTRL不僅由FLGSET指令更新,而且由另外的指令更新,例如算術(shù)操作指令(如除法),或BCD碼轉(zhuǎn)換指令。例如,對(duì)于一個(gè)值被零除的情況,或者對(duì)于BCD碼區(qū)之外的一個(gè)值的情況,這種操作都是作為誤差處理的。對(duì)于更新除FLGSET指令之外的誤差標(biāo)記ERRCNTRL的指令,緊隨的下一個(gè)指令啟動(dòng)執(zhí)行EX級(jí)之前更新誤差標(biāo)記ERRCNTRL。結(jié)果,有可能在協(xié)調(diào)地控制有關(guān)是執(zhí)行該指令還是使該指令無效的判定的同時(shí)執(zhí)行隨后的指令。
當(dāng)完成位處理指令的BPU級(jí)時(shí),更新了組成指令執(zhí)行條件的所有標(biāo)記中的標(biāo)記BITACC。因此,如果把根據(jù)指令執(zhí)行條件確定是執(zhí)行還是使其無效的指令直接放在位處理指令之后,則在位處理指令更新標(biāo)記BITACC之前執(zhí)行隨后指令的EX級(jí),這又使控制有關(guān)該指令是執(zhí)行還是使其無效的判定成為不可能。為了防止這一問題的出現(xiàn),如果更新標(biāo)記BITACCA的位處理指令放在根據(jù)圖5 3所示的指令執(zhí)行條件確定是執(zhí)行還是無效的指令之前,那么當(dāng)執(zhí)行根據(jù)指令執(zhí)行條件確定是執(zhí)行還是無效的指令時(shí),可編程控制器進(jìn)入等待狀態(tài),因此不執(zhí)行根據(jù)指令執(zhí)行條件確定是執(zhí)行還是無效的這個(gè)指令的EX級(jí),直到更新了標(biāo)記BITACC和確定了指令執(zhí)行條件時(shí)為止。借助于這一功能,即使把根據(jù)指令執(zhí)行條件確定是執(zhí)行還是使其無效的這個(gè)指令直接放在位處理指令之后以更新標(biāo)記BITACC,也有可能協(xié)調(diào)地控制有關(guān)該指令是執(zhí)行還是無效的判斷。
現(xiàn)在參照?qǐng)D49和50所示的方塊圖描述本發(fā)明的特點(diǎn)。在流水線寄存器ID/EX和EX/MEM中提供一個(gè)控制信號(hào)BPU,信號(hào)BPU表示當(dāng)前的指令是更新標(biāo)記BITACC用的一個(gè)位處理指令。如果得到的結(jié)果是,作為裝入指令寄存器IR的一個(gè)指令的解碼的結(jié)果,ID級(jí)的指令是根據(jù)指令執(zhí)行條件確定是執(zhí)行還是無效的這個(gè)指令,那么,相關(guān)危險(xiǎn)檢測(cè)單元HDU就檢查流水線寄存器ID/EX和EX/MEM中的控制信號(hào)BPU。如果在流水線的EX級(jí)或者M(jìn)EM級(jí)中存在更新BITACC的位處理指令,則向相關(guān)危險(xiǎn)信號(hào)HZD_PC和HZD_ID輸出1。如果相關(guān)危險(xiǎn)信號(hào)HZD_PC是1,則用多路轉(zhuǎn)換器MUX代表什么都不執(zhí)行的值(即,附圖中的0)來改寫ID級(jí)中的指令解碼結(jié)果。通過發(fā)出這兩個(gè)相關(guān)危險(xiǎn)信號(hào)就可能中止執(zhí)行ID級(jí)中的一個(gè)特定的指令。當(dāng)更新標(biāo)記BITACC的位處理指令從流水線EX和MEM級(jí)消失時(shí),用0改寫相關(guān)危險(xiǎn)信號(hào)HZD_PC和HZD_ID,就可恢復(fù)該中止的指令。
具有5級(jí)流水線結(jié)構(gòu)的可編程控制器先把一個(gè)指令分成5個(gè)流水線然后再去完成這個(gè)指令,這5級(jí)就是,IF指令取出,ID指令解碼從寄存器取數(shù),EX算術(shù)和邏輯操作、數(shù)據(jù)地址計(jì)算、和目標(biāo)分支計(jì)算,MEM存貯器訪問(讀/寫操作),以及WB分支操作和寄存器寫入操作。除了這一指令外,可編程控制器還需要一個(gè)“位處理指令”,用于訪問或更新包括在數(shù)據(jù)存貯器的一個(gè)字中的一個(gè)位的值。位處理指令包括各種類型的指令。使用某些指令依據(jù)包括在從數(shù)據(jù)存貯器讀出的一個(gè)字中的某一個(gè)位的狀態(tài)來更新可編程控制器中的寄存器BITACC(位累加器),或者使用某些指令來更新包括在數(shù)據(jù)存貯器以及BITACC中的某一個(gè)位的值。
有各種理由中止可編程控制器,例如,執(zhí)行一個(gè)停止指令,發(fā)生中斷,或發(fā)生操作失敗??删幊炭刂破髦兄购蟮臓顟B(tài)(如,程序計(jì)數(shù)器PC的值)取決于停止條件。如果具有5級(jí)流水線結(jié)構(gòu)的可編程控制器是因?yàn)閳?zhí)行一個(gè)停止指令而中止的,那么就要在完成該停止指令的解碼操作時(shí)把該停止指令后邊的另一指令引入該流水線。還有可能設(shè)想,在實(shí)際中止可編程控制器之前,把幾個(gè)指令都引入流水線級(jí)。在這樣一種情況下,在中止可編程控制器后獲得的程序計(jì)數(shù)器PC的值未必和說明中描述的一個(gè)期望值相同。因此,中止時(shí)的可編程控制器的狀態(tài)與說明中描述的這樣一個(gè)期望狀態(tài)不同。如果把該指令后邊的滿足停止條件的另一個(gè)指令引入流水線寄存器,那么將會(huì)執(zhí)行不應(yīng)執(zhí)行的指令。
圖54和55是表示按本發(fā)明第七實(shí)施例的具有5級(jí)流水線結(jié)構(gòu)的可編程控制器。圖中用a-h表示的線連接到相應(yīng)的元件。比較圖35所示的可編程控制器和本發(fā)明的可編程控制器之間的結(jié)構(gòu)可以清楚地看出,本發(fā)明的可編程控制器額外設(shè)有用于控制可編程控制器的啟動(dòng)/停止操作的一個(gè)狀態(tài)機(jī)STM和用于避免執(zhí)行無效指令的相關(guān)危險(xiǎn)檢測(cè)單元HDU。
假定在下述情況下中止本發(fā)明的可編程控制器(a)在執(zhí)行一個(gè)停止指令時(shí)當(dāng)執(zhí)行停止指令時(shí)中止可編程控制器。在中止可編程控制器后獲得的可編程控制器PC的值變?yōu)橥V怪噶畋旧淼牡刂贰?br>
(b)在產(chǎn)生一個(gè)中斷請(qǐng)求信號(hào)時(shí)在執(zhí)行由產(chǎn)生中斷請(qǐng)求信號(hào)后首先出現(xiàn)的“停止標(biāo)志”表示的指令之前不中止可編程控制器。在可編程控制器中止后獲得的程序計(jì)數(shù)器PC的值變?yōu)榫哂杏煽删幊炭刂破鞯闹兄顾a(chǎn)生的“停止標(biāo)志”的指令之后的另一個(gè)指令的地址。
在本發(fā)明的可編程控制器中,使用在整個(gè)指令中的一個(gè)特定位置提供的一位作為“停止標(biāo)志”。只有具有置成“1”的位的指令才能在產(chǎn)生中斷請(qǐng)求信號(hào)時(shí)變?yōu)橹兄箍删幊炭刂破鞯闹噶睢?br>
圖54和55是本發(fā)明的可編程控制器的方塊圖,它能完成前述的停止功能。在附圖中只示出與本發(fā)明的這個(gè)實(shí)施例有關(guān)的電路方塊。圖中所示的STM代表一個(gè)狀態(tài)機(jī),用于控制可編程控制器的啟動(dòng)/停止操作。狀態(tài)機(jī)STM接收控制信號(hào)STOP和END,以便知道停止指令的執(zhí)行情況和停止標(biāo)志,并且還接收一個(gè)啟動(dòng)請(qǐng)求信號(hào)和一個(gè)中斷請(qǐng)求信號(hào)?,F(xiàn)在描述這些控制信號(hào)。把從IF級(jí)的指令存貯器IM中提出的一個(gè)指令存入流水線寄存器IF/ID的指令寄存器IR中。DC級(jí)的解碼器塊DC對(duì)該指令字解碼,并把指令字的解碼結(jié)果寫入流水線寄存器ID/EX中。如果解碼的指令是一停止指令,則向在流水線寄存器ID/EX中提供的控制信號(hào)STOP寫入1。此外,為了執(zhí)行由一停止標(biāo)志表示的指令,對(duì)該指令解碼,并且向在流水線寄存器ID/EX中提供的控制信號(hào)END寫入1,這表明該指令已設(shè)有一個(gè)停止標(biāo)記。根據(jù)這些控制信號(hào)STOP和END,有可能使?fàn)顟B(tài)機(jī)知道停止指令和帶有停止標(biāo)志的指令已被執(zhí)行。
向流水線寄存器IF/ID輸入代表指令存貯器IM的地址的程序計(jì)數(shù)器PC的值。隨后,將該值依次送到ID/EX和EX/MEM流水線寄存器,以便用于計(jì)算中止可編程控制器時(shí)程序計(jì)數(shù)器PC的值。當(dāng)可編程控制器由設(shè)在流水線寄存器ID/EX或EX/MEM中的程序計(jì)數(shù)器PC的值中止時(shí),狀態(tài)機(jī)STM計(jì)算程序計(jì)數(shù)器PC的值、代表該指令解碼結(jié)果的流水線寄存器ID/EX的值、以及變?yōu)橥V箺l件之一的中斷請(qǐng)求信號(hào)。把這樣計(jì)算出來的值寫入程序計(jì)數(shù)器PC,而后再中止可編程控制器。存貯程序計(jì)數(shù)器的值的一個(gè)可以想到的方法包括如下步驟存貯把指令裝入一個(gè)堆棧時(shí)獲得的程序計(jì)數(shù)器的值,當(dāng)可編程控制器中止時(shí)從堆棧取出該值。這種方法使控制更加復(fù)雜。此外,通過流水線寄存器傳送程序計(jì)數(shù)器PC的值,以便用于分支指令。出于這些原因,向狀態(tài)機(jī)STM傳送在流水線寄存器ID/EX或EX/MEM中提供的程序計(jì)數(shù)器的值。然后,按照停止的規(guī)定把這個(gè)值再寫回程序計(jì)數(shù)器PC。
狀態(tài)機(jī)STM按照需要向相關(guān)危險(xiǎn)檢測(cè)單元HDU送出一個(gè)相關(guān)危險(xiǎn)信號(hào)產(chǎn)生請(qǐng)求信號(hào),借此產(chǎn)生一個(gè)相關(guān)危險(xiǎn)信號(hào)。結(jié)果,使指令的執(zhí)行無效,因而有可能在可編程控制器保持中止方式的同時(shí)執(zhí)行一個(gè)無效指令。相關(guān)危險(xiǎn)檢測(cè)單元HDU產(chǎn)生相關(guān)危險(xiǎn)信號(hào)HZD_PC、HZD_IF、HZD_ID、和HZD_EX。其中,信號(hào)HZD_PC中止程序計(jì)數(shù)器PC的增值,信號(hào)HZD_IF使IF級(jí)中的指令取出無效。信號(hào)HZD_ID使ID級(jí)中進(jìn)行的解碼操作的所有結(jié)果的寄存器寫入操作和存貯器訪問操作無效。信號(hào)HZD_EX使EX級(jí)中進(jìn)行的解碼操作的所有結(jié)果的寄存器寫入操作和存貯器訪問操作無效。
圖56表示用于啟動(dòng)/停止控制目的的狀態(tài)機(jī)的狀態(tài)過渡過程。當(dāng)可編程控制器休止時(shí)或接通可編程控制器的電源時(shí),狀態(tài)裝置變到一個(gè)IDLE狀態(tài)。當(dāng)把用于可編程控制器的一個(gè)啟動(dòng)請(qǐng)求信號(hào)輸入到狀態(tài)機(jī)時(shí),狀態(tài)機(jī)從IDLE狀態(tài)變到S0。結(jié)果,可編程控制器開始執(zhí)行指令。如果狀態(tài)機(jī)的狀態(tài)是S0,則可編程控制器繼續(xù)像原樣執(zhí)行指令。如果執(zhí)行停止指令,則狀態(tài)裝置的狀態(tài)從S0變到S11。在此之后,狀態(tài)機(jī)依次變到S12和S13。在狀態(tài)機(jī)的狀態(tài)過渡期間執(zhí)行所要求的停止操作,然后中止可編程控制器。狀態(tài)機(jī)的狀態(tài)又變到IDLE狀態(tài)。
如果當(dāng)狀態(tài)機(jī)當(dāng)前正在執(zhí)行指令的狀態(tài)是S0時(shí)產(chǎn)生一個(gè)中斷請(qǐng)求信號(hào),則狀態(tài)機(jī)的狀態(tài)由S0變到S21。結(jié)果,可編程控制器在執(zhí)行指令的同時(shí)等待具有停止標(biāo)志的指令的執(zhí)行。如果當(dāng)狀態(tài)機(jī)的狀態(tài)是S21時(shí)執(zhí)行具有停止標(biāo)志的指令,則狀態(tài)機(jī)的狀態(tài)從S21變到S22、S23、S24、和S25。在狀態(tài)機(jī)的狀態(tài)過渡期間執(zhí)行所需的停止操作,狀態(tài)機(jī)的狀態(tài)然后變到IDLE狀態(tài),從而中止了可編程控制器。如果當(dāng)狀態(tài)裝置的狀態(tài)是S21并且可編程控制器等待帶有停止標(biāo)志的指令的同時(shí)執(zhí)行停止指令,則狀態(tài)機(jī)的狀態(tài)從S21變到S11。結(jié)果,狀態(tài)機(jī)的狀態(tài)變到執(zhí)行停止指令時(shí)進(jìn)行的停止操作。如果狀態(tài)機(jī)能夠變到如處于S0或S21那樣的多種狀態(tài),則預(yù)先確定狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移的優(yōu)先權(quán),象圖56中所示的優(yōu)先權(quán)(1)和(2)那樣。如果在狀態(tài)S0執(zhí)行該指令時(shí)同時(shí)出現(xiàn)停止指令的執(zhí)行和中斷請(qǐng)求信號(hào)的產(chǎn)生,則狀態(tài)機(jī)的狀態(tài)變到S11。此外,在執(zhí)行停止指令時(shí),該操作變到中止操作。
圖57和58是表示該實(shí)施例的可編程控制器的中止操作的定時(shí)圖。圖57表示在執(zhí)行停止指令時(shí)的中止操作,其中假定停止指令存貯在指令存貯器IM的地址3。在圖57中,STATE代表用于啟動(dòng)/停止的控制目的的狀態(tài)機(jī)的狀態(tài),PC KEEP代表當(dāng)可編程控制器處在中止方式時(shí)用于臨時(shí)存貯存在在狀態(tài)機(jī)中的程序計(jì)數(shù)器PC的一個(gè)寄存器。PCWTRQ代表在狀態(tài)機(jī)把一個(gè)值寫入程序計(jì)數(shù)器PC中時(shí)使用的控制信號(hào)。IF_ID_IR代表一個(gè)指令寄存器,用于提取存在于流水線寄存器IF/ID中的指令。HZD_PC代表一個(gè)相關(guān)危險(xiǎn)信號(hào),用于中止程序計(jì)數(shù)器PC的增值,HZD_IF代表一個(gè)相關(guān)危險(xiǎn)信號(hào),用于利用NOP指令(即,空操作指令)改寫從指令存貯器IM取出的指令。
當(dāng)執(zhí)行停止指令時(shí),對(duì)該指令解碼,并將1寫入控制信號(hào)STOP,表示在流水線寄存器ID/EX中的相應(yīng)指令是一個(gè)停止指令。當(dāng)在流水線寄存器ID/EX中提供的控制信號(hào)STOP的值是1時(shí),用于啟動(dòng)/停止控制目的的狀態(tài)機(jī)從S0變到S1。隨后,狀態(tài)機(jī)無條件地變到S12、S13、和IDLE。當(dāng)狀態(tài)機(jī)的狀態(tài)是S11時(shí),把流水線寄存器ID/EX中的程序計(jì)數(shù)器PC的值寫入PCKEEP。當(dāng)狀態(tài)是S12時(shí),把PCKEEP的值寫入程序計(jì)數(shù)器PC。這樣寫入的值代表停止指令的地址。
圖58表示按照中斷請(qǐng)求信號(hào)中止可編程控制器時(shí)的中止操作。假定在指令存貯器地址3存貯具有停止標(biāo)志的一個(gè)指令,并且在執(zhí)行該指令之前發(fā)出一個(gè)中斷請(qǐng)求信號(hào)INT_RQ。圖58中所示的相應(yīng)信號(hào)與圖57相同。當(dāng)輸入中斷請(qǐng)求信號(hào)INT_RQ時(shí),用于啟動(dòng)/停止控制目的的狀態(tài)機(jī)從S0變到S21,借此使可編程控制器等待具有停止標(biāo)志的指令的執(zhí)行。為執(zhí)行該具有停止標(biāo)志的指令,對(duì)該指令解碼,并把1寫入流水線寄存器ID/EX的控制信號(hào)END,這表明相應(yīng)的指令上設(shè)有停止標(biāo)志。當(dāng)流水線寄存器ID/EX中的控制信號(hào)END的值為1時(shí),用于啟動(dòng)/停止控制目的的狀態(tài)機(jī)從S21變到S22。隨后,狀態(tài)機(jī)無條件地變到S23、S24、S25、和IDLE。當(dāng)狀態(tài)機(jī)的狀態(tài)是S23時(shí),把流水線寄存器EX/MEM中的程序計(jì)數(shù)器PC的值加1所得的值寫入PCKEEP。當(dāng)狀態(tài)裝置的狀態(tài)是S24時(shí),把PCKEEP的值寫入程序計(jì)數(shù)器PC。這樣寫入的值代表具有停止標(biāo)志的指令的后邊的另一個(gè)指令的地址。
在可編程控制器內(nèi),如果一個(gè)輸入程序的指令碼是一個(gè)順序指令,則在一個(gè)地址上完成一次操作。準(zhǔn)備計(jì)算的目標(biāo)的變址意味著使用變址寄存器的數(shù)據(jù)和在一指令碼中描述的常數(shù)立即值的和作為要操作的對(duì)象的地址。
圖59表示一個(gè)ST指令的實(shí)例,ST指令是位操作指令之一,并且按照ST指令,累加器(ACC)讀出要操作的位的細(xì)節(jié)。變址寄存器(IX)的數(shù)據(jù)代表15,指令碼中的立即值是3。因此,它們的和是18。因此,圖59(a)所示的STIXX3指令與圖59(b)所示的STX18指令相同。圖59(c)所示的存貯器的地址1處的字?jǐn)?shù)據(jù)中的位8要按照STX18指令進(jìn)行操作。硬件累加器ACC讀出位8的細(xì)節(jié)。
處理器僅對(duì)先前在指令碼中用立即值表示的地址處的存貯器數(shù)據(jù)進(jìn)行操作。因此可以利用硬件來執(zhí)行位處理。如果使用這樣一種處理器來執(zhí)行變址指令,那么必須服從圖60所示的這種執(zhí)行順序。
開始,在步驟21,從變址寄存器讀出數(shù)據(jù)(IX),并將這樣讀出的數(shù)據(jù)(IX)輸入到寄存器部分中的通用寄存器的r2。在步驟22,把變址寄存器的數(shù)據(jù)(r2)加到指令碼的一個(gè)立即值(m)上,并把所得的和輸入到通用寄存器中的r1。在步驟23,把r1右移4位的位置以便把字地址和該字中的位的位置分開。分別把代表字地址的“結(jié)果”和代表該字中位的位置的“余數(shù)”輸入到通用寄存器中的r3和r4。
在步驟24,讀出由r3尋址的包括要操作的位的字?jǐn)?shù)據(jù)。把這樣讀出的字?jǐn)?shù)據(jù)輸入到通用寄存器中的r5。在步驟25,把r5的字?jǐn)?shù)據(jù)右移4位,從而把要操作的位移到位0。提取包括在r5中的待操作位,并把這樣提取的位輸入到通用寄存器的r6。在該實(shí)例中,把提取的位送到位0。
必須在步驟26保存原始數(shù)據(jù),并且把地址0處的當(dāng)前數(shù)據(jù)暫時(shí)送到r7。在步驟27,把具有送到位0的待操作位的r6的數(shù)據(jù)送到存貯器的預(yù)定地址0。因此,最后作出了對(duì)實(shí)際的位處理操作的安排。
在步驟28,執(zhí)行STX0,它是一個(gè)針對(duì)地址0的位0的位處理指令。最后,在步驟29,把地址0的原始數(shù)據(jù)r7返回到地址0,并且完成了變址指令的執(zhí)行。
如果輸入程序的指令碼是一個(gè)定時(shí)器或計(jì)數(shù)器指令,那么待操作的對(duì)象變?yōu)轭A(yù)置的數(shù)據(jù)。預(yù)置的數(shù)據(jù)的變址意味著,使用變址寄存器的一個(gè)值和在指令碼中的描述的常數(shù)立即值的和作為在預(yù)置值數(shù)據(jù)區(qū)內(nèi)的一個(gè)地址。圖62表示一個(gè)TMR指令的實(shí)例。換言之,當(dāng)輸入條件變?yōu)榻油〞r(shí),對(duì)時(shí)間進(jìn)行計(jì)數(shù),直到輸入條件變?yōu)閿嚅_為止,同時(shí)使用已規(guī)定的預(yù)置數(shù)據(jù)值作為經(jīng)過時(shí)間值的初始值。當(dāng)經(jīng)過時(shí)間值變?yōu)?時(shí),定時(shí)器的觸點(diǎn)接通。這里,變址寄存器(IX)是15,指令碼中的立即值是3。因此,圖61(a)所示的指令TMR0和IXDT3與指令TMR0和DT18相同。通過使用存貯器地址18的字?jǐn)?shù)據(jù)作為預(yù)置數(shù)據(jù),并且通過用硬件讀出該字?jǐn)?shù)據(jù)的內(nèi)容,來計(jì)算TMR指令,如圖61(c)所示。
在使用硬件執(zhí)行位處理操作的處理器中,通過作為執(zhí)行定時(shí)器或計(jì)數(shù)器指令的結(jié)果的定時(shí)器數(shù)或計(jì)數(shù)器數(shù)來唯一地確定存貯預(yù)置數(shù)據(jù)的存貯器地址。有可能只計(jì)算這個(gè)數(shù)據(jù)作為預(yù)置值。如果試圖使用這樣一個(gè)處理器執(zhí)行預(yù)置數(shù)據(jù)的變址指令,則必須按照如圖62所示的執(zhí)行順序。
開始時(shí),在步驟31,讀出變址寄存器的數(shù)據(jù)(IX),并且把這樣讀出的數(shù)據(jù)輸入到設(shè)在寄存器部分的通用寄存器的r1中。在步驟32,把變址寄存器的數(shù)據(jù)(r1)和指令碼中的立即值(m)彼此相加。換言之,計(jì)算在有待實(shí)際操作的預(yù)置數(shù)據(jù)區(qū)中的存貯器地址,并把計(jì)算結(jié)果輸入到通用寄存器的r3。在步驟33,讀出由r3尋址的字?jǐn)?shù)據(jù),即預(yù)置數(shù)據(jù),并且把這樣讀出的字?jǐn)?shù)據(jù)輸入到通用寄存器的r2。
必須在步驟34保存原始數(shù)據(jù),并把在現(xiàn)行地址“n”的預(yù)置數(shù)據(jù)暫時(shí)送到r7。在步驟35,把r2中的字?jǐn)?shù)據(jù)暫時(shí)送到由定時(shí)器的數(shù)或計(jì)數(shù)器數(shù)唯一確定的地址“n”。結(jié)果,最后作出了實(shí)際的定時(shí)器或計(jì)數(shù)器指令的安排。
在步驟36,執(zhí)行TMRn,TMRn是針對(duì)待操作的預(yù)置值的一個(gè)操作指令。最后,在步驟37,把已保存的原始數(shù)據(jù)r7返回到地址“n”。結(jié)果,完成了變址指令的執(zhí)行。
在以前描述的常規(guī)的可編程控制器中,當(dāng)和順序指令以及定時(shí)器或計(jì)數(shù)器指令一起執(zhí)行變址指令時(shí),如果把變址指令分成幾條指令,并且如果按順序執(zhí)行該指令流,那么就有可能獲得正確的結(jié)果。
然而,這種方法要求增大程序存貯器,這又導(dǎo)致一個(gè)較慢的執(zhí)行速率。
現(xiàn)在參照?qǐng)D63-65描述按本發(fā)明的第八實(shí)施例的可編程控制器。
在附圖中,A代表一包括5個(gè)部分的處理器。下面將要描述的一個(gè)指令碼6執(zhí)行一個(gè)由待執(zhí)行的操作尋址的順序指令。標(biāo)號(hào)1代表一個(gè)指令取出部分,指令碼6就輸入到這個(gè)指令取出部分。標(biāo)號(hào)2代表一個(gè)指令解碼部分,包括r0-r7。指令解碼部分2設(shè)有一個(gè)寄存器組21,它包括用于讀、寫數(shù)據(jù)的通用寄存器21a和指令解碼器22。指令解碼部分2對(duì)從指令取出部分1輸入的指令碼6進(jìn)行解碼,并且執(zhí)行這樣解碼的指令。
標(biāo)號(hào)3代表一個(gè)地址計(jì)算部分,它設(shè)有一個(gè)由CPU或者類似元件組成的操作單元(ALU)31。地址計(jì)算部分3根據(jù)由指令解碼部分2解碼的指令碼6計(jì)算要執(zhí)行的指令的地址。ALU 31設(shè)有一個(gè)選擇器7,用于在該指令是一變址指令的條件下輸出一個(gè)地址。下面將會(huì)詳細(xì)地描述這個(gè)選擇器7。
標(biāo)號(hào)4代表一個(gè)存貯器訪問部分,它設(shè)有外部存貯器41。從ALU 31向外存貯器41輸入一個(gè)地址,并且還從通用寄存器21a向外存貯器41寫入數(shù)據(jù)。從外存貯器41讀出并輸出數(shù)據(jù)。
標(biāo)號(hào)5代表一個(gè)操作部分,它設(shè)有由CPU或類似元件組成的操作單元(ALU)51和位累加器(BACC)52。從存貯器訪問部分4向操作部分5輸入待操作的數(shù)據(jù),并且把數(shù)據(jù)寫入通用寄存器21a,并進(jìn)行位操作。
現(xiàn)在描述處理器A的操作。指令碼6設(shè)有一個(gè)一位的顯示標(biāo)記61、一個(gè)指令62、和一個(gè)立即值地址63。顯示標(biāo)記61顯示變址指令是否存在,用于間接規(guī)定待計(jì)算的對(duì)象。當(dāng)輸入指令碼6時(shí),如果該指令是不變址的,則經(jīng)地址計(jì)算部分3向外存貯器41直接輸出包括在指令碼6中的一個(gè)立即值。針對(duì)要計(jì)算的一個(gè)位,和包括在指令碼6中的位的位置規(guī)定數(shù)據(jù)一起,執(zhí)行一個(gè)規(guī)定的操作。
在指令變址的情況下,參照?qǐng)D64的方塊圖描述地址計(jì)算程序。指令碼6設(shè)有顯示標(biāo)記61,用于顯示該指令是否是變址指令。把顯示標(biāo)記61的標(biāo)記位和包括在指令碼6中的立即值地址數(shù)據(jù)輸入到選擇器7。選擇器7連接到設(shè)在處理器中的通用寄存器21a上。由硬件預(yù)選確定通用寄存器21a中的哪個(gè)寄存器連接到選擇器7上。在該例中,寄存器r1連接到選擇器7,并把該寄存器的數(shù)據(jù)輸入到選擇器7。如果顯示標(biāo)記61顯示包括在指令碼6中的是變址指令,選擇器7把r1寄存器的數(shù)據(jù)輸出到外存貯器,以此作為要操作的地址。如果不是這種情況,則輸出指令碼6中的立即值63。隨后的操作和常規(guī)的位處理指令的操作相同。
下面根據(jù)圖65的流程圖描述使用硬件的變址指令的執(zhí)行程序。開始時(shí),在步驟1讀出變址寄存器的數(shù)據(jù)(IX),并將這樣讀出的數(shù)據(jù)輸入到設(shè)在寄存器組21中的通用寄存器21a的r2寄存器。在步驟2,將r2寄存器的數(shù)據(jù)和包括在指令碼6中的立即值相加在一起,并把要計(jì)算的地址輸入到通用寄存器21a的寄存器r1。在步驟3執(zhí)行變址指令STIXX3。
以此方式,通過只從變址寄存器讀取數(shù)據(jù),并且通過在通用寄存器21a的寄存器r1中設(shè)定一個(gè)操作地址計(jì)算值,就可執(zhí)行變址指令。
在按本發(fā)明第八實(shí)施例的可編程控制器中,在指令碼6中設(shè)置顯示標(biāo)記61,該顯示標(biāo)記61表示間接規(guī)定要計(jì)算的對(duì)象的變址指令是否存在。選擇器7連接到通用寄存器21a,并且根據(jù)使用硬件對(duì)顯示標(biāo)記61的識(shí)別來執(zhí)行一個(gè)變址指令,同是使用通用寄存器21a的內(nèi)容作為要操作的對(duì)象的地址。與對(duì)包括在指令碼6中的一個(gè)地址進(jìn)行操作的常規(guī)可編程控制器相比,本發(fā)明的可編程控制器不需要各種預(yù)處理指令,這又導(dǎo)致較小的程序存貯器容量。因此,有可能縮短執(zhí)行變址指令操作所需要的處理時(shí)間。
指令碼6是由待操作的對(duì)象尋址的順序指令,因此不再需要位處理指令的各種預(yù)處理指令。具有邏輯條件說明的順序指令(邏輯條件包括例如變址的接觸點(diǎn)或線圈)的執(zhí)行縮短了處理時(shí)間。
選擇器7設(shè)在地址計(jì)算部分3中。因此,如果作為顯示標(biāo)記61的識(shí)別結(jié)果是指令碼6包括變址指令,則輸出通用寄存器21a的內(nèi)容,以此作為地址。如果不是這種情況,則輸出指令碼6的立即值,以此作為地址。可能利用一個(gè)簡單的結(jié)構(gòu)來執(zhí)行順序的變址指令。
包括通用寄存器21a、地址計(jì)算部分3、和存貯器訪問部分4的處理器A的結(jié)構(gòu),具有1位的顯示標(biāo)記61的指令碼6的結(jié)構(gòu);以及位指令的內(nèi)容都不限于在第八實(shí)施例中公開的這些。
現(xiàn)在參照?qǐng)D66至68描述按本發(fā)明第九實(shí)施例的可編程控制器。在第九實(shí)施例中將只描述和第八實(shí)施例的可編程控制器不同的特點(diǎn)。用相同的標(biāo)號(hào)表示和第一實(shí)施例的元件的特征大體相同的元件。
標(biāo)號(hào)B代表一個(gè)包括5個(gè)部分的處理器。指令碼6完成定時(shí)器或計(jì)數(shù)器指令,同時(shí)使用待操作的對(duì)象作為預(yù)置的數(shù)據(jù)。選擇器7設(shè)在存貯器訪問部分,并且連接到外存貯器41的讀出數(shù)據(jù)通道,從而可從外存貯器讀出數(shù)據(jù)。
現(xiàn)在描述處理器B的操作。在收到指令碼6的輸入時(shí),如果該指令不是變址的,則經(jīng)由地址計(jì)算部分3向外存貯器41輸出由包括在指令碼6中的定時(shí)器或計(jì)數(shù)器數(shù)所唯一確定的預(yù)置地址。經(jīng)由選擇器7把外存貯器41輸出的數(shù)據(jù)輸入到處理部分的ALU 51。ALU 51處理該數(shù)據(jù),以此作為預(yù)置值。
在指令變址的情況下,指令碼6設(shè)有顯示標(biāo)記61,用于顯示該指令是否是變址指令,如圖67方塊圖所示,把顯示標(biāo)記61的標(biāo)記位輸入到選擇器7。
選擇器7連接到設(shè)在處理器B中的通用寄存器21a。通過硬件預(yù)先確定通用寄存器21a中的哪個(gè)寄存器連接到選擇器7上。在該例中,寄存器r2連到選擇器7。向選擇器7輸入使用由包括在指令碼6中的定時(shí)器或計(jì)數(shù)器數(shù)所唯一確定的地址來從外存貯器41讀出的數(shù)據(jù)。
如果顯示標(biāo)記61是顯示包括在指令碼6中的變址指令,選擇器7輸出從寄存器r2或外存貯器41讀出的數(shù)據(jù)。第九實(shí)施例的可編程控制器的隨后的操作與常規(guī)的定時(shí)器或計(jì)數(shù)器指令的操作相同。
下面描述根據(jù)圖68所示的流程圖利用硬件來定時(shí)器或計(jì)數(shù)器指令的預(yù)置值的一個(gè)指令進(jìn)行變址的執(zhí)行程序。開始時(shí),在步驟11,讀出變址寄存器的數(shù)據(jù)(IX),并把這樣讀出的數(shù)據(jù)輸入到設(shè)在寄存器組21中的通用寄存器21a中的寄存器r1。在步驟12,把寄存器r1的數(shù)據(jù)和指令碼6中的立即值相加在一起,并把加法的結(jié)果輸入到通用寄存器21a中的寄存器r3。在步驟13,讀出寄存器r3尋址的字?jǐn)?shù)據(jù),即預(yù)置數(shù)據(jù),并把如此讀出的數(shù)據(jù)輸入到寄存器r2。隨后,在步驟14,執(zhí)行TMRn指令,它是一個(gè)針對(duì)待操作的預(yù)置數(shù)據(jù)的操作。
以此方式,通過只從變址寄存器讀出數(shù)據(jù),并且通過在寄存器r2中設(shè)定預(yù)置值數(shù)據(jù)來執(zhí)行變址指令修改的定時(shí)器或計(jì)數(shù)器指令。
在按照第九實(shí)施例的這樣一種可編程控制器中,在指令碼6中設(shè)有顯示標(biāo)記61,標(biāo)記61表示是否存在用于間接規(guī)定待計(jì)算的對(duì)象的變址指令。連接到通用寄存器21a的選擇器7根據(jù)使用硬件對(duì)顯示標(biāo)記61的識(shí)別來執(zhí)行一個(gè)變址指令,同時(shí)使用通用寄存器21a的內(nèi)容作為要操作的預(yù)置值數(shù)據(jù)。與計(jì)算通過包括在指令碼6中的定時(shí)器或計(jì)數(shù)器數(shù)唯一確定的預(yù)置數(shù)據(jù)的常規(guī)可編程控制器相比,本發(fā)明的可編程控制器不需要各種預(yù)處理指令,這將使程序存貯器的容量較小。因此有可能縮短執(zhí)行變址指令操作所需的處理時(shí)間。
指令碼6是定時(shí)器或計(jì)數(shù)器指令,它使用待操作的對(duì)象作為預(yù)置數(shù)據(jù),這又省去了位處理指令的各種預(yù)處理指令的必要性。結(jié)果,通過縮短處理時(shí)間就可執(zhí)行具有控制條件說明的定時(shí)器或計(jì)數(shù)據(jù)指令,該控制條件包括這樣一種變址定時(shí)器或計(jì)數(shù)。
在從外存貯器讀出數(shù)據(jù)的數(shù)據(jù)通道中設(shè)有選擇器7。因此,如果作為顯示標(biāo)記61的識(shí)別的結(jié)果是指令碼6包括變址指令,則輸出通用寄存器21a的內(nèi)容,以此作為地址。如果不是這種情況,則輸出從外存貯器41讀出的數(shù)據(jù)。有可能執(zhí)行結(jié)構(gòu)簡單的變址定時(shí)器或計(jì)數(shù)器指令。
包括通用寄存器21a、地址計(jì)算部分3和存貯器訪問部分4的處理器A的結(jié)構(gòu)、具有顯示標(biāo)記為1位的顯示標(biāo)記61的指令碼6的結(jié)構(gòu)、以及指令的內(nèi)容都不限于在第九實(shí)施例中公開的這些。
專門設(shè)計(jì)的硬件的結(jié)構(gòu)、指令集、指令結(jié)構(gòu)、以及操作碼部分的配置都不限于該實(shí)施例中公開的這些。
本發(fā)明的可編程控制器設(shè)有統(tǒng)一的指令結(jié)構(gòu)和專門設(shè)計(jì)的硬件,使得該可編程控制器能和該統(tǒng)一的指令結(jié)構(gòu)相適應(yīng)。簡化了該專門設(shè)計(jì)的硬件和它的控制。結(jié)果,由于把該專用硬件(處理器)的指令執(zhí)行級(jí)形成多個(gè)級(jí),所以減小了該專用硬件(處理器)及其控制的復(fù)雜性。由于很容易把指令執(zhí)行級(jí)形成多級(jí),所以可改善整個(gè)可編程控制器的處理速度。
對(duì)本發(fā)明的可編程控制器進(jìn)行設(shè)計(jì),使其能根據(jù)可編程控制器的基本處理操作之一的位操作指令的結(jié)果、把每個(gè)指令級(jí)的執(zhí)行說明信息修改成一個(gè)預(yù)定的值。結(jié)果,不中斷流水線處理過程而借助于專用于該可編程控制器的位操作處理過程,來執(zhí)行使隨后的應(yīng)用指令無效(即,阻止其執(zhí)行)的控制操作。
在本發(fā)明的可編程控制器中,通過對(duì)于每個(gè)時(shí)鐘把流水線寄存器ID/EX的EX、M、WB級(jí)轉(zhuǎn)移到隨后一級(jí)來傳送指令的執(zhí)行說明信息??梢詫?shí)現(xiàn)簡單但有效的執(zhí)行控制。
對(duì)本發(fā)明的可編程控制器進(jìn)行安排,使其能實(shí)現(xiàn)統(tǒng)一的處理,即把每一級(jí)中處理的數(shù)據(jù)在完成該級(jí)中的處理之后保持在下一級(jí)的流水線寄存器中??墒箤S糜布臄?shù)據(jù)總線簡單,有效。
本發(fā)明的可編程控制器不需要插入NOP指令來解決由于讀出通用寄存器而產(chǎn)生的流水線的相關(guān)危險(xiǎn)問題。因此,和需要插入NOP指令的可編程控制器相比,有可能減小程序的長度和加快執(zhí)行速度。
本發(fā)明的可編程控制器不需要插入NOP指令來解決按照裝入指令后面的指令讀出已由裝入指令修改更新的通用寄存器時(shí)發(fā)生的流水線相關(guān)危險(xiǎn)問題。因此,有可能減小程序長度。
如果裝入指令之后的指令是用于讀出料想已由裝入指令更新的通用寄存器的存貯指令,則本發(fā)明的可編程控制器不要求中止存貯指令。因此有可能加快可編程控制器的處理過程。
如果在裝入指令之后再之后的指令是用于讀出料想由裝入指令更新的通用寄存器的存貯指令,那么,本發(fā)明的可編程控制器不需要中止該存貯指令。因此有不可能加快可編程控制器加快的處理過程。
本發(fā)明的可編程控制器不需要插入NOP指令來解決在滿足分支條件的情況下會(huì)執(zhí)行無效指令的流水線相關(guān)危險(xiǎn)問題。因此有可能減小程序長度。
按照5級(jí)流水線結(jié)構(gòu)的可編程控制器,激勵(lì)程序計(jì)數(shù)器的時(shí)鐘信號(hào)變化的時(shí)刻和激勵(lì)指令寄存器的時(shí)鐘信號(hào)變化的時(shí)刻之間的時(shí)間間隔很小。即使必須使用比指令存貯器所需速度更快的存貯器作為指令存貯器,也有可能延長確定指令存貯器地址和讀出指令存貯的值之間的時(shí)間。因此,可使用較慢的存貯器,這又有助于成本的降低。
按照本發(fā)明的可編程控制器,可編程控制器有可能正確執(zhí)行分支指令以更新程序計(jì)數(shù)器。
按照本發(fā)明的可編程控制器,可編程控制器有可能正確執(zhí)行微分指令以更新程序計(jì)數(shù)器。
按照本發(fā)明的可編程控制器,可編程控制器有可能在啟動(dòng)后立即正確地取出指令。
按照具有本發(fā)明的5級(jí)流水線結(jié)構(gòu)的可編程控制器,對(duì)于其操作難以在一個(gè)流水線級(jí)的時(shí)間周期內(nèi)完成的指令,通過中止流水線操作一段所需長度的時(shí)期就可能很容易地執(zhí)行該指令。
按照具有本發(fā)明的5級(jí)流水線結(jié)構(gòu)的可編程控制器,即使不滿足其操作難以在一個(gè)流水線級(jí)的時(shí)間周期內(nèi)完成的指令的執(zhí)行條件,也有可能防止流水線的浪費(fèi)時(shí)間的中止。
按照具有本發(fā)明的5級(jí)流水線結(jié)構(gòu)的可編程控制器,沒有必要按照流水線結(jié)構(gòu)重新設(shè)計(jì)操作塊,而是可以有效地利用過去的設(shè)計(jì)資源。
按照具有本發(fā)明的5級(jí)流水線結(jié)構(gòu)的可編程控制器,有可能執(zhí)行需要多次改寫操作的指令,而這些改寫操作是不能從普通的流水線操作得到的。
按照具有本發(fā)明的5級(jí)流水線結(jié)構(gòu)的可編程控制器,有可能在流水線寄存器中保持一個(gè)操作的變?cè)@又可能減小操作塊的尺寸。
按照本發(fā)明,在更新指令中的一位的情況下,或者在執(zhí)行需要在執(zhí)行指令時(shí)在存貯器讀、寫多個(gè)字的稱作位處理指令的指令的情況下,借助于5級(jí)流水線結(jié)構(gòu)的可編程控制器,通過采用本發(fā)明的地址計(jì)算方法和存貯器訪問方法,有可能有效地執(zhí)行該指令而不浪費(fèi)一個(gè)流水線周期。此外,作為采用本發(fā)明的控制方法的結(jié)果,有可能協(xié)調(diào)地執(zhí)行位處理指令之后的指令而不必把NOP指令插入指令存貯器中。在能以比具有3級(jí)流水線結(jié)構(gòu)的常規(guī)可編程控制器更高的速度處理操作的具有5級(jí)流比線結(jié)構(gòu)的可編程控制器中,由于采用了存貯器,所以能夠執(zhí)行和常規(guī)的微分指令相同的微分指令。結(jié)果,減少了用于地址總線的信號(hào)線數(shù)目。如果以此方式處理與微分指令一起使用的存貯器改寫地址,那么,在執(zhí)行該微分指令時(shí)實(shí)現(xiàn)控制操作就變得極其容易。有可能防止可編程控制器的誤操作,同時(shí),作為采用這種控制方法的結(jié)果能把微分指令寫回存貯器而不必在指令存貯器中插入NOP指令。此外,作為控制的執(zhí)行結(jié)果,即使在進(jìn)行處理的條件下也可能協(xié)調(diào)地執(zhí)行一個(gè)指令。
按照本發(fā)明,可編程控制器確定包括多個(gè)標(biāo)記在內(nèi)的指令執(zhí)行條件,并且僅當(dāng)在指令執(zhí)行級(jí)中滿足指令執(zhí)行條件時(shí)才執(zhí)行一個(gè)特定的指令。結(jié)果,有可能對(duì)是執(zhí)行指令還是使指令無效的判定進(jìn)行控制。
在借助于更新構(gòu)成指令執(zhí)行條件的標(biāo)記的一個(gè)標(biāo)記設(shè)定指令、或者借助于諸如算術(shù)操作指令之類的指令來更新指令執(zhí)行條件之后,執(zhí)行下一個(gè)緊跟的指令。因此,有可能協(xié)調(diào)地控制有關(guān)執(zhí)行該指令還是使該指令無效的判定。
如果在構(gòu)成指令執(zhí)行條件的標(biāo)記中包括一個(gè)由位處理指令的流水線級(jí)的最后部分更新的位累加器,那么,通過中止根據(jù)指令執(zhí)行條件確定是執(zhí)行指令還是使指令無效而勿需在指令存貯器中插入NOP指令,直到確定了指令執(zhí)行條件時(shí)為止,就有可能協(xié)調(diào)地控制有關(guān)是執(zhí)行該指令還是使該指令無效的判定。
按照具有本發(fā)明的5級(jí)流水線結(jié)構(gòu)的可編程控制器,通過使用用于啟動(dòng)/停止控制目的的狀態(tài)機(jī)來控制可編程控制器的啟動(dòng)/停止操作,就有可能處理各種復(fù)雜的要求,條件是必須滿足各種停止條件以及可編程控制器在中止后的有關(guān)其狀態(tài)的規(guī)格。如先前所述,通過流水線寄存器來傳送取出指令時(shí)獲得的程序計(jì)數(shù)器的值,并且根據(jù)傳送的值設(shè)定程序計(jì)數(shù)器在可編程控制器處于中止模式時(shí)的值。因此,按照技術(shù)要求有可能很容易實(shí)現(xiàn)中止操作。作為采用可使指令無效的結(jié)構(gòu)的結(jié)果,有可能防止在啟動(dòng)中止操作后執(zhí)行無效的指令。
在本發(fā)明的可編程控制器中,在指令碼中提供顯示標(biāo)記,用于顯示間接規(guī)定要操作的對(duì)象的變址指令是否存在。連接到通用寄存器的選擇器根據(jù)顯示標(biāo)記的識(shí)別結(jié)果利用硬件來執(zhí)行該變址指令,同時(shí)使用通用寄存器的內(nèi)容作為要計(jì)算的對(duì)象。結(jié)果,不再需要各種預(yù)處理指令,減小了程序長度,這又可能縮短完成變址指令操作所需的時(shí)間。
除了由可編程控制器獲得的這些效果以外,該可編程控制器還包括一個(gè)指令碼,它是一個(gè)由待操作的對(duì)象尋址的順序指令。和對(duì)包括在指令碼中的一個(gè)地址進(jìn)行操作的常規(guī)可編程控制器相比,本發(fā)明的可編程控制器能通過縮短處理時(shí)間來執(zhí)行具有說明的順序指令,這些說明包含邏輯條件,例如變址的接觸點(diǎn)或線圈。
除了由可編程控制器獲得的這些效果以外,可編程控制器還包括一個(gè)選擇器,它設(shè)在地址計(jì)算部分中。如果從顯示標(biāo)記的識(shí)別中得到的是該指令碼包括一個(gè)變址指令,。那么,就輸出通用寄存器的內(nèi)容,以此作為地址。如果不是這種情況,就輸出包括在指令碼中的一個(gè)立即值,以此作為地址,并且有可能以簡單的配置執(zhí)行變址的順序指令。
除了由可編程控制器獲得的這些效果外,可編程控制器還包括一個(gè)指令碼,它是一個(gè)定時(shí)器或計(jì)數(shù)器指令。該定時(shí)器或計(jì)數(shù)器指令使用預(yù)置數(shù)據(jù)作為要操作的對(duì)象。常規(guī)的可編程控制器計(jì)算由包括在指令碼中的定時(shí)器或計(jì)數(shù)器數(shù)所唯一確定的預(yù)置數(shù)據(jù)。與該常規(guī)的可編程控制器相比,本發(fā)明的可編程控制器不使用各種預(yù)處理指令。通過縮短處理時(shí)間,有可能執(zhí)行具有說明(包括控制條件,如變址的定時(shí)器或計(jì)數(shù)器)的定時(shí)器或計(jì)數(shù)器指令。
除了由可編程控制器獲得的這些效果外,可編程控制器還包括一個(gè)選擇器,它設(shè)在從外存貯器讀出數(shù)據(jù)和一個(gè)數(shù)據(jù)通道中。如果作為顯示標(biāo)記的識(shí)別結(jié)果得到的是指令碼包括一個(gè)變址指令,則選擇器輸出通用寄存器內(nèi)容。如果不是這種情況,則選擇器輸出從外存貯器讀出的數(shù)據(jù)。有可能利用一個(gè)簡單的配置來執(zhí)行一個(gè)變址的定時(shí)器或計(jì)數(shù)器指令。
權(quán)利要求
1.一種可編程控制器,包括一個(gè)指令執(zhí)行級(jí),包括第一級(jí),用于執(zhí)行指令取出操作,以便從指令存貯器取出指令;第二級(jí),用于對(duì)指令解碼并從一通用寄存器取出一個(gè)數(shù)值;第三級(jí),用于執(zhí)行算術(shù)指令或邏輯指令、數(shù)據(jù)地址計(jì)算、或目標(biāo)分支有效地址的計(jì)算;第四級(jí),用于訪問數(shù)據(jù)存貯器;以及第五級(jí),用于執(zhí)行下列操作中的一種操作位操作、針對(duì)所述通用寄存器的寫操作、和分支操作,其中,所述可編程控制器執(zhí)行基本的位處理操作和包括多個(gè)位的應(yīng)用處理,按照流水線方式執(zhí)行第一級(jí)至第五級(jí),每個(gè)指令執(zhí)行級(jí)的執(zhí)行說明信息根據(jù)位處理操作的結(jié)果而變?yōu)橐粋€(gè)預(yù)定值,并且根據(jù)位處理指令的結(jié)果來判定使該位處理指令后邊的一個(gè)指令變?yōu)闊o效指令或有效指令。
2.如權(quán)利要求1的可編程控制器,其中直到按照裝入(LOAD)指令獲得的數(shù)據(jù)寫入所述通用寄存器之前,如果所述數(shù)據(jù)對(duì)所述裝入指令之后的指令是必要的,則暫停執(zhí)行所述裝入指令后的一個(gè)指令。
3.如權(quán)利要求2的可編程控制器,其中如果在所述裝入指令之后的指令是一存貯指令,并且如果用所述裝入指令更新所述通用寄存器,而所述通用寄存器保持一所述存貯指令所需的值,則把按照所述裝入指令存貯在第五級(jí)的通用寄存器中的數(shù)據(jù)取到所述存貯指令的第三級(jí)和第四級(jí)中的一級(jí),并且將所述數(shù)據(jù)寫入所述數(shù)據(jù)存貯器。
4.如權(quán)利要求1的可編程控制器,進(jìn)一步包括選擇裝置,設(shè)在第二級(jí)中,用于從通用寄存器輸出、第三級(jí)的ALU輸出、和提供給第四級(jí)的ALU的輸出中選擇出第三級(jí)的ALU的一個(gè)輸入。
5.如權(quán)利要求1的可編程控制器,進(jìn)一步包括選擇裝置,設(shè)在第三級(jí)中,用于從自第二級(jí)輸出至ALU的一個(gè)輸入端的值、提供給第四級(jí)的ALU輸出、以及提供給第五級(jí)的ALU的輸出中選擇第三級(jí)的ALU的一個(gè)輸入。
6.如權(quán)利要求1的可編程控制器,其中第三級(jí)執(zhí)行分支條件的判定,第五級(jí)執(zhí)行分支操作,并且當(dāng)滿足分支條件時(shí),禁止執(zhí)行已經(jīng)包括在流水線中的無效指令。
7.如權(quán)利要求1的可編程控制器,進(jìn)一步包括一個(gè)操作塊,用于執(zhí)行其操作不可能在一個(gè)流水線級(jí)的時(shí)間周期內(nèi)完成的指令,其中,當(dāng)執(zhí)行其操作不能在一個(gè)流水線級(jí)的時(shí)間周期內(nèi)完成的指令時(shí),通過只在完成指令操作所需的時(shí)間周期期間中斷程序計(jì)數(shù)器的增值并使控制信號(hào)無效來中止所述流水線,所述控制信號(hào)包括把一個(gè)值寫回寄存器的信號(hào)和把數(shù)據(jù)寫入數(shù)據(jù)存貯器的信號(hào),借此來執(zhí)行所述指令。
8.如權(quán)利要求7的可編程控制器,當(dāng)執(zhí)行所需的操作時(shí)間不確定的指令時(shí),中止所述流水線,直到從一個(gè)操作塊收到了一個(gè)操作完成信號(hào)為止,借此執(zhí)行所述指令,所述的這個(gè)操作塊是通過中斷一個(gè)程序計(jì)數(shù)器的增值并使控制信號(hào)無效來執(zhí)行所述指令的,所述控制信號(hào)包括把一個(gè)值寫回寄存器中的信號(hào)以及把數(shù)據(jù)寫入數(shù)據(jù)存貯器的信號(hào)。
9.如權(quán)利要求7的可編程控制器,當(dāng)執(zhí)行多個(gè)指令時(shí),中止所述流水線,直到從一個(gè)操作塊收到了一個(gè)操作完成信號(hào)為止,借此執(zhí)行所述指令,所述的這個(gè)操作塊是通過中斷一個(gè)程序計(jì)數(shù)器的增值并使控制信號(hào)無效來執(zhí)行該指令的,所述控制信號(hào)包括把一個(gè)值寫回寄存器中的信號(hào)和把數(shù)據(jù)寫入數(shù)據(jù)存貯器的信號(hào)。
10.如權(quán)利要求8的可編程控制器,當(dāng)執(zhí)行多個(gè)指令時(shí),中止所述流水線,直到從一個(gè)操作塊收到了一個(gè)操作完成信號(hào)為止,借此執(zhí)行所述指令,所述的這個(gè)操作塊是通過中斷一個(gè)程序計(jì)數(shù)器的增值并使控制信號(hào)無效來執(zhí)行該指令的,所述控制信號(hào)包括把一個(gè)值寫回寄存器中的信號(hào)和把數(shù)據(jù)寫入數(shù)據(jù)存貯器的信號(hào)。
11.如權(quán)利要求7-10中任何一個(gè)權(quán)利要求所述的可編程控制器,其中對(duì)操作塊進(jìn)行這樣安排,使之能適應(yīng)多種類型數(shù)據(jù)的寬度操作,并且還使之接收具有設(shè)定在預(yù)定位位置的值的輸入,并且使之根據(jù)需要清除不使用位位置的值。
12.如權(quán)利要求7的可編程控制器,其中當(dāng)執(zhí)行其操作不可能在一個(gè)流水線級(jí)的時(shí)間周期內(nèi)執(zhí)行的指令時(shí),保持預(yù)定的信息,直到在所述指令將操作結(jié)果存貯到多個(gè)通用寄存器的條件下把所述操作結(jié)果寫回所述寄存器的操作全部完成時(shí)為止。
13.如權(quán)利要求7的可編程控制器,其中當(dāng)執(zhí)行其操作不可能在一個(gè)流水線級(jí)的時(shí)間周期內(nèi)執(zhí)行的指令時(shí),對(duì)設(shè)在指令解碼級(jí)和執(zhí)行所述指令級(jí)之間的流水線寄存器中的指令的控制信號(hào)和變?cè)械囊粋€(gè)按需要保持一段時(shí)間周期。
14.如權(quán)利要求1的可編程控制器,進(jìn)一步包括一個(gè)存貯地址計(jì)算塊,除了利用包括裝入指令和存貯指令在內(nèi)的存貯器訪問指令外,還專門使用了位處理指令。
15.如權(quán)利要求14的可編程控制器,其中專門設(shè)計(jì)用于所述位處理指令的存貯地址計(jì)算塊通過在多個(gè)流水線周期計(jì)算數(shù)據(jù)存貯器地址并且發(fā)出存貯器訪問請(qǐng)求信號(hào)而在多個(gè)連續(xù)的流水線級(jí)中完成對(duì)所述存貯器的訪問。
16.如權(quán)利要求1的可編程控制器,進(jìn)一步包括一個(gè)電路塊專用于執(zhí)行位處理操作,其中,所述電路塊輸出存貯地址和至少一個(gè)存貯器寫數(shù)據(jù)以及一個(gè)存貯器寫請(qǐng)求信號(hào),以將數(shù)據(jù)寫入所述存貯器或從所述存貯器中讀出數(shù)據(jù)。
17.如權(quán)利要求14-16中任何一個(gè)權(quán)利要求所述的可編程控制器,其中在流水線寄存器中提供表示前面的指令是一位處理指令的控制信號(hào),并且如果必須中止執(zhí)行所述位處理指令后的指令,則可編程控制器中止程序計(jì)數(shù)器的增值,即使只通過中止程序計(jì)數(shù)器的增值不可能中止所述指令的執(zhí)行,也通過進(jìn)一步改寫所述指令的解碼結(jié)果來中止所述位處理指令后邊的所述指令。
18.如權(quán)利要求17的可編程控制器,其中,所述電路塊輸出所述控制信號(hào)。
19.如權(quán)利要求1的可編程控制器,進(jìn)一步包括一個(gè)數(shù)據(jù)存貯器,專用于僅當(dāng)輸入改變時(shí)要執(zhí)行的微分指令,其中,所述存貯器的地址總線在所述數(shù)據(jù)存貯器和可編程控制器的指令存貯器之間共享。
20.如權(quán)利要求19的可編程控制器,進(jìn)一步包括一個(gè)電路塊,專用于執(zhí)行位處理指令,其中,在取出所述指令時(shí)指令存貯器地址就被取到一個(gè)流水線寄存器中,并且取出的地址通過所述流水線寄存器依次傳送到專用于位處理指令的所述電路塊,以及其中,當(dāng)把微分指令的結(jié)果寫回?cái)?shù)據(jù)存貯器時(shí),使用傳送的指令存貯器地址作為用于向所述存貯器內(nèi)寫入數(shù)據(jù)的地址。
21.如權(quán)利要求19和20中任何一個(gè)權(quán)利要求所述的可編程控制器,其中,當(dāng)把微分指令的結(jié)果寫回到數(shù)據(jù)存貯器中時(shí),中止程序計(jì)數(shù)器加1,以保證指令的取出,并且用對(duì)隨后的操作不會(huì)有任何影響的指令改寫從指令存貯器獲得的指令。
22.如權(quán)利要求1的可編程控制器,進(jìn)一步包括一個(gè)存貯地址計(jì)算塊,專用于位處理指令;一個(gè)電路塊,具體執(zhí)行位處理操作;一個(gè)數(shù)據(jù)存貯器,專用于僅當(dāng)輸入改變時(shí)要執(zhí)行的微分指令;其中,對(duì)于位處理指令和微分指令,通過按需要中止一個(gè)指令來保證一個(gè)指令的取出。
23.如權(quán)利要求1的可編程控制器,其中在位處理指令的指令碼中提供向變址指令表示的一個(gè)標(biāo)記,當(dāng)存在所述變址指令時(shí),從一通用寄存器讀出一個(gè)預(yù)定值,并使用所述預(yù)定數(shù)據(jù)作為一數(shù)據(jù)存貯器讀出數(shù)據(jù)的地址,以代替位處理指令的指令碼中用一立即值(零級(jí)值)提供的地址,以便執(zhí)行位處理。
24.如權(quán)利要求1的可編程控制器,其中在對(duì)應(yīng)于一部分位處理指令的一個(gè)定時(shí)器或計(jì)數(shù)器指令的一個(gè)指令碼中提供向用變址指令修改的一個(gè)預(yù)置值表示的標(biāo)記,當(dāng)用變址指令修改預(yù)置值時(shí),從一通用寄存器讀出一預(yù)定值、并且使用所述預(yù)定數(shù)據(jù)作為執(zhí)行定時(shí)器或計(jì)數(shù)器指令的一個(gè)預(yù)置值,以代替從位處理指令的指令碼中提供的地址的數(shù)據(jù)存貯器讀出的預(yù)置數(shù)據(jù)。
25.如權(quán)利要求1的可編程控制器,進(jìn)一步包括一個(gè)寄存器,由時(shí)鐘信號(hào)激勵(lì),所述時(shí)鐘信號(hào)的定時(shí)變化比激勵(lì)程序計(jì)數(shù)器的時(shí)鐘信號(hào)更快;其中,和中止程序計(jì)數(shù)器增值的控制信號(hào)的值無關(guān)地把通過使程序計(jì)數(shù)器的加1獲得的值鎖存到寄存器中,并且使用所述寄存器的值作為指令存貯器的地址以代替程序計(jì)數(shù)器的值去取出指令,如果中止程序計(jì)數(shù)器增值的控制信號(hào)對(duì)應(yīng)于中止一個(gè)增值操作的信號(hào),則從指令存貯器讀出的值就不裝入從中取出指令的指令寄存器,但卻將所述指令寄存器的值保持在其自身中。
26.如權(quán)利要求25的可編程控制器,其中如果當(dāng)執(zhí)行分支指令時(shí)滿足分支條件,則使用在執(zhí)行分支指令過程中計(jì)算出來的目標(biāo)分支地址作為指令存貯器的地址,這就使取出指令成為可能。
27.如權(quán)利要求25的可編程控制器,其中通過使用在執(zhí)行微分指令時(shí)計(jì)算的位存貯器地址可改寫位存貯器。
28.如權(quán)利要求25的可編程控制器,其中當(dāng)可編程控制器啟動(dòng)時(shí),可根據(jù)可編程控制器啟動(dòng)之前從外部設(shè)定的程序計(jì)數(shù)器的初始值從指令存貯器的一個(gè)正確地址取出指令。
29.如權(quán)利要求1的可編程控制器,其中當(dāng)取出一個(gè)指令時(shí),把程序計(jì)數(shù)器的值傳遞到流水線寄存器,并使用通過流水線寄存器傳遞的程序計(jì)數(shù)器的值來計(jì)算可編程控制器中止時(shí)程序計(jì)數(shù)器的值。
30.如權(quán)利要求29的可編程控制器,進(jìn)一步包括一個(gè)狀態(tài)機(jī),用于實(shí)現(xiàn)啟動(dòng)停止控制操作,所述狀態(tài)機(jī)讀出設(shè)在流水線寄存器中的程序計(jì)數(shù)器的值、根據(jù)按照中止操作的規(guī)定在先前獲得的值來計(jì)算程序計(jì)數(shù)器中止時(shí)的值、并且在可編程控制器中止之前將所計(jì)算的值寫入所述程序計(jì)數(shù)器。
31.如權(quán)利要求30的可編程控制器,其中當(dāng)停止條件滿足并且中止操作開始時(shí),使已經(jīng)引入該流水線中的指令的執(zhí)行無效,以防止無效指令的執(zhí)行。
32.如權(quán)利要求1的可編程控制器,其中確定包括多個(gè)標(biāo)記值的指令執(zhí)行條件,并且僅在滿足第三級(jí)的指令執(zhí)行條件時(shí)才執(zhí)行一個(gè)特定的指令。
33.如權(quán)利要求32的可編程控制器,其中完成用于更新包括指令執(zhí)行條件在內(nèi)的標(biāo)記的標(biāo)記設(shè)定指令,以便在啟動(dòng)緊跟該標(biāo)記設(shè)定指令后的一個(gè)指令的指令執(zhí)行級(jí)時(shí)更新標(biāo)記,并且在協(xié)調(diào)地控制是執(zhí)行該指令還是使所述指令無效的判定的同時(shí)執(zhí)行所述指令。
34.如權(quán)利要求32的可編程控制器,其中完成用于更新包括指令執(zhí)行條件在內(nèi)的指令標(biāo)記的各種類型的算術(shù)操作指令,以便啟動(dòng)緊跟該算術(shù)操作指令之后的一個(gè)指令的指令執(zhí)行級(jí),并且在協(xié)調(diào)地控制有關(guān)是執(zhí)行該指令還是使該指令無效地判定的同時(shí)執(zhí)行所述指令。
35.如權(quán)利要求32的可編程控制器,其中由在第五級(jí)中實(shí)現(xiàn)位操作處理的位處理指令來更新標(biāo)記以形成指令執(zhí)行條件,提供流水線寄存器中的控制信號(hào),所述控制信號(hào)表示現(xiàn)行指令是位處理指令,所述位處理指令用于更新和指令執(zhí)行條件有關(guān)的標(biāo)記,當(dāng)指令執(zhí)行條件未判定時(shí)根據(jù)所述控制信號(hào)來中止指令的執(zhí)行,而在協(xié)調(diào)地控制有關(guān)是否要執(zhí)行該指令還是使所述指令無效的判定的同時(shí)執(zhí)行所述執(zhí)令。
全文摘要
一種可編程控制器,包括一個(gè)流水線級(jí),其中按流水線方式執(zhí)行5級(jí)第一級(jí)IF執(zhí)行指令取出操作,第二級(jí)ID/RF對(duì)指令解碼并從通用寄存器取出數(shù)據(jù),第三級(jí)EX執(zhí)行算術(shù)和邏輯操作、數(shù)據(jù)地址計(jì)算、或目標(biāo)分支有效地址的計(jì)算,第五級(jí)WB/BPU執(zhí)行位操作,針對(duì)通用寄存器的號(hào)操作,或分支操作。因?yàn)樵诮y(tǒng)一的指令結(jié)構(gòu)中形成了一個(gè)流水線結(jié)構(gòu),所以可以實(shí)現(xiàn)簡化硬件和控制,便于把流水線形成為多級(jí)。
文檔編號(hào)G06F9/38GK1153933SQ9612110
公開日1997年7月9日 申請(qǐng)日期1996年9月29日 優(yōu)先權(quán)日1995年9月29日
發(fā)明者增田達(dá)男, 藪田明, 坂井宏史 申請(qǐng)人:松下電工株式會(huì)社