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