專利名稱:具有支持多任務運算的隨機數(shù)產(chǎn)生器的微處理器及方法
技術領域:
本發(fā)明涉及隨機數(shù)產(chǎn)生的領域,尤其涉及在執(zhí)行多任務操作系統(tǒng)的微處理器中的隨機數(shù)產(chǎn)生器的使用,即具有支持不拘操作系統(tǒng)的多任務運算的隨機數(shù)產(chǎn)生器的微處理器及方法。
背景技術:
就歷史來看,許多計算機應用軟件需要提供隨機數(shù)。例如,物理現(xiàn)象的蒙地卡羅模擬,如大規(guī)模的天氣模擬,就需要提供隨機數(shù),以模擬物理現(xiàn)象。需要使用隨機數(shù)的其它例子為娛樂游戲及在線娛樂游戲,以模擬洗牌,擲骰子等;彩券號碼的產(chǎn)生;統(tǒng)計分析資料的產(chǎn)生,如心理學的測驗;以及計算機游戲。
在這些形式的應用中,所需的隨機度,以及對產(chǎn)生隨機數(shù)的效能要求是不同的。許多應用軟件,如計算機游戲,對于隨機度的要求是不高的。心理學測驗上的應用,對隨機度有著更嚴格的要求,但效能需求則相當?shù)?。然而,大?guī)模的運用蒙地卡羅的模擬會有非常高的效能需求,且需要良好的隨機數(shù)統(tǒng)計特性,雖然不可預測性并非特別重要。其它的應用,如在線娛樂游戲,則對于隨機度及不可預測性都有非常嚴格的要求。
雖然上述這些應用仍然是重要的,但是在計算機安全領域,則對高品質隨機數(shù)有最大的需求。最近,個人計算機網(wǎng)絡及互聯(lián)網(wǎng)交易的爆炸性成長,對于各種安全機制的需求,已明顯地增加。
對所有計算機安全的主要構成要素而言,高品質的隨機數(shù)都是必要的。這些要素包含機密性、身份確認以及數(shù)據(jù)完整性。
數(shù)據(jù)加密為提供機密性的主要機制。有許多種不同的加密算法,如對稱式加密、公有密鑰及一次性密碼本,但是這些算法都具有一關鍵特性,即加密/解密密鑰不能被簡單地預測出來。一個加密系統(tǒng)的密碼強度基本上即是其所用密鑰的強度,即預測、猜想或計算解密密鑰的難度多高。最好的密鑰為夠長的真隨機數(shù),而在所有嚴格要求安全的應用中,隨機數(shù)產(chǎn)生器為產(chǎn)生密碼密鑰的基礎。
許多對密碼算法成功的攻擊,已非專注于加密算法,而是專注于產(chǎn)生隨機數(shù)的來源。一個為人熟知的例子是,網(wǎng)景的安全套接層(Secure SocketsLayer,SSL)的早期版本,會從系統(tǒng)時脈與程序ID表搜集數(shù)據(jù),以產(chǎn)生軟件偽隨機數(shù)產(chǎn)生器的起始值。所產(chǎn)生的隨機數(shù)用來產(chǎn)生一對稱密鑰,以加密對話數(shù)據(jù)。有二個研究生想出了可準確猜測隨機數(shù)的程序,在一分鐘內(nèi),就猜出對話密鑰,破壞這個機制。
與解密密鑰類似,用以確認存取信息的使用者身份的密碼,其強度實際上就是預測或猜測密碼的難度有多高。最好的密碼為夠長的真隨機數(shù)。此外,在有使用挑戰(zhàn)協(xié)議(challenge protocol)的驗證協(xié)議(authentication protocol)中,關鍵因素就是使挑戰(zhàn)無法由進行確認的一方加以預測。而隨機數(shù)則是用來產(chǎn)生確認身份的挑戰(zhàn)。
數(shù)字簽名及信息摘要是用來確保網(wǎng)絡上通訊的完整性。隨機數(shù)是用于大部分的數(shù)字簽名算法,以使惡意的一方難于偽造簽名。隨機數(shù)的品質會直接影響到簽名的效力??偠灾己玫陌踩枰己玫碾S機數(shù)。
數(shù)值本身不是隨機的。隨機度的定義必須不僅包括所產(chǎn)生的數(shù)值的特征,而且也包括用以產(chǎn)生數(shù)值的產(chǎn)生器的特征。運用軟件的隨機數(shù)產(chǎn)生器是常見的,并且對于許多應用而言已足夠。然而,對某些應用來說,軟件產(chǎn)生器是不夠的。這些應用需要硬件產(chǎn)生器,其可產(chǎn)生與由隨機物理程序所產(chǎn)生數(shù)值的特征相同的數(shù)值。此處,重要的特征是,其產(chǎn)生數(shù)值所具有的統(tǒng)計分布的無偏差程度,以及不可預測與不可重制的程度。
具有無偏差的統(tǒng)計分布,是意謂所有的值具有相等的發(fā)生機率,無論樣本大小為何。幾乎所有的應用都要求其隨機數(shù)具有良好的統(tǒng)計分布,而高品質的軟件隨機數(shù)產(chǎn)生器通常能滿足此需求。只滿足無偏差統(tǒng)計分布的需求的產(chǎn)生器稱為偽隨機數(shù)產(chǎn)生器。
不可預測性是指在一位序列中,正確猜測下個位的機率應剛好為一半,無論先前所產(chǎn)生的位值為何。某些應用不需要此種不可預測性的特征;然而,對安全應用所使用的隨機數(shù)而言,則是要緊的。若使用軟件產(chǎn)生器,則要有效滿足不可預測性的需求,必須隱藏軟件算法及其初始值。從安全的觀點而言,隱藏算法的做法是非常不保險的。對于使用可預測的隱藏算法隨機數(shù)產(chǎn)生器的應用軟件而言,有不少安全上遭致破壞的例子是為人所熟知的。同時滿足前二種需求的產(chǎn)生器稱為密碼安全偽隨機數(shù)產(chǎn)生器。
產(chǎn)生器若為不可重制的,則二個具有相同起始條件的相同產(chǎn)生器,必須產(chǎn)生不同的輸出。軟件算法不能滿足此需求。只有基于隨機物理程序的硬件式產(chǎn)生器,能產(chǎn)生滿足安全所需的嚴格不可重制性的數(shù)值。滿足所有三個需求的產(chǎn)生器稱為真隨機數(shù)產(chǎn)生器。
軟件算法是用來產(chǎn)生計算機應用所需的大部分隨機數(shù)。這些稱為偽隨機數(shù)產(chǎn)生器,這是因為這些產(chǎn)生器不能滿足不可預測性及不可重制性的需求。再者,有些也不能滿足無偏差統(tǒng)計分布的需求。
通常,軟件產(chǎn)生器以一初始值或籽數(shù)(seed)開始工作,該初始值有時是由使用者所提供。產(chǎn)生器以該初始值執(zhí)行算術運算,以產(chǎn)生第一隨機結果,其作為產(chǎn)生第二結果的籽數(shù),依此類推。軟件產(chǎn)生器必然是循環(huán)式的,最終其會重復相同的輸出序列。猜測籽數(shù)就等于能預測整個所產(chǎn)生的數(shù)值序列。其不可重制性只與算法及初始籽數(shù)的機密程度一樣,而這可能是安全上的應用并不想要的特性。再者,軟件算法是可重制的,因為以相同輸入開始,其會產(chǎn)生相同的結果。最后,軟件算法不必然會產(chǎn)生輸出數(shù)據(jù)大小的范圍內(nèi)的每個可能的值,這可能無法完全滿足無偏差統(tǒng)計分布的需求。
有一種隨機數(shù)產(chǎn)生器,是軟件產(chǎn)生器與純硬件產(chǎn)生器混合而成,稱為熵產(chǎn)生器(entropy generator)。熵為不可預測性的另一種說法。產(chǎn)生器所產(chǎn)生的數(shù)值愈不可預測,產(chǎn)生器所具有的熵就愈多。熵產(chǎn)生器會將軟件算法應用于由物理現(xiàn)象所產(chǎn)生的籽數(shù)。例如,常用的PC加密程序會記錄幾秒鐘的鼠標移動及鍵盤敲擊的特性,以獲得其所需的籽數(shù)。這些動作不見得會產(chǎn)生不理想的熵數(shù),且通常需要使用者某種程度的涉入。對多數(shù)的熵產(chǎn)生器而言,最不理想的特征就是要花很多時間,才能達到足夠的熵。
從前文可清楚得知,某些應用,包括安全上的應用,需要由隨機物理程序才能產(chǎn)生的隨機數(shù),如橫跨半導體二極管或電阻器的熱噪聲、自發(fā)振蕩器的頻率不穩(wěn)定度或是在特定的時間周期內(nèi),半導體電容器的充電量。這幾種隨機數(shù)源已用于一些商業(yè)用途的加入式(add-in)隨機數(shù)產(chǎn)生器裝置,如PCI卡及串行總線裝置。這些裝置在商業(yè)上的使用并不廣泛,明顯是因為它們不是相當慢就是相當貴。
有一種可提供便宜、高效能的硬件隨機數(shù)產(chǎn)生器的解決方案,是將其并入微處理器內(nèi)。隨機數(shù)產(chǎn)生器可利用前述的隨機物理程序產(chǎn)生隨機數(shù),并且成本相當?shù)土?,因為其可并入既有的半導體晶粒中。要將新特征加入微處理器所需克服的一項障礙,就是使操作系統(tǒng)也能支持新特征。
大多數(shù)理想的操作系統(tǒng)都具備多任務的概念。若操作系統(tǒng)能使多個程序或工作分享處理器的執(zhí)行時間,就是多任務的操作系統(tǒng)。即,操作系統(tǒng)允許一項工作可支配微處理器執(zhí)行一段時間,而后操作系統(tǒng)允許另一項工作支配微處理器執(zhí)行下一段時間,依此類推。每一工作具有其相關的狀態(tài),如其所使用的微處理器寄存器的值。為便于多任務運行,操作系統(tǒng)會將所切換掉的工作的狀態(tài)存儲到內(nèi)存,并且從內(nèi)存回存所切換到的工作的狀態(tài),其在先前被切換掉時即已存儲。
若一新特征已加入微處理器,如隨機數(shù)產(chǎn)生器,包括其狀態(tài)信息,像是存儲于新寄存器中且可由軟件程序指令存取的值,則假使不只有一項工作會使用新特征,操作系統(tǒng)必須于切換工作時維護此狀態(tài)。雖然操作系統(tǒng)廠商未來終會提供對存儲與回存新特征狀態(tài)的支持,但速度上是緩不濟急的。若新特征確為所需,如快速的真隨機數(shù)產(chǎn)生器,則應用程序在操作系統(tǒng)能提供支持之前,就會想運用此特征。
因此,我們所需要的就是一種微處理器,其本身包含一種機制,可用以存儲及回存其隨機數(shù)產(chǎn)生器的狀態(tài)。
發(fā)明內(nèi)容
本發(fā)明提出一種微處理器,其包括用以存儲及回存其硬件隨機數(shù)產(chǎn)生器狀態(tài)的裝置及方法,而不需操作系統(tǒng)的支持。因此,為了達到上述的目的,本發(fā)明的一項特征是,提出一種用以執(zhí)行多任務操作系統(tǒng)的微處理器。此微處理器具有連接至其本身的內(nèi)存。此微處理器包括一寄存器,于工作切換時由操作系統(tǒng)進行存儲及回存。此微處理器也包括一存儲標志的標志寄存器,連接至此寄存器,此標志若設定,則表示可能發(fā)生工作切換。當微處理器執(zhí)行加載寄存器的指令時,會設定此標志。此微處理器也包括一隨機數(shù)產(chǎn)生器(RNG),連接至寄存器,其依據(jù)存儲于控制寄存器中的一或多個控制值而產(chǎn)生隨機數(shù)??刂萍拇嫫饔诠ぷ髑袚Q時不由操作系統(tǒng)進行存儲及回存。此微處理器包括第一指令,用以將控制值加載至控制寄存器,并也將這些值加載至寄存器。此微處理器也包括第二指令,用以將隨機數(shù)存儲至內(nèi)存,并且若標志已設定,則將這些值從寄存器復制到控制寄存器。
如上所述的裝置,其中,該寄存器包括一SSE寄存器。
如上所述的裝置,其中,該寄存器包括一MMX寄存器。
如上所述的裝置,其中,該寄存器包括一FPU寄存器。
如上所述的裝置,其中,在將該寄存器的這些內(nèi)容復制到該控制寄存器之后,該微處理器清除該標志。
如上所述的裝置,其中,在將該控制值加載至該控制寄存器及該寄存器之后,該微處理器清除該標志。
如上所述的裝置,其中,該一或多個控制值包括用以選擇性地使能/禁止該隨機數(shù)產(chǎn)生器中的一過濾裝置的一個值。
如上所述的裝置,其中,該過濾裝置包括用以避免在這些隨機數(shù)中產(chǎn)生一串N個連續(xù)相似位的一過濾器。
如上所述的裝置,其中,該一或多個控制值選取包含于該隨機數(shù)產(chǎn)生器中的二或多個隨機位產(chǎn)生器其中之一,以產(chǎn)生隨機位,累積至這些隨機數(shù)中。
如上所述的裝置,其中,該一或多個控制值選擇性地使能/禁止該隨機數(shù)產(chǎn)生器,以產(chǎn)生這些隨機數(shù)。
如上所述的裝置,其中,該一或多個控制值選擇性地使能/禁止該隨機數(shù)產(chǎn)生器的一連續(xù)數(shù)值測試。
如上所述的裝置,其中,該一或多個控制值選擇性地使能/禁止該隨機數(shù)產(chǎn)生器的一自測試。
如上所述的裝置,其中,該一或多個控制值選擇性地使能/禁止該隨機數(shù)產(chǎn)生器中的一位白化器。
如上所述的裝置,其中,該一或多個控制值指定一直流偏壓,用于部分地控制振蕩器的一操作電壓,以該隨機數(shù)產(chǎn)生器中產(chǎn)生隨機位。
如上所述的裝置,其中,還包括一計數(shù)器,包含于該隨機數(shù)產(chǎn)生器中,用以維持包含這些隨機數(shù)的有效字節(jié)的一計數(shù)值。
如上所述的裝置,其中,該第二指令除將這些隨機數(shù)存儲至該內(nèi)存外,還存儲該計數(shù)值。
如上所述的裝置,其中,該第二指令將該計數(shù)值存儲至該內(nèi)存。
如上所述的裝置,其中,該第二指令將該計數(shù)值存儲至該微處理器內(nèi)的一使用者可見寄存器。
如上所述的裝置,其中,該第二指令連續(xù)地執(zhí)行該計數(shù)值與這些隨機數(shù)的存儲。
如上所述的裝置,其中,若該標志設定,則在存儲該計數(shù)值之前,該微處理器會清除該計數(shù)值。
如上所述的裝置,其中,只有在該復制動作改變該控制寄存器的該一或多個控制值時,該微處理器才清除該計數(shù)值。
如上所述的裝置,其中,該第二指令是不可中斷的。
如上所述的裝置,其中,若該標志設定,則該微處理器依據(jù)從該寄存器復制到該控制寄存器的這些內(nèi)容,重新開始產(chǎn)生這些隨機數(shù)。
如上所述的裝置,其中,只有在該復制動作改變該控制寄存器的該一或多個控制值時,該微處理器才依據(jù)這些內(nèi)容,重新開始產(chǎn)生這些隨機數(shù)。
如上所述的裝置,其中,若該標志設定,則該微處理器會丟棄在將該控制值從該寄存器復制到該控制寄存器之前,所產(chǎn)生的這些隨機數(shù)。
如上所述的裝置,其中,若該微處理器執(zhí)行一加載該寄存器的指令,則只有在該指令從該內(nèi)存加載該寄存器時,才設定該標志。
本發(fā)明的另一項特征是,提出一種使多個軟件應用程序能使用微處理器中的隨機數(shù)產(chǎn)生器(RNG)的方法,此微處理器是執(zhí)行多任務操作系統(tǒng)(OS),而此操作系統(tǒng)在工作切換期間,不會存儲及回存隨機數(shù)產(chǎn)生器的狀態(tài)。此方法包括第一工作將第一值加載RNG寄存器及非RNG寄存器;OS將第一值從非RNG寄存器存入連接至微處理器的內(nèi)存;在OS存儲第一值后,第二工作將第二值加載RNG寄存器;以及OS將第一值從內(nèi)存回存至非RNG寄存器。此方法也包括在OS將第一值從內(nèi)存回存至非RNG寄存器后,RNG將第一值從非RNG寄存器復制到RNG寄存器;以及在RNG復制第一值之后,RNG依據(jù)第一值產(chǎn)生隨機數(shù)據(jù)。
如上所述的方法,其中,還包括在該第一工作將該第一值加載該RNG寄存器及該非RNG寄存器后,該RNG依據(jù)該第一值產(chǎn)生隨機數(shù)據(jù)。
如上所述的方法,其中,該OS將該第一值從該非RNG寄存器存入該內(nèi)存的動作,是由該OS作為切換至該第二工作的工作切換的一部分來執(zhí)行。
如上所述的方法,其中,還包括在該第二工作將該第二值加載該RNG寄存器之后,該RNG依據(jù)該RNG寄存器中的該第二值產(chǎn)生隨機數(shù)據(jù)。
如上所述的方法,其中,該OS將該第一值從該內(nèi)存回存至該非RNG寄存器的動作,是由該OS作為切換至該第二工作的工作切換的一部分來執(zhí)行。
如上所述的方法,其中,還包括該RNG響應該OS將該第一值從該內(nèi)存回存至該非RNG寄存器的動作,設定一標志,以表示可能發(fā)生一工作切換。
如上所述的方法,其中,還包括在該RNG設定該標志之后,該第一工作執(zhí)行要求將隨機數(shù)據(jù)存至該內(nèi)存的一指令。
如上所述的方法,其中,還包括在該第一工作執(zhí)行該指令之后,該RNG判斷該標志是否設定。
如上所述的方法,其中,該RNG將該第一值從該非RNG寄存器復制到該RNG寄存器的動作,是依據(jù)該判斷該標志是否設定的動作,而選擇性地執(zhí)行。
如上所述的方法,其中,還包括在該OS將該第一值從該非RNG寄存器存入該內(nèi)存,且該第二工作將該第二值加載該RNG寄存器之后,該RNG丟棄由該RNG所產(chǎn)生的隨機數(shù)據(jù)。本發(fā)明的再一項特征是,提出一種使微處理器能讓多個軟件應用程序使用其中的隨機數(shù)產(chǎn)生器(RNG)的方法,此微處理器是執(zhí)行多任務操作系統(tǒng)(OS),而此操作系統(tǒng)在工作切換期間,不會存儲及回存隨機數(shù)產(chǎn)生器的狀態(tài)至內(nèi)存。此方法包括對于第一工作執(zhí)行第一指令,響應以將第一值加載RNG寄存器及非RNG寄存器;以及對于第一工作執(zhí)行第二指令,響應以將第一值從非RNG寄存器復制到RNG寄存器。此復制動作是于OS已將第一值從內(nèi)存回存至非RNG寄存器之后執(zhí)行。此方法也包括在將第一值從非RNG寄存器復制到RNG寄存器之后,依據(jù)第一值產(chǎn)生隨機數(shù)據(jù)。
如上所述的方法,其中,還包括響應于該OS將該第一值從該內(nèi)存回存至該非RNG緩存器寄存器,而設定一標志,以表示可能發(fā)生工作切換。
如上所述的方法,其中,還包括判斷該標志是否設定,其中該判斷系是響應該第一工作執(zhí)行要求將隨機數(shù)據(jù)存至該內(nèi)存之一的一第二指令而進行。
如上所述的方法,其中,該復制動作系是依據(jù)該判斷而選擇性地執(zhí)行。
如上所述的方法,其中,還包括若該標志已設定,則在該復制動作之前,丟棄由該RNG所產(chǎn)生的隨機數(shù)據(jù)。
本發(fā)明的一項優(yōu)點是,使微處理器內(nèi)高效能的真隨機數(shù)產(chǎn)生器(RNG)能由處理器上所執(zhí)行的多個工作來分享,即使操作系統(tǒng)(OS)還未支持隨機數(shù)產(chǎn)生器的工作切換。這樣,就能在操作系統(tǒng)提供支持前使用上述特征,提高開發(fā)者開發(fā)使用隨機數(shù)產(chǎn)生器的應用程序的可能性,以使此特征可應用于商業(yè)用途,進一步促使操作系統(tǒng)開發(fā)者更快地將隨機數(shù)產(chǎn)生器的多任務支持內(nèi)含于操作系統(tǒng)中。本發(fā)明以額外硬件上很低的要求,有利地提供此能力。
在參考本說明書的其余部份及附圖后,本發(fā)明的其它特征及優(yōu)點將更為明顯易知。
圖1是本發(fā)明微處理器的方框圖;圖2是本發(fā)明圖1的微處理器中RNG單元的方框圖;圖3是本發(fā)明圖1微處理器中,與圖1RNG單元有關的各種寄存器的方框圖;圖4是根據(jù)本發(fā)明,圖1的微處理器執(zhí)行將值加載圖3 XMM0寄存器的指令的運行流程圖;圖5是根據(jù)本發(fā)明,圖1微處理器在執(zhí)行XLOAD指令時的運行方框圖;圖6是根據(jù)本發(fā)明,圖1的微處理器執(zhí)行XLOAD指令的運行流程圖;圖7是根據(jù)本發(fā)明,圖1微處理器在執(zhí)行XSTORE指令時的運行方框圖;圖8是根據(jù)本發(fā)明,圖1的微處理器執(zhí)行XSTORE指令的運行流程圖;圖9是根據(jù)本發(fā)明,圖1微處理器進行關于隨機數(shù)產(chǎn)生的多任務運行范例的動作流程圖;圖10是根據(jù)本發(fā)明,圖1微處理器中,圖2RNG單元的串過濾裝置的方框圖;圖11是根據(jù)本發(fā)明,圖10的串過濾裝置的運行流程圖;
圖12是根據(jù)本發(fā)明的另一具體實施例,圖1微處理器執(zhí)行XSTORE指令的運行方框圖;圖13是根據(jù)本發(fā)明,圖2 RNG單元的多重緩沖運行的流程圖;圖14是根據(jù)本發(fā)明的另一具體實施例,圖1微處理器執(zhí)行XLOAD指令的運行流程圖;圖15是根據(jù)本發(fā)明的另一具體實施例,圖1微處理器100執(zhí)行XSTORE指令的運行流程圖;圖16及17是根據(jù)本發(fā)明的另外具體實施例,圖1微處理器執(zhí)行XSTORE指令的運行方框圖。
其中,附圖標記說明如下100微處理器 102指令高速緩存104指令提取器 106指令轉譯器108寄存器文件 112地址產(chǎn)生器114加載單元 116執(zhí)行階段118儲存單元 122回寫單元124寫入緩沖器 126讀取緩沖器128總線接口單元(BIU)132微碼ROM134SSE單元 136隨機數(shù)產(chǎn)生器(RNG)單元138處理器總線 142,144數(shù)據(jù)總線146中斷單元 148中斷信號152中斷向量202自測試單元 204CPUID寄存器206隨機位產(chǎn)生器0208隨機位產(chǎn)生器1211計數(shù)器0 212機器特定寄存器(MSR)213計數(shù)器1 214多路復用器215第二多路分用器 216白化器217第三多路分用器 218移位寄存器219第四多路復用器 221遞增信號222連續(xù)數(shù)目測試(CNT)單元
223清除信號224串過濾裝置225比較器 226控制與狀態(tài)寄存器(CSR)227full1信號 228第二多路復用器229full0信號 231power_cntrl信號232多路分用器 234可用字節(jié)計數(shù)236第三多路復用器 238寄存器R5242緩沖器0 244控制邏輯246緩沖器1 248重置信號252產(chǎn)生器選擇信號 254原始位信號256過濾失敗信號258max_cnt信號262過濾使能信號264fill_select信號266store_select信號268xstore信號272xload信號 274TSPO標志寄存器278數(shù)據(jù)總線282字節(jié)產(chǎn)生信號284CNT使能信號 286RNG存在信號288自測試失敗信號 292自測試使能信號294CNT失敗信號 296直流偏壓信號298隨機數(shù)據(jù)字節(jié)302,314RNG存在位 312RNG使能位316自測試使能位318自測試失敗位322直流偏壓位 324原始位332,362可用字節(jié)計數(shù)字段334串過濾裝置使能位336產(chǎn)生器選擇位338串過濾裝置失敗位342CNT使能位344CNT失敗位 346串過濾裝置max_cnt字段352SSE寄存器 364隨機數(shù)據(jù)字節(jié)字段372XMM0374XMM5376XMM3402-404微處理器執(zhí)行將值加載XMM0寄存器的指令的運行流程502系統(tǒng)內(nèi)存50416個字節(jié)數(shù)據(jù)
602-612微處理器執(zhí)行XLOAD指令的運行流程702可用字節(jié)計數(shù) 704隨機數(shù)據(jù)字節(jié)802-824微處理器執(zhí)行XSTORE指令的運行流程902-952微處理器進行關于隨機數(shù)產(chǎn)生的多任務運行范例的動作流程1002比較邏輯 1004或門1006選擇邏輯 1008與門1012A第一加法器 1012B第二加法器1014A第一多路復用器 1014B第二多路復用器1016A第一計數(shù)器 1016B第二計數(shù)器1022Anum_leading_ones信號1022Bnum_leading_zeros信號1024Aones_cnt信號1024Bzeros_cnt信號1026Anew_ones_cnt信號1026Bnew_zeros_cnt信號1028Anum_trailing_ones信號1028Bnum_trailling_zeros信號1032A,1032B固定零值 1032Aones_exceeded信號1034Bzeros_exceeded信號1036Aleading_ones信號1036Bleading_zeros信號1038Atrailing_ones信號 1038Btrailing_zeros信號1042Aone_select信號 1042Bzero_select信號1044max_cnt_exceeded信號1046A第一比較器 1046B第二比較器1048Aall_ones信號1048Ball_zeros信號1102-1148串過濾裝置的工作流程1202EAX寄存器1302-1334RNG單元的多重緩沖運行的流程1702ECX寄存器1704ESEDI具體實施方式
現(xiàn)請參照圖1,其是本發(fā)明的微處理器100的方框圖。圖1的微處理器100為包括多個階段的管線化微處理器,其中每一階段負責整個程序指令執(zhí)行過程的一部份,如下所述。
微處理器100包括一隨機數(shù)產(chǎn)生器(RNG)單元136。微處理器100所執(zhí)行的操作系統(tǒng)及應用程序,可能會使用隨機數(shù)來執(zhí)行各種功能,如數(shù)據(jù)加密、物理現(xiàn)象的模擬、統(tǒng)計分析、數(shù)值分析或是其它。RNG單元136會產(chǎn)生用于這些功能的隨機數(shù)。RNG單元136將于下文做更詳細地說明。
微處理器100也包括一指令高速緩存102。指令高速緩存102會高速緩存從連接至微處理器100的系統(tǒng)內(nèi)存所提取的程序指令。
微處理器100也包括一指令提取器104,其連接至指令高速緩存102。指令提取器104會控制從系統(tǒng)內(nèi)存及/或指令高速緩存102提取指令的動作。指令提取器104會選取一個值給由微處理器100所維護的指令指針(instruction pointer)。指令指針會指定下個內(nèi)存地址,以從該處提取指令。一般來說,指令指針會順序遞增,而指到下個指令。然而,流程控制指令(如分支(branch)、跳躍、副例程呼叫及返回)會將指令指針更新為流程控制指令所指定的非順序內(nèi)存地址。此外,中斷可能驅使指令提取器104將指令指針更新為非順序地址。
微處理器100也包括一中斷單元146,其連接至指令提取器104。中斷單元146會接收一中斷信號148及一中斷向量152。微處理器100之外的組件可能會使能中斷信號148,并提供中斷向量152,以使微處理器100執(zhí)行中斷服務例程。中斷單元146會依據(jù)中斷向量152,決定中斷服務例程的內(nèi)存地址,并將中斷服務例程的內(nèi)存地址送到指令提取器104,以將指令指針更新為中斷服務例程地址。中斷單元146也會依照微處理器100所執(zhí)行的特定指令,選擇性地禁止及使能中斷服務。即,若中斷被禁止,則即使中斷信號148被使能,指令指針的內(nèi)容也不會改變,直到中斷被使能為止。
微處理器100也包括一指令轉譯器106,其連接至指令提取器104、中斷單元146及RNG單元136。指令轉譯器106會轉譯從指令高速緩存102及/或系統(tǒng)內(nèi)存所接收的指令。指令轉譯器106會轉譯指令,并依據(jù)轉譯指令的形式采取適當?shù)膭幼?。指令轉譯器106會轉譯微處理器100的指令集中所定義的指令。若指令轉譯器106要轉譯未定義在微處理器100指令集中的指令,則會產(chǎn)生不合法的指令異常。
在一具體實施例中,微處理器100的指令集實質上近似于英特爾PentiumIII或Pentium IV微處理器的指令集。然而有利的是,本發(fā)明的微處理器100包括額外的指令,其有關于RNG單元136的隨機數(shù)產(chǎn)生功能。一個額外的指令為XSTORE指令,可存儲RNG單元136所產(chǎn)生的隨機數(shù)。另一額外的指令為XLOAD指令,可從系統(tǒng)內(nèi)存將控制值加載RNG單元136中的控制與狀態(tài)寄存器(control and status register,CSR)226及單指令多數(shù)據(jù)流擴展(Streaming SIMD Extensions,SSE)寄存器XMM0372,這部分在下文會配合圖2及圖3做說明。XSTORE及XLOAD指令在下文也會做更詳細地說明。
此外,指令轉譯器106會將轉譯指令的相關信息送到中斷單元146,以使中斷單元146能適當?shù)厥鼓芗敖怪袛?。再者,指令轉譯器106會將轉譯指令的相關信息送到RNG單元136。例如,指令轉譯器106會將關于轉譯的XSTORE及XLOAD指令的信息送到RNG單元136。此外,當一將值加載SSE寄存器XMM0372的指令被轉譯時,指令轉譯器106會通知RNG單元136,以使RNG單元136采取某些動作,如設定標志,以指出操作系統(tǒng)可能會進行一工作切換,如下文所述。
在一具體實施例中,指令轉譯器106會將宏指令,如Pentium III或IV的指令,轉譯為由微處理器100管線所執(zhí)行的一個或多個微指令。
微處理器100也包括一微碼ROM132,其連接至指令轉譯器106。微碼ROM132會存儲微程序代碼指令,以送到指令轉譯器106,由微處理器100來執(zhí)行。微處理器100指令集中的某些指令,是以微程序代碼來實作。即,當指令轉譯器106轉譯這些指令的其中一個時,指令轉譯器106會使微碼ROM132內(nèi)的一微指令例程被執(zhí)行,藉以執(zhí)行轉譯的宏指令。在一具體實施例中,XSTORE及/或XLOAD指令是以微程序代碼執(zhí)行。此外,在一具體實施例中,XSTORE及XLOAD指令是連續(xù)執(zhí)行的,此因其為不可中斷的。即,在XSTORE及XLOAD指令的執(zhí)行期間,中斷會被禁止。
微處理器100也包括一寄存器文件108,其連接至指令轉譯器106。寄存器文件108包括微處理器100的使用者可見寄存器,及其它寄存器。在一具體實施例中,寄存器文件1 08中的使用者可見寄存器包括Pentium III或IV的使用者可見寄存器集。圖3的SSE寄存器352是包含于寄存器文件108中。SSE寄存器352是由包含于微處理器100中的SSE單元134及RNG單元136來使用,如下所述。尤其,寄存器文件108包括目前操作系統(tǒng)所熟知的寄存器。因此,當操作系統(tǒng)從第一工作切換到第二工作時,操作系統(tǒng)將寄存器文件108的寄存器(包括SSE寄存器352)中關于第一工作的內(nèi)容,存到系統(tǒng)內(nèi)存,并從系統(tǒng)內(nèi)存回存寄存器文件108的寄存器(包括SSE寄存器352)中關于第二工作的內(nèi)容。
微處理器100也包括一地址產(chǎn)生器112,其連接至寄存器文件108。地址產(chǎn)生器112會依據(jù)存于寄存器文件108中的操作數(shù)及由指令轉譯器106轉譯的指令所提供的操作數(shù),而產(chǎn)生內(nèi)存地址。特別是,地址產(chǎn)生器112會產(chǎn)生內(nèi)存地址,以指定系統(tǒng)內(nèi)存中的位置,由XSTORE指令將多個字節(jié)的隨機數(shù)據(jù)存儲其中。此外,地址產(chǎn)生器112也產(chǎn)生指定系統(tǒng)內(nèi)存中的位置的內(nèi)存地址,由XLOAD指令加載其中的控制值,以由一數(shù)據(jù)總線142存入圖2的CSR 226中。
微處理器100也包括一加載單元114,其連接至地址產(chǎn)生器112。加載單元114會從系統(tǒng)內(nèi)存中加載數(shù)據(jù)至微處理器100。加載單元114也包括一數(shù)據(jù)高速緩存,以高速緩存從系統(tǒng)內(nèi)存所讀取的數(shù)據(jù)。加載單元114會由數(shù)據(jù)總線142,將加載的數(shù)據(jù)送到微處理器100中的執(zhí)行單元,如SSE單元134、RNG單元136及包含于執(zhí)行階段116中的執(zhí)行單元。特別是,加載單元114會從系統(tǒng)內(nèi)存加載控制值,存到圖2的CSR 226中,以執(zhí)行XLOAD指令。
微處理器100也包括執(zhí)行階段116,其由數(shù)據(jù)總線142連接至加載單元114。執(zhí)行階段116包括執(zhí)行單元,如算術邏輯單元,其用以執(zhí)行算術與邏輯運算,像是加、減、乘、除及布爾運算。在一具體實施例中,執(zhí)行階段116包括一用以執(zhí)行整數(shù)運算的整數(shù)單元,及一用以執(zhí)行浮點運算的浮點單元。
微處理器100也包括SSE單元134,其連接至加載單元114及指令轉譯器106。SSE單元134包括算術與邏輯單元,用以執(zhí)行SSE指令,如包含于Pentium III與IV的SSE或SSE2指令集中的那些指令。在一具體實施例中,雖然圖3的SSE寄存器352概念上是包含在寄存器文件108中,但實際上是位于SSE單元134中,用以存儲SSE單元134所使用的操作數(shù)。
微處理器100也包括RNG單元136,其由數(shù)據(jù)總線142連接至指令轉譯器106及加載單元114。RNG單元136提供隨機數(shù)據(jù)字節(jié)以及一計數(shù)值于數(shù)據(jù)總線144上,其中該計數(shù)值是表示提供給一XSTORE指令的隨機數(shù)據(jù)字節(jié)的數(shù)量。RNG單元136在下文將會配合其余附圖做更詳細的說明。
微處理器100也包括一存儲單元118,其連接至執(zhí)行單元116、SSE單元134以及RNG單元136。存儲單元118會將數(shù)據(jù)存儲到系統(tǒng)內(nèi)存及加載單元114中的數(shù)據(jù)高速緩存。存儲單元118會將執(zhí)行單元116、SSE單元134及RNG單元136所產(chǎn)生的結果存儲至系統(tǒng)內(nèi)存。特別是,存儲單元118會將RNG單元136在數(shù)據(jù)總線144上所提供的XSTORE指令計數(shù)及隨機數(shù)據(jù)字節(jié)存儲至系統(tǒng)內(nèi)存。
微處理器100也包括一回寫單元122,其連接至執(zhí)行單元116及寄存器文件108?;貙憜卧?22會將指令結果回寫至寄存器文件108。
微處理器100也包括寫入緩沖器124,其連接至回寫單元122。寫入緩沖器124會保持等待寫入至系統(tǒng)內(nèi)存的數(shù)據(jù),如XSTORE指令計數(shù)及數(shù)據(jù)。
微處理器100也包括一總線接口單元(BIU)128,其連接至寫入緩沖器124。BIU128是作為微處理器100與一處理器總線138的接口。處理器總線138將微處理器100連接至系統(tǒng)內(nèi)存。BIU128執(zhí)行處理器總線138上的總線作業(yè),以在微處理器100與系統(tǒng)內(nèi)存之間傳遞數(shù)據(jù)。特別是,BIU128會執(zhí)行處理器總線138上的一個或多個總線作業(yè),以將XSTORE指令計數(shù)及數(shù)據(jù)存儲至系統(tǒng)內(nèi)存。此外,BIU128會執(zhí)行處理器總線138上的一或多個總線作業(yè),以從系統(tǒng)內(nèi)存加載XLOAD指令控制值。
微處理器100也包括讀取緩沖器126,其連接至BIU128及寄存器文件108。對于藉由BIU128從系統(tǒng)內(nèi)存所接收的數(shù)據(jù),在其等待送到加載單元114或寄存器文件108時,讀取緩沖器126會將其保存著。特別是,當從系統(tǒng)內(nèi)存接收的XLOAD指令數(shù)據(jù)在等待送到加載單元114及其后的RNG單元136時,讀取緩沖器126會將此數(shù)據(jù)保存著。
現(xiàn)請參照圖2,其為本發(fā)明圖1的微處理器100中RNG單元136的方框圖。
RNG單元136包括控制邏輯244??刂七壿?44包括大量的組合及順序邏輯,用以控制RNG單元136中的各種組件??刂七壿?44會接收xload信號272及xstore信號268,其分別表示正執(zhí)行XLOAD或XSTORE指令。控制邏輯244也會接收重置信號248,其表示正在重置RNG單元136。下面會結合RNG單元136的其余部分,對控制邏輯244做更詳細地說明。
RNG單元136也包括一自測試單元202,其連接至控制邏輯244。自測試單元202會從一控制與狀態(tài)寄存器,稱為機器特定寄存器(MSR)212,接收自測試使能信號292,MSR212將在下文配合圖3做更詳細地說明。MSR212也連接至控制邏輯244。自測試單元202會將自測試失敗信號288送到控制邏輯244。若自測試單元202被自測試使能信號292所使能,則自測試單元202會執(zhí)行各種RNG單元136的自測試。若自測試失敗,自測試單元202會產(chǎn)生真值的自測試失敗信號288,并送至MSR212。在一具體實施例中,自測試單元202會執(zhí)行隨機數(shù)產(chǎn)生器統(tǒng)計測試,如聯(lián)邦信息處理標準(FIPS)刊物第140-2期的第35-36頁所定義的,此處予以參考并入。
在一具體實施例中,自測試單元202在使用者的要求下執(zhí)行自測試。在一具體實施例中,在微處理器100重置后,自測試單元202會執(zhí)行自測試。若自測試失敗,不論是使用者所要求的或重置后所做的,自測試單元202都會產(chǎn)生真值的自測試失敗信號288,其是反映于圖3中MSR212的自測試失敗位318??刂七壿?44在重置時,會檢查自測試失敗位318。若自測試失敗位318為真,控制邏輯244會設定一偽值的RNG存在信號286,送到MSR212,以更新圖3的RNG存在位314。
RNG存在信號286也會送到一CPUID寄存器204,其包括圖3的RNG存在位302,而RNG存在位302也會藉由RNG存在信號286來更新。即,CPUID寄存器204的RNG存在位302為MSR212的RNG存在位314的副本。在一具體實施例中,應用程序可藉由執(zhí)行IA-32指令集中的CPUID指令來讀取CPUID寄存器204。若RNG存在位302為偽,則表示RNG單元136并不存在于微處理器100,且微處理器100不具備隨機數(shù)產(chǎn)生的特征。有利的是,需要隨機數(shù)的應用可通過RNG存在位302,來檢測微處理器100中的RNG單元136是否存在,且若RNG單元136不存在,則選擇由另一個也許效能較低的來源來取得隨機數(shù)。
RNG單元136也包括兩個連接至控制邏輯244的隨機位產(chǎn)生器,稱為隨機位產(chǎn)生器0206及隨機位產(chǎn)生器1208,隨機位產(chǎn)生器206及208都會產(chǎn)生一串隨機位,由RNG單元136累積成隨機數(shù)據(jù)的字節(jié)。隨機位產(chǎn)生器206及208都會接收一電源控制(power_cntrl)信號231,其是用以指定是否關閉隨機位產(chǎn)生器206及208的電源。在一具體實施例中,關閉隨機位產(chǎn)生器206及208電源的動作包括不送時鐘脈沖信號給它們。隨機位產(chǎn)生器206及208都會依據(jù)微處理器100的隨機電氣特性(如熱噪聲),而產(chǎn)生一連串隨機數(shù)據(jù)位。
隨機位產(chǎn)生器0206會從MSR212接收一直流偏壓信號296。直流偏壓信號296傳送圖3中MSR212的直流偏壓位322所存的值。直流偏壓信號296的值指定一直流偏壓電壓,以部分地控制隨機位產(chǎn)生器0206中的自發(fā)振鈴振蕩器的工作電壓。
以下申請中的美國專利案,申請?zhí)枮?0/046055、10/046054及10/046057,標題分別為“用以產(chǎn)生隨機數(shù)的裝置”、“振蕩器偏壓變化機制”及“振蕩器頻率變化機制”,其中均對隨機位產(chǎn)生器0 206做了詳細說明,此處全部予以參考并入。
RNG單元136也包括一具有兩輸入端的多路復用器214,其輸入端連接至隨機位產(chǎn)生器206及208的輸出端。多路復用器214依據(jù)CSR226所提供的產(chǎn)生器選擇信號252,來選擇兩輸入端的其中一個。產(chǎn)生器選擇信號252會傳送圖3中CSR226的產(chǎn)生器選擇位336所存儲的值。
RNG單元136也包括一范紐曼白化器216,或稱壓縮器,其連接至多路復用器214的輸出端。白化器216是藉由從MSR212所接收的原始位信號254,而選擇性地被使能/禁止。原始位信號254會傳送存儲于圖3中MSR212的原始位字段324中的值。若原始位信號254為真,則白化器216讓多路復用器214所接收的位直接通過而輸出,并不執(zhí)行白化的功能。白化器216是依據(jù)一預定的輸入/輸出函數(shù),接收來自多路復用器214的一對位并輸出兩者中任一個位或都不輸出,藉以明顯降低可能存在于隨機位產(chǎn)生器206及208的殘余偏壓。白化器216的輸入/輸出函數(shù)如下表一所示。
表一
RNG單元136也包括一8位的移位寄存器218,其連接至白化器216。移位寄存器218會暫存從白化器216所接收的隨機數(shù)據(jù)位,將其累積成8位的字節(jié),并輸出所累積的隨機數(shù)據(jù)字節(jié)。移位寄存器218將一送至控制邏輯244的字節(jié)產(chǎn)生信號282設定為真,以表示其已累積并輸出一隨機數(shù)據(jù)字節(jié)298。
RNG單元136也包括一連續(xù)數(shù)目測試(CNT)單元222,其連接至移位寄存器218的輸出端。CNT單元222會從移位寄存器218接收隨機字節(jié)298,并對隨機字節(jié)298進行一連續(xù)隨機數(shù)產(chǎn)生器測試。CNT單元222是依據(jù)從CSR 226所接收的CNT使能信號284,而選擇性地被使能/禁止。CNT使能信號284會傳送存儲于圖3中CSR 226的CNT使能位342中之值。若連續(xù)隨機數(shù)產(chǎn)生器測試失敗,則CNT單元222將一送到CSR226的CNT失敗信號294設定為真,并存儲于圖3中CSR226的CNT失敗位344中。
在一具體實施例中,CNT單元222所執(zhí)行的連續(xù)隨機數(shù)產(chǎn)生器測試,實質上符合FIPS第140-2期中第37頁所述的連續(xù)隨機數(shù)產(chǎn)生器測試,其在此予以參考并入。在一具體實施例中,CNT單元222會使用二個8字節(jié)的緩沖器(稱為“舊”及“新”),來執(zhí)行測試。在重置及自測試(若有被使能)后,由移位寄存器218所傳送的前八個字節(jié)會累積于舊緩沖器中。接下來的八個字節(jié)則累積于新緩沖器中。執(zhí)行XSTORE指令時,舊緩沖器中的8個字節(jié)會與新緩沖器中的8個字節(jié)做比較。若字節(jié)不相等,測試即通過,且新緩沖器中的8個字節(jié)會被移到舊緩沖器。新緩沖器則被清除,以等待累積新的8個字節(jié)。然而,若字節(jié)相等,則CNT單元222會將CNT失敗信號294設為真,以表示連續(xù)隨機數(shù)產(chǎn)生器測試失敗。
在一具體實施例中,只要設定圖3的CNT使能位342及CNT失敗位344,XSTORE指令傳回的可用字節(jié)計數(shù)值就為0。在一具體實施例中,微處理器100在特定的XSTORE指令執(zhí)行時,將可用字節(jié)計數(shù)值及隨機數(shù)據(jù)字節(jié)存儲至系統(tǒng)內(nèi)存,其中特定XSTORE指令的執(zhí)行是啟動了該失敗的連續(xù)隨機數(shù)產(chǎn)生器測試。
在一具體實施例中,連續(xù)隨機數(shù)產(chǎn)生器測試不會橫跨數(shù)個并未全部使能該測試的工作。即,當CNT使能位342被設定時,新及舊的緩沖器都會更新,并且連續(xù)隨機數(shù)產(chǎn)生器測試只會因執(zhí)行XSTORE指令而進行。因此,可確保一特定的工作絕不會接收兩組連續(xù)且其值相等的8個字節(jié)。然而,若二個工作正執(zhí)行,且其中一個設定CNT使能位342,而另一個并未設定,則RNG單元136可能以XSTORE指令,將8個字節(jié)存儲至其中一個工作,并產(chǎn)生工作切換,而RNG單元136再以XSTORE指令,將與先前8個字節(jié)相等的8個字節(jié)存儲至另一個工作;然而,在此情況下,連續(xù)隨機數(shù)產(chǎn)生器測試將不會失敗。
RNG單元136也包括一串過濾裝置(string filter)224,其連接至移位寄存器218的輸出端。串過濾裝置224會從移位寄存器218接收隨機字節(jié)298,并選擇性地丟棄某些隨機字節(jié),如下所述,且輸出未丟棄的隨機字節(jié)。串過濾裝置224會確保RNG單元136不會產(chǎn)生比一指定值長的連續(xù)相似位(即連續(xù)的0位串或連續(xù)的1位串)。此指定值是由從CSR226所接收的最大計數(shù)(max_cnt)信號258來指定。max_cnt信號258會傳送圖3中CSR226的串過濾裝置最大計數(shù)字段346所指定的值。在一具體實施例中,max_cnt346的默認值為26個位。在一具體實施例中,串過濾裝置最大計數(shù)字段346的值必須至少為8。若串過濾裝置224檢測到一連續(xù)的相似位串長度超過max_cnt258,則串過濾裝置224將一過濾失敗信號256設為真,此信號是存儲于圖3中CSR226的串過濾裝置失敗位338中。串過濾裝置224在以下會配合圖10到12做更詳細地說明。
RNG單元136也包括一具兩輸入端的第二多路復用器228。其中一輸入端是連接至串過濾裝置224的輸出端,而另一輸入端是連接至移位寄存器218的輸出端。多路復用器228依據(jù)CSR226所提供的過濾使能信號262,而選擇其中一輸入端,以傳送圖3中CSR226的串過濾裝置使能位334所存的值。
RNG單元136也包括一個具一輸入端與兩輸出端的多路分用器232,其輸入端是連接至多路復用器228的輸出端。多路分用器電路包括單一數(shù)據(jù)輸入端及多個數(shù)據(jù)輸出端。多路分用器也包括一控制輸入端。多路分用器會依據(jù)控制輸入端的信號來選擇多個數(shù)據(jù)輸出端的其中一個,并將數(shù)據(jù)輸入端所接收的數(shù)據(jù)送到所選的輸出端。此處多路分用器232則依據(jù)控制邏輯244所提供的填充選擇(fill_select)信號264,將輸入端所接收的隨機數(shù)據(jù)字節(jié)選擇性地送到其中一個輸出端。
RNG單元136也包括兩個數(shù)據(jù)緩沖器,標示為緩沖器0242及緩沖器1246,都連接至多路分用器232的輸出端。緩沖器0242及緩沖器1246藉由XSTORE指令,來累積要存儲至系統(tǒng)內(nèi)存的隨機數(shù)據(jù)字節(jié)。在一具體實施例中,緩沖器0242及緩沖器1246各可存儲15個字節(jié)的隨機數(shù)據(jù)。在一具體實施例中,緩沖器0242及緩沖器1246各可存儲16個字節(jié)的隨機數(shù)據(jù)。
RNG單元136也包括一具兩個輸入端的第三多路復用器236,其輸入端連接至緩沖器0242及緩沖器1246的輸出端。多路復用器236依據(jù)控制邏輯244所提供的存儲選擇(store_select)信號266,選取其輸入端的其中一組隨機數(shù)據(jù)字節(jié),以輸出至一數(shù)據(jù)總線278上。
RNG單元136也包括一TSPO標志寄存器274,其連接至控制邏輯244。TSPO標志寄存器274存儲一標志,用以表示操作系統(tǒng)所進行的工作切換是否可能發(fā)生。TSPO標志寄存器274的使用在以下會做更詳細地說明。
RNG單元136也包括一具兩輸出端的第二多路分用器215,其連接至控制邏輯244。多路分用器215的輸入端連接至控制邏輯244,以接收其所產(chǎn)生的遞增信號221。每當一隨機數(shù)據(jù)字節(jié)存入緩沖器0242或緩沖器1246時,控制邏輯244會將遞增信號221設為真。多路分用器215依據(jù)fill_select信號264,將其輸入端所接收的遞增信號221選擇性地送到其中一輸出端。
RNG單元136也包括一具兩輸入端的第三多路分用器217,其連接至控制邏輯244。多路分用器217的輸入端連接至控制邏輯244,以接收其所產(chǎn)生的清除信號223。每當執(zhí)行一XSTORE指令時,控制邏輯244會將清除信號223設為真,以使得有效的隨機數(shù)據(jù)字節(jié)從緩沖器0242或緩沖器1246中移除。多路分用器217依據(jù)store_select信號266,將其輸入端所接收的清除信號223選擇性地送到其中一輸出端。
RNG單元136也包括兩個計數(shù)器,標示為計數(shù)器0211及計數(shù)器1213,其連接至多路分用器215及多路分用器217。計數(shù)器0211及計數(shù)器1213各具有一遞增(或計數(shù))輸入端。計數(shù)輸入端連接至多路分用器215的輸出端。因此,當控制邏輯244將遞增信號221設為真時,計數(shù)器0112及計數(shù)器1213中由fill_select信號264所指定的一個會遞增。計數(shù)器0211及計數(shù)器1213中也各具有一清除輸入端。清除輸入端連接至多路分用器217的輸出端。因此,當控制邏輯244將清除信號223設為真時,計數(shù)器0211及計數(shù)器1213中由store_select信號266所指定的一個會被清除為0。
RNG單元136也包括兩個比較器225,其連接至計數(shù)器0211及計數(shù)器1213的輸出端。比較器225將計數(shù)器0211及計數(shù)器1213所輸出的計數(shù)值,與計數(shù)器0211及計數(shù)器1213可存儲的字節(jié)數(shù)目做比較,以判斷計數(shù)器0211及計數(shù)器1213是否已滿,并產(chǎn)生full0信號229及full1信號227,以將比較結果告知控制邏輯244。
RNG單元136也包括一具兩個輸入端的第四多路復用器219,其輸入端連接至計數(shù)器0211及計數(shù)器1213的輸出端。多路復用器219會依據(jù)存儲選擇(store_select)信號266,選取其輸入端的其中一計數(shù)值,以輸出作為可用字節(jié)計數(shù)234??捎米止?jié)計數(shù)234也會送到CSR226。
RNG單元136也包括一寄存器,標示為RNG R5 238,或R5 238。R5 238具有一輸入端,其連接至多路復用器236的輸出端,以接收數(shù)據(jù)字節(jié)278。R5 238具有另一個輸入端,其連接至多路復用器219的輸出端,以接收可用字節(jié)計數(shù)234。R5 238的輸出端連接至圖1的數(shù)據(jù)總線144。R5 238會保持XSTORE指令的計數(shù)值及數(shù)據(jù)。在一具體實施例中,計數(shù)值是存儲于R5 238的最小有效字節(jié)中,而有效的數(shù)據(jù)字節(jié)則存儲于與此計數(shù)值相連的有效字節(jié)的位置。在一具體實施例中,R5 238可存儲一計數(shù)字節(jié),加上緩沖器0242及緩沖器1246所能存儲的隨機數(shù)據(jù)字節(jié)。
在一具體實施例中,RNG單元136包括四個緩沖器,而非兩個。每一緩沖器可存儲多達八個字節(jié)的隨機數(shù)據(jù)。在此實施例中,多路分用器215、217及232包含具四個輸出端的多路分用器;多路復用器219及236包含具四個輸入端的多路復用器;比較器225包括四個比較器,以產(chǎn)生四個充滿輸出;而fill_select信號264及store_select信號266包括二個位,用以選擇四個計數(shù)器及緩沖器的其中一個。
現(xiàn)請參照圖3,其是本發(fā)明圖1微處理器100中,與圖1RNG單元136有關的各種寄存器的方框圖。
圖3顯示圖2中的CPUID寄存器204。CPUID寄存器204包括一RNG存在位302。RNG存在位302為只讀的特征標志單元。若RNG存在位302為1,則表示RNG單元136存在,并由微處理器100來使能。若RNG存在位302為0,則RNG單元136并不存在,且XLOAD及XSTORE指令為無效的,而當指令轉譯器106遇到這些指令時,將產(chǎn)生無效指令異常。此外,讀取MSR212中的位,結果是未定義,而嘗試寫入,則不會產(chǎn)生任何效果。RNG存在位302為MSR212的RNG存在位314的副本。
圖3也顯示圖2中的MSR212。MSR212包括一RNG使能位312。RNG使能位312是可寫入的。將RNG使能位312寫入1會使RNG單元136使能。將RNG使能位312寫入0則使RNG單元136禁止。若RNG使能位312為0,則XLOAD及XSTORE指令即為無效,而若指令轉譯器106遇到這些指令時,將產(chǎn)生無效指令異常。此外,讀取MSR212中的位,結果是未定義,而嘗試寫入,則不會產(chǎn)生任何效果。RNG使能位312的值在重置之后,即變?yōu)?。
MSR212也包括一只讀的RNG存在位314。RNG存在位314是表示RNG單元136是否存在于微處理器100中。若RNG存在位314為0,則RNG單元136不能藉由設定RNG使能位312來使能,并且,讀取MSR212中的位,結果是未定義,而嘗試寫入,則不會產(chǎn)生任何效果。此外,若RNG單元136的自測試失敗,則RNG存在位314將被清除,如前文圖2部分所述。
MSR212也包括一只讀的統(tǒng)計自測試使能位316。自測試使能位316表示前述圖2部分的重置后的自測試目前是否使能。若自測試使能位316為0,則在重置之后,不會執(zhí)行自測試。若自測試使能位316為1,則在重置之后,會執(zhí)行自測試。在一具體實施例中,在微處理器100的暖重置及電源開啟重置之后,會執(zhí)行自測試。
MSR212也包括一只讀的統(tǒng)計自測試失敗位318。自測試失敗位318是表示前述圖2部分的最近重置后的自測試是否失敗。在一具體實施例中,若自測試失敗位318為1,則RNG單元136無法被使能。
MSR212也包括可寫入的直流偏壓位322。在一具體實施例中,直流偏壓位322包括三個位。直流偏壓位322是用以控制送到隨機位產(chǎn)生器0206的直流偏壓,其會影響隨機位產(chǎn)生器0206的運行速度及可能的隨機度。在一具體實施例中,若在重置時執(zhí)行統(tǒng)計自測試,則自測試單元202會決定出直流偏壓位322的正確值或最佳值,并將其設定為此值。在重置之后,直流偏壓位322的值即變?yōu)?00。
MSR212也包括可寫入的原始位位324。若原始位位324設定為0,則圖2的白化器216會執(zhí)行前文圖2部分所述的白化功能,并將白化位傳送到移位寄存器218。若原始位位324設定為1,則白化器216不會執(zhí)行白化功能,而將來自于多路復用器214的原始位傳送到移位寄存器218。在重置之后,原始位位324的值即變?yōu)?。
圖3也顯示圖2中的CSR226。在一具體實施例中,CSR226為128位的寄存器。CSR226包括只讀的可用字節(jié)計數(shù)字段332??捎米止?jié)計數(shù)字段332會指明在store_select信號266所選擇的緩沖器0242或緩沖器1246中,目前有多少字節(jié)的隨機數(shù)據(jù)可藉由XSTORE指令來存儲。若有需要,可藉軟件來讀取可用字節(jié)計數(shù)字段332,以判斷目前有多少隨機數(shù)據(jù)字節(jié)可藉由XSTORE指令來存儲。由于RNG單元136會將字節(jié)同步地累積至緩沖器0242及緩沖器1246,在執(zhí)行XSTORE的時候,可存儲的字節(jié)的實際數(shù)目可能大于先前藉XLOAD所讀取的可用字節(jié)計數(shù)332。在RNG單元136使能之后,可用字節(jié)計數(shù)字段332的值即變?yōu)?。
CSR226也包括可寫入的串過濾裝置使能位334。若串過濾裝置使能位334為1,則串過濾裝置224被使能;否則串過濾裝置224被禁止。串過濾裝置224的運行在以下會配合圖10到12,做更詳細地說明。在RNG單元136使能之后,串過濾裝置使能位334的值即變?yōu)?。
CSR226也包括可寫入的產(chǎn)生器選擇位336。若產(chǎn)生器選擇位336設定為0,則選取隨機位產(chǎn)生器0206,以由圖2的多路復用器214,提供隨機比特流加以累積;否則,會選取隨機位產(chǎn)生器1208。在RNG單元136使能之后,產(chǎn)生器選擇位336的值即變?yōu)?。
CSR226也包括串過濾裝置失敗位338。若串過濾裝置失敗位338設定為1,是表示串過濾裝置224檢測到一連續(xù)的相似位串長于串過濾裝置max_cnt字段346所指定的值,如前文圖2及圖10到12部分所述。只有RNG單元136可將串過濾裝置失敗位338設定為1。然而,軟件可藉由將0寫入其中,清除串過濾裝置失敗位338。在一具體實施例中,過濾失敗位338可藉由過濾失敗信號256的脈沖設定為1,并且維持于1,直到軟件將其清除為止。在RNG單元136使能之后,串過濾裝置失敗位338的值即變?yōu)?。
CSR226也包括可寫入的計數(shù)(CNT)使能位342。若CNT使能位342設定為1,則CNT單元222會執(zhí)行連續(xù)的隨機數(shù)產(chǎn)生器測試,如圖2部分所述。在RNG單元136使能之后,CNT使能位342的值即變?yōu)?。
CSR226也包括只讀的CNT失敗位344。若CNT使能位342為1且連續(xù)隨機數(shù)產(chǎn)生器測試失敗,則RNG單元136將CNT失敗位344設定為1。在一具體實施例中,當CNT使能位342及CNT失敗位344同時為1時,執(zhí)行XSTORE指令會將可用字節(jié)計數(shù)值0存儲至系統(tǒng)內(nèi)存,而不會將數(shù)據(jù)字節(jié)存儲于系統(tǒng)內(nèi)存。因此,若一工作設定了CNT使能位342,并且在此工作執(zhí)行時發(fā)生失敗,則針對此工作,RNG單元136會有效地被禁止。然而,RNG單元136不會針對其它未設定CNT使能位342的工作而禁止。在RNG單元136使能之后,CNT失敗位344的值即變?yōu)?。
CSR226也包括可寫入的串過濾裝置max_cnt字段346。軟件將值寫入串過濾裝置max_cnt字段346,以指定可容忍的最大數(shù)目的可允許連續(xù)相似位,如以下圖10到12部分所述。在一具體實施例中,串過濾裝置max_cnt字段346包括5個位。在一具體實施例中,串過濾裝置max_cnt字段346的默認值為26。
在一具體實施例中,MSR212的各個字段是包含于CSR226,而不是MSR212中。因此,MSR212的值會以CSR226來做存儲及回存,以適用于多任務運行,如此處所述,特別是圖4到9的部分。
圖3也顯示圖2的RNG R5寄存器238。R5 238包括二個字段可用字節(jié)計數(shù)字段362,以及用于存儲隨機數(shù)據(jù)字節(jié)的另一字段364,如上所述。在一具體實施例中,有效的隨機數(shù)據(jù)字節(jié)會向右調(diào)整至緊鄰可用字節(jié)計數(shù)字段362。
圖3也顯示SSE寄存器352。SSE寄存器352包括8個128位的寄存器,標示為XMM0到XMM7。在圖3中,XMM0稱為XMM0 372、XMM3稱為XMM3 376、而XMM5稱為XMM5 374。在一具體實施例中,SSE寄存器352實質上近似于Pentium III或IV所包含的SSE寄存器,如IA-32英特爾架構軟件開發(fā)者手冊第一冊基本架構(2002年)的第10-14頁所述,其在此加以參考并入。RNG CSR 226會遮蔽(shadow)XMM0 372,而RNG R5238會遮蔽XMM5 374,如下文所述。
在一具體實施例中,微處理器100包括各種熔絲,在微處理器100的制造過程中,其會暫時或永久地加以設定,以便于重置時,能選取CSR226及MSR212中各個位的值,取代前述的重置值。
現(xiàn)請參照圖4,其是根據(jù)本發(fā)明,圖1的微處理器100執(zhí)行將值加載圖3XMM0寄存器372的指令的運行流程圖。加載XMM0 372的指令是由微處理器100執(zhí)行,其從系統(tǒng)內(nèi)存將值加載XMM0寄存器372中,如MOVAPS指令。MOVAPS指令將來自系統(tǒng)內(nèi)存的數(shù)據(jù)搬移到指定的XMM寄存器,反之亦然,這部分系敘述于IA-32英特爾架構軟件開發(fā)者手冊第二冊指令集參考(2001年)的第3-443頁到第3-444頁,其在此予以參考并入。其它從系統(tǒng)內(nèi)存加載XMM0 372的指令,則如MOVAPD及MOVDQA。由于XMM0372是操作系統(tǒng)在進行工作切換時,被存儲至內(nèi)存及從內(nèi)存回存的寄存器,所以當工作切換發(fā)生時,操作系統(tǒng)會執(zhí)行如MOVAPS的指令,以從內(nèi)存回存切換后的工作中,XMM0 372先前的值。流程從方框402開始。
在方框402中,微處理器100藉由提取一指令(如MOVAPS)在系統(tǒng)內(nèi)存所指定位置的值,而執(zhí)行該指令,并將此值加載XMM0 372。因此,任何時候從內(nèi)存加載XMM0 372,都可能發(fā)生工作切換。流程繼續(xù)進行至方框404。
在方框404中,指令轉譯器106會告知RNG單元136,MOVAPS指令(或其它從內(nèi)存加載XMM0 372的類似指令)已被轉譯。一旦此值已加載XMM0 372,RNG單元136的控制邏輯244會設定TSPO標志274,以表示可能發(fā)生工作切換。流程會結束于方框404。
現(xiàn)請參照圖5,其是根據(jù)本發(fā)明,圖1微處理器100在執(zhí)行XLOAD指令時的運行方框圖。XLOAD指令是軟件藉以將值加載圖2的CSR226的工具,以指定RNG單元136運行所需的控制值。因為CSR226不存在于PentiumIII或IV中,所以需要Pentium III或IV指令集外的新指令,以加載CSR 226。有利的是,XLOAD指令也會將控制值加載XMM0 372,便于以RNG單元136進行多任務操作,如此處所述。
圖5顯示了指定XMM0 372的XLOAD指令的格式,其為XLOAD XMM0,memaddr其中memaddr指定了系統(tǒng)內(nèi)存502中的一內(nèi)存地址。XLOAD指令的運行與MOVAPS指令類似,不過前者除了XMM0 372外,也會將系統(tǒng)內(nèi)存的值載入CSR 226。在一具體實施例中,XLOAD會將16個字節(jié)的數(shù)據(jù)504從memaddr移到CSR226及XMM0 372,如圖所示。在一具體實施例中,XLOAD指令的運算碼值為0x0F 0x5A,其后接著x86指令所指定的標準mod R/M寄存器及地址格式字節(jié)。在另一具體實施例中,XLOAD指令的運算碼值則為0x0F 0xA6 0xC0。若XLOAD指令指定SSE寄存器352中的一個,而非XMM0 372,則會加載指定的SSE寄存器352;然而,并不會加載CSR226。
現(xiàn)請參照圖6,其是根據(jù)本發(fā)明,圖1的微處理器100執(zhí)行將值加載圖3XMM0寄存器372的XLOAD指令的運行流程圖。流程從方框602開始。
在方框602中,微處理器100將系統(tǒng)內(nèi)存502中,XLOAD指令所指定的內(nèi)存地址的值,加載圖2的CSR226及圖3的XMM0 372,如圖5所示。流程繼續(xù)進行至方框604。
在方框604中,由于累積于緩沖器0 242及緩沖器1 246的隨機數(shù)據(jù)字節(jié)并不會隨著CSR 226中的控制值而產(chǎn)生,其中這些控制值是正加載CSR226的新工作之所需,所以RNG單元136會響應CSR 226的加載動作,而丟棄緩沖器0 242及緩沖器1 246的內(nèi)容。流程繼續(xù)進行至方框606。
在方框606中,由于緩沖器0 242及緩沖器1 246中的隨機數(shù)據(jù)字節(jié)在方框604時被丟棄,所以RNG單元136會將計數(shù)器0 211及計數(shù)器1 213中的可用字節(jié)計數(shù)清除為0。流程繼續(xù)進行至方框608。
在方框608中,RNG單元136重新開始累積隨機數(shù)。即,產(chǎn)生器選擇信號252所選取的隨機位產(chǎn)生器206或208,在隨機位產(chǎn)生器0 206的情況下,會依據(jù)直流偏壓信號296來產(chǎn)生隨機位;白化器216則依據(jù)原始位信號254,選擇性地白化這些位;CNT單元222根據(jù)CNT使能信號284,選擇性地執(zhí)行連續(xù)隨機數(shù)產(chǎn)生器測試;串過濾裝置224根據(jù)過濾使能信號262及max_cnt信號258,選擇性地過濾移位寄存器218所累積的字節(jié);緩沖器0 242及緩沖器1246依據(jù)fill_select信號264,累積隨機數(shù)據(jù)字節(jié);而計數(shù)器0 211及計數(shù)器1 213則依據(jù)fill_select信號264,計算緩沖器0 242及緩沖器1 246中所累積的字節(jié)數(shù)目。
在方框612中,由于CSR 226已被更新為目前工作所需要的控制值,所以控制邏輯244會清除TSPO標志274。流程會結束于方框612。
現(xiàn)請參照圖7,其是根據(jù)本發(fā)明,圖1微處理器100于執(zhí)行XSTORE指令時的運行方框圖。XSTORE指令是軟件藉以將可用隨機數(shù)據(jù)字節(jié)的計數(shù)值及本身從R5 238存儲至系統(tǒng)內(nèi)存的工具。因為RNG R5 238不存在于PentiumIII或IV中,所以需要Pentium III或IV指令集外的新指令,以存儲RNG R5238。有利的是,XSTORE指令會以整體不可分割的方式,將計數(shù)值及數(shù)據(jù)字節(jié)寫入內(nèi)存,便于以RNG單元136進行多任務操作,如此處所述。即,XSTORE指令是不可中斷的。因此,當某工作執(zhí)行XSTORE指令時,另一工作不可中斷XSTORE指令來修改要藉由XSTORE指令,寫入系統(tǒng)內(nèi)存的可用字節(jié)計數(shù)或隨機數(shù)據(jù)字節(jié)。因此,藉由整體不可分割的方式寫入數(shù)據(jù)及計數(shù)值,XSTORE指令提供了數(shù)量可變的隨機數(shù)據(jù)字節(jié),本質上有利地便于多任務的進行。
圖7是顯示XSTORE指令的格式,其為XSTORE memaddr,XMM5Memaddr會指定系統(tǒng)內(nèi)存502中的內(nèi)存地址。XSTORE指令的運行與MOVAPS指令類似,除了所指定的XMM寄存器不會存儲至系統(tǒng)內(nèi)存;取而代之的是,若指定了XMM5 374,則R5 238會被存至系統(tǒng)內(nèi)存。即,R5 238會遮蔽XMM5 374。XSTORE會將圖3的可用有效隨機數(shù)據(jù)字節(jié)362的計數(shù)值,從R5 238移到系統(tǒng)內(nèi)存502中memaddr的位置702,如圖所示。此外,XSTORE將計數(shù)值362所指定的有效隨機字節(jié)的數(shù)據(jù)364,移到系統(tǒng)內(nèi)存502中緊鄰可用字節(jié)計數(shù)702的位置704,如圖所示。
在一具體實施例中,XSTORE指令的運算碼值為0x0F 0x5B,其后接著x86指令所指定的標準mod R/M寄存器及地址格式字節(jié)。在另一具體實施例中,XSTORE指令的運算碼值為0x0F 0xA7 0xC0。在一具體實施例中,XSTORE指令要求寄存器文件108中的ESEDI寄存器來指定memaddr,即,指到要存儲計數(shù)及隨機數(shù)據(jù)字節(jié)的起始內(nèi)存地址。在一具體實施例中,XSTORE不允許區(qū)段重迭。若XSTORE指令指定了SSE寄存器352的其中一個,而非XMM5 374,則結果會呈未定狀態(tài)。
在一具體實施例中,微處理器100存儲在系統(tǒng)內(nèi)存的隨機數(shù)據(jù)字節(jié)704的數(shù)目,是等于也寫入系統(tǒng)內(nèi)存的可用字節(jié)計數(shù)702。
在另一具體實施例中,微處理器100存儲在系統(tǒng)內(nèi)存的隨機數(shù)據(jù)字節(jié)704的數(shù)目,是等于一個比RNG R5 238中的字節(jié)還少的數(shù)目。即,若RNG R5 238為16個字節(jié)的寄存器,可存儲多達15個隨機數(shù)據(jù)字節(jié)364及一個字節(jié)的可用字節(jié)計數(shù)362,則微處理器100會將16個字節(jié)存至系統(tǒng)內(nèi)存50215個字節(jié)的隨機數(shù)據(jù)存到隨機數(shù)據(jù)字節(jié)704的位置,而一個計數(shù)字節(jié)則存到可用字節(jié)計數(shù)702的位置。然而,在寫入系統(tǒng)內(nèi)存502的15個字節(jié)中,某些可能不是有效的。在一具體實施例中,寫入內(nèi)存的字節(jié)的數(shù)目都為2的次方。只有前N個字節(jié)是有效的,其中N為可用字節(jié)計數(shù)702。
在此具體實施例中,RNG單元136會清除XSTORE運算所指涉的緩沖器(即,圖2的緩沖器0 242或緩沖器1 246)。藉由清除緩沖器,微處理器100可避免各個工作看到彼此的隨機數(shù)據(jù)所產(chǎn)生的問題,而提高安全性。例如,假設第一工作執(zhí)行第一XSTORE運算,將15個字節(jié)的隨機數(shù)據(jù)從緩沖器0242存儲到系統(tǒng)內(nèi)存,并執(zhí)行第二XSTORE運算,將15個字節(jié)的隨機數(shù)據(jù)從緩沖器1 246存儲到系統(tǒng)內(nèi)存;然后操作系統(tǒng)切換到第二工作,其會在RNG單元136將任何隨機數(shù)據(jù)字節(jié)累積到緩沖器0 242之前,立即執(zhí)行XSTORE運算。若在第一XSTORE運算后,RNG單元136未清除緩沖器0 242,則第一工作所接收到的隨機數(shù)據(jù)也會存儲到第二工作的內(nèi)存位置,如此會使第二工作看到第一工作的隨機數(shù)據(jù)。
在一具體實施例中,XSTORE指令指定了要存至系統(tǒng)內(nèi)存的最大數(shù)目的隨機數(shù)據(jù)字節(jié)。在此具體實施例中,該最大數(shù)目是指定在寄存器文件108的其中一個一般用途寄存器中,如ECX。在此具體實施例中,若store_select信號266所選取的緩沖器0 242或緩沖器1 246中的可用字節(jié)多于ECX中所指定的最大數(shù)目,則微處理器100只會存儲ECX中所指定的最大數(shù)目的字節(jié);否則,XSTORE指令會存儲可用數(shù)目的有效字節(jié)。在前述任一種情況下,XSTORE指令都會將存至系統(tǒng)內(nèi)存502的數(shù)據(jù)字節(jié)位置704的有效隨機數(shù)據(jù)字節(jié)的數(shù)量,存儲到可用字節(jié)計數(shù)位置702。
在一具體實施例中,XSTORE指令指定了要存至系統(tǒng)內(nèi)存的所需數(shù)目的隨機數(shù)據(jù)字節(jié)。在此具體實施例中,該所需數(shù)目是指定在寄存器文件108的其中一個一般用途寄存器中,如ECX。在此具體實施例中,XSTORE指令是加上一x86 REP前置碼(prefix)。在此具體實施例中,REP XSTORE指令并非需連續(xù)執(zhí)行的。即,因為所需的隨機字節(jié)的數(shù)目可能會很大,所以REPXSTORE是可中斷的。然而,由于所存儲的隨機數(shù)據(jù)字節(jié)的數(shù)目是不可變的(即,軟件知道將要存至內(nèi)存的隨機數(shù)據(jù)字節(jié)的數(shù)目),所以指令不必連續(xù)執(zhí)行。
現(xiàn)請參照圖8,其是根據(jù)本發(fā)明,圖1的微處理器100執(zhí)行來自于圖3XMM5寄存器的XSTORE指令的運行流程圖。流程從方框802開始。
在方框802中,對于圖1的指令轉譯器106通知XSTORE指令已轉譯,中斷單元146會響應以將中斷禁止。流程繼續(xù)進行判斷方框804。
在判斷方框804中,圖2的控制邏輯244會檢查TSPO標志274,以判斷標志是否設定。若設定,則流程會繼續(xù)進行方框806。否則,流程會繼續(xù)進行方框816。
在方框806中,RNG單元136會將XMM0 372的內(nèi)容復制到CSR 226,并且會清除TSPO標志274。由于TSPO標志274是表示自前次XSTORE或XLOAD執(zhí)行以后,工作切換已可能發(fā)生,就如圖4的步驟402中,從系統(tǒng)內(nèi)存加載XMM0 372所表示的,所以CSR 226可能不具有目前執(zhí)行XSTORE指令的工作所需的正確控制值。因此,XSTORE指令必須以正確的控制值來更新CSR 226。正確值是存儲于XMM0 372中,此因當工作初始時,該正確控制值是藉由執(zhí)行XLOAD而被加載XMM0 372及CSR 226中,而后當操作系統(tǒng)切回至目前工作時,正確控制值也被回存至XMM0 372。流程會繼續(xù)進行方框808。
在方框808中,因為累積于緩沖器0 242及緩沖器1246的隨機數(shù)據(jù)字節(jié),不會隨著CSR中新工作所需的新控制值而產(chǎn)生,其中這些新控制值是在方框806中被復制到CSR 226中,所以RNG單元136會響應CSR 226的加載,而丟棄緩沖器0 242及緩沖器1 246的內(nèi)容。流程會繼續(xù)進行方框812。
在方框812中,因為在方框808,會丟棄在緩沖器0 242及緩沖器1 246中的隨機數(shù)據(jù)字節(jié),所以在計數(shù)器0 211及計數(shù)器1 213中,RNG單元136會將可用字節(jié)計數(shù)清除為0。流程會繼續(xù)進行方框814。
在方框814中,RNG單元136會重新開始隨機數(shù)的累積,如圖6的方框608部分所述。流程會繼續(xù)進行方框816。
在方框816中,RNG單元136會連續(xù)地將R5 238存儲于系統(tǒng)內(nèi)存502中,由XSTORE指令所指定的內(nèi)存地址,其會保持store_select信號266所指定的計數(shù)器0 211或計數(shù)器1 213的值,以及store_select信號266所指定的緩沖器0 242或緩沖器1 246中的有效隨機數(shù)據(jù)字節(jié),如圖7所示。流程會繼續(xù)進行方框818。
在方框818中,因為在方框816,有效隨機數(shù)據(jù)字節(jié)已被存儲至內(nèi)存的動作所消耗,所以控制邏輯244會將清除信號223設為真,以清除store_select信號266所指定的計數(shù)器0 211或計數(shù)器1 213。流程會繼續(xù)進行方框822。
在方框822中,控制邏輯244會更新store_select信號266。即,若store_select信號266為0,則控制邏輯244會將store_select信號266更新為1。反之,若store_select信號266為1,則控制邏輯244會將store_select信號266更新為0。流程會繼續(xù)進行方框824。
在方框824中,因為已完成XSTORE指令的執(zhí)行,所以中斷單元146會使中斷使能。流程會結束于方框824。
現(xiàn)在參照圖9,其是根據(jù)本發(fā)明,圖1微處理器100進行關于隨機數(shù)產(chǎn)生的多任務運行范例的動作流程圖。圖9的流程圖是顯示典型的狀況,其中兩個工作都初始化RNG單元136,并執(zhí)行XSTORE指令,將隨機數(shù)據(jù)字節(jié)存儲至內(nèi)存。圖9是顯示本發(fā)明如何有利支持兩個工作(工作A及工作B)間的多任務,即使操作系統(tǒng)不支持存儲及回存RNG單元136的狀態(tài)(即CSR226)。流程從方框902開始。
在方框902中,會發(fā)生重置,這會使控制邏輯244清除TSPO標志274。流程會繼續(xù)進行方框904。
在方框904中,操作系統(tǒng)會啟動工作A,并且工作A的初始碼會執(zhí)行XLOAD至XMM0 372的指令,以所要的控制值(表示為值A)來初始化CSR226及XMM0 372。流程會繼續(xù)進行方框906。
在方框906中,根據(jù)圖6的方框604、606、608以及612,RNG單元136會響應XLOAD,而丟棄緩沖器0 242及緩沖器1246的內(nèi)容、清除計數(shù)器0211及計數(shù)器1 213、重新開始隨機數(shù)的產(chǎn)生與累積以及清除TSPO標志274。流程會繼續(xù)進行方框908。
在方框908中,工作A執(zhí)行XSTORE指令,以存儲依據(jù)方框904加載至CSR 226的控制值A所產(chǎn)生的隨機數(shù)據(jù)。流程會繼續(xù)進行方框912。
在方框912中,為了執(zhí)行前一方框的XSTORE,RNG單元136會連續(xù)地將于方框906重新開始后所累積的計數(shù)值及數(shù)據(jù),存儲至系統(tǒng)內(nèi)存,如圖7及圖8所示。流程會繼續(xù)進行方框914。
在方框914中,操作系統(tǒng)會執(zhí)行從工作A到工作B的工作切換。其中,操作系統(tǒng)會將XMM0 372的值(其包含控制值A)存儲至系統(tǒng)內(nèi)存,以保留工作A的狀態(tài)。然而,操作系統(tǒng)不知道CSR 226的情況,所以操作系統(tǒng)不會將CSR 226存儲至系統(tǒng)內(nèi)存以保留其狀態(tài)。流程會繼續(xù)進行方框916。
在方框916中,根據(jù)圖4的步驟404,RNG單元136會響應在方框914的XMM0 372的加載,而設定TSPO標志274。流程會繼續(xù)進行方框918。
在方框918中,操作系統(tǒng)啟動工作B,并且工作B的初始碼會執(zhí)行XLOAD至XMM0 372的指令,以所要的控制值(表示為值B)來初始化CSR226及XMM0 372。流程會繼續(xù)進行方框922。
在方框922中,根據(jù)圖6的方框604、606、608以及612,RNG單元136會響應XLOAD,而丟棄緩沖器0 242及緩沖器1 246的內(nèi)容、清除計數(shù)器0211及計數(shù)器1213、重新開始隨機數(shù)的產(chǎn)生與累積以及清除TSPO標志274。流程會繼續(xù)進行方框924。
在方框924中,工作B執(zhí)行XSTORE指令,以存儲依據(jù)方框918加載至CSR 226的控制值B所產(chǎn)生的隨機數(shù)據(jù)。流程會繼續(xù)進行方框924。
在方框926中,為了執(zhí)行前一方框的XSTORE,RNG單元136會連續(xù)地將于方框922重新開始后所累積的計數(shù)值及數(shù)據(jù),存儲至系統(tǒng)內(nèi)存,如圖及圖所示。流程會繼續(xù)進行方框928。
在方框928中,操作系統(tǒng)會執(zhí)行從工作B到工作A的工作切換。其中,操作系統(tǒng)會將XMM0 372的值(其包含控制值B)存儲至系統(tǒng)內(nèi)存,以保留工作B的狀態(tài)。然而,操作系統(tǒng)不知道CSR226的情況,所以操作系統(tǒng)不會將CSR 226存儲至系統(tǒng)內(nèi)存以保留其狀態(tài)。此外,操作系統(tǒng)會回存工作A的狀態(tài),其包括將先前在方框914所保留的值A,從系統(tǒng)內(nèi)存載入到XMM0 372。流程會繼續(xù)進行方框932。
在方框932中,根據(jù)圖4的步驟404,RNG單元136會響應在方框928的XMM0 372的加載,而設定TSPO標志274。流程會繼續(xù)進行方框934。
在方框934中,工作A執(zhí)行XSTORE指令,以存儲依據(jù)方框904加載至CSR226的控制值A所產(chǎn)生的隨機數(shù)據(jù)。然而,在方框918,CSR 226中的值A會被覆寫。因此,目前累積于緩沖器0 242及緩沖器1 246的隨機數(shù)據(jù)字節(jié)并非依據(jù)值A產(chǎn)生,而是依據(jù)值B而產(chǎn)生。流程會繼續(xù)進行方框936。
在方框936中,RNG單元136依圖8的方框804,判斷TSPO標志274已設定,于是會依據(jù)圖8的方框806,將XMM0 372的內(nèi)容復制到CSR 226,藉以將值A回存至CSR 226。此外,由于CSR 226已被回存,所以根據(jù)方框806,RNG單元136會清除TSPO標志274。流程會繼續(xù)進行方框938。
在方框938中,根據(jù)圖8的方框808、812以及814,RNG單元136會響應方框936中復制到CSR 226的動作,而丟棄緩沖器0 242及緩沖器1 246的內(nèi)容、清除計數(shù)器0 211與計數(shù)器1 213以及重新開始隨機數(shù)的產(chǎn)生及累積。流程會繼續(xù)進行方框942。
在方框942中,為執(zhí)行方框934的XSTORE,RNG單元136會連續(xù)地將于先前的方框重新開始后所累積的計數(shù)值及數(shù)據(jù),存儲至系統(tǒng)內(nèi)存,如圖7及圖8所示。在此情況下,由于在先前方框中,已清除計數(shù)器0 211及計數(shù)器1 213,并丟棄緩沖器0 242及緩沖器1 246的內(nèi)容,所以計數(shù)值為0,且未有有效隨機數(shù)據(jù)字節(jié)存儲到系統(tǒng)內(nèi)存中。流程會繼續(xù)進行方框944。
在方框944中,工作A執(zhí)行XSTORE指令,以存儲依據(jù)方框904加載至CSR 226的控制值A所產(chǎn)生的隨機數(shù)據(jù),其中CSR 226在方框936,已回存為值A。流程會繼續(xù)進行方框946。
在方框946中,為執(zhí)行先前方框的XSTORE,RNG單元136會連續(xù)地將于方框938重新開始后所累積的計數(shù)值及數(shù)據(jù),存儲至系統(tǒng)內(nèi)存,如圖7及圖8所示。流程會繼續(xù)進行方框948。
在方框948中,工作A執(zhí)行XSTORE指令,以存儲依據(jù)方框904加載至CSR 226的控制值A所產(chǎn)生的隨機數(shù)據(jù),其中CSR 226在方框936,已回存為值A。流程會繼續(xù)進行方框952。
在方框952中,為執(zhí)行先前方框的XSTORE,RNG單元136會將于方框938重新開始后所累積的計數(shù)值及數(shù)據(jù),扣掉方框944中由前次XSTORE所存儲的字節(jié),再將結果連續(xù)地存儲至系統(tǒng)內(nèi)存,如圖7及圖8所示。流程則結束于方框952。
現(xiàn)在參照圖10,其是根據(jù)本發(fā)明,圖1微處理器100中,圖2RNG單元136的串過濾裝置224的方框圖。
配合本發(fā)明的目的,前導的1位定義為一個字節(jié)開頭的連續(xù)1位。一個字節(jié)可能包含0到8個前導的1位。例如,字節(jié)0001111具有5個前導的1位;字節(jié)11111110具有0個前導的1位;而字節(jié)11111111則具有8個前導的1位。
配合本發(fā)明的目的,前導的0位定義為一個字節(jié)開頭的連續(xù)0位。一個字節(jié)可能包含0到8個前導的0位。例如,字節(jié)11100000具有5個前導的0位;字節(jié)00000001具有0個前導的0位;而字節(jié)00000000則具有8個前導的0位。
配合本發(fā)明的目的,尾端的1位是定義為一個字節(jié)結尾的連續(xù)1位;然而一個均為1的字節(jié)則定義為沒有尾端的1位。一個字節(jié)可能包含0到7個尾端的1位。例如,字節(jié)11110000具有4個尾端的1位;字節(jié)11111110具有7個尾端的1位;字節(jié)01111111具有0個尾端的1位;而字節(jié)11111111則具有0個尾端的1位。
配合本發(fā)明的目的,尾端的0位是定義為一個字節(jié)結尾的連續(xù)0位;然而一個均為0的字節(jié)則定義為沒有尾端的0位。一個字節(jié)可能包含0到7個尾端的0位。例如,字節(jié)00001111具有4個尾端的0位;字節(jié)00000001具有7個尾端的0位;字節(jié)10000000具有0個尾端的0位;而字節(jié)00000000則具有0個尾端的1位。
串過濾裝置224包括比較邏輯1002。比較邏輯1002會從圖2的移位寄存器218接收隨機數(shù)據(jù)字節(jié)298。比較邏輯1002會檢查隨機數(shù)據(jù)字節(jié)298中的位值,并且產(chǎn)生用于檢測1及0的連續(xù)位串的各種信號,如以下所述。
比較邏輯1002會產(chǎn)生num_leading_ones信號1022A,以指定隨機數(shù)據(jù)字節(jié)298中前導1位的數(shù)目。
比較邏輯1002會產(chǎn)生num_trailing_ones信號1028A,以指定隨機數(shù)據(jù)字節(jié)298中尾端1位的數(shù)目。
比較邏輯1002也會產(chǎn)生all_ones信號1048A,若隨機數(shù)據(jù)字節(jié)298包含均為1的位,則此信號為真。
比較邏輯1002也會產(chǎn)生leading_ones信號1036A,若隨機數(shù)據(jù)字節(jié)298包含前導的1位,則此信號為真。
比較邏輯1002也會產(chǎn)生trailing_ones信號1038A,若隨機數(shù)據(jù)字節(jié)298包含尾端的1位,則此信號為真。
串過濾裝置224也包括第一計數(shù)器1016A,以存儲連續(xù)1位的現(xiàn)時計數(shù)。在一具體實施例中,計數(shù)器1016A包括一6位的寄存器。計數(shù)器1016A的輸出為ones_cnt信號1024A。
串過濾裝置224也包括第一加法器1012A,其將num_leading_ones信號1022A與ones_cnt信號1024A相加,以產(chǎn)生new_ones_cnt信號1026A。
串過濾裝置224也包括四輸入端的第一多路復用器1014A。多路復用器1014A在其輸入端接收ones_cnt信號1024A、new_ones_cnt信號1026A、num_trailing_ones信號1028A以及固定(hard-coded)的零值1032A。多路復用器1014A會依據(jù)one_select信號1042A,選取其中一輸入端,輸出到計數(shù)器1016A。
比較邏輯1002會產(chǎn)生num_leading_zeros信號1022B,以指定隨機數(shù)據(jù)字節(jié)298中前導0位的數(shù)目。
比較邏輯1002會產(chǎn)生num_trailing_zeros信號1028B,以指定隨機數(shù)據(jù)字節(jié)298中尾端0位的數(shù)目。
比較邏輯1002也會產(chǎn)生all_zeros信號1048B,若隨機數(shù)據(jù)字節(jié)298包含均為0的位,則此信號為真。
比較邏輯1002也會產(chǎn)生leading_zeros信號1036B,若隨機數(shù)據(jù)字節(jié)298包含前導的0位,則此信號為真。
比較邏輯1002也會產(chǎn)生trailing_zeros信號1038B,若隨機數(shù)據(jù)字節(jié)298包含尾端的0位,則此信號為真。
串過濾裝置224也包括第二計數(shù)器1016B,以存儲連續(xù)0位的現(xiàn)時計數(shù)。在一具體實施例中,計數(shù)器1016B包括一6位的寄存器。計數(shù)器1016B的輸出為zeros_cnt信號1024B。
串過濾裝置224也包括第二加法器1012B,其將num_leading_zeros信號1022B與zeros_cnt信號1024B相加,以產(chǎn)生new_zeros_cnt信號1026B。
串過濾裝置224也包括四輸入端的第二多路復用器1014B。多路復用器1014B在其輸入端接收zeros_cnt信號1024B、new_zeros_cnt信號1026B、num_trailing_zeros信號1028B以及固定的零值1032B。多路復用器1014B會依據(jù)zero_select信號1042B,選取其中一輸入端,輸出到計數(shù)器1016B。
串過濾裝置224也包括第一比較器1046A,其將new_ones_cnt信號1026A與圖2中的max_cnt信號258做比較。若new_ones_cnt信號1026A大于max_cnt信號258,則比較器1046A會產(chǎn)生真值的ones_exceeded信號1034A;否則,比較器1046A產(chǎn)生偽值的ones_exceeded信號1034A。
串過濾裝置224也包括第二比較器1046B,其將new_zeros_cnt信號1026B與圖2中的max_cnt信號258做比較。若new_zeros_cnt信號1026B大于max_cnt信號258,則比較器1046B會產(chǎn)生真值的zeros_exceeded信號1034B;否則,比較器1046B產(chǎn)生偽值的zeros_exceeded信號1034B。
串過濾裝置224也包括兩輸入端的或門(OR gate)1004,其輸入端連接至比較器1046A及比較器1046B的輸出端?;蜷T1004在其輸入端接收ones_exceeded信號1034A及zeros_exceeded信號1034B?;蜷T1004會產(chǎn)生max_cnt_exceeded信號1044,以作為選擇邏輯1006的輸入。
串過濾裝置224也包括兩輸入端的與門(AND gate)1008,其連接至或門1004。與門1008的一輸入端接收來自于或門1004的max_cnt_exceeded信號1044,而另一輸入端則接收圖2的過濾使能信號262。與門1008的輸出是圖2的過濾失敗信號256。
串過濾裝置224也包括選擇邏輯1006,其接收all_ones信號1048A、leading_ones信號1036A、trailing_ones信號1038A、max_cnt_exceeded信號1044、leading_zeros信號1036B、trailing_zeros信號1038B以及all_zeros信號1048B。選擇邏輯1006根據(jù)以下的程序代碼,來產(chǎn)生one_select信號1042A及zero_select信號1042B。
<pre listing-type="program-listing"><![CDATA[ retain_counts=max_cnt_exceeded & filter enable; increment_zeros=all_zeros&(!retain_counts); load_zeros=trailing_zeros&(!retain_counts)&(!increment_zeros); clear_zeros=(!retain_counts)&(!increment_zeros)&(!load_zeros); increment_ones=all_ones&(!retain_counts); load_ones=trailing_ones&(!retain_counts)&(!increment_ones); clear_ones=(!retain_counts)&(!increment_ones)&(!load_ones); if(retain_counts){ zero_select=3;//select zeros cnt input}else if(increment_zeros){ zero_select=2;//select new_zeros_cnt input ?。齟lse if(load_zeros){ zero_select=1;//select num_trailing_zeros input ?。齟lse if(clear_zeros){ zero_select=0;//select hard-coded 0 input ?。 f(retain_counts){ one_select=3;//select ones_cnt input }else if(increment_ones){ one_select=2;//select new_ones_cnt input ?。齟lse if(load_ones){ one_select=1;//select num_trailing_ones input ?。齟lse if(clear_ones){ one_select=0;//select hard-coded 0 input ?。齗]></pre>現(xiàn)在參照圖11,其是根據(jù)本發(fā)明,圖10的串過濾裝置224的運行流程圖。流程從方框1102開始。
在方框1102中,計數(shù)器1016A及1016B會初始化為0。流程會繼續(xù)進行方框1104。
在方框1104中,圖1的RNG單元136產(chǎn)生1字節(jié)的隨機數(shù)據(jù)于圖2的隨機字節(jié)信號298中,而比較邏輯1002則依據(jù)隨機數(shù)據(jù)字節(jié)的檢查結果,產(chǎn)生其信號。流程會繼續(xù)進行方框1106。
在方框1106中,加法器1012A將num_leading_ones 1022A與ones_cnt1024A相加,以產(chǎn)生new_ones_cnt 1026A,而加法器1012B則將num_leading_zeros 1022B與zeros_cnt 1024B相加,以產(chǎn)生new_zeros_cnt1026B。流程會繼續(xù)進行判斷方框1112。
在判斷方框1112中,選擇邏輯1006檢查max_cnt_exceeded 1044,以判斷連續(xù)0或1的數(shù)目是否已超過max_cnt 258。若是,流程會繼續(xù)進行判斷方框1114。否則,流程會繼續(xù)進行判斷方框1124。
在判斷方框1114中,與門1008檢查過濾使能信號262,以判斷串過濾裝置224是否使能。若是,與門1008會產(chǎn)生真值于圖2的過濾失敗信號256,即,在方框1116中,將過濾失敗信號設為真。流程會繼續(xù)進行方框1118。
在方框1118中,控制邏輯244響應具真值的過濾失敗信號256,而不將圖2的遞增信號221設為真,并且不使隨機字節(jié)298被加載緩沖器0242或緩沖器1246,即使移位寄存器218已產(chǎn)生真值的字節(jié)產(chǎn)生信號282。因此,由于隨機字節(jié)298已使連續(xù)1或0的數(shù)目超過max_cnt 258,所以RNG單元136會丟棄隨機字節(jié)298。流程會繼續(xù)進行方框1122。
在方框1122中,選擇邏輯1006于one_select信號1042A及zero_select信號1042B中,都產(chǎn)生3的值,以使多路復用器1014A及1014B分別保留目前的ones_cnt 1024A及zeros_cnt 1024B。流程接著返回方框1104。
在判斷方框1124中,選擇邏輯1006檢查all_zeros信號1048B,以判斷隨機數(shù)據(jù)字節(jié)298是否均為0。若是,流程會繼續(xù)進行方框1126。否則,流程會繼續(xù)進行判斷方框1128。
在方框1126中,選擇邏輯1006于zero_select信號1042B中產(chǎn)生2的值,以使多路復用器1014B選取newz_eros_cnt信號1026B,并且于one_select信號1042A中產(chǎn)生0的值,以使多路復用器1014A選取固定的0值輸入1032A。流程會繼續(xù)進行方框1148。
在判斷方框1128中,選擇邏輯1006檢查trailing_zeros信號1038B,以判斷隨機數(shù)據(jù)字節(jié)298是否包含任何的尾端0。若是,流程會繼續(xù)進行方框1132。否則,流程會繼續(xù)進行方框1134。
在方框1132中,選擇邏輯1006于zero_select信號1042B中產(chǎn)生1的值,以使多路復用器1014B選取num_trailing_zeros信號1028B,并且于one_select信號1042中產(chǎn)生0的值,以使多路復用器1014A選取固定的0值輸入1032A。流程會繼續(xù)進行方框1148。
在方框1134中,選擇邏輯1006于zero_select信號1042B中產(chǎn)生0的值,以使多路復用器1014B選擇固定的0值輸入1032B。流程會繼續(xù)進行判斷方框1136。
在判斷方框1136中,選擇邏輯1006檢查all_ones信號1048A,以判斷隨機數(shù)據(jù)字節(jié)298是否均為1。若是,流程會繼續(xù)進行方框1138。否則,流程會繼續(xù)進行判斷方框1142。
在方框1138中,選擇邏輯1006于one_select信號1042A中產(chǎn)生2的值,以使多路復用器1014A選擇new_ones_cnt信號1026A。流程會繼續(xù)進行方框1148。
在判斷方框1142中,選擇邏輯1006檢查trailing_ones信號1038A,以判斷隨機數(shù)據(jù)字節(jié)298是否包含任何的尾端1。若是,流程會繼續(xù)進行方框1144。否則,流程會繼續(xù)進行方框1146。
在方框1144中,選擇邏輯1006于one_select信號1042A中產(chǎn)生1的值,以使多路復用器1014A選擇num_trailing_ones信號1028A。流程會繼續(xù)進行方框1148。
在方框1146中,選擇邏輯1006于one_select信號1042A中產(chǎn)生0的值,以使多路復用器1014A選擇固定的0值輸入1032A。流程會繼續(xù)進行方框1148。
在方框1148中,控制邏輯244使隨機數(shù)據(jù)字節(jié)298被加載由fill_select信號264所選擇的緩沖器0242或緩沖器1246中,并將遞增信號221設為真,以遞增由fill_select信號264所選擇的計數(shù)器0211或計數(shù)器1213。流程接著返回方框1104。
現(xiàn)在參照圖12,其是根據(jù)本發(fā)明的另一具體實施例,圖1微處理器100執(zhí)行XSTORE指令的運行方框圖。圖12的XSTORE指令是類似于圖7的XSTORE指令,不過在此具體實施例中,有效隨機數(shù)據(jù)字節(jié)的計數(shù)值會被加載寄存器文件108的其中一個一般用途寄存器中,如EAX 1202寄存器,而不會存儲至系統(tǒng)內(nèi)存。有利的是,與圖7的XSTORE指令類似,圖12的XSTORE指令會連續(xù)地將計數(shù)值加載EAX,并將隨機數(shù)據(jù)字節(jié)存儲至內(nèi)存,以促進與RNG單元136的多任務運行,且所存的有效隨機數(shù)據(jù)字節(jié)的數(shù)量,顯示于EAX中存儲的可用字節(jié)計數(shù)。也就是,圖12的XSTORE指令也是不可中斷的。
現(xiàn)在參照圖13,其是根據(jù)本發(fā)明,圖2RNG單元136的多重緩沖(multi-buffering)運行的流程圖。流程從方框1302開始。
在方框1302中,重置信號248被設為真。流程會繼續(xù)進行方框1304。
在方框1304中,圖2的控制邏輯244將fill_select信號264及store_select信號266初始化為0,并響應方框1302的重置動作而清除計數(shù)器0211及計數(shù)器1213。流程會繼續(xù)進行判斷方框1306。
在判斷方框1306中,控制邏輯244檢查xstore信號268,以判斷是否已執(zhí)行XSTORE指令。若是,流程會繼續(xù)進行判斷方框1308。否則,流程會繼續(xù)進行判斷方框1322。
在判斷方框1308中,控制邏輯244判斷由產(chǎn)生器選擇信號252所選擇的隨機位產(chǎn)生器0206或隨機位產(chǎn)生器1208的電源是否已關閉。若是,流程會繼續(xù)進行方框1312。否則,流程會繼續(xù)進行方框1314。
在方框1312中,控制邏輯244藉由power_cntrl信號231開啟所選擇的隨機位產(chǎn)生器的電源。流程會繼續(xù)進行方框1314。
在方框1314中,根據(jù)圖8的方框816及如圖7所示,微處理器100將由store_select信號266所選擇的計數(shù)器0211或計數(shù)器1213的值,以及由store_select信號266所選擇的緩沖器0242或緩沖器1246中的有效數(shù)據(jù)字節(jié),連續(xù)地存儲至系統(tǒng)內(nèi)存。流程會繼續(xù)進行方框1316。
在方框1316中,控制邏輯244將清除信號223設為真,以清除由store_select信號266所選擇的計數(shù)器0211或計數(shù)器1213。流程會繼續(xù)進行方框1318。
在方框1318中,控制邏輯244更新store_select信號266,以選擇另一個緩沖器及計數(shù)器。在RNG單元136包含二個以上緩沖器的實施例中,store_select信號266包括多于1個的位,并且更新store_select信號266的動作包括遞增store_select信號266,以及當遞增超過緩沖器的數(shù)目時,會回歸為0。流程會繼續(xù)進行方框1322。
在判斷方框1322中,控制邏輯244檢查字節(jié)產(chǎn)生信號282是否為真及檢查過濾失敗信號256是否為偽,以判斷是否產(chǎn)生了良好的隨機數(shù)據(jù)字節(jié)。若已產(chǎn)生,流程會繼續(xù)進行方框1324。否則,流程會繼續(xù)進行判斷方框1306。
在方框1324中,控制邏輯244將良好的隨機數(shù)據(jù)字節(jié)加載由fill_select信號264所選擇的緩沖器0242或緩沖器1246中,并且遞增由fill_select信號264所選擇的計數(shù)器0211或計數(shù)器1213。流程會繼續(xù)進行判斷方框1326。
在判斷方框1326中,控制邏輯244檢查由fill_select信號264所指定的full0信號229或full1信號227,以判斷由fill_select信號264所選擇的緩沖器0242或緩沖器1246是否已滿。若是,流程會繼續(xù)進行方框1328。否則,流程會返回方框1306。
在方框1328中,控制邏輯244更新fill_select信號264。在RNG單元136包含二個緩沖器的實施例中,更新fill_select信號264的動作包括切換fill_select信號264。在RNG單元136包括二個以上緩沖器的實施例中,fill_select信號264包括多于1個的位,并且更新fill_select信號264的動作包括遞增fill_select信號264,以及當遞增超過緩沖器的數(shù)目時,會回歸為0。流程會繼續(xù)進行判斷方框1332。
在判斷方框1332中,控制邏輯244檢查由方框1328更新的fill_select信號264所指定的full0信號229或full1信號227,以判斷由fill_select信號264所選擇的緩沖器0242或緩沖器1246是否已滿(即,判斷所有的緩沖器是否已滿)。若是,流程會繼續(xù)進行方框1334。否則,流程會返回方框1306。
在方框1334中,由于所有的緩沖器已滿,控制邏輯244就藉由power_cntrl信號231,關閉隨機位產(chǎn)生器0206及隨機位產(chǎn)生器1208的電源。流程會返回判斷方框1306。
現(xiàn)在參照圖14,其是根據(jù)本發(fā)明的另一具體實施例,圖1微處理器100執(zhí)行圖3的XLOAD指令的運行流程圖。圖14的流程圖與圖6的流程圖相同,并且標號相同的方框是一樣的,除了圖14包括額外的判斷方框1403。流程會從方框602進行到判斷方框1403。在判斷方框1403中,圖2的控制邏輯244判斷CSR226的相關位是否已因方框602中CSR226的加載而改變。若是,流程會繼續(xù)進行如圖6的方框604。否則,流程會繼續(xù)進行方框612,如圖所示。此實施例的優(yōu)點是,不必丟棄已累積的隨機字節(jié)及重新開始隨機字節(jié)的累積。即,若CSR226的加載對于會影響RNG單元136的隨機數(shù)產(chǎn)生功能的值未做任何改變,則由于隨機字節(jié)是借助使用所要的控制值而產(chǎn)生,所以不需丟棄已累積的隨機字節(jié)及重新開始隨機字節(jié)的累積。在一具體實施例中,相關的CSR226位為串過濾裝置使能位334、產(chǎn)生器選擇位336、CNT使能位342以及串過濾裝置max_cnt 346。
現(xiàn)在參照圖15,其是根據(jù)本發(fā)明的另一具體實施例,圖1微處理器100執(zhí)行圖3的XSTORE指令的運行流程圖。圖15的流程圖與圖8的流程圖相同,并且標號相同的方框是一樣的,除了圖15包括額外的判斷方框1507。流程會從方框806進行到判斷方框1507。在判斷方框1507中,圖2的控制邏輯244判斷CSR226的相關位是否已因方框806中復制至CSR226的動作而改變。若是,流程會繼續(xù)進行如圖8的方框808。否則,流程會繼續(xù)進行方框816,如圖所示。此實施例的優(yōu)點是,不必丟棄已累積的隨機字節(jié)及重新開始隨機字節(jié)的累積。即,若復制至CSR226的動作對于會影響RNG單元136的隨機數(shù)產(chǎn)生功能的值未做任何改變,則由于隨機字節(jié)是借助使用所要的控制值而產(chǎn)生,所以不需丟棄已累積的隨機字節(jié)及重新開始隨機字節(jié)的累積。在一具體實施例中,相關的CSR226位為串過濾裝置使能位334、產(chǎn)生器選擇位336、CNT使能位342以及串過濾裝置max_cnt 346。
現(xiàn)在參照圖16,其是根據(jù)本發(fā)明的另一具體實施例,圖1微處理器100執(zhí)行XSTORE指令的運行方框圖。圖16的XSTORE指令類似于圖12的XSTORE指令,然而在圖16的實施例中,XSTORE指令的目的操作數(shù)會指定微處理器100的一個寄存器,如XMM寄存器、浮點寄存器、MMX寄存器或整數(shù)單元(integer unit)寄存器中的一個(如EBX),而不是指定系統(tǒng)內(nèi)存中的地址。即,有效隨機數(shù)據(jù)字節(jié)系連續(xù)地被寫入寄存器文件108的其中一個使用者可見寄存器中,而不會存儲至系統(tǒng)內(nèi)存。在圖16的例子中,XSTORE指令會指定圖3SSE寄存器352中的XMM3寄存器376,以寫入有效隨機數(shù)據(jù)字節(jié),XSTORE xmm3,xmm5,如圖所示。有利的是,與圖12的XSTORE指令類似,圖16的XSTORE指令會連續(xù)地將隨機數(shù)據(jù)字節(jié)寫入該使用者可見寄存器,并將計數(shù)值加載EAX1202,以促進與RNG單元136的多任務運行,且所存的有效隨機數(shù)據(jù)字節(jié)的數(shù)量,顯示于EAX中存儲的可用字節(jié)計數(shù)。也就是,圖16的XSTORE指令也是不可中斷的。
現(xiàn)在參照圖17,其是根據(jù)本發(fā)明的另一具體實施例,圖1微處理器100執(zhí)行XSTORE指令的運行方框圖。圖17的XSTORE指令類似于圖12的XSTORE指令,然而在圖17的實施例中,XSTORE指令包括一x86架構的REP前置碼。藉由REP XSTORE指令,要存至系統(tǒng)內(nèi)存的隨機數(shù)據(jù)字節(jié)的數(shù)目,會被指定為寄存器文件108的ECX寄存器1702的輸入?yún)?shù),如圖所示。軟件在執(zhí)行REP XSTORE指令前,會將要存至系統(tǒng)內(nèi)存的隨機數(shù)據(jù)字節(jié)的理想計數(shù)值載入ECX1702中。
在一具體實施例中,在將隨機數(shù)據(jù)字節(jié)存至系統(tǒng)內(nèi)存的存儲動作間,REPXSTORE指令是可中斷的。內(nèi)存地址在初始時,是指定于寄存器文件108的一般用途寄存器中。在圖17的例子中,內(nèi)存地址是指定于寄存器文件108的ESEDI 1704中,如圖所示。每當有一或更多個隨機數(shù)據(jù)字節(jié)被寫入系統(tǒng)內(nèi)存時,ESEDI 1702即更新為系統(tǒng)內(nèi)存中,下個用以存儲隨機數(shù)據(jù)字節(jié)的位置。此外,每當有一或更多個隨機數(shù)據(jù)字節(jié)存儲至系統(tǒng)內(nèi)存時,ECX 1702即更新,以反映尚待存儲的隨機字節(jié)數(shù)目。例如,假設REP XSTORE指令于ECX 1702中指定一字節(jié)計數(shù)值28及0x12345678的內(nèi)存地址。假設在緩沖器0242及緩沖器1246兩者之一中,RNG單元136有8個可用的字節(jié),且當累積更多的隨機數(shù)據(jù)字節(jié)時,將8個字節(jié)寫入系統(tǒng)內(nèi)存。當8個字節(jié)被寫至內(nèi)存時,ECX 1702會更新為20,以表示還有20個隨機數(shù)據(jù)字節(jié)必須寫入系統(tǒng)內(nèi)存。此外,地址會被更新為系統(tǒng)內(nèi)存中,下個將要寫入大量隨機數(shù)據(jù)字節(jié)的位置0x12345680。中斷可能會發(fā)生在這個時候,而軟件會檢查更新的值。當中斷已執(zhí)行且控制權回歸至REP XSTORE指令時,REP XSTORE指令將使用ECX 1702及ESEDI 1704中的更新值回復執(zhí)行。此外,完成REPXSTORE指令時,圖2 CSR 226的現(xiàn)時值會被復制到寄存器文件108的EAX寄存器1202中。
雖然本發(fā)明及其目的、特征與優(yōu)點已詳細敘述,其它實施例也可包含在本發(fā)明的范圍內(nèi)。例如,雖然本發(fā)明是以由操作系統(tǒng)存儲及回存的SSE寄存器進行敘述,但本發(fā)明仍可適用于使用由操作系統(tǒng)存儲及回存的其它寄存器的情形,以判斷可能的工作切換是否已發(fā)生,并回存隨機數(shù)產(chǎn)生器中的控制寄存器,如浮點寄存器。再者,雖然本發(fā)明是以x86架構的處理器來敘述,但本發(fā)明也可適用于其它各種處理器架構。
總之,以上所述,僅為本發(fā)明的較佳實施例而已,不能以之限定本發(fā)明所實施的范圍。凡依本發(fā)明權利要求所作的均等變化與修飾,都應仍屬于本發(fā)明專利涵蓋的范圍內(nèi)。
權利要求
1.一種微處理器,用以執(zhí)行一多任務操作系統(tǒng),其特征在于,該微處理器具有連接至其本身的一內(nèi)存,該微處理器包括一寄存器,于一工作切換發(fā)生時,由該操作系統(tǒng)進行存儲及回存;一標志寄存器,連接至該寄存器,用以存儲一標志,該標志若設定,則表示可能發(fā)生一工作切換,其中當該微處理器執(zhí)行一加載該寄存器的指令時,會設定該標志;以及一隨機數(shù)產(chǎn)生器(RNG),連接至該寄存器,依據(jù)存儲于一控制寄存器中的一或多個控制值而產(chǎn)生隨機數(shù),其中該控制寄存器于一工作切換發(fā)生時,不由該操作系統(tǒng)進行存儲及回存,其中該微處理器包括一第一指令,用以將該控制值加載至該控制寄存器,并也將該控制值加載至該寄存器,其中該微處理器也包括一第二指令,用以將這些隨機數(shù)存儲至該內(nèi)存,且若該標志已設定,則將該控制值從該寄存器復制到該控制寄存器。
2.如權利要求1所述的微處理器,其特征在于該寄存器包括一SSE寄存器。
3.如權利要求1所述的微處理器,其特征在于該寄存器包括一MMX寄存器。
4.如權利要求1所述的微處理器,其特征在于該寄存器包括一FPU寄存器。
5.如權利要求1所述的微處理器,其特征在于在將該寄存器的這些內(nèi)容復制到該控制寄存器之后,該微處理器清除該標志。
6.如權利要求1所述的微處理器,其特征在于在將該控制值加載至該控制寄存器及該寄存器之后,該微處理器清除該標志。
7.如權利要求1所述的微處理器,其特征在于該一或多個控制值包括用以選擇性地使能/禁止該隨機數(shù)產(chǎn)生器中的一過濾裝置的一個值。
8.如權利要求7所述的微處理器,其特征在于該過濾裝置包括用以避免在這些隨機數(shù)中產(chǎn)生一串N個連續(xù)相似位的一過濾器。
9.如權利要求1所述的微處理器,其特征在于該一或多個控制值選取包含于該隨機數(shù)產(chǎn)生器中的二或多個隨機位產(chǎn)生器其中之一,以產(chǎn)生隨機位,累積至這些隨機數(shù)中。
10.如權利要求1所述的微處理器,其特征在于該一或多個控制值選擇性地使能/禁止該隨機數(shù)產(chǎn)生器,以產(chǎn)生這些隨機數(shù)。
11.如權利要求1所述的微處理器,其特征在于該一或多個控制值選擇性地使能/禁止該隨機數(shù)產(chǎn)生器的一連續(xù)數(shù)值測試。
12.如權利要求1所述的微處理器,其特征在于該一或多個控制值選擇性地使能/禁止該隨機數(shù)產(chǎn)生器的一自測試。
13.如權利要求1所述的微處理器,其特征在于該一或多個控制值選擇性地使能/禁止該隨機數(shù)產(chǎn)生器中的一位白化器。
14.如權利要求1所述的微處理器,其特征在于該一或多個控制值指定一直流偏壓,用于部分地控制振蕩器的一操作電壓,以該隨機數(shù)產(chǎn)生器中產(chǎn)生隨機位。
15.如權利要求1所述的微處理器,其特征在于,還包括一計數(shù)器,包含于該隨機數(shù)產(chǎn)生器中,用以維持包含這些隨機數(shù)的有效字節(jié)的一計數(shù)值。
16.如權利要求15所述的微處理器,其特征在于該第二指令除將這些隨機數(shù)存儲至該內(nèi)存外,還存儲該計數(shù)值。
17.如權利要求16所述的微處理器,其特征在于該第二指令將該計數(shù)值存儲至該內(nèi)存。
18.如權利要求第16項的微處理器,其特征在于該第二指令將該計數(shù)值存儲至該微處理器內(nèi)的一使用者可見寄存器。
19.如權利要求16所述的微處理器,其特征在于該第二指令連續(xù)地執(zhí)行該計數(shù)值與這些隨機數(shù)的存儲。
20.如權利要求16所述的微處理器,其特征在于若該標志設定,則在存儲該計數(shù)值之前,該微處理器會清除該計數(shù)值。
21.如權利要求16所述的微處理器,其特征在于只有在該復制動作改變該控制寄存器的該一或多個控制值時,該微處理器才清除該計數(shù)值。
22.如權利要求1所述的微處理器,其特征在于該第二指令是不可中斷的。
23.如權利要求1所述的微處理器,其特征在于若該標志設定,則該微處理器依據(jù)從該寄存器復制到該控制寄存器的這些內(nèi)容,重新開始產(chǎn)生這些隨機數(shù)。
24.如權利要求23所述的微處理器,其特征在于只有在該復制動作改變該控制寄存器的該一或多個控制值時,該微處理器才依據(jù)這些內(nèi)容,重新開始產(chǎn)生這些隨機數(shù)。
25.如權利要求1所述的微處理器,其特征在于若該標志設定,則該微處理器會丟棄在將該控制值從該寄存器復制到該控制寄存器之前,所產(chǎn)生的這些隨機數(shù)。
26.如權利要求1所述的微處理器,其特征在于若該微處理器執(zhí)行一加載該寄存器的指令,則只有在該指令從該內(nèi)存加載該寄存器時,才設定該標志。
27.一種使多個軟件應用程序能使用一微處理器中的隨機數(shù)產(chǎn)生器(RNG)的方法,其特征在于,該微處理器是執(zhí)行一多任務操作系統(tǒng)(OS),該OS在工作切換期間,不會存儲及回存該RNG的狀態(tài),該方法包括一第一工作將一第一值加載一RNG寄存器及一非RNG寄存器;該OS將該第一值從該非RNG寄存器存入連接至該微處理器的一內(nèi)存;在該OS存儲該第一值后,一第二工作將一第二值加載該RNG寄存器;該OS將該第一值從該內(nèi)存回存至該非RNG寄存器;在該OS將該第一值從該內(nèi)存回存至該非RNG寄存器后,該RNG將該第一值從該非RNG寄存器復制到該RNG寄存器;以及在該RNG復制該第一值之后,該RNG依據(jù)該第一值產(chǎn)生隨機數(shù)據(jù)。
28.如權利要求27所述的方法,其特征在于,還包括在該第一工作將該第一值加載該RNG寄存器及該非RNG寄存器后,該RNG依據(jù)該第一值產(chǎn)生隨機數(shù)據(jù)。
29.如權利要求27所述的方法,其特征在于該OS將該第一值從該非RNG寄存器存入該內(nèi)存的動作,是由該OS作為切換至該第二工作的工作切換的一部分來執(zhí)行。
30.如權利要求27所述的方法,其特征在于,還包括在該第二工作將該第二值加載該RNG寄存器之后,該RNG依據(jù)該RNG寄存器中的該第二值產(chǎn)生隨機數(shù)據(jù)。
31.如權利要求27所述的方法,其特征在于該OS將該第一值從該內(nèi)存回存至該非RNG寄存器的動作,是由該OS作為切換至該第二工作的工作切換的一部分來執(zhí)行。
32.如權利要求27所述的方法,其特征在于,還包括該RNG響應該OS將該第一值從該內(nèi)存回存至該非RNG寄存器的動作,設定一標志,以表示可能發(fā)生一工作切換。
33.如權利要求32所述的方法,其特征在于,還包括在該RNG設定該標志之后,該第一工作執(zhí)行要求將隨機數(shù)據(jù)存至該內(nèi)存的一指令。
34.如權利要求33所述的方法,其特征在于,還包括在該第一工作執(zhí)行該指令之后,該RNG判斷該標志是否設定。
35.如權利要求34所述的方法,其特征在于該RNG將該第一值從該非RNG寄存器復制到該RNG寄存器的動作,是依據(jù)該判斷該標志是否設定的動作,而選擇性地執(zhí)行。
36.如權利要求27所述的方法,其特征在于,還包括在該OS將該第一值從該非RNG寄存器存入該內(nèi)存,且該第二工作將該第二值加載該RNG寄存器之后,該RNG丟棄由該RNG所產(chǎn)生的隨機數(shù)據(jù)。
37.一種使一微處理器能讓多個軟件應用程序使用該微處理器中的隨機數(shù)產(chǎn)生器(RNG)的方法,其特征在于,該微處理器是執(zhí)行一多任務操作系統(tǒng)(OS),而該OS在工作切換期間,不會存儲及回存該隨機數(shù)產(chǎn)生器的狀態(tài)至一內(nèi)存,該方法包括對于一第一工作執(zhí)行一第一指令,響應以將一第一值加載一RNG寄存器及一非RNG寄存器;對于該第一工作執(zhí)行一第二指令,響應以將該第一值從該非RNG寄存器復制到該RNG寄存器,其中該復制動作是于該OS已將該第一值從該內(nèi)存回存至該非RNG寄存器之后執(zhí)行;以及在將該第一值從該非RNG寄存器復制到該RNG寄存器之后,依據(jù)該第一值產(chǎn)生隨機數(shù)據(jù)。
38.如權利要求37所述的方法,其特征在于,還包括響應于該OS將該第一值從該內(nèi)存回存至該非RNG寄存器,而設定一標志,以表示可能發(fā)生工作切換。
39.如權利要求38所述的方法,其特征在于,還包括判斷該標志是否設定,其中該判斷是響應該第一工作執(zhí)行要求將隨機數(shù)據(jù)存至該內(nèi)存的一第二指令而進行。
40.如權利要求39所述的方法,其特征在于該復制動作是依據(jù)該判斷而選擇性地執(zhí)行。
41.如權利要求39所述的方法,其特征在于,還包括若該標志已設定,則在該復制動作之前,丟棄由該RNG所產(chǎn)生的隨機數(shù)據(jù)。
全文摘要
本發(fā)明公開了一種微處理器,其包括的隨機數(shù)產(chǎn)生器(RNG),可存儲及回存工作切換時其本身的狀態(tài),而不需操作系統(tǒng)(OS)支持。RNG包括用以存儲控制值的控制與狀態(tài)寄存器(CSR),其會影響隨機數(shù)的產(chǎn)生。RNG會以由OS存儲及回存的SSE寄存器來遮蔽CSR。每當SSE寄存器從內(nèi)存回存,RNG會設定用以表示可能已發(fā)生工作切換的標志。每當處理器執(zhí)行將隨機數(shù)據(jù)存儲至內(nèi)存的新指令時,會檢查此標志,在標志為真時,將控制值從SSE寄存器復制到CSR,除檢查標志外,處理器還會丟棄先前所產(chǎn)生的字節(jié),并重新開始產(chǎn)生隨機數(shù)。本發(fā)明還公開了一種使多個軟件應用程序能使用一微處理器中的隨機數(shù)產(chǎn)生器(RNG)的方法。
文檔編號G06F9/38GK1503128SQ03158188
公開日2004年6月9日 申請日期2003年9月16日 優(yōu)先權日2002年11月20日
發(fā)明者G·葛蘭·亨利, 奧圖羅·馬丁-德-尼古拉, 泰瑞·派克斯, 馬丁-德-尼古拉, G 葛蘭 亨利, 派克斯 申請人:智慧第一公司