两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

可編程控制器的制作方法

文檔序號:6410787閱讀:702來源:國知局
專利名稱:可編程控制器的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種可編程控制器,它執(zhí)行主要用于位操作的基本指令和處理包含大量的位的數(shù)據(jù)的應(yīng)用指令,更準(zhǔn)確地說,本發(fā)明涉及一種配有專門設(shè)計以便能處理基本指令和應(yīng)用指令的硬件(處理器)的可編程控制器。
可編程控制器廣泛地用在工業(yè)設(shè)備、機器、以及工廠自動化裝置中。隨著對象設(shè)備的復(fù)雜性的增加,已經(jīng)提出了高速處理大量輸入/輸出信號的要求以及高速操作的要求。為些,由專門設(shè)計的能處理主要用于位操作的基本指令和處理包含大量位的數(shù)據(jù)的應(yīng)用指令的硬件(一個處理器)來實現(xiàn)高速處理。由該硬件和執(zhí)行通信處理和外圍處理的通用微處理器的組合來構(gòu)成可編程控制器。
常規(guī)例子的專門設(shè)計的硬件(即,處理器)有三級流水線結(jié)構(gòu),并通過這種流水線結(jié)構(gòu)執(zhí)行指令。在這種情況下,在執(zhí)行級執(zhí)行的處理包括下列細節(jié)。
第一級指令的取出,用于從指令中取出后面要執(zhí)行的指令,第二級各種算術(shù)與邏輯操作,計算數(shù)據(jù)存貯器地址的數(shù)據(jù)地址計算,或處理后面的指令解碼的目標(biāo)分支操作處理和寄存器讀數(shù)處理,第三級針對數(shù)據(jù)存貯器進行讀/寫操作的存貯器訪問處理(即,讀/寫處理),分支操作,位操作,或針對通用寄存器的寫操作。
在流水線結(jié)構(gòu)中,指令執(zhí)行的整個速度取決于所有級中最慢的指令執(zhí)行級的處理速率。為了加速這樣的流水線處理,必須提供具有相同速度的每一指令執(zhí)行級。然而,在前面所述的三級流水線結(jié)構(gòu)中,如果用具有相同訪問時間的存貯器作為指令存貯器和數(shù)據(jù)存貯器,則執(zhí)行的整個速度會變慢并且需要更長的處理時間,因為第二或第三級執(zhí)行例如位操作處理比第一級執(zhí)行的處理花費更長的處理時間。
鑒于已有技術(shù)的上述缺點而設(shè)想出本發(fā)明,本發(fā)明的目的是提供一種能容易實現(xiàn)并能加速執(zhí)行指令的可編程控制器的結(jié)構(gòu)。
本發(fā)明的另一目的是提供一種可編程控制器的結(jié)構(gòu),能在不因插入處理流水線相關(guān)危險的NOP指令而增加程序長度的情況下使處理加速。
本發(fā)明的另一目的是提供一種具有五級流水線結(jié)構(gòu)的可編程控制器,能在不使用高速存貯順的情況下以較高的速度執(zhí)行處理。
本發(fā)明的另一目的是提供一種具有五級流水線結(jié)構(gòu)的可編程控制器,能容易地執(zhí)行在一個流水線級的時間周期內(nèi)不能完成操作的指令。
本發(fā)明的另一目的是提供一種具有五級流水線結(jié)構(gòu)的可編程控制器,能迅速地執(zhí)行需要大量存貯器存取周期的位處理指令和迅速執(zhí)行其它指令。這種可編程控制器除了包括存儲器地址計算塊和專為位處理指令設(shè)置的流水線寄存器以外,還包括數(shù)據(jù)通路和控制電路,數(shù)據(jù)通路用于從位處理指令操作塊發(fā)送和接收訪問存儲器所需的數(shù)據(jù),控制電路在執(zhí)行位處理操作期間按要求暫停執(zhí)行在位處理操作指令后面的指令。本發(fā)明的又一目的是提供一種能協(xié)調(diào)地執(zhí)行每一條指令的具有五級流水線結(jié)構(gòu)的可編程控制器,并且該可編程控制器配有一個控制電路,當(dāng)重寫供微分指令使用的存儲器時該控制電路按要求暫停執(zhí)行指令。
本發(fā)明的另一目的是提供一種具有五級流水線結(jié)構(gòu)的可編程控制器,通過下列兩點能在協(xié)調(diào)地控制關(guān)于是執(zhí)行指令還是使指令無效的決定的同時執(zhí)行指令一、在流水線寄存器中提供控制信號,控制信號表現(xiàn)當(dāng)前指令是一個位操作指令,該位操作指令用于更新建立指令執(zhí)行狀態(tài)的標(biāo)記BITACC;二、當(dāng)執(zhí)行指令(按照指令執(zhí)行狀態(tài)根據(jù)控制信號的值確定要被執(zhí)行或要被無效的指令)時暫停執(zhí)行該指令直到確定指令執(zhí)行狀態(tài)為止。
本發(fā)明的另一目的是提供一種可編程控制器,它具有五級流水線結(jié)構(gòu),并且能按規(guī)程中所要求的方式根據(jù)各種停止?fàn)顟B(tài)協(xié)調(diào)地執(zhí)行暫停操作。
本發(fā)明的另一目的是提供一種通過抑制程序長度能以高速執(zhí)行變址指令的可編程控制器。
為此,本發(fā)明的可編程控制器執(zhí)行基本位處理操作和包含大量位的應(yīng)用處理,包括下列步驟由五級形成一個指令執(zhí)行級,即,一個指令執(zhí)行級包括用于執(zhí)行取指令操作以便從指令存貯器取出指令的第一級,用于指令解碼并從一通用寄存器取出一個數(shù)值的第二級,用于執(zhí)行算術(shù)操作和邏輯操作、數(shù)據(jù)地址計算、或目標(biāo)分支有效地址的計算的第三級,用于訪問數(shù)據(jù)存貯器的第四級,以及用于執(zhí)行位操作,針對通用寄存器的寫操作、或分支操作的第五級;以及以流水線方式執(zhí)行該指令執(zhí)行級。
本發(fā)明的可編程控制器包括下列部分,它們作為流水線處理的各指令執(zhí)行級的硬件;具有指令存儲器和程序計數(shù)器的IF部分;具有指令解碼器和通用寄存器的ID部分;具有算術(shù)與邏輯單元的EX部分;具有數(shù)據(jù)存儲器和用于控制訪問數(shù)據(jù)存儲器的存儲器訪問接口的MEM部分;以及用于執(zhí)行位操作處理的BPU。
按照本發(fā)明的可編程控制器,根據(jù)可編程控制器的基本處理操作之一的位操作指令的結(jié)果將每一指令執(zhí)行級的執(zhí)行說明信息改變?yōu)橐粋€預(yù)定值,并使位操作指令后面的指令無效。
按照本發(fā)明的可編程控制器,在與各指令執(zhí)行級對應(yīng)的硬件之間設(shè)有多個流水線寄存器,以及將指令執(zhí)行級的執(zhí)行結(jié)果存貯在每一流水線寄存器中。
按照本發(fā)明的可編程控制器,將各指令執(zhí)行級的執(zhí)行說明信息存貯在多個流水線寄存器的各流水線寄存器中,并且每當(dāng)執(zhí)行一個指令執(zhí)行級時將執(zhí)行說明信息饋送給下一指令執(zhí)行級的流水線寄存器。
按照本發(fā)明的可編程控制器,在指令執(zhí)行級能執(zhí)行的精簡的指令集結(jié)構(gòu)包括存儲器訪問指令、寄存器到寄存器的操作指令、立即值指令、分支指令、以及位操作指令。
按照本發(fā)明的可編程控制器,一個精簡的指令集結(jié)構(gòu)包括存儲器訪問指令,在第三級執(zhí)行要訪問的數(shù)據(jù)存儲器的有效地址的計算,在第四級從數(shù)據(jù)存儲器讀數(shù)據(jù)和將數(shù)據(jù)寫入數(shù)據(jù)存儲器,以及如果指令要求將數(shù)據(jù)從數(shù)據(jù)存儲器寫入通用寄存器則在第五級寫數(shù)據(jù);寄存器到寄存器操作指令,在第三級執(zhí)行通用寄存器之間的算術(shù)和邏輯操作,在第五級將數(shù)據(jù)寫入通用寄存器;立即值操作指令,用包含在該指令中的立即值和存儲在預(yù)定通用寄存器中的值進行算術(shù)和邏輯操作;分支指令,在第三級執(zhí)行比較并且在第五級根據(jù)比結(jié)果執(zhí)行分支操作;以及位操作指令,在第四級執(zhí)行將數(shù)據(jù)從數(shù)據(jù)存儲器取出送到通用寄存器的操作和操作處理,以及在第五級執(zhí)行針對每位數(shù)據(jù)的操作處理。
為此,提供一種本發(fā)明的可編程控制器,它按流水線方式執(zhí)行如下的第一至第五級,即,用于執(zhí)行取指令操作以便從指令存貯器取出指令的第一級,用于指令解碼并從一通用寄存器取出一個數(shù)值的第二級,用于執(zhí)行算術(shù)和邏輯操作、數(shù)據(jù)地址計算、目標(biāo)分支有效地址的計算或分支狀態(tài)確定的第三級,用于訪問數(shù)據(jù)存貯器或執(zhí)行分支操作的第四級,以及用于執(zhí)行位操作,針對通用寄存器的寫操作、或分支操作的第五級;該可編程控制器包括選擇裝置,設(shè)在第二級中,用于從通用寄存器的輸出、第三級的ALU的輸出、和提供給第四級的ALU的輸出中選擇出第三級的ALU的一個輸入。
本發(fā)明的可編程控制器以流水線的方法執(zhí)行第一至第五級,即,用于執(zhí)行取指令操作以便從指令存貯器取出指令的第一級,用于指令解碼并從一通用寄存器取出一個數(shù)值的第二級,用于執(zhí)行算術(shù)和邏輯操作、數(shù)據(jù)地址計算、目標(biāo)分支有效地址的計算、或分支狀態(tài)確定的第三級,用于訪問數(shù)據(jù)存貯器或執(zhí)行分支操作的第四級,以及用于執(zhí)行位操作、針對通用寄存器的寫操作、或分支操作的第五級,該可編程控制器包括選擇裝置,設(shè)在第三級中,用于從自第二級輸出至ALU的一個輸出端的值、提供給第四級的ALU的輸出、以及提供給第五級的ALU的輸出中選擇第三級的ALU的一個輸入。
本發(fā)明的可編程控制器以流水線的方式執(zhí)行第一至第五級,即,用于執(zhí)行取指令操作以便從指令存貯器取出指令的第一級,用于指令解碼并從一通用寄存器取出一個數(shù)值的第二級,用于執(zhí)行算術(shù)和邏輯操作、數(shù)據(jù)地址計算、目標(biāo)分支有效地址的計算、或確定分支狀態(tài)的第三級,用于訪問數(shù)據(jù)存貯器或執(zhí)行分支操作的第四級,以及用于執(zhí)行位操作、針對通用寄存器的寫操作、或分支操作的第五級,該可編程控制器包括如下功能暫停執(zhí)行裝入(LOAD)指令后的一個指令直到按照該裝入(LOAD)指令獲得的數(shù)據(jù)寫入通用寄存器為止,如果該數(shù)據(jù)對LOAD指令之后的指令是必要的。
只要如在寄存器到寄存器的操作或變元操作中所做的那樣由ALU計算要寫入通用寄存器的值,即使還沒有將該值寫入通用寄存器中,該值也會出現(xiàn)在流水線中的某個地方。與可編程控制器類似地,有可能通過提供一個數(shù)據(jù)通路來處理流水線相關(guān)危險,該數(shù)據(jù)通路用于從流水線中的預(yù)定位置獲得一個作為ALU變元所需要的值。然而,如果按照前面的LOAD指令從數(shù)據(jù)存儲器獲取要寫入通用寄存器的一個值,則該值在執(zhí)行存儲器訪問操作的第四級第一次出現(xiàn)在流水線中。如果后面的指令與把由該LOAD指令更新其值作為變元的通用寄存器有關(guān),那么使用可編程控制器中設(shè)置的數(shù)據(jù)通路可能難以解決問題。
為了解決這一問題,必須暫停執(zhí)行后面的指令直到將需要的值寫入通用寄存器為止。該方法相當(dāng)于插入NOP指令。但是,如果實際地將NOP指令插入程序中,則程序長度增大。為了避免此問題,當(dāng)在第二級解碼當(dāng)前指令時檢驗流水線上的前面指令。并進一步地檢驗是否由前面指令更新了當(dāng)前解碼指令所需要的通用寄存器的值。如果情況是這樣,暫停執(zhí)行當(dāng)前解碼的指令直到該值實際寫入通用寄存器為止。同時,也防止程序計數(shù)器計數(shù)值增加。結(jié)果是,實現(xiàn)了與插入NOP指令等效的操作。
按照本發(fā)明的可編程控制器,該可編程控制器的特征在于如果LOAD指令后面的指令是STORE指令,并且如果由LOAD指令對保持STORE指令所需要的一個值的通用寄存器更新,那么按照該LOAD指令在第五級存儲到通用寄存器中的數(shù)據(jù)在第四級被取出并寫入數(shù)據(jù)存儲器。
正如前面已經(jīng)描述的,如果由LOAD指令更新在第三級執(zhí)行操作所需的通用寄存器的值,必須暫停執(zhí)行指令直到能從通用寄存器中取出所需要的值為止。然而,在STORE指令的情況下,從通用寄存器中獲取的值直接通過流水線寄存器而不加處理,并且將這樣移動的值在第四級寫入數(shù)據(jù)存儲器。因此,不需等待按LOAD指令供給通用寄存器的值寫入到通用寄存器,并且不需隨后按照STORE指令將從通用寄存器中取出的值寫入數(shù)據(jù)存儲器。在用于將由LOAD指令更新的通用寄存器的值寫入數(shù)據(jù)存儲器的STORE指令位于LOAD指令之后的情況下,如果由可編程控制器執(zhí)行流水線相關(guān)危險操作,則花費浪費的停止時間。
為了避免這樣的問題,給可編程控制器提供數(shù)據(jù)通路,在用于將LOAD指令更新的通用寄存器的值寫入數(shù)據(jù)存儲器的STORE指令位于LOAD指令之后的情況下,通過代替暫停執(zhí)行STORE指令的數(shù)據(jù)通路將按照前面的LOAD指令(在第五級)從數(shù)據(jù)存儲器中取出的值供給第四級作為用于后面STORE指令的數(shù)據(jù)。簡言之,在LOAD指令更新的通用寄存器的值被寫入數(shù)據(jù)存儲器的STORE指令位于LOAD指令之后的情況下,能繼續(xù)進行處理而不暫停STORE指令的執(zhí)行。
給本發(fā)明的可編程控制器提供數(shù)據(jù)通路。在用于將LOAD指令所更新的通用寄存器的值寫入數(shù)據(jù)存儲器的STORE指令位于LOAD指令之后隔一條指令的情況下,通過代替暫停執(zhí)行STORE指令的數(shù)據(jù)通路將按照前面的LOAD指令(在第五級)從數(shù)據(jù)存儲器中取出的值作為用于后面STORE指令的數(shù)據(jù)。簡言之,在將LOAD指令更新的通用寄存器的值寫入數(shù)據(jù)存儲器的STORE指令位于LOAD指令之后隔一條指令的情況下,能繼續(xù)進行處理而不暫停STORE指令的執(zhí)行。
本發(fā)明的可編程控制器以流水線的方式執(zhí)行以下的第一至五級,即,用于執(zhí)行取指令操作以便從指令存貯器取出指令的第一級,用于指令解碼并從一通用寄存器取出一個數(shù)值的第二級,用于執(zhí)行算術(shù)和邏輯操作、數(shù)據(jù)地址計算、目標(biāo)分支有效地址的計算或確定分支狀態(tài)的第三級,用于訪問數(shù)據(jù)存貯器或執(zhí)行分支操作的第四級,以及用于執(zhí)行位操作、針對通用寄存器的寫操作、或分支操作的第五級,該可編程控制器的特點是包括如下功能當(dāng)滿足分支條件時禁止執(zhí)行已經(jīng)包含在流水線中的無效的指令。
本發(fā)明的可編程控制器按流水線方式執(zhí)行以下的第一至第五級,即,用于執(zhí)行取操作指令以便從指令存貯器取出指令的第一級,用于指令解碼并從一通用寄存器取出一個數(shù)值的第二級,用于執(zhí)行算術(shù)和邏輯操作、數(shù)據(jù)地址計算、目標(biāo)分支有效地址的計算、或確定分支狀態(tài)的第三級,用于訪問數(shù)據(jù)存貯器或執(zhí)行分支操作的第四級,以及用于執(zhí)行位操作、針對通用寄存器的寫操作、或分支操作的第五級,該可編程控制器的特點是包括如下功能當(dāng)滿足分支條件時禁止執(zhí)行已經(jīng)包含在流水線中的無效的指令。
當(dāng)按照本發(fā)明具有五級流水線結(jié)構(gòu)的RISC可編程控制器執(zhí)行分支指令時,在第三級計算分支地址并確定分支狀態(tài)??梢栽诘谌墱?zhǔn)備好形成分支所需要的所有值,因此可以在后面的第四級執(zhí)行分支操作。然而,由于實際電路的限制,在某些電路結(jié)構(gòu)中不是在第四級而是在第五級執(zhí)行分支操作。在任何情況下,如果滿足分支條件,都將在第三級獲得的分支地址寫入執(zhí)行分支操作的那一級的程序計數(shù)器中。按照程序計數(shù)器的值取出指令,從而完成分支操作。此時,如果不滿足分支條件,流水線已包括要執(zhí)行的指令。如果滿足分支條件,決不能執(zhí)行這樣的指令。為了防止執(zhí)行這樣的指令,如果滿足分支條件,禁止執(zhí)行在流水線中已取的指令直到從分支地址中取出指令為止。具體說,如果滿足分支條件,則禁止用在流水線中已取的指令改寫數(shù)據(jù)存儲器或通用寄存器。可編程控制器在第五級執(zhí)行分支指令并執(zhí)行前面描述的處理。可編程控制器在第四級執(zhí)行分支指令。
根據(jù)本發(fā)明,可編程控制器以流水線方式執(zhí)行五級,即,用于執(zhí)行取指令操作以便從指令存貯器取出指令的第一級,用于執(zhí)行指令解碼操作和從一通用寄存器取出一個數(shù)值的寄存器取出操作的第二級,用于執(zhí)行算術(shù)和邏輯操作、數(shù)據(jù)地址計算、目標(biāo)分支有效地址的計算、或確定分支狀態(tài)的第三級,用于訪問數(shù)據(jù)存貯器或執(zhí)行分支操作的第四級,以及用于執(zhí)行位操作、針對通用寄存器的數(shù)據(jù)寫操作、或分支操作的第五級,該可編程控制器包括下列功能不考慮暫停程序計數(shù)器增值的控制信號的值,將由1加上程序計數(shù)器的值所獲得的值鎖存到寄存器中,由定時關(guān)系變化驅(qū)動程序計數(shù)器的時鐘信號早的時鐘信號驅(qū)動該寄存器;用該寄存器的值(代替程序計數(shù)器的值)作為指令存儲器的地址來取指令。
為了克服前面所述的缺點,給本發(fā)明的可編程控制器設(shè)置了一個由定時關(guān)系變化比驅(qū)動程序計數(shù)器的時鐘信號早的時鐘信號驅(qū)動的寄存器。由于取出存在寄存器中的值作為指令存儲器的地址,因而可較早地確定指令存儲器的地址,借此能保證指令存儲器的訪問時間所需要的提前時間。
根據(jù)本發(fā)明,可編程控制器是這樣的設(shè)置如果暫停程序計數(shù)器計數(shù)值增加的控制信號是一個暫停增值操作的信號,不將從指令存儲器中讀出的值裝入用于取指令的指令寄存器中,而是將該指令寄存器的值保留在其自身之中。
根據(jù)本發(fā)明,具有五級流水線結(jié)構(gòu)的可編程控制器的特點是如果在執(zhí)行分支指令時滿足分支條件,將在執(zhí)行分支指令的過程中計算的目標(biāo)分支地址用作指令存儲器的地址,從而取出指令。
根據(jù)本發(fā)明,具有五級流水線結(jié)構(gòu)的可編程控制器滿足能由執(zhí)行微分指令時計算的位存儲器的地址重寫位存儲器。
根據(jù)本發(fā)明,具有五級流水線結(jié)構(gòu)的可編程控制器滿足當(dāng)可編程控制器開始開作時,能根據(jù)在可編程控制器開始工作之前從外面設(shè)置的程序計數(shù)器的初值從指令存儲器的正確地址來取指令。
為此,使本發(fā)明的具有五級流水線結(jié)構(gòu)的可編程控制器滿足當(dāng)執(zhí)行其操作不能在一個流水線級的時間周期內(nèi)完成的指令時,通過只在完成指令操作所需的時間周期期間中斷程序計數(shù)器的增值及通過使控制信號無效來中止該流水線,(該控制信號是把一個值寫回寄存器的控制信號或把數(shù)據(jù)寫入數(shù)據(jù)存貯器的控制信號)借此來執(zhí)行指令。
根據(jù)本發(fā)明,具有五級流水線結(jié)構(gòu)的可編程控制器滿足當(dāng)執(zhí)行其操作不能在一個流水線級的時間周期內(nèi)完成并且需要不確定的操作時間的指令時,暫停該流水線,直到從執(zhí)行指令的一個操作塊收到一個操作完成信號為止,借此執(zhí)行該指令,所說的這個操作塊是通過中斷一個程序計數(shù)器的增值并使控制信號無效來執(zhí)行該指令的,所說控制信號是把一個值寫回寄存器中的控制信號或把數(shù)據(jù)寫入數(shù)據(jù)存貯器的控制信號。
根據(jù)本發(fā)明,具有五級流水線結(jié)構(gòu)的可編程控制器滿足當(dāng)執(zhí)行其操作不能在一個流水線級的時間周期內(nèi)完成的多種類型的指令時,利用適合該類指令的判定操作是否完成的方法,通過中斷程序計數(shù)器的增值并使控制信號無效來暫停該流水線,借此來執(zhí)行指令,所說控制信號是把一個值寫回寄存器中的控制信號或把數(shù)據(jù)寫入數(shù)據(jù)存貯器的控制信號。
根據(jù)本發(fā)明,具有五級流水線結(jié)構(gòu)的可編程控制器,包括一個用于確定是否執(zhí)行其操作不能在一個流水線級的時間周期內(nèi)完成的指令的標(biāo)記,其中,如果已經(jīng)確定該指令不應(yīng)執(zhí)行則阻止開始執(zhí)行該指令,以便避免流水線操作的浪費時間的暫停。
根據(jù)本發(fā)明,具有五級流水線結(jié)構(gòu)的可編程控制器包括一個執(zhí)行其操作不能在一個流水線級的時間周期內(nèi)完成的指令的操作塊,對該操作塊進行安排,使其能適應(yīng)多種類型數(shù)據(jù)的寬度操作,并且還使它能夠接收具有設(shè)定在預(yù)定位位置的值的輸入,并且能根據(jù)需要清除在不使用的位位置的值。
根據(jù)本發(fā)明,具有五級流水線結(jié)構(gòu)的可編程控制器的特點是當(dāng)執(zhí)行其操作不可能在一個流水線級的時間周期內(nèi)執(zhí)行的指令時,保持預(yù)定的信息,直到在該指令將操作結(jié)果存儲到寄存器的條件下把操作結(jié)果寫回到多個通用寄存器的操作全部完成時為止。
根據(jù)本發(fā)明,具有五級流水線結(jié)構(gòu)的可編程控制器滿足當(dāng)執(zhí)行其操作不可能在一個流水線級的時間周期內(nèi)執(zhí)行的指令時,對設(shè)在指令解碼級和執(zhí)行該指令的級之間的流水線寄存器中的指令的控制信號或變元進行保持一段按需要確定的時間周期。
給本發(fā)明的具有五級流水線結(jié)構(gòu)的可編程控制器設(shè)置一個操作塊和一個指令執(zhí)行控制塊,操作塊是專門設(shè)計的以便執(zhí)行可編程控制器需要的所有操作中的一個操作,例如在多個流水線級的時間中花費長時間的乘法操作或除法操作,而指令執(zhí)行控制塊用于控制操作塊和流水線結(jié)構(gòu)的需要部分。
為了克服前面所述的已有技術(shù)的缺點,本發(fā)明的可編程控制器按流水線方式執(zhí)行五級,即用于執(zhí)行取指令操作,即,從指令存貯器IM取出指令的第一級IF,用于執(zhí)行指令解碼操作和從一通用寄存器取出一個數(shù)值的寄存器取數(shù)操作的第二級ID,用于執(zhí)行算術(shù)和邏輯操作、數(shù)據(jù)地址計算、目標(biāo)分支有效地址的計算、以及確定分支狀態(tài)的第三級EX,用于訪問數(shù)據(jù)存貯器DM或執(zhí)行分支操作的第四級MEM,以及用于執(zhí)行位操作,針對通用寄存器的寫數(shù)據(jù)、或分支操作的第五級WB。該可編程控制器的設(shè)置包括一個專門設(shè)計的為與位處理指令一起用的存儲地址計算塊BPUADR,以便除執(zhí)行裝入指令、存儲指令、以及存儲器訪問指令外還執(zhí)行位處理指令。專門設(shè)計用于位處理指令的存儲地址計算塊BPUADR在多個流水線周期計算數(shù)據(jù)存儲器DM的地址,從而發(fā)出存儲器訪問請求信號。結(jié)果,能在多個連續(xù)的流水線級中訪問存儲器。進一步地,給可編程控制器配有專門設(shè)計用于執(zhí)行位處理操作的電路塊BPU。從該電路模塊中輸出存儲器地址和存儲器讀請求信號,借此,執(zhí)行從數(shù)據(jù)存儲器DM中讀數(shù)據(jù)的操作。作為替換,從該電路塊輸出存儲器地址、要寫入存儲器中的數(shù)據(jù)、以及存儲器寫請求信號,借此執(zhí)行將數(shù)據(jù)寫入數(shù)據(jù)存儲器DM的操作。
在流水線寄存器中根據(jù)指令解碼結(jié)果提供表示隨后的指令是一條位處理指令的控制信號。如果必須暫停執(zhí)行位處理指令后面的指令,則可編程控制器暫停程序計數(shù)器增值。即使只通過暫停程序計數(shù)器PC的增值不可能暫停該指令的執(zhí)行,也通過進一步改寫指令的解碼結(jié)果來暫停位處理指令后面的指令。
給可編程控制器提供專門設(shè)計用于僅當(dāng)輸入改變時與要執(zhí)行的微分指令一起使用的一個數(shù)據(jù)存儲器BM。該存儲器的地址總線在該數(shù)據(jù)存儲器BM和指令存儲器IM之間共享。在這種情況下,指令存儲器地址在取出一指令時就輸入到流水線寄存器中,并且如此取出的地址通過該流水線寄存器依次傳送到專門設(shè)計與位處理指令一起使用的電路塊。當(dāng)把微分指令寫回專門設(shè)計與微分指令一起使用的數(shù)據(jù)存儲器BM時,傳送的指令存儲器IM地址被用作向該存儲器內(nèi)寫入數(shù)據(jù)的地址。當(dāng)把微分指令寫回到專門設(shè)計與微分指令一起使用的數(shù)據(jù)存儲器中時,暫停程序計數(shù)器的增值,以保證指令的取出。進一步地,當(dāng)把微分指令寫回到專門設(shè)計與微分指令一起使用的數(shù)據(jù)存儲器中時,用對隨后的操作不會有任何影響的指令改寫從指令存儲器獲得的指令。另外,如果這些操作同時出現(xiàn),通過按要求暫停執(zhí)行指令來保證指令的取出。
使本發(fā)明的可編程控制器設(shè)計成能解決前面所述的已有技術(shù)的問題并以流水線方式執(zhí)行五級,即用于執(zhí)行取指令操作以便從指令存貯器IM取出指令的第一級IF,用于執(zhí)行指令解碼操作和從一通用寄存器取出一個數(shù)值的寄存器取數(shù)操作的第二級ID,用于執(zhí)行算術(shù)和邏輯操作、數(shù)據(jù)地址計算、目標(biāo)分支有效地址的計算、以及確定分支條件的第三級EX,用于訪問數(shù)據(jù)存貯器DM或執(zhí)行分支操作的第四級MEM,以及用于執(zhí)行位操作,針對通用寄存器的寫數(shù)據(jù)操作或分支操作的第五級WB。該可編程控制器包括確定包括多個標(biāo)記值的指令執(zhí)行狀態(tài),僅當(dāng)在指令執(zhí)行級中滿足指令執(zhí)行狀態(tài)時才執(zhí)行一特定的指令。
進一步地,該本可編程控制器還包括一個結(jié)構(gòu),該結(jié)構(gòu)的功能是當(dāng)啟動緊跟在標(biāo)記設(shè)置指令之后的一個指令的指令執(zhí)行級時,能使標(biāo)記設(shè)置指令已經(jīng)完成更新用于設(shè)立指令執(zhí)行狀態(tài)的標(biāo)記;能在協(xié)調(diào)地控制是執(zhí)行該指令還是使該指令無效的判定的同時執(zhí)行該指令。更進一步地,該可編程控制器還包括一個具有如下功能的結(jié)構(gòu)當(dāng)啟動緊跟在算術(shù)操作指令之后的一個指令的指令執(zhí)行級時,能使各種類型的算術(shù)操作指令已經(jīng)完成更新用于設(shè)立指令執(zhí)行狀態(tài)的標(biāo)記;并且能在協(xié)調(diào)地控制是執(zhí)行該指令還是使該指令無效的判定的同時執(zhí)行該指令。
本可編程控制器還包括這樣一個結(jié)構(gòu)能由在第五級中實現(xiàn)位操作處理的位處理指令來更新標(biāo)記以形成位處理指令;能提供流水線寄存器中的控制信號,該控制信號表示當(dāng)前指令是更新與指令執(zhí)行條件有關(guān)的標(biāo)記的位處理指令;能根據(jù)該控制信號暫停執(zhí)行指令,而不對指令執(zhí)行條件進行判定;并且能在協(xié)調(diào)地控制是要執(zhí)行該指令還是使該指令無效的判定的同時執(zhí)行該指令。
為了克服前面所述的缺點,本發(fā)明的可編程控制器以流水線方式執(zhí)行五級,即,用于執(zhí)行取指令操作以便從指令存貯器IM取出指令的第一級IF,用于執(zhí)行解碼操作和從一通用寄存器取出一個數(shù)值的寄存器讀取數(shù)操作的第二級ID,用于執(zhí)行算術(shù)和邏輯操作、數(shù)據(jù)地址計算、目標(biāo)分支有效地址的計算、以及確定分支條件的第三級EX,用于訪問數(shù)據(jù)存貯器DM或執(zhí)行分支操作的第四級MEM,以及用于執(zhí)行位操作、針對通用寄存器的寫數(shù)據(jù)操作或分支操作的第五級WB。可編程控制器包括用于執(zhí)行啟動/停止控制操作的狀態(tài)機。將取指令時獲得的程序計數(shù)器的值輸入到流水線寄存器中,并且通過流水線寄存器照原樣傳遞該值。根據(jù)流水線寄存器中的程序計數(shù)器的值,在可編程控制器處于暫停模式時,由用于啟動/停止控制的狀態(tài)機計算要寫入程序計數(shù)器的值。在通過用于啟動/停止控制的狀態(tài)機探測停止條件滿足、從而使可編程控制器已變?yōu)闀和DJ街?,阻止?zhí)行在滿足停止條件的指令后面的另一指令,即使已將該后面的指令調(diào)入流水線級。這樣,能避免執(zhí)行無效指令。由于采用了這樣的一個結(jié)構(gòu),所以能提供具有五級結(jié)構(gòu)的可編程控制器,該可編程控制器能按照規(guī)程根據(jù)各種停止條件協(xié)調(diào)地執(zhí)行暫停操作。
為了解決前面所述的問題,本發(fā)明的可編程控制器具有一個處理器,該處理器根據(jù)輸入程序的指令碼來執(zhí)行位處理操作和包含多個字的應(yīng)用處理,其中每一字由多個位構(gòu)成作為要計算的對象,并且該處理器進一步包括用于讀和寫數(shù)據(jù)的通用寄存器,計算要執(zhí)行的指令的地址的地址計算部分、以及從外部存儲器讀數(shù)據(jù)和將數(shù)據(jù)寫入外部存儲器的存儲器訪問部分,可編程控制器包括一個選擇器,該選擇器與通用寄存器相連,并且該選擇器根據(jù)顯示標(biāo)記的識別結(jié)果通過操作通用寄存器的內(nèi)容用硬件執(zhí)行變址指令,顯示標(biāo)記用于顯示有或沒有變址指令,變址指令間接地將要操作的對象規(guī)定在指令碼中。
使本發(fā)明所限定的可編程控制器滿足指令碼是由要操作的對象訪問的一個順序指令。
使本發(fā)明的可編程控制器滿足將選擇器設(shè)置在地址計算部分。
規(guī)定本發(fā)明的可編程控制器滿足指令碼是使用要計算的對象作為預(yù)置數(shù)據(jù)的計時器或計數(shù)器指令。
規(guī)定本發(fā)明的可編程控制器滿足將選擇器設(shè)置在用于從外部存儲器中讀數(shù)據(jù)的數(shù)據(jù)通路中。
根據(jù)本發(fā)明的可編程控制器,改善了處理的整個速度。這是通過下面的方式實現(xiàn)的將專門設(shè)計的硬件(即,處理器)的指令執(zhí)行級分為五級以便提供指令集和指令結(jié)構(gòu);并改善專門設(shè)計的硬件(即,處理器)的組成單元的可用性因數(shù)。通常,如果使指令執(zhí)行級分為多級,將使指令的執(zhí)行的控制復(fù)雜化。統(tǒng)一的指令結(jié)構(gòu)大大地簡化了專門設(shè)計的硬件和簡化了控制,因而使本發(fā)明的可編程控制器的安排容易配置成多級。結(jié)果,能用簡單的硬件實現(xiàn)對五級流水線結(jié)構(gòu)的控制,另外,將可編程控制器安排成能根據(jù)位處理指令的結(jié)果將每一指令執(zhí)行級的執(zhí)行說明信息改變成預(yù)定值,其中位處理指令是可編程控制器的基本處理操作之一。因而,能通過可編程控制器所特有的位操作處理在不中斷流水線處理的情況下使隨后的應(yīng)用指令無效(不被執(zhí)行)。
以下結(jié)合附圖詳述本發(fā)明的實施例,其中

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