專利名稱:自我測試結(jié)果決定可用性隨機數(shù)產(chǎn)生器的微處理器及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種具有依自我測試結(jié)果決定可用性的隨機數(shù)產(chǎn)生(randomnumber generation)器的微處理器及方法,特別是有關(guān)于微處理器內(nèi),一隨機數(shù)產(chǎn)生器依自我測試結(jié)果所決定地可見性。
背景技術(shù):
就歷史來看,許多計算機應用軟件需要提供隨機數(shù)。例如,物理現(xiàn)象的蒙地卡羅仿真,如大規(guī)模的天氣仿真,就需要提供隨機數(shù),以仿真物理現(xiàn)象。需要使用隨機數(shù)的其它例子為線上游戲,以仿真洗牌,擲骰子等;彩券號碼的產(chǎn)生;統(tǒng)計分析數(shù)據(jù)的產(chǎn)生,如心理學的測驗;以及計算機游戲等。
在這些型式的應用中,所需的隨機度,以及對產(chǎn)生隨機數(shù)的效能要求是不同的。許多應用軟件,如計算機游戲,對于隨機度的要求是不高的。心理學測驗上的應用,對隨機度有著更嚴格的要求,但效能需求則相當?shù)?。然而,大?guī)模的運用蒙地卡羅的仿真會有非常高的效能需求,且需要良好的隨機數(shù)統(tǒng)計特性,雖然不可預測性并非特別重要。其它的應用,如線上賭博,則對于隨機度及不可預測性皆有非常嚴格的要求。
雖然上述這些應用仍然是重要的,但是在計算機安全領(lǐng)域,則對高品質(zhì)隨機數(shù)有最大的需求。最近,個人計算機網(wǎng)絡及網(wǎng)際網(wǎng)絡交易的爆炸性成長,對于各種安全機制的需求,已明顯地增加。
對所有計算機安全的主要構(gòu)成要素而言,高品質(zhì)的隨機數(shù)皆為必要。這些要素包含機密性、身分確認以及數(shù)據(jù)完整性。
數(shù)據(jù)加密為提供機密性的主要機制。有許多種不同的加密算法,如對稱式加密、公共鑰匙及一次性密碼本,但是這些算法都具有一關(guān)鍵特性,即加密/解密鑰匙不能被簡單地預測出來。一個加密系統(tǒng)的密碼強度基本上即是其所用鑰匙的強度,亦即預測、猜想或計算解密鑰匙的難度多高。最好的鑰匙為夠長的真隨機數(shù),而在所有嚴格要求安全的應用中,隨機數(shù)產(chǎn)生器是為產(chǎn)生密碼鑰匙的基礎(chǔ)。
許多對密碼算法成功的攻擊,已非專注于加密算法,而是專注于產(chǎn)生隨機數(shù)的來源。一個為人熟知的例子是,網(wǎng)景的安全插座層(Secure Sockets Layer,SSL)的早期版本,會從系統(tǒng)時鐘與程序ID表搜集數(shù)據(jù),以產(chǎn)生軟件式準隨機數(shù)產(chǎn)生器的起始值。所產(chǎn)生的隨機數(shù)是用來產(chǎn)生一對稱鑰匙,以加密通聯(lián)數(shù)據(jù)。有二個研究生想出了可準確猜測隨機數(shù)的程序,在一分鐘內(nèi),就猜出通聯(lián)鑰匙,破壞這個機制。
與解密鑰匙類似,用以確認存取信息的使用者身份的密碼,其強度實際上就是預測或猜測密碼的難度有多高。最好的密碼為夠長的真隨機數(shù)。此外,在有使用暗號協(xié)議(challenge protocol)的確認協(xié)議(authentication protocol)中,關(guān)鍵因素就是使暗號無法由進行確認的一方加以預測。而隨機數(shù)則是用來產(chǎn)生確認身份的暗號。
數(shù)字簽名及信息摘要是用來確保網(wǎng)絡上通信的完整性。隨機數(shù)是用于大部分的數(shù)字簽名算法,以使惡意的一方難于偽造簽名。隨機數(shù)的品質(zhì)會直接影響到簽名的效力。總而言之,良好的安全需要良好的隨機數(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)計分布,而高品質(zhì)的軟件式隨機數(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)生器以一初始值或種子(seed)開始運作,該初始值有時是由使用者所提供。產(chǎn)生器以該初始值執(zhí)行算術(shù)運算,以產(chǎn)生第一隨機結(jié)果,其作為產(chǎn)生第二結(jié)果的種子,依此類推。軟件式產(chǎn)生器必然是循環(huán)式的,最終其會重復相同的輸出序列。猜測種子就等于能預測整個所產(chǎn)生的數(shù)值序列。其不可重制性只與算法及初始種子的機密程度一樣,而這可能是安全上的應用并不想要的特性。再者,軟件算法是可重制的,因為以相同輸入開始,其會產(chǎn)生相同的結(jié)果。最后,軟件算法不必然會產(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)生的種子。例如,常用的PC加密程序會記錄幾秒鐘的鼠標移動及鍵盤敲擊的特性,以獲得其所需的種子。這些動作不見得會產(chǎn)生不理想的熵數(shù),且通常需要使用者某種程度的涉入。對多數(shù)的熵產(chǎn)生器而言,最不理想的特征就是要花很多時間,才能達到足夠的熵。
所以很明顯的,熵產(chǎn)生器無法在前述一些應用上被利用,包括安全應用上。這些應用要求只能由隨機物理程序所產(chǎn)生真正的隨機數(shù)。隨機物理程序可以是通過半導體二極管或電阻的熱噪聲、自由執(zhí)行震蕩器(free-running ocsillator)所產(chǎn)生的頻率不穩(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ù)土?,因為其可并入既有的半導體晶體中。這種微處理器需要一種方式來告訴其所執(zhí)行的軟件,此隨機數(shù)產(chǎn)生器是否存在。再者,應用程序也需要知道隨機數(shù)產(chǎn)生器是否存在及/或是否運作正常,如此這些程序就不會在隨機數(shù)產(chǎn)生器不存在或運作不正常時,還企圖使用隨機數(shù)產(chǎn)生器。
發(fā)明內(nèi)容
本發(fā)明是涉及一種微處理器,其包含一隨機數(shù)產(chǎn)生器,可依據(jù)重置自我測試的結(jié)果決定是否可用。因此,為了達成上述的目的,本發(fā)明的一項特征是,提供一種微處理器。此微處理器包括一隨機數(shù)產(chǎn)生器,及一自我測試單元,耦接至該隨機數(shù)產(chǎn)生器,以在隨機數(shù)產(chǎn)生器上執(zhí)行一自我測試。此微處理器亦包括一控制邏輯,耦接至自我測試單元,于該自我測試失敗時將該隨機數(shù)產(chǎn)生器除能。
另一方面,本發(fā)明的一項特征是,提出一種微處理器。此微處理器包括一隨機數(shù)產(chǎn)生器,及一自我測試單元,耦接至該隨機數(shù)產(chǎn)生器,可響應一重置動作,測試該隨機數(shù)產(chǎn)生器是否正常運作。此微處理器亦包括一指令翻譯器,耦接至該自我測試單元,用以偵測該微處理器的一指令集中,與該隨機數(shù)產(chǎn)生器的運作相關(guān)的復數(shù)個指令。若該自我測試單元先前已判斷該隨機數(shù)產(chǎn)生器未正常運作,則該微處理器會響應其中一該些指令之執(zhí)行,而產(chǎn)生一錯誤。
另一方面,本發(fā)明的一項特征是,提出一種微處理器。此微處理器包括一隨機數(shù)產(chǎn)生器,及一自我測試單元,耦接至該隨機數(shù)產(chǎn)生器,可測試該隨機數(shù)產(chǎn)生器以判斷其是否正常運作。該自我測試單元產(chǎn)生一信號,以指出該隨機數(shù)產(chǎn)生器是否正常運作。此微處理器亦包括一狀態(tài)指示器,耦接至該自我測試單元,依據(jù)該信號指出該隨機數(shù)產(chǎn)生器是否可用來提供隨機數(shù)。
另一方面,本發(fā)明的一項特征是,提出一種可在一微處理器中選擇性地提供隨機數(shù)產(chǎn)生功能的方法。此方法包括響應該微處理器的一隨機數(shù)產(chǎn)生器的一重置動作,而測試該隨機數(shù)產(chǎn)生器的功能;儲存該測試的結(jié)果的一個指示;執(zhí)行要求該隨機數(shù)產(chǎn)生器的功能的一個指令;以及因應該執(zhí)行動作,而以該指示回復。
本發(fā)明的優(yōu)點之一是,可將隨機數(shù)產(chǎn)生器可用與否告知軟件,以使軟件可在隨機數(shù)產(chǎn)生器正常運作時,從隨機數(shù)產(chǎn)生器取得隨機數(shù),或是在隨機數(shù)產(chǎn)生器沒有正常運作時,如依照重置自我測試的結(jié)果所判斷的,從另一隨機數(shù)來源取得隨機數(shù)。
在參考本說明書的其余部份及所附圖式后,本發(fā)明的其它特征及優(yōu)點將更為明顯易知。
圖1是本發(fā)明的微處理器的方塊圖。
圖2是本發(fā)明圖1的微處理器中RNG單元的方塊圖。
圖3是本發(fā)明圖1微處理器中,與圖1RNG單元有關(guān)的各種緩存器的方塊圖。
圖4是根據(jù)本發(fā)明圖1的微處理器執(zhí)行將值加載圖3XMM0緩存器的指令的運作流程圖。
圖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微處理器進行關(guān)于隨機數(shù)產(chǎn)生的多任務運作范例的動作流程圖。
圖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指令的運作方塊圖。
圖18是根據(jù)本發(fā)明的一具體實施例,如圖1的處理器執(zhí)行XSTORE指令的方塊圖。
圖19是根據(jù)本發(fā)明如圖18XSTORE指令時執(zhí)行的一操作實例。
圖20是根據(jù)本發(fā)明的一具體實施例,如圖1的RNG單元減少連續(xù)位間相關(guān)性的操作流程圖。
圖21是為根據(jù)本發(fā)明如圖1的處理器100減少連續(xù)位間相關(guān)性的一微碼指令列表。
圖22是根據(jù)本發(fā)明的一具體實施例,如圖1的RNG單元的部分,包括有一位選擇器,以減少連續(xù)位間相關(guān)性時的方塊圖。
圖23是根據(jù)本發(fā)明,如圖22的位選擇器的詳細方塊圖。
圖24是顯示依據(jù)本發(fā)明,圖1的微處理器執(zhí)行重置的自我測試的動作流程圖。
圖25是顯示依據(jù)本發(fā)明,圖1的微處理器執(zhí)行圖2RNG單元的相關(guān)指令的動作流程圖。
其中,附圖標記說明如下
100微處理器
102指令高速緩存
104指令控制器
106指令翻譯器
108緩存器檔案
112地址產(chǎn)生器
114加載單元
116執(zhí)行階段
118儲存單元
122回寫單元
124寫入緩沖器
126讀取緩沖器
128總線接口單元(BIU)
132微程序代碼ROM
134SSE單元
136隨機數(shù)產(chǎn)生器(RNG)單元
138處理器總線
142,278數(shù)據(jù)總線
144數(shù)據(jù)總線
146中斷單元
148中斷信號
152中斷向量
202自我測試單元
204CPU ID緩存器
206,208隨機位產(chǎn)生器
211,213計數(shù)器
212機器特定緩存器(MSR)
214、219、228、236多任務器(mux)
215、217、232解多任務器(demultiplexer)
216白化器
218移位緩存器
221增加信號
222連續(xù)數(shù)目測試(CNT)單元
223清除信號
224串過濾裝置
225比較器
226控制與狀態(tài)緩存器(CSR)
227充滿1信號
229充滿0信號
231power_cntrl信號
234,702可用字節(jié)計數(shù)
238緩存器R5
242緩沖器0
244控制邏輯
246緩沖器1
248重置信號
252產(chǎn)生選擇信號
254原始位信號
256過濾失敗信號
258max_cnt信號
262過濾致能信號
264fill_select信號
266store_select信號
268xstore信號
272xload信號
274TSPO標記
266xstore信號
282字節(jié)產(chǎn)生信號
284CNT致能信號
286RNG存在信號
288自我測試失敗信號
292自我測試致能信號
294CNT失敗信號
296直流偏壓信號
298隨機數(shù)據(jù)字節(jié)
302,314RNG存在位
312RNG致能位
316自我測試致能位
318自我測試失敗位
322直流偏壓位
324原始數(shù)值位
332,362字節(jié)計數(shù)字段
334串過濾裝置致能位
336產(chǎn)生選擇位
338串過濾裝置失敗位
342CNT致能位
344CNT失敗位
346串過濾裝置max_cnt字段
352SSE緩存器
364另一字段
372XMM0
374XMM3
376XMM5
502系統(tǒng)內(nèi)存
50416字節(jié)的數(shù)據(jù)
704系統(tǒng)內(nèi)存502中的位置
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_trailing_zeros信號
1032A,1032B0的硬式編碼值
1034Aones_exceed信號
1034Bzeros_exceed信號
1036Aleading_ones信號
1036Bleading_zeros信號
1038Atrailing_ones信號
1038Btrailing_zeros信號
1042Aone_select信號
1042Bzero_select信號
1044max_cnt_exceed信號
1046A比較器
1046B比較器
1048Aall_ones信號
1048Ball_zeros信號
1202EAX
1702ECX
1704ESEDI
1802EDX
2202位選擇器
2204指數(shù)因子信號
2206中間數(shù)據(jù)總線
2302多任務器
2402-2414執(zhí)行重置之自我測試的動作流程
具體實施例方式
現(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所維護的指令指位器(instructionpointer)。指令指位器會指定下個內(nèi)存地址,以從該處提取指令。一般來說,指令指位器會循序遞增,而指到下個指令。然而,流程控制指令(如分支(branch)、跳躍、副例程呼叫及返回)會將指令指位器更新為流程控制指令所指定的非循序內(nèi)存地址。此外,中斷可能驅(qū)使指令控制器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的指令集實質(zhì)上近似于英特爾PentiumIII或Pentium IV微處理器的指令集。然而有利的是,本發(fā)明的微處理器100包括額外的指令,其是有關(guān)于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及串流SIMD延伸(StreamingSIMD Extensions,SSE)緩存器XMM0 372,這部分在下文會配合圖2及圖3做說明。XSTORE及XLOAD指令在下文亦會做更詳細地說明。
此外,指令翻譯器106會將翻譯指令的相關(guān)信息送到中斷單元146,以使中斷單元146能適當?shù)刂履芗俺苤袛唷T僬?,指令翻譯器106會將翻譯指令的相關(guān)信息送到RNG單元136。例如,指令翻譯器106會將關(guān)于翻譯的XSTORE及XLOAD指令的信息送到RNG單元136。此外,當將一值加載SSE緩存器XMM0 372的指令被翻譯時,指令翻譯器106會通知RNG單元136,以使RNG單元136采取某些動作,如設(shè)定標記,以指出操作系統(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指令是以微程序代碼實際操作。此外,在一具體實施例中,XSTORE及XLOAD指令是連續(xù)執(zhí)行的,此因其為不可中斷的。亦即,在XSTORE及XLOAD指令的執(zhí)行期間,中斷會被除能。
微處理器100也包括一緩存器檔案108,其耦接至指令翻譯器106。緩存器檔案108包括微處理器100的使用者可見緩存器,及使用者不可見緩存器。在一具體實施例中,緩存器檔案108包括八個32位的一般用途使用者不可見的緩存器,標示為r0到r7。在另一具體實施例中,緩存器檔案108中的使用者可見緩存器包括Pentium III或IV的使用者可見緩存器集。圖3的SSE緩存器352是包含于緩存器檔案108中。SSE緩存器352是由包含于微處理器100中的SSE單元134及RNG單元136來使用,如下所述。尤其,緩存器檔案108包括目前操作系統(tǒ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ù)及由指令翻譯器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指令加載其中的控制值,以經(jīng)由一數(shù)據(jù)總線142存入圖2的CSR226中。
微處理器100也包括一加載單元114,其耦接至地址產(chǎn)生器112。加載單元114會從系統(tǒng)內(nèi)存中加載數(shù)據(jù)至微處理器100。加載單元114也包括一數(shù)據(jù)高速緩存,用以快速存取從系統(tǒng)內(nèi)存所讀取的數(shù)據(jù)。加載單元114會經(jīng)由數(shù)據(jù)總線142,將加載的數(shù)據(jù)送到微處理器100中的執(zhí)行單元,如SSE單元134、RNG單元136及包含于執(zhí)行階段116中的執(zhí)行單元。特別是,加載單元114會從系統(tǒng)內(nèi)存加載控制值,存到圖2的CSR226中,以執(zhí)行XLOAD指令。
微處理器100也包括執(zhí)行階段116,其經(jīng)由數(shù)據(jù)總線142耦接至加載單元114。執(zhí)行階段116包括執(zhí)行單元,如算術(shù)邏輯單元,其用以執(zhí)行算術(shù)與邏輯運算,像是加、減、乘、除及布爾運算。在一具體實施例中,執(zhí)行階段116包括一用以執(zhí)行整數(shù)運算的整數(shù)單元,及一用以執(zhí)行浮點運算的浮點單元。
微處理器100也包括SSE單元134,其耦接至加載單元114及指令翻譯器106。SSE單元134包括算術(shù)與邏輯單元,用以執(zhí)行SSE指令,如包含于PentiumIII與IV的SSE或SSE2指令集中的那些指令。在一具體實施例中,雖然圖3的SSE緩存器352概念上是包含在緩存器檔案108中,但實際上是位于SSE單元134中,用以儲存SSE單元134所使用的操作數(shù)。
微處理器100也包括RNG單元136,其經(jīng)由數(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)生的結(jié)果儲存至系統(tǒng)內(nèi)存。特別是,儲存單元118會將RNG單元136在數(shù)據(jù)總線144上所提供的XSTORE指令計數(shù)及隨機數(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。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。控制邏輯244包括大量的組合及循序邏輯,用以控制RNG單元136中的各種組件。控制邏輯244會接收xload信號272及xstore信號268,其分別表示正執(zhí)行XLOAD或XSTORE指令??刂七壿?44也會接收重置信號248,其表示正在重置RNG單元136。底下會結(jié)合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會設(shè)定一偽值的RNG存在信號286,送到MSR212,以更新圖3的RNG存在位314。
RNG存在信號286也會送到一CPU ID緩存器204,其包括圖3的RNG存在位302,而RNG存在位302亦會藉由RNG存在信號286來更新。亦即,CPU ID緩存器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,其是用以指定是否關(guān)閉隨機位產(chǎn)生器206及208的電源。在一具體實施例中,關(guān)閉隨機位產(chǎn)生器206及208電源的動作包括不送時鐘信號給它們。隨機位產(chǎn)生器206及208皆會依據(jù)微處理器100的隨機電氣特性(如熱噪聲),而產(chǎn)生一連串隨機數(shù)據(jù)位。
隨機位產(chǎn)生器0206會從MSR212接收一直流偏壓信號296。直流偏壓信號296是傳送圖3中MSR 212的直流偏壓位322所存的值。直流偏壓信號296的值指定一直流偏壓電壓,以部分地控制隨機位產(chǎn)生器0206中的自發(fā)振鈴振蕩器的工作電壓。
隨以下申請中的美國專利案,申請?zhí)枮?0/046055、10/046054及10/046057,標題分別為「用以產(chǎn)生隨機數(shù)的裝置」、「振蕩器偏壓變化機制」及「振蕩器頻率變化機制」(文件編號為CNTR.2113、CNTR.2155及CNTR.2156),其中均對隨機位產(chǎn)生器0206做了詳細說明,此處全部予以參考并入。
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è)定為真,以表示其已累積并輸出一隨機數(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ù)從CSR226所接收的CNT致能信號284,而選擇性地被致能/除能。CNT致能信號284會傳送儲存于圖3中CSR226的CNT致能位342中的值。若連續(xù)隨機數(shù)產(chǎn)生器測試失敗,則CNT單元222將一送到CSR226的CNT失敗信號294設(shè)定為真,并儲存于圖3中CSR226的CNT失敗位344中。
在一具體實施例中,CNT單元222所執(zhí)行的連續(xù)隨機數(shù)產(chǎn)生器測試,實質(zhì)上符合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設(shè)為真,以表示連續(xù)隨機數(shù)產(chǎn)生器測試失敗。
在一具體實施例中,只要設(shè)定圖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被設(shè)定時,新及舊的緩沖器皆會更新,并且連續(xù)隨機數(shù)產(chǎn)生器測試只會因執(zhí)行XSTORE指令而進行。因此,可確保一特定的工作絕不會接收兩組連續(xù)且其值相等的8個字節(jié)。然而,若二個工作正執(zhí)行,且其中一個設(shè)定CNT致能位342,而另一個并未設(shè)定,則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位串)。此指定值是由從CSR 226所接收的最大計數(shù)(max_cnt)信號258來指定。max_cnt信號258會傳送圖3中CSR226的串過濾裝置最大計數(shù)字段346所指定的值。在一具體實施例中,max_cnt346的默認值為26個位。在一具體實施例中,串過濾裝置最大計數(shù)字段346的值必須至少為8。若串過濾裝置224偵測到一連續(xù)的相似位串長度超過max_cnt258,則串過濾裝置224將一過濾失敗信號256設(shè)為真,此信號是儲存于圖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ù)個數(shù)據(jù)輸出端。解多任務器也包括一控制輸入端。解多任務器會依據(jù)控制輸入端的信號來選擇復數(shù)個數(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é)被存入buf0242或buf1246,控制邏輯244宣告遞增信號221。解多任務器215將所接收到的遞增信號221提供給根據(jù)fill_select信號264所選擇的輸出端。
RNG單元136也包括一具有兩輸入端的第三解多任務器217,其耦接至控制邏輯244。解多任務器217的輸入端是耦接至控制邏輯244,以接收其所產(chǎn)生的清除信號223。每當執(zhí)行一XSTORE指令時,控制邏輯244會將清除信號223設(shè)為真,以使得有效的隨機數(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è)為真時,計數(shù)器0211及計數(shù)器1213中由fill_select信號264所指定的一個會遞增。計數(shù)器0211及計數(shù)器1213中也各具有一清除輸入端。清除輸入端是耦接至解多任務器217的輸出端。因此,當控制邏輯244將清除信號223設(shè)為真時,計數(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)生fu110信號229及fu111信號227,以將比較結(jié)果告知控制邏輯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有關(guān)的各種緩存器的方塊圖。
圖3是顯示圖2中的CPU ID緩存器204。CPU ID緩存器204包括一RNG存在位302。RNG存在位302為只讀的特征標記單元。若RNG存在位302為1,則表示RNG單元136存在,并由微處理器100來致能。若RNG存在位302為0,則RNG單元136并不存在,且XLOAD及XSTORE指令為無效的,而當指令翻譯器106遇到這些指令時,將產(chǎn)生無效指令異常。此外,讀取MSR212中的位,結(jié)果是未定義,而嘗試寫入,則不會產(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中的位,結(jié)果是未定義,而嘗試寫入,則不會產(chǎn)生任何效果。RNG致能位312的值在重置之后,即變?yōu)?。
MSR212也包括一只讀的RNG存在位314。RNG存在位314是表示RNG單元136是否存在于微處理器100中。若RNG存在位314為0,則RNG單元136不能藉由設(shè)定RNG致能位312來致能,并且,讀取MSR212中的位,結(jié)果是未定義,而嘗試寫入,則不會產(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的正確值或最佳值,并將其設(shè)定為此值。在重置之后,直流偏壓位322的值即變?yōu)?00。
MSR212也包括可寫入的原始位位324。若原始位位324設(shè)定為0,則圖2的白化器216會執(zhí)行前文圖2部分所述的白化功能,并將白化位傳送到移位緩存器218。若原始位位324設(shè)定為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設(shè)定為0,則選取隨機位產(chǎn)生器0206,以經(jīng)由圖2的多任務器214,提供隨機比特流加以累積;否則,會選取隨機位產(chǎn)生器1208。在RNG單元136致能之后,產(chǎn)生器選擇位336的值即變?yōu)?。
CSR226也包括串過濾裝置失敗位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)?。
CSR226也包括可寫入的計數(shù)(CNT)致能位342。若CNT致能位342設(shè)定為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設(shè)定為1。在一具體實施例中,當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)?。
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的RNGR5緩存器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實質(zhì)上近似于Pentium III或IV所包含的SSE緩存器,如IA-32英特爾架構(gòu)軟件開發(fā)者手冊第一冊基本架構(gòu)(2002年)的第10-14頁所述,其在此加以參考并入。RNG CSR 226會遮蔽(shadow)XMM0 372,而RNG R5 238會遮蔽XMM5 374,如下文所述。
在一具體實施例中,微處理器100包括各種熔絲,在微處理器100的制造過程中,其會暫時或永久地加以設(shè)定,以便于重置時,能選取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英特爾架構(gòu)軟件開發(fā)者手冊第二冊指令集參考(2001年)的第3-443頁到第3-444頁,其在此予以參考并入。其它從系統(tǒng)內(nèi)存加載XMM0 372的指令,則如MOVAPD及MOVDQA。由于XMM0 372是操作系統(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的類似指令)已被翻譯。一旦此值已加載XMM0372,RNG單元136的控制邏輯244會設(shè)定TSPO標記274,以表示可能發(fā)生工作切換。流程會結(jié)束于方塊404。
現(xiàn)請參照圖5,其是根據(jù)本發(fā)明,圖1微處理器100于執(zhí)行XLOAD指令時的運作方塊圖。XLOAD指令是軟件藉以將值加載圖2的CSR226的工具,以指定RNG單元136運作所需的控制值。因為CSR 226不存在于Pentium III或IV中,所以需要Pentium III或IV指令集外的新指令,以加載CSR226。有利的是,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)存的值加載CSR226。在一具體實施例中,XLOAD會將16個字節(jié)的數(shù)據(jù)504從memaddr移到CSR226及XMM0 372,如圖所示。在一具體實施例中,XLOAD指令的運算碼值為0x0F 0x5A,其后接著x86指令所指定的標準mod R/M緩存器及地址格式字節(jié)。在另一具體實施例中,XLOAD指令的運算碼值則為0x0F 0xA60xC0。若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中,由于累積于緩沖器0242及緩沖器1246的隨機數(shù)據(jù)字節(jié)并不會隨著CSR226中的控制值而產(chǎn)生,其中這些控制值是正加載CSR226的新工作之所需,所以RNG單元136會響應CSR226的加載動作,而丟棄緩沖器0242及緩沖器1246的內(nèi)容。流程繼續(xù)進行至方塊606。
于方塊606中,由于緩沖器0242及緩沖器1246中的隨機數(shù)據(jù)字節(jié)在方塊604時被丟棄,所以RNG單元136會將計數(shù)器0211及計數(shù)器1213中的可用字節(jié)計數(shù)清除為0。流程繼續(xù)進行至方塊608。
于方塊608中,RNG單元136重新開始累積隨機數(shù)。亦即,產(chǎn)生器選擇信號252所選取的隨機位產(chǎn)生器206或208,在隨機位產(chǎn)生器0206的情況下,會依據(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é);緩沖器0242及緩沖器1246依據(jù)fill_select信號264,累積隨機數(shù)據(jù)字節(jié);而計數(shù)器0211及計數(shù)器1213則依據(jù)fill_select信號264,計算緩沖器0242及緩沖器1246中所累積的字節(jié)數(shù)目。
于方塊612中,由于CSR226已被更新為目前工作所需要的控制值,所以控制邏輯244會清除TSPO標記274。流程會結(jié)束于方塊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é),本質(zhì)上有利地便于多任務的進行。
圖7是顯示XSTORE指令的格式,其為
XSTORE memaddr,XMM5
Memaddr會指定系統(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,則結(jié)果會呈未定狀態(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 R5238為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的緩沖器0242或緩沖器1246)。藉由清除緩沖器,微處理器100可避免各個工作看到彼此的隨機數(shù)據(jù)所產(chǎn)生的問題,而提升安全性。例如,假設(shè)第一工作執(zhí)行第一XSTORE運算,將15個字節(jié)的隨機數(shù)據(jù)從緩沖器0 242儲存到系統(tǒng)內(nèi)存,并執(zhí)行第二XSTORE運算,將15個字節(jié)的隨機數(shù)據(jù)從緩沖器1246儲存到系統(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所選取的緩沖器0242或緩沖器1246中的可用字節(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,以判斷標記是否設(shè)定。若設(shè)定,則流程會繼續(xù)進行方塊806。否則,流程會繼續(xù)進行方塊816。
在方塊806中,RNG單元136會將XMM0 372的內(nèi)容復制到CSR226,并且會清除TSPO標記274。由于TSPO標記274是表示自前次XSTORE或XLOAD執(zhí)行以后,工作切換已可能發(fā)生,就如圖4的步驟402中,從系統(tǒng)內(nèi)存加載XMM0 372所表示的,所以CSR226可能不具有目前執(zhí)行XSTORE指令的工作所需的正確控制值。因此,XSTORE指令必須以正確的控制值來更新CSR 226。正確值是儲存于XMM0 372中,此因當工作初始時,該正確控制值是藉由執(zhí)行XLOAD而被加載XMM0 372及CSR226中,而后當操作系統(tǒng)切回至目前工作時,正確控制值亦被回存至XMM0 372。流程會繼續(xù)進行方塊808。
在方塊808中,因為累積于緩沖器0 242及緩沖器1 246的隨機數(shù)據(jù)字節(jié),不會隨著CSR中新工作所需的新控制值而產(chǎn)生,其中這些新控制值是于方塊806中被復制到CSR226中,所以RNG單元136會響應CSR226的加載,而丟棄緩沖器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設(shè)為真,以清除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會使中斷致能。流程會結(jié)束于方塊824。
現(xiàn)在參照圖9,其是根據(jù)本發(fā)明,圖1微處理器100進行關(guān)于隨機數(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(chǔ))來初始化CSR226及XMM0 372。流程會繼續(xù)進行方塊906。
在方塊906中,根據(jù)圖6的方塊604、606、608以及612,RNG單元136會響應XLOAD,而丟棄緩沖器0242及緩沖器1246的內(nèi)容、清除計數(shù)器0211及計數(shù)器1213、重新開始隨機數(shù)的產(chǎn)生與累積以及清除TSPO標記274。流程會繼續(xù)進行方塊908。
在方塊908中,工作A執(zhí)行XSTORE指令,以儲存依據(jù)方塊904加載至CSR226的控制值A(chǔ)所產(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(chǔ))儲存至系統(tǒng)內(nèi)存,以保留工作A的狀態(tài)。然而,操作系統(tǒng)不知道CSR226的情況,所以操作系統(tǒng)不會將CSR226儲存至系統(tǒng)內(nèi)存以保留其狀態(tài)。流程會繼續(xù)進行方塊916。
在方塊916中,根據(jù)圖4的步驟404,RNG單元136會響應在方塊914的XMM0 372的加載,而設(shè)定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,而丟棄緩沖器0242及緩沖器1246的內(nèi)容、清除計數(shù)器0211及計數(shù)器1213、重新開始隨機數(shù)的產(chǎn)生與累積以及清除TSPO標記274。流程會繼續(xù)進行方塊924。
在方塊924中,工作B執(zhí)行XSTORE指令,以儲存依據(jù)方塊918加載至CSR226的控制值B所產(chǎn)生的隨機數(shù)據(jù)。流程會繼續(xù)進行方塊924。
在方塊926中,為了執(zhí)行前一方塊的XSTORE,RNG單元136會連續(xù)地將于方塊922重新開始后所累積的計數(shù)值及數(shù)據(jù),儲存至系統(tǒng)內(nèi)存,如圖7及圖8所示。流程會繼續(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)不會將CSR226儲存至系統(tǒng)內(nèi)存以保留其狀態(tài)。此外,操作系統(tǒng)會回存工作A的狀態(tài),其包括將先前在方塊914所保留的值A(chǔ),從系統(tǒng)內(nèi)存加載到XMM0 372。流程會繼續(xù)進行方塊932。
在方塊932中,根據(jù)圖4的步驟404,RNG單元136會響應在方塊928的XMM0 372的加載,而設(shè)定TSPO標記274。流程會繼續(xù)進行方塊934。
在方塊934中,工作A執(zhí)行XSTORE指令,以儲存依據(jù)方塊904加載至CSR226的控制值A(chǔ)所產(chǎn)生的隨機數(shù)據(jù)。然而,在方塊918,CSR226中的值A(chǔ)會被覆寫。因此,目前累積于緩沖器0242及緩沖器1246的隨機數(shù)據(jù)字節(jié)并非依據(jù)值A(chǔ)產(chǎn)生,而是依據(jù)值B而產(chǎn)生。流程會繼續(xù)進行方塊936。
在方塊936中,RNG單元136依圖8的方塊804,判斷TSPO標記274已設(shè)定,于是會依據(jù)圖8的方塊806,將XMM0 372的內(nèi)容復制到CSR226,藉以將值A(chǔ)回存至CSR226。此外,由于CSR226已被回存,所以根據(jù)方塊806,RNG單元136會清除TSPO標記274。流程會繼續(xù)進行方塊938。
在方塊938中,根據(jù)圖8的方塊808、812以及814,RNG單元136會響應方塊936中復制到CSR226的動作,而丟棄緩沖器0242及緩沖器1246的內(nèi)容、清除計數(shù)器0211與計數(shù)器1213以及重新開始隨機數(shù)的產(chǎn)生及累積。流程會繼續(xù)進行方塊942。
在方塊942中,為執(zhí)行方塊934的XSTORE,RNG單元136會連續(xù)地將于先前的方塊重新開始后所累積的計數(shù)值及數(shù)據(jù),儲存至系統(tǒng)內(nèi)存,如圖7及圖8所示。在此情況下,由于在先前方塊中,已清除計數(shù)器0211及計數(shù)器1213,并丟棄緩沖器0242及緩沖器1246的內(nèi)容,所以計數(shù)值為0,且未有有效隨機數(shù)據(jù)字節(jié)儲存到系統(tǒng)內(nèi)存中。流程會繼續(xù)進行方塊944。
在方塊944中,工作A執(zhí)行XSTORE指令,以儲存依據(jù)方塊904加載至CSR226的控制值A(chǔ)所產(chǎn)生的隨機數(shù)據(jù),其中CSR226在方塊936,已回存為值A(chǔ)。流程會繼續(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加載至CSR226的控制值A(chǔ)所產(chǎn)生的隨機數(shù)據(jù),其中CSR226在方塊936,已回存為值A(chǔ)。流程會繼續(xù)進行方塊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中,圖2RNG單元136的串過濾裝置224的方塊圖。
配合本發(fā)明的目的,前導的1位是定義為一個字節(jié)開頭的連續(xù)1位。一個字節(jié)可能包含0到8個前導的1位。例如,字節(jié)00011111具有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é)結(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接收隨機數(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é)包含尾端的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é)包含尾端的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也包括兩輸入端的或門(0R 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。
retain_counts=max_cnt_exceeded&filter enable; increment_zeros=all_zeros &(!retain_counts); load_zeros=trail_zeros &(!retain_counts) &(!increment_zeros); clear_zeros=(!retain_counts) &(!increment_zeros) &(!load_zeros); increment_ones=all_ones &(!retain_counts); load_ones=trail_ones &(!retain_counts) &(!increment_counts); clear_ones=(!retain_counts) &(!increment_ones) &(!load_ones); if(retain_counts){ zero_select=3;//選擇zeros_cnt當輸入 }else_if(increment_zeros){ zero_select=2;//選擇new_zeros_cnt當輸入 }else_if(load_zeros){ zero_select=1;//選擇num_trailing_zeros當輸入 }else if(clear_zeros){ zero_select=0;//選擇hard_coded 0當輸入 } if(retain_counts){ one_select=3;//選擇ones_cnt當輸入<!-- SIPO <DP n="34"> --><dp n="d34"/> }else_if(increment_ones){ one_select=2;//選擇new_ones_cnt當輸入}else if(load_ones){ one_select=1;//選擇num_trailing_ones當輸入 }else if(clear_ones){ one_select=0;//選擇hard_coded 0當輸入 }
現(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é)的檢查結(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。流程會繼續(xù)進行方塊1118。
在方塊1118中,控制邏輯244響應具真值的過濾失敗信號256,而不將圖2的遞增信號221設(shè)為真,并且不使隨機字節(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選取new_zeros_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,并且于信號1042A中產(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信號1038,以判斷隨機數(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設(shè)為真,以遞增由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的其中一個一般用途緩存器中,如EAX1202緩存器,而不會儲存至系統(tǒng)內(nèi)存。有利的是,與圖7的XSTORE指令類似,圖12的XSTORE指令會連續(xù)地將計數(shù)值加載EAX,并將隨機數(shù)據(jù)字節(jié)儲存至內(nèi)存,以促進與RNG單元136的多任務運作。也就是,圖12的XSTORE指令也是不可中斷的。
現(xiàn)在參照圖13,其是根據(jù)本發(fā)明,圖2RNG單元136的多重緩沖(multi-buffering)運作的流程圖。流程是從方塊1302開始。
在方塊1302中,重置信號248被設(shè)為真。流程會繼續(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的電源是否已關(guān)閉。若是,流程會繼續(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設(shè)為真,以清除由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,關(guān)閉隨機位產(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的相關(guān)位是否已因方塊602中CSR226的加載而改變。若是,流程會繼續(xù)進行如圖6的方塊604。否則,流程會繼續(xù)進行方塊612,如圖所示。此實施例的優(yōu)點是,不必丟棄已累積的隨機字節(jié)及重新開始隨機字節(jié)的累積。亦即,若CSR226的加載對于會影響RNG單元136的隨機數(shù)產(chǎn)生功能的值未做任何改變,則由于隨機字節(jié)是藉使用所要的控制值而產(chǎn)生,所以不需丟棄已累積的隨機字節(jié)及重新開始隨機字節(jié)的累積。在一具體實施例中,相關(guān)的CSR226位為串過濾裝置致能位334、產(chǎn)生器選擇位336、CNT致能位342以及串過濾裝置max_cnt 346?,F(xiàn)在參照圖15,其是根據(jù)本發(fā)明的另一具體實施例,圖1微處理器100執(zhí)行圖3的XSTORE指令的運作流程圖。圖15的流程圖與圖8的流程圖相同,并且標號相同的方塊是一樣的,除了圖15包括額外的判斷方塊1507。流程會從方塊806進行到判斷方塊1507。在判斷方塊1507中,圖2的控制邏輯244判斷CSR226的相關(guān)位是否已因方塊806中復制至CSR226的動作而改變。若是,流程會繼續(xù)進行如圖8的方塊808。否則,流程會繼續(xù)進行方塊816,如圖所示。此實施例的優(yōu)點是,不必丟棄已累積的隨機字節(jié)及重新開始隨機字節(jié)的累積。亦即,若復制至CSR226的動作對于會影響RNG單元136的隨機數(shù)產(chǎn)生功能的值未做任何改變,則由于隨機字節(jié)是藉使用所要的控制值而產(chǎn)生,所以不需丟棄已累積的隨機字節(jié)及重新開始隨機字節(jié)的累積。在一具體實施例中,相關(guān)的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é),如圖所示。有利的是,與圖12的XSTORE指令類似,圖16的XSTORE指令會連續(xù)地將隨機數(shù)據(jù)字節(jié)寫入該使用者可見緩存器,并將計數(shù)值加載EAX1202,以促進與RNG單元136的多任務運作。也就是,圖16的XSTORE指令也是不可中斷的。
現(xiàn)在參照圖17,其是根據(jù)本發(fā)明的另一具體實施例,圖1微處理器100執(zhí)行XSTORE指令的運作方塊圖。圖17的XSTORE指令類似于圖12的XSTORE指令,然而在圖17的實施例中,XSTORE指令包括一×86架構(gòu)的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的ESEDI1704中,如圖所示。每當有一或更多個隨機數(shù)據(jù)字節(jié)被寫入系統(tǒng)內(nèi)存時,ESEDI1702即更新為系統(tǒng)內(nèi)存中,下個用以儲存隨機數(shù)據(jù)字節(jié)的位置。此外,每當有一或更多個隨機數(shù)據(jù)字節(jié)儲存至系統(tǒng)內(nèi)存時,ECX1702即更新,以反映尚待儲存儲存的隨機字節(jié)數(shù)目。例如,假設(shè)REP XSTORE指令于ECX1702中指定一字節(jié)數(shù)值228及0x12345678的內(nèi)存地址。假設(shè)在緩沖器0242及緩沖器1246兩者之一中,RNG單元136有8個可用的字節(jié),且當累積更多的隨機數(shù)據(jù)字節(jié)時,將8個字節(jié)寫入系統(tǒng)內(nèi)存。當8個字節(jié)被寫至內(nèi)存時,ECX1702會更新為20,以表示還有20個隨機數(shù)據(jù)字節(jié)必須寫入系統(tǒng)內(nèi)存。此外,地址會被更新為系統(tǒng)內(nèi)存中,下個將要寫入大量隨機數(shù)據(jù)字節(jié)的位置0x12345680。中斷可能會發(fā)生在這個時候,而軟件會檢查更新的值。當中斷已執(zhí)行且控制權(quán)回歸至REP XSTORE指令時,REP XSTORE指令將使用ECX1702及ESEDI1704中的更新值回復執(zhí)行。此外,完成REP XSTORE指令時,圖2CSR 226的現(xiàn)時值會被復制到緩存器檔案108的EAX緩存器1202中。
請參閱圖18,圖18根據(jù)本發(fā)明的一具體實施例,當如圖1的處理器100執(zhí)行XSTORE指令的方塊圖。圖18的XSTORE指令和圖12的XSTORE指令非常相近。然而,在圖18的具體實施例中,只有部分暫存在R5 238的隨機數(shù)據(jù)字節(jié)被存到系統(tǒng)內(nèi)存502。將N定義為2的(指數(shù)因子)冪次。提供一個N,用來選擇在R5 238中的每第N個位儲存到系統(tǒng)內(nèi)存502。也就是說,N等于2的(指數(shù)因子)冪次來當作參考。被EDX1802緩存器所指定指數(shù)因子是如圖18XSTORE指令的一個輸入?yún)?shù)。EDX1802為緩存器檔案108中一個使用者可見的通用緩存器。
在一實施例中,暫存在R5 238的隨機數(shù)據(jù)位組長度為8位或64位,因此在EDX1802被指定的指數(shù)因子容許值可為0,1,2,3,而可能的N值就為1,2,4,8。因此,在如圖18的XSTORE指令實施例中,被存到系統(tǒng)內(nèi)存的有效隨機數(shù)據(jù)位組長度就為8/N,也就是8,4,2,1。在另一實施例中,在EDX1802被指定的因子指數(shù)容許值為1,2,3,而可能的N值就為1,2,4,8。在XSTORE指令執(zhí)行完成后,決定系統(tǒng)內(nèi)存502的有效隨機數(shù)據(jù)位組長度以及指令狀態(tài)同時被放到EAX1202。
如圖18的XSTORE指令也包括有根據(jù)前圖所述的其它XSTORE指令實施例特征。舉例來說,如圖18的XSTORE指令可以將每第N個累積且被選擇的位儲存到在微處理器中的一緩存器,而不是如根據(jù)圖16的具體實施例所述儲存到內(nèi)存;或是有效位計數(shù)值可儲存到內(nèi)存,而不是如根據(jù)圖7的具體實施例所述儲存到EAX緩存器;或是一REP前置碼可被包括在如圖17所述的具體實施例中。
請參閱圖19,圖19根據(jù)本發(fā)明,當如圖18XSTORE指令時執(zhí)行的一操作實例。一個在R5 238的二進制隨機數(shù)據(jù)位值的實際例子。圖標中,每一個在R5 238的位以八進位表示。圖標中也顯示出隨機數(shù)據(jù)字節(jié)根據(jù)如圖18所給定四個容許值之一被存到系統(tǒng)內(nèi)存502。如果EDX為0,則所有從R5 238來的64位將被儲存到系統(tǒng)內(nèi)存502。如果EDX為1,則只有由R5 238每兩個選一個所組成的32位將被儲存到系統(tǒng)內(nèi)存502。如果EDX為2,則只有由R5 238每四個選一個所組成的16位將被儲存到系統(tǒng)內(nèi)存502。如果EDX為3,則只有由R5 238每八個選一個所組成的8位將被儲存到系統(tǒng)內(nèi)存502。
本發(fā)明的優(yōu)點是,如圖18XSTORE指令減低了RNG單元136產(chǎn)生的連續(xù)位間的關(guān)連性,其中,RNG單元136是由使用者致能且指定儲存在EDX1802的指數(shù)因子,該指數(shù)因子用以選擇在R5 238的每N個位,指數(shù)因子與N的關(guān)系可表示為N=2^(指數(shù)因子)。
請參閱圖20,圖20為根據(jù)本發(fā)明的一具體實施例,是為如圖1的RNG單元136減少連續(xù)位間相關(guān)性的操作流程圖。在圖20的具體實施例中,用來執(zhí)行減低連續(xù)位間相關(guān)性功能的裝置包括有如圖1微處理器100的多個組件,如檔案緩存器108、地址產(chǎn)生器112、加載單元114、ALU162、RNG單元136、儲存單元118、回寫單元122、寫入緩沖器124及總線接口單元128。儲存在如圖1所示微碼內(nèi)存132的微碼指令,根據(jù)如圖21所示的程序行表(programlisting)控制微處理器100的組件。圖20的流程圖描述普通如圖21所示的程序行表的微碼指令。流程開始于方塊2002。
在方塊2002中,如圖2所示的RNG單元136經(jīng)由隨機位產(chǎn)生器206或208,多任務器214及白化器216產(chǎn)生一連串的隨機數(shù)據(jù)位,并且藉由如圖2及前圖所述的移位緩存器218、串過濾裝置224、多任務器228、解多任務器232、緩沖器0242及緩沖器1246兩數(shù)據(jù)緩沖器、多任務器236、R5 238及控制邏輯244將位累積成字節(jié)。流程下一步到判斷方塊2004。
在判斷方塊2004中,微處理器100藉由從圖3CSR226來的可利用位計數(shù)值332判斷是否八個隨機數(shù)據(jù)字節(jié)已在buf0 242或buf1 246中累積。若為是,流程下一步到方塊2012;否則,流程下一步到方塊2006。
在方塊2006中,既然尚未累積到八個隨機數(shù)據(jù)字節(jié),微處理器100將有效隨機數(shù)據(jù)字節(jié)的長度設(shè)定為0。流程下一步到方塊2008。
在方塊2008中,微處理器100加載EAX 1202由CSR 226得到的狀態(tài),及已儲存在內(nèi)存的有效隨機數(shù)據(jù)字節(jié)的長度。假如方塊2008是從方塊2006來的,則有效隨機數(shù)據(jù)字節(jié)的長度為0。假如方塊2008是從方塊2018來的,則有效隨機數(shù)據(jù)字節(jié)的長度為8。假如方塊2008是從方塊2044來的,則有效隨機數(shù)據(jù)字節(jié)的長度為在EDX中所指定的指數(shù)因子的關(guān)系函式,諸如2^3(3-指數(shù)因子)。流程在方塊2008結(jié)束。
在方塊2012中,微處理器100將R5 238的內(nèi)容加載到一暫時儲存位置,如圖20的temp1。在一實施例中,只有從R5 238來的隨機數(shù)據(jù)字節(jié)被加載到temp1,而不是有效字節(jié)計數(shù)值。在如圖21的微碼列表實施例中兩個32位的緩存器r4、r5被共同用來當作temp1。流程下一步到判斷方塊2014。
在判斷方塊2014中,微處理器100判斷在EDX 1802所指定的指數(shù)因子是否為0,也就是說,是否所有從R5來的字節(jié)將被儲存到內(nèi)存。若為是,流程到方塊2016,否則,流程到方塊2022。
在判斷方塊2016中,微處理器100將全部在R5 238累積的八個有效隨機數(shù)據(jù)字節(jié)儲存到圖18中的系統(tǒng)內(nèi)存。流程下一步到方塊2018。
在方塊2018中,既然全部八個字節(jié)在方塊2016中被儲存到系統(tǒng)內(nèi)存502,微處理器100將有效隨機數(shù)據(jù)字節(jié)的長度設(shè)定為8。流程下一步到方塊2008。
在方塊2022中,微處理器100將儲存在EDX 1802 XSTORE指令的一個輸入?yún)?shù),藉由2的冪次計算N值。流程下一步到方塊2024。
在方塊2024中,微處理器100藉由計算64除以N得到一循環(huán)計數(shù)值。該循環(huán)計數(shù)也就是將被儲存到系統(tǒng)內(nèi)存502的長度。流程下一步到方塊2026。
在方塊2026中,微處理器100清除EAX1202設(shè)為0。流程下一步到方塊2028。
在方塊2028中,微處理器100將EAX1202左移一個位,以清出一個EAX空間來給從R5 238得到原始數(shù)據(jù)所選定及累積的下一個位。流程下一步到方塊2032。
在方塊2032中,微處理器100藉由從temp1中取出最后一個位(也就是除了最后一個位外,全部舍棄)并且將該最后一個位加入EAX1202中來達成選定并累積下一個第N位。流程下一步到方塊2034。
在方塊2034中,微處理器100將temp1右移N個位,因此將下一個被選定的N位放入temp1的位置,藉由將temp1右移N個位,將前次在方塊2032中被選定及累積的位被舍棄。流程下一步到方塊2036。
在方塊2036中,微處理器100將循環(huán)計數(shù)值遞減1。流程下一步到方塊2038。
在方塊2038中,微處理器100判斷循環(huán)計數(shù)值是否已到達0。若為是,流程到方塊2042,否則,流程到方塊2028。
在方塊2042中,微處理器100將EAX1202儲存到系統(tǒng)內(nèi)存502。EAX1202包括有從R5 238所選定并累積的每第N個位。在一實施例中,EAX1202的全部內(nèi)容被存入系統(tǒng)內(nèi)存502,即使在EAX1202的一些位也許不包含有效隨機數(shù)據(jù)字節(jié)。然而在2008方塊中,每一次完成XSTORE指令。有效隨機數(shù)據(jù)字節(jié)被存入系統(tǒng)內(nèi)存502的長度會反應在EAX1202。因此,致能程序以決定有效隨機數(shù)據(jù)字節(jié)被存入系統(tǒng)內(nèi)存502的長度。舉例來說,假如EAX1202為2,則四個字節(jié)只有兩個字節(jié)被存入到系統(tǒng)內(nèi)存502中,并且有效隨機數(shù)據(jù)字節(jié)的長度會根據(jù)EAX1202的狀態(tài)設(shè)定成2。
在方塊2044,既然N是2、4或8,及所有(8/N)個位在方塊2042中會被存入系統(tǒng)內(nèi)存502中,微處理器100將有效隨機數(shù)據(jù)字節(jié)的長度設(shè)定成8除以N。流程到方塊2008。
請參閱圖21,圖21是為根據(jù)本發(fā)明使如圖1的處理器100減少連續(xù)位間相關(guān)性的一微碼指令列表。下面的討論將有助于了解微碼列表。
這個微碼列表包括有被稱為跳躍指令(jump instruction)的分枝指令(branchinstruction),如je.32,jel.32、循環(huán)指令(loop instruction),如loopn.32、返回指令(retum instruction)。所有跟在分枝指令之后的指令位置都被稱為一延遲時槽(delay slot),所有在延遲時槽的指令均會執(zhí)行而不考慮該分枝是否已被選取。如此,如果該分枝尚未被選取,則在延遲時槽的指令及其下一個指令將會被執(zhí)行。如果該分枝已被選取,在延遲時槽的指令及在分枝目標地址的指令下一個將會被執(zhí)行。
微碼指令使用八個在緩存器檔案108中32位的通用緩存器,在列表中被表示成r0到r7。在一實施例中,r0到r7不是使用者可視的緩存器。被存在r0的值在所有時間都是0。
除了分枝指令,這三個操作數(shù)指令的格式為
<opcode> <目的> <來源一> <來源二>
由第8行指令dmtid r4,r5所跟隨的在第7行指令mfxd.64 XMM5使如圖2的64位R5 238的內(nèi)容被復制到兩個32位的緩存器r4,r5。根據(jù)第1行dmtidr2,r3指令,微碼的部分分枝到get_random_data包括在分枝之后延遲時槽的一mfxd.64指令(也就是CSR226)。因此,結(jié)合兩個指令使64位CSR226的內(nèi)容被復制到兩個32位的緩存器r2,r3。
請參閱圖22,圖22為根據(jù)本發(fā)明的一具體實施例,如圖1的RNG單元136的部分,包括有一位選擇器2202,以減少連續(xù)位間相關(guān)性時的方塊圖。如圖22的RNG單元136與如圖2的RNG單元136非常相近。然而,只有如圖2的緩存器R5 238被表示在圖22。然而不像圖2,在圖22中R5 238并不直接連接到數(shù)據(jù)總線144。取而代之的是R5 238的輸出連接到中間數(shù)據(jù)總線(intermediate data bus)2206。如圖22的RNG單元136也包括有位選擇器2202。該位選擇器2202的輸入連接到中間數(shù)據(jù)總線2206。位選擇器2202的輸出連接到如圖1的數(shù)據(jù)總線144,在圖22被表示成DB 144。在如圖22的實施例中,中間數(shù)據(jù)總線2206與數(shù)據(jù)總線144都是64位,以及R5 238包括64位用以儲存隨機數(shù)據(jù)字節(jié),也就是說,儲存8個隨機數(shù)據(jù)字節(jié)。位選擇器2202也包括有用來接收指數(shù)因子信號2204的一控制輸入,該指數(shù)因子信號2204的值在圖18中被當作一個XSTORE指令得輸入?yún)?shù)。在一實施例中,位選擇器2202根據(jù)指數(shù)因子2204的值從中間數(shù)據(jù)總線2206選擇每一個位、每兩個位、每四個位或是每八個位,以各自提供8、4、2或1個隨機數(shù)據(jù)字節(jié)給數(shù)據(jù)總線144,如上所述及如圖19實施例所示。
請參閱圖23,圖23為根據(jù)本發(fā)明,如圖22的位選擇器2202的詳細方塊圖。位選擇器2202包括有64個4對1的多任務器,表示成2302-0到2302-63,這64個多任務器表示成多任務器集合2302。多任務器集合2302的每一個多任務器包括有四個輸入,表示成0、1、2及3。多任務器集合2302的每一個多任務器也包括有一控制輸入連接到如圖22中的指數(shù)因子信號2204。假如指數(shù)因子2204等于0,多任務器2302選擇第0號輸入提供給輸出。假如指數(shù)因子2204等于1,多任務器2302選擇第1號輸入提供給輸出。假如指數(shù)因子2204等于2,多任務器2302選擇第2號輸入提供給輸出。假如指數(shù)因子2204等于3,多任務器2302選擇第3號輸入提供給輸出。
在圖23表示多任務器2302-0、2302-1、2302-2、2302-3、2302-n及2302-63。在圖23中,n對應到DB144的位長度,且2302-n一般表示為輸出連接到DB144[n]的多任務器2303。多任務器2302-0的輸出連接到DB144
,也就是DB144的第0位,如圖22所示。同理,多任務器2302-1的輸出連接到DB144[1]。多任務器2302-2的輸出連接到DB144[2]。多任務器2302-3的輸出連接到DB144[3]。多任務器2302-n的輸出連接到DB144[n]。多任務器2302-63的輸出連接到DB144[63]。
每一個多任務器2302-n在它的0輸入接收中間數(shù)據(jù)總線2206信號n;在它的1輸入接收中間數(shù)據(jù)總線2206信號2n;在它的2輸入接收中間數(shù)據(jù)總線2206信號4n;在它的3輸入接收中間數(shù)據(jù)總線2206信號8n。因此,多任務器2302-0在它的0輸入接收中間數(shù)據(jù)總線2206信號0;在它的1輸入接收中間數(shù)據(jù)總線2206信號0;在它的2輸入接收中間數(shù)據(jù)總線2206信號0;在它的3輸入接收中間數(shù)據(jù)總線2206信號0。多任務器2302-1它的0輸入接收中間數(shù)據(jù)總線2206信號1在它的1輸入接收中間數(shù)據(jù)總線2206信號2在它的2輸入接收中間數(shù)據(jù)總線2206信號4在它的3輸入接收中間數(shù)據(jù)總線2206信號8。多任務器2302-2它的0輸入接收中間數(shù)據(jù)總線2206信號2;在它的1輸入接收中間數(shù)據(jù)總線2206信號4;在它的2輸入接收中間數(shù)據(jù)總線2206信號8;在它的3輸入接收中間數(shù)據(jù)總線2206信號16。多任務器2302-3在它的0輸入接收中間數(shù)據(jù)總線2206信號3;在它的1輸入接收中間數(shù)據(jù)總線2206信號6;在它的2輸入接收中間數(shù)據(jù)總線2206信號12;在它的3輸入接收中間數(shù)據(jù)總線2206信號24。多任務器2302-63在它的0輸入接收中間數(shù)據(jù)總線2206信號63,如圖所示。任何輸入到多任務器2303的值大于63將被忽略。
如上所述,本發(fā)明可以被觀察到,在一些環(huán)境條件下,在會減低所產(chǎn)生隨機數(shù)隨機性的連續(xù)產(chǎn)生位間取得最小的關(guān)連性。有優(yōu)勢的地方是,藉由隨機位產(chǎn)生器在每N個位中選擇一位,本發(fā)明可以被觀察到Shannon熵值增加及對應的最小隨機數(shù)據(jù)位產(chǎn)生器率如下
圖24是顯示依據(jù)本發(fā)明,圖1的微處理器100執(zhí)行重置的自我測試的動作流程圖。流程開始于判斷方塊2402。
于判斷方塊2402中,圖2的RNG單元136藉由檢查重置信號248,判斷是否發(fā)生重置事件。重置可能是開機重置,亦即當微處理器100激活時,或可能是暖重置(warm reset),亦即于微處理器100激活一段時間后所執(zhí)行的重置,如在微處理器100上執(zhí)行的程序所進行的重置,或是包含微處理器100的系統(tǒng)的重置。若一重置事件發(fā)生,流程即進行至判斷方塊2404。否則,流程返回判斷方塊2402,以等待重置事件發(fā)生。
于判斷方塊2404中,RNG單元136藉由檢查自我測試致能信號292,以判斷自我測試是否被致能。在一實施例中,圖3MSR212的自我測試致能位316的預設(shè)激活值為1。若自我測試被致能,則流程進行至方塊2406。否則,流程進行至方塊2412。
于方塊2406中,圖2的自我測試單元202執(zhí)行RNG單元136的自我測試,以判斷RNG單元136是否正常運作。自我測試的相關(guān)說明已如前述,特別是關(guān)于圖2與圖3的部分。自我測試完成時,若自我測試失敗,則自我測試單元202產(chǎn)生一真值的自我測試失敗信號288,而若自我測試通過,則產(chǎn)生一假值的自我測試失敗信號288。自我測試失敗信號288的值會儲存于圖3MSR212的自我測試失敗位318。在一實施例中,自我測試單元202包括圖1微處理器100的不同組件,如緩存器108、地址產(chǎn)生器112、加載單元114、執(zhí)行單元116、RNG單元136、儲存單元118、回寫單元122、寫入緩沖器124及總線接口單元128。儲存于圖1微程序代碼內(nèi)存132的微程序代碼指令,會控制微處理器100的組件來執(zhí)行自我測試。流程接著進行至方塊2408。
于判斷方塊2408中,RNG單元136藉由檢查MSR212中的自我測試失敗位318,以判斷自我測試是否失敗。若自我測試失敗,則流程進行至方塊2412。否則,流程進行至方塊2414。
于方塊2414中,RNG單元136將MSR212的RNG存在位314設(shè)定為1。流程接著返回方塊2402,以等待另一重置事件發(fā)生。
于方塊2414中,RNG單元136將MSR212的RNG存在位314清除為0。流程接著返回方塊2402,以等待另一重置事件發(fā)生。
圖25是顯示依據(jù)本發(fā)明,圖1的微處理器100執(zhí)行RNG單元136的相關(guān)指令的動作流程圖。流程開始于方塊2502。
于方塊2502中,圖1的指令翻譯器106翻譯從圖1指令控制單元104所接收的一x86指令。流程接著進行至判斷方塊2504。
于判斷方塊2504中,微處理器100判斷于方塊2502所翻譯的指令是否為x86 CPUID指令。特別是,微處理器100會判斷所翻譯的指令是否為要求Centaur延伸功能信息之CPU ID指令。在一實施例中,Centaur延伸功能信息是由一CPUID指令所要求,其中該CPUID指令具有圖1緩存器檔案108的圖12x86 EAX緩存器1202的一輸入值0xC0000000。若方塊2502所翻譯的指令為要求Centaur延伸功能信息的x86 CPUID指令,則流程接著進行至判斷方塊2506。否則,流程進行至判斷方塊2514。
于判斷方塊2506中,微處理器100判斷圖3MSR212的RNG存在位314是否被設(shè)定為1。RNG存在位314的值可依據(jù)如圖24所述的自我測試來決定。若RNG存在位314為1,則流程接著進行至方塊2512。否則,流程進行至方塊2508。
于方塊2508中,CPUID指令藉由將Centaur延伸功能信息加載EAX緩存器1202而執(zhí)行完成。尤其,EAX緩存器1202的位28被清除為0,以顯示RNG單元136被除能。在另一實施例中,CPU ID指令藉由將Centaur延伸功能信息加載圖1緩存器檔案108的圖18EDX緩存器1802而執(zhí)行完成。尤其,EDX緩存器1802的位2被清除為0,以顯示RNG單元136被除能。流程結(jié)束于方塊2508。
于方塊2512中,CPU ID指令藉由將Centaur延伸功能信息加載EAX緩存器1202而執(zhí)行完成。尤其,EAX緩存器1202的位28被設(shè)定為1,以顯示RNG單元136被致能。在另一實施例中,CPUID指令藉由將Centaur延伸功能信息加載EDX緩存器1802而執(zhí)行完成。尤其,EDX緩存器1802的位2被設(shè)定為1,以顯示RNG單元136被致能。流程結(jié)束于方塊2512。
于判斷方塊2514中,微處理器100判斷于方塊2502所翻譯的指令是否為x86 RDMSR指令。特別是,微處理器100會判斷所翻譯的指令是否為指定圖2MSR212的RDMSR指令。在一實施例中,MSR212是由一RDMSR指令所指定,其中該RDMSR指令具有圖1緩存器檔案108的圖17x86 ECX緩存器1702的一輸入值0x110B。若方塊2502所翻譯的指令為指定MSR 212的x86 RDMSR指令,則流程接著進行至判斷方塊2516。否則,流程進行至判斷方塊2524。
于判斷方塊2516中,微處理器100判斷RNG存在位314是否被設(shè)定為1。若RNG存在位314為1,則流程接著進行至方塊2522。否則,流程進行至方塊2518。
于方塊2518中,微處理器100產(chǎn)生一個一般保護(GP)的錯誤,此因有一指定MSR212的RDMSR指令執(zhí)行于RNG單元136被除能時。流程結(jié)束于方塊2518。
于方塊2522中,RDMSR指令藉由將MSR212的內(nèi)容加載相連接之EAX1202與EDX1802緩存器,而執(zhí)行完成。流程結(jié)束于方塊2522。
于判斷方塊2524中,微處理器100判斷于方塊2502所翻譯的指令是否為x86 WRMSR指令。特別是,微處理器100會判斷所翻譯的指令是否為指定圖2MSR212之WRMSR指令。在一實施例中,MSR212是由一WRMSR指令所指定,其中該WRMSR指令具有x86 ECX緩存器1702的一輸入值0x110B。若方塊2502所翻譯的指令為指定MSR212之x86 WRMSR指令,則流程接著進行至判斷方塊2526。否則,流程進行至判斷方塊2534。
于判斷方塊2526中,微處理器100判斷RNG存在位314是否被設(shè)定為1。若RNG存在位314為1,則流程接著進行至方塊2532。否則,流程進行至方塊2528。
于方塊2528中,微處理器100產(chǎn)生一個一般保護(GP)的錯誤,此因有一指定MSR 212的WRMSR指令執(zhí)行于RNG單元136被除能時。流程結(jié)束于方塊2528。
于方塊2532中,WRMSR指令藉由將相連接之EAX 1202與EDX 1802緩存器的內(nèi)容存入MSR212,而執(zhí)行完成。流程結(jié)束于方塊2532。
于判斷方塊2534中,微處理器100判斷于方塊2502所翻譯的指令是否為前述之XSTORE或XLOAD指令。若是,則流程接著進行至判斷方塊2536。否則,流程進行至方塊2544。
于判斷方塊2536中,微處理器100判斷RNG存在位314是否被設(shè)定為1。若RNG存在位314為1,則流程接著進行至方塊2542。否則,流程進行至方塊2538。
于方塊2538中,微處理器100產(chǎn)生一個無效運算碼的錯誤,此因有一XSTORE或XLOAD指令執(zhí)行于RNG單元136被除能時。流程結(jié)束于方塊2538。
于方塊2542中,該XSTORE或XLOAD指令是依前述實施例而執(zhí)行。流程結(jié)束于方塊2542。
于方塊2544中,微處理器100執(zhí)行方塊2502所翻譯的指令。流程結(jié)束于方塊2544。
雖然本發(fā)明及其目的、特征與優(yōu)點已詳細敘述,其它實施例亦可包含在本發(fā)明的范圍內(nèi)。例如,雖然本發(fā)明是以包含兩個隨機位產(chǎn)生器的實施例進行說明,本發(fā)明仍可適用于兩個以上的隨機位產(chǎn)生器的情形。再者,雖然所敘述的隨機位產(chǎn)生器是實作于微處理器中,在多個隨機位產(chǎn)生器之間作選擇的概念,仍可實施于一非微處理器之集成電路中。
總之,以上所述僅為本發(fā)明的較佳實施例而已,當不能以此限定本發(fā)明所實施的范圍。凡依本發(fā)明權(quán)利要求所作的均等變化與修飾,皆應仍屬于本發(fā)明專利涵蓋的范圍內(nèi)。
權(quán)利要求
1一種微處理器,其中包含
一隨機數(shù)產(chǎn)生器;
一自我測試單元,耦接至該隨機數(shù)產(chǎn)生器,以在該隨機數(shù)產(chǎn)生器上執(zhí)行一自我測試;以及
一控制邏輯,耦接至該自我測試單元,于該自我測試失敗時將該隨機數(shù)產(chǎn)生器除能。
2如權(quán)利要求1所述的微處理器,其中該自我測試單元是響應該隨機數(shù)產(chǎn)生器的一重置動作,而執(zhí)行該自我測試。
3如權(quán)利要求1所述的微處理器,其中該自我測試單元是響應該微處理器的一重置動作,而執(zhí)行該自我測試。
4如權(quán)利要求1所述的微處理器,其中該控制邏輯將該隨機數(shù)產(chǎn)生器除能的動作包含將一狀態(tài)指示器設(shè)為一預定值,以指出該隨機數(shù)產(chǎn)生器已被除能。
5如權(quán)利要求4所述的微處理器,其中該狀態(tài)指示器包含該微處理器的一緩存器的至少一個位。
6如權(quán)利要求4所述的微處理器,其中該微處理器響應一預定指令的執(zhí)行,將該狀態(tài)指示器加載該微處理器的一預定的使用者可見緩存器。
7如權(quán)利要求1所述的微處理器,其中該控制邏輯將該隨機數(shù)產(chǎn)生器除能的動作,包含在一程序執(zhí)行一指令以從該隨機數(shù)產(chǎn)生器取得隨機數(shù)據(jù)時,產(chǎn)生一錯誤。
8如權(quán)利要求1所述的微處理器,更包含
一狀態(tài)緩存器,耦接至該自我測試單元,用以儲存該隨機數(shù)產(chǎn)生器的復數(shù)個相關(guān)狀態(tài)位。
9如權(quán)利要求1所述的微處理器,其中該隨機數(shù)產(chǎn)生器所執(zhí)行的該自我測試,包含判斷該隨機數(shù)產(chǎn)生器是否正常運作的一測試。
10如權(quán)利要求1所述的微處理器,其中該自我測試單元包含微碼指令,儲存于該微處理器的一內(nèi)存中,用以執(zhí)行該自我測試。
11一種微處理器,包含
一隨機數(shù)產(chǎn)生器;
一自我測試單元,耦接至該隨機數(shù)產(chǎn)生器,組態(tài)為響應一重置動作,測試該隨機數(shù)產(chǎn)生器是否正常運作;以及
一指令翻譯器,耦接至該自我測試單元,用以偵測該微處理器的一指令集中,與該隨機數(shù)產(chǎn)生器的運作相關(guān)的復數(shù)個指令,其中若該自我測試單元先前已判斷該隨機數(shù)產(chǎn)生器未正常運作,則該微處理器會響應該多個指令的其中之一執(zhí)行,而產(chǎn)生一錯誤。
12如權(quán)利要求11所述的微處理器,其中該多個指令的該其中之一包含一指令,其用以讀取該微處理器中,用以儲存該隨機數(shù)產(chǎn)生器的相關(guān)狀態(tài)信息的一緩存器。
13如權(quán)利要求11所述的微處理器,其中該多個指令的該其中之一包含一指令,其用以寫入該微處理器中,用以儲存該隨機數(shù)產(chǎn)生器的相關(guān)控制信息的一緩存器。
14如權(quán)利要求11所述的微處理器,其中該多個指令的該其中之一包含一指令,其用以取得該隨機數(shù)產(chǎn)生器所產(chǎn)生的隨機數(shù)。
15如權(quán)利要求11所述的微處理器,更包含
一狀態(tài)緩存器,耦接至該自我測試單元,用以儲存一指示,以指出該隨機數(shù)產(chǎn)生器是否正常運作,如該自我測試單元先前所判斷的。
16一種微處理器,包含
一隨機數(shù)產(chǎn)生器;
一自我測試單元,耦接至該隨機數(shù)產(chǎn)生器,組態(tài)為測試該隨機數(shù)產(chǎn)生器,以判斷其是否正常運作,該自我測試單元并組態(tài)為產(chǎn)生一信號,以指出該隨機數(shù)產(chǎn)生器是否正常運作;以及
一狀態(tài)指示器,耦接至該自我測試單元,組態(tài)為依據(jù)該信號,指出該隨機數(shù)產(chǎn)生器是否可用來提供隨機數(shù)。
17如權(quán)利要求16所述的微處理器,其中若該狀態(tài)指示器指出該隨機數(shù)產(chǎn)生器不可用來提供隨機數(shù),則該微處理器會響應一用以從該隨機數(shù)產(chǎn)生器取得隨機數(shù)的指令的執(zhí)行,而產(chǎn)生一錯誤。
18一種可在一微處理器中選擇性地提供隨機數(shù)產(chǎn)生功能的方法,包括
響應該微處理器的一隨機數(shù)產(chǎn)生器的一重置動作,而測試該隨機數(shù)產(chǎn)生器的功能;
儲存該測試動作的結(jié)果的一個指示;
執(zhí)行要求該隨機數(shù)產(chǎn)生器的功能的一個指令;以及
根據(jù)該執(zhí)行動作,而以該指示回復。
19如權(quán)利要求18所述的方法,其中該儲存動作包含將該指示儲存于該微處理器的一緩存器中。
20如權(quán)利要求18所述的方法,其中該回復動作包含將該指示加載該微處理器的一使用者可見緩存器。
全文摘要
一種有依自我測試結(jié)果決定可用性的隨機數(shù)產(chǎn)生器的微處理器及方法,包含一隨機數(shù)產(chǎn)生器,可于重置時執(zhí)行自我測試,并依據(jù)自我測試結(jié)果選擇性地致能/除能其自身。此隨機數(shù)產(chǎn)生器包括一自我測試單元,可于激活重置或暖重置時執(zhí)行自我測試,以判斷隨機數(shù)產(chǎn)生器是否正常運作。若自我測試失敗,則微處理器將隨機數(shù)產(chǎn)生器除能。除能隨機數(shù)產(chǎn)生器的動作,包含根據(jù)一CPUID指令的執(zhí)行,以延伸功能信息回復,指出隨機數(shù)產(chǎn)生器并不存在。除能隨機數(shù)產(chǎn)生器的動作,可包含響應一RDMSR或WRMSR指令的執(zhí)行,而產(chǎn)生一一般保護錯誤。除能隨機數(shù)產(chǎn)生器的動作,可包含響應一企圖從隨機數(shù)產(chǎn)生器取得隨機數(shù)的指令的執(zhí)行,而產(chǎn)生一無效運算碼錯誤。
文檔編號G06F11/00GK1514347SQ200310102748
公開日2004年7月21日 申請日期2003年10月23日 優(yōu)先權(quán)日2003年2月11日
發(fā)明者湯瑪斯·A·克利斯賓, G·葛蘭·亨利, 泰瑞·派克斯, 湯瑪斯 A 克利斯賓, 派克斯, 肌ず嗬 申請人:智慧第一公司