国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      用以減低在隨機(jī)數(shù)產(chǎn)生器中連續(xù)位相關(guān)性的裝置與方法

      文檔序號:6380323閱讀:286來源:國知局
      專利名稱:用以減低在隨機(jī)數(shù)產(chǎn)生器中連續(xù)位相關(guān)性的裝置與方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及到與隨機(jī)數(shù)產(chǎn)生方式相關(guān)的領(lǐng)域,尤指一種在連續(xù)位間無隨機(jī)關(guān)連的隨機(jī)數(shù)產(chǎn)生方式,即一種用以減低在隨機(jī)數(shù)產(chǎn)生器中連續(xù)位相關(guān)性的裝置與方法。
      背景技術(shù)
      就歷史來看,許多計(jì)算機(jī)應(yīng)用軟件需要提供隨機(jī)數(shù)。例如,物理現(xiàn)象的蒙地卡羅模擬,如大規(guī)模地天氣模擬,就需要提供隨機(jī)數(shù),以模擬物理現(xiàn)象。需要使用隨機(jī)數(shù)的其它例子為賭場游戲及線上賭博,如模擬洗牌,擲骰子等;彩券號碼的產(chǎn)生;統(tǒng)計(jì)分析數(shù)據(jù)的產(chǎn)生,如心理學(xué)的測驗(yàn);以及計(jì)算機(jī)游戲。
      在這些形式的應(yīng)用中,所需的隨機(jī)度,以及對產(chǎn)生隨機(jī)數(shù)的性能要求是不同的。許多應(yīng)用軟件,如計(jì)算機(jī)游戲,對于隨機(jī)度的要求是不高的。心理學(xué)測驗(yàn)上的應(yīng)用,對隨機(jī)度有著更嚴(yán)格的要求,但性能需求則相當(dāng)?shù)汀H欢?,大?guī)模的運(yùn)用蒙地卡羅的模擬會有非常高的性能需求,且需要良好的隨機(jī)數(shù)統(tǒng)計(jì)特性,雖然不可預(yù)測性并非特別重要。其它的應(yīng)用,如線上賭博,則對于隨機(jī)度及不可預(yù)測性皆有非常嚴(yán)格的要求。
      雖然上述這些應(yīng)用仍然是重要的,但是在計(jì)算機(jī)安全領(lǐng)域,則對高品質(zhì)隨機(jī)數(shù)有最大的需求。最近,個人計(jì)算機(jī)網(wǎng)絡(luò)及因特網(wǎng)交易的爆炸性成長,對于各種安全機(jī)制的需求已明顯地增加。
      對所有計(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ì)算解密鑰匙的難度多高。最好的鑰匙為夠長的真隨機(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)生軟件式準(zhǔn)隨機(jī)數(shù)產(chǎn)生器的起始值。所產(chǎn)生的隨機(jī)數(shù)用來產(chǎn)生一對稱鑰匙,以加密通聯(lián)數(shù)據(jù)。有兩個研究生想出了可準(zhǔn)確猜測隨機(jī)數(shù)的程序,在一分鐘內(nèi),就猜出通聯(lián)鑰匙,破壞了這個機(jī)制。
      與解密鑰匙類似,用以確認(rèn)存取信息的使用者身份的密碼,其強(qiáng)度實(shí)際上就是預(yù)測或猜測密碼的難度有多高。最好的密碼為夠長的真隨機(jī)數(shù)。此外,在有使用暗號協(xié)議(challenge protocol)的確認(rèn)協(xié)議(authentication protocol)中,關(guān)鍵因素就是使暗號無法由進(jìn)行確認(rèn)的一方加以預(yù)測。而隨機(jī)數(shù)則用來產(chǎn)生確認(rèn)身份的暗號。
      數(shù)字簽名及信息摘要用來確保網(wǎng)絡(luò)上通訊的完整性。隨機(jī)數(shù)用于大部分的數(shù)字簽名算法,以使惡意的一方難于偽造簽名。隨機(jī)數(shù)的品質(zhì)會直接影響到簽名的效力。總而言之,良好的安全需要良好的隨機(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īng)由隨機(jī)物理程序所產(chǎn)生數(shù)值的特征相同的數(shù)值。此處,重要的特征是,其產(chǎn)生數(shù)值所具有的統(tǒng)計(jì)分布的無偏差程度,以及不可預(yù)測與不可重制的程度。
      具有無偏差的統(tǒng)計(jì)分布,意味著所有的值具有相等的發(fā)生機(jī)率,無論樣本大小為何。幾乎所有的應(yīng)用皆要求其隨機(jī)數(shù)具有良好的統(tǒng)計(jì)分布,而高品質(zhì)的軟件式隨機(jī)數(shù)產(chǎn)生器通常能滿足此需求。只滿足無偏差統(tǒng)計(jì)分布的需求的產(chǎn)生器稱為準(zhǔn)隨機(jī)數(shù)產(chǎn)生器。
      不可預(yù)測性指在一位序列中,正確猜測下個位的機(jī)率應(yīng)剛好為一半,無論先前所產(chǎn)生的位值為何。某些應(yīng)用不需要此種不可預(yù)測性的特征;然而,對安全應(yīng)用所使用的隨機(jī)數(shù)而言則是重要的。若使用軟件式產(chǎn)生器,則要有效滿足不可預(yù)測性的需求,必須隱藏軟件算法及其初始值。從安全的觀點(diǎn)而言,隱藏算法的做法是非常不保險(xiǎn)的。對于使用可預(yù)測的隱藏算法隨機(jī)數(shù)產(chǎn)生器的應(yīng)用軟件而言,有不少安全上遭致破壞的例子是為人所熟知的。同時滿足前兩種需求的產(chǎn)生器稱為密碼安全準(zhǔ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ì)算機(jī)應(yīng)用所需的大部分隨機(jī)數(shù)。這些稱為準(zhǔn)隨機(jī)數(shù)產(chǎn)生器,這是因?yàn)檫@些產(chǎn)生器不能滿足不可預(yù)測性及不可重制性的需求。而且,有些也不能滿足無偏差統(tǒng)計(jì)分布的需求。
      通常,軟件式產(chǎn)生器以一初始值或種子(seed)開始運(yùn)作,該初始值有時由使用者所提供。產(chǎn)生器以該初始值執(zhí)行算術(shù)運(yùn)算,以產(chǎn)生第一隨機(jī)結(jié)果,其作為產(chǎn)生第二結(jié)果的種子,依此類推。軟件式產(chǎn)生器必然是循環(huán)式的,最終其會重復(fù)相同的輸出序列。猜測種子就等于能預(yù)測整個所產(chǎn)生的數(shù)值序列。其不可重制性只與算法及初始種子的機(jī)密程度一樣,而這可能是安全上的應(yīng)用并不想要的特性。而且,軟件算法是可重制的,因?yàn)橐韵嗤斎腴_始,其會產(chǎn)生相同的結(jié)果。最后,軟件算法不必然會產(chǎn)生輸出數(shù)據(jù)大小的范圍內(nèi)的每個可能的值,這可能無法完全滿足無偏差統(tǒng)計(jì)分布的需求。
      有一種隨機(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)生的種子。例如,常用的PC加密程序會記錄幾秒鐘的鼠標(biāo)移動及鍵盤敲擊的特性,以獲得其所需的種子。這些動作不見得會產(chǎn)生不理想的熵?cái)?shù),且通常需要使用者某種程度的涉入。對多數(shù)的熵產(chǎn)生器而言,最不理想的特征就是要花很多時間才能達(dá)到足夠的熵。
      所以很明顯的,熵產(chǎn)生器無法在前述一些應(yīng)用上被利用,包括安全應(yīng)用上。這些應(yīng)用要求只能由隨機(jī)物理程序所產(chǎn)生真正的隨機(jī)數(shù)。隨機(jī)物理程序可以是通過半導(dǎo)體二極管或電阻的熱噪聲、自由執(zhí)行震蕩器(free-runocsiliator)所產(chǎn)生的頻率不穩(wěn)定性、或是半導(dǎo)體電容在一段特殊的時間周期內(nèi)的充電量。產(chǎn)生隨機(jī)數(shù)的一個方法是利用一個或多個前述的物理程序產(chǎn)生一連串的位,這些位形成字節(jié)(byte)、或詞(word)以提供應(yīng)用程序使用。然而在一些環(huán)境的條件下,連續(xù)產(chǎn)生的位間彼此微小的相關(guān)性是可以被觀察得到的。這些相關(guān)性會減低隨機(jī)數(shù)的隨機(jī)性。
      所以,需要一個裝置及方法來減低在由一隨機(jī)數(shù)產(chǎn)生器所產(chǎn)生的連續(xù)位間的相關(guān)性。

      發(fā)明內(nèi)容
      本發(fā)明提供一種微處理器(microprocessor),包括有一裝置及一方法,經(jīng)由提供在一連串隨機(jī)位中的選出部分,以減低由硬件隨機(jī)數(shù)產(chǎn)生器所產(chǎn)生的連續(xù)位間的相關(guān)性。因此,為達(dá)上述目的,本發(fā)明提供一種方法,以增進(jìn)由隨機(jī)數(shù)產(chǎn)生器所產(chǎn)生數(shù)據(jù)的隨機(jī)度。該方法包括由一隨機(jī)數(shù)產(chǎn)生器產(chǎn)生多個位,在該多個位中選出每第N個位、并且累積所選出的每第N個位。N為大于1的整數(shù)。
      本發(fā)明的另一目的在于提供一種微處理器。該處理器包括有一隨機(jī)位產(chǎn)生器,產(chǎn)生一連串的隨機(jī)位;一算術(shù)邏輯單元(arithmetic logic unit,ALU),連接到該隨機(jī)位產(chǎn)生器,用以在一連串隨機(jī)位中選擇每第N個位,并將所累積的每第N個位送到與該算術(shù)邏輯單元連接的暫存器(register),N為大于1的整數(shù)。
      本發(fā)明的另一目的在于提供一種減低連續(xù)隨機(jī)位間相關(guān)性的裝置。該裝置包括有一隨機(jī)位產(chǎn)生器,用以產(chǎn)生一組隨機(jī)位;該裝置也包括有一第一暫存器,連接到該隨機(jī)位產(chǎn)生器,用以儲存該組隨機(jī)位;該裝置還包括有多個多工器(multiplexer),連接到該第一暫存器,用以在該組隨機(jī)位中選擇每第N個位;該裝置還包括有一第二暫存器,連接該多個多工器,用以儲存由多工器在該組隨機(jī)位中所選擇的每第N個位。
      本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的
      一種用于改善由一隨機(jī)數(shù)產(chǎn)生器所產(chǎn)生數(shù)據(jù)的隨機(jī)性的方法,其特征在于包括以下步驟
      由一隨機(jī)位產(chǎn)生器產(chǎn)生多個位;
      從該多個位中選出每第N個位,其中,N為大于1的整數(shù);
      以及累積所選出的每第N個位。
      還包括有以下步驟舍棄未被選定的多個位。
      其中該累積步驟包括將該每第N個位累積到一微處理器的一暫存器中。
      還包括儲存已累積的該每第N個位。
      其中該儲存步驟包括將已累積的該每第N個位儲存到連接該微處理器的一存儲器。
      其中該儲存步驟包括將已累積的該每第N個位儲存到在該微處理器的一第二暫存器。
      其中儲存已累積的該每第N個位被執(zhí)行,以回應(yīng)該微處理器執(zhí)行用來儲存一部份該多個位的一指令。
      其中該N值是由2的冪次所組成。
      還包括設(shè)定一值到一暫存器中;及在選出該每第N個位之前,根據(jù)設(shè)定到該暫存器中的該值計(jì)算出該N值。
      本發(fā)明還提供了一種微處理器,其特征在于包括
      一隨機(jī)位產(chǎn)生器,用以產(chǎn)生一串隨機(jī)位;
      以及一算數(shù)邏輯單元,連接該隨機(jī)位產(chǎn)生器,用以選擇在該串隨機(jī)位的每第N個位,其中,N為大于1的整數(shù),并用以累積被選定的每第N個位到連接該算數(shù)邏輯單元的一暫存器。
      還包括一可程序化暫存器,連接到該算數(shù)邏輯單元,用以儲存計(jì)算該N值的一值。
      還包括一指令轉(zhuǎn)譯器,用以將在該微處理器中一指令集的一指令轉(zhuǎn)譯,該指令指示該微處理器儲存已選出及累積的該每第N個位。
      還包括一存儲器,連接到該算數(shù)邏輯單元,用以儲存多個微碼指令,該微碼指令包括用以執(zhí)行該指令的多個指令。
      其中該多個指令包括有一個或多個指令,以指示該算數(shù)邏輯單元將該串隨機(jī)位移動N個位。
      其中該多個指令包括有一個或多個指令,以指示該算數(shù)邏輯單元執(zhí)行邏輯運(yùn)算以取出被移動的該串隨機(jī)位之一。
      其中取出被移動該串隨機(jī)位之一的邏輯運(yùn)算包括一邏輯與(AND)運(yùn)算。
      該多個指令包括有一個或多個指令以指示該算數(shù)邏輯單元執(zhí)行算數(shù)或邏輯運(yùn)算以累積被移動的該串隨機(jī)位之一到該暫存器。
      其中該算數(shù)或邏輯運(yùn)算以累積被移動的該串隨機(jī)位之一到的該暫存器包括一加法運(yùn)算。
      其中該算數(shù)或邏輯運(yùn)算以累積被移動的該串隨機(jī)位之一到的該暫存器包括一移位(shift)運(yùn)算。
      本發(fā)明還提供了一種用以減低連續(xù)隨機(jī)位間的相關(guān)性的裝置,其特征在于,包括
      一隨機(jī)位產(chǎn)生器,用以產(chǎn)生一組隨機(jī)位;
      一第一暫存器,連接到該隨機(jī)位產(chǎn)生器,用以儲存該組隨機(jī)位;
      多個多工器,連接到該第一暫存器,用以選擇在該組隨機(jī)位的每第N個位,該多個多工器經(jīng)由一控制值選擇每第N個位;
      以及一第二暫存器,連接到該多個多工器,用以儲存該多個多工器所選擇的該組隨機(jī)位的每第N個位。
      本發(fā)明的一個優(yōu)點(diǎn)在于當(dāng)使用者在較高的隨機(jī)數(shù)產(chǎn)生率及較好的隨機(jī)性間作一平衡(tradeoff后,本發(fā)明可以減低連續(xù)位間的相關(guān)性。


      圖1是繪示本發(fā)明的微處理器的方塊圖
      圖2是本發(fā)明圖1的微處理器中RNG單元的方塊圖
      圖3是繪示本發(fā)明圖1的微處理器中,與圖1的RNG單元有關(guān)的各種暫存器的方塊圖
      圖4是繪示根據(jù)本發(fā)明的圖1的微處理器執(zhí)行將值載入圖3的XMM0暫存器的指令的運(yùn)作流程圖
      圖5是繪示根據(jù)本發(fā)明的圖1的微處理器于執(zhí)行XLOAD指令時的運(yùn)作方塊圖
      圖6是繪示根據(jù)本發(fā)明的圖1的微處理器執(zhí)行XLOAD指令的運(yùn)作流程圖
      圖7是繪示根據(jù)本發(fā)明的圖1的微處理器于執(zhí)行XSTORE指令時的運(yùn)作方塊圖
      圖8是繪示根據(jù)本發(fā)明的圖1的微處理器執(zhí)行XSTORE指令的運(yùn)作流程圖
      圖9是繪示根據(jù)本發(fā)明的圖1的微處理器進(jìn)行關(guān)于隨機(jī)數(shù)產(chǎn)生的多工運(yùn)作范例的動作流程圖
      圖10是繪示根據(jù)本發(fā)明的圖1的微處理器中,圖2的RNG單元的串過濾裝置的方塊圖
      圖11是繪示根據(jù)本發(fā)明的圖10的串過濾裝置的運(yùn)作流程圖
      圖12是繪示根據(jù)本發(fā)明的另一具體實(shí)施例,圖1的微處理器執(zhí)行XSTORE指令的運(yùn)作方塊圖
      圖13是繪示根據(jù)本發(fā)明的圖2的RNG單元的多重緩沖運(yùn)作的流程圖
      圖14是繪示根據(jù)本發(fā)明的另一具體實(shí)施例,圖1的微處理器執(zhí)行XLOAD指令的運(yùn)作流程圖
      圖15是繪示根據(jù)本發(fā)明的另一具體實(shí)施例,圖1的微處理器100執(zhí)行XSTORE指令的運(yùn)作流程圖
      圖16及17是繪示根據(jù)本發(fā)明的另外具體實(shí)施例,圖1的微處理器執(zhí)行XSTORE指令的運(yùn)作方塊圖
      圖18根據(jù)本發(fā)明的一具體實(shí)施例,當(dāng)如圖1的處理器執(zhí)行XSTORE指令的方塊圖
      圖19根據(jù)本發(fā)明的當(dāng)如圖18的XSTORE指令時執(zhí)行的一操作實(shí)例
      圖20根據(jù)本發(fā)明的一具體實(shí)施例,如圖1的RNG單元減少連續(xù)位間相關(guān)性的操作流程圖。
      圖21是為根據(jù)本發(fā)明使如圖1的處理器100減少連續(xù)位間相關(guān)性的一微碼指令列表
      圖22根據(jù)本發(fā)明的一具體實(shí)施例,如圖1的RNG單元的部分,包括有一位選擇器,以減少連續(xù)位間相關(guān)性時的方塊圖
      圖23根據(jù)本發(fā)明,如圖22的位選擇器的詳細(xì)方塊圖
      其中,附圖標(biāo)記說明如下
      100微處理器 102指令高速緩存
      104指令提取器 106指令轉(zhuǎn)譯器
      108暫存器檔案 112地址產(chǎn)生器
      114載入單元 116執(zhí)行階段
      118儲存單元 122回寫單元
      124寫入緩沖器 126讀取緩沖器
      128總線接口單元(BIU)132微程序代碼ROM
      134SSE單元 136隨機(jī)數(shù)產(chǎn)生器(RNG)單元
      138處理器總線 142、144數(shù)據(jù)總線
      146中斷單元 148中斷信號
      152中斷向量
      202自我測試單元 204CPUID暫存器
      206隨機(jī)位產(chǎn)生器0208隨機(jī)位產(chǎn)生器1
      211計(jì)數(shù)器0 212機(jī)器特定暫存器(MSR)
      213計(jì)數(shù)器1 214多工器
      215第二解多工器 216白化器
      217第三解多工器 218移位暫存器
      219第四多工器 221遞增信號
      222連續(xù)數(shù)目測試(CNT)單元
      223清除信號 224串過濾裝置
      225比較器
      226控制與狀態(tài)暫存器(CSR)
      227full1信號228第二多工器
      229full0信號231power_cntrl信號
      232解多工器 234可用字節(jié)計(jì)數(shù)
      236第三多工器 238暫存器R5
      242緩沖器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é)計(jì)數(shù)字段
      334串過濾裝置致能位336產(chǎn)生器選擇位
      338串過濾裝置失敗位342CNT致能位
      344CNT失敗位 346串過濾裝置max_cnt字段
      352SSE暫存器 364隨機(jī)數(shù)據(jù)字節(jié)字段
      372XMM0374XMM5
      376XMM3
      402-404微處理器執(zhí)行將值載入XMM0暫存器的指令的運(yùn)作流程
      502系統(tǒng)存儲器 50416個字節(jié)數(shù)據(jù)
      602-612微處理器執(zhí)行XLOAD指令的運(yùn)作流程
      702可用字節(jié)計(jì)數(shù)704隨機(jī)數(shù)據(jù)字節(jié)
      802-824微處理器執(zhí)行XSTORE指令的運(yùn)作流程
      902-952微處理器進(jìn)行關(guān)于隨機(jī)數(shù)產(chǎn)生的多工運(yùn)作范例的動作流程
      1002比較邏輯 1004或門
      1006選擇邏輯 1008與門
      1012A第一加法器1012B第二加法器
      1014A第一多工器1014B第二多工器
      1016A第一計(jì)數(shù)器1016B第二計(jì)數(shù)器
      1022Anum_leading_ones信號
      1022Bnum_leading_zeros信號
      1024Aones_cnt信號 1024Bzeros_cnt信號
      1026Anew_ones_cnt信號 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單元的多重緩沖運(yùn)作的流程
      1702ECX暫存器1704ESEDI
      1802EDX
      2002-2044減少連續(xù)位間相關(guān)性的操作流程
      2202位選擇器
      具體實(shí)施例方式
      其它有關(guān)本發(fā)明的優(yōu)點(diǎn)及特征都可以在以下結(jié)合附圖的對具體實(shí)施方式
      的描述中得到進(jìn)一步的了解。
      現(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)計(jì)分析、數(shù)值分析或是其它。RNG單元136會產(chǎn)生用于這些功能的隨機(jī)數(shù)。RNG單元136將于下文做更詳細(xì)地說明。
      微處理器100也包括一指令高速緩存102。指令高速緩存102會快取從耦接至微處理器100的系統(tǒng)存儲器所提取的程序指令。
      微處理器100也包括一指令提取器104,其耦接至指令高速緩存102。指令提取器104會控制從系統(tǒng)存儲器及/或指令高速緩存102提取指令的動作。指令提取器104會選取一個值給由微處理器100所維護(hù)的指令指針(instruction pointer)。指令指針會指定下個存儲器地址,以從該處提取指令。一般來說,指令指針會循序遞增,而指到下個指令。然而,流程控制指令(如分支(branch)、跳躍、副常式呼叫及返回)會將指令指針更新為流程控制指令所指定的非循序存儲器地址。此外,中斷可能驅(qū)使指令提取器104將指令指針更新為非循序地址。
      微處理器100也包括一中斷單元146,其耦接至指令提取器104。中斷單元146會接收一中斷信號148及一中斷向量152。微處理器100的外的元件可能會致能中斷信號148,并提供中斷向量152,以使微處理器100執(zhí)行中斷服務(wù)常式。中斷單元146會依據(jù)中斷向量152,決定中斷服務(wù)常式的存儲器地址,并將中斷服務(wù)常式的存儲器地址送到指令提取器104,以將指令指針更新為中斷服務(wù)常式地址。中斷單元146也會依照微處理器100所執(zhí)行的特定指令,選擇性地除能及致能中斷服務(wù)。也就是說,若中斷被除能(disable,又稱為“禁能”),則即使中斷線148被致能,指令指針的內(nèi)容也不會改變,直到中斷被致能為止。
      微處理器100也包括一指令轉(zhuǎn)譯器106,其耦接至指令提取器104、中斷單元146及RNG單元136。指令轉(zhuǎn)譯器106會轉(zhuǎn)譯從指令高速緩存102及/或系統(tǒng)存儲器所接收的指令。指令轉(zhuǎn)譯器106會轉(zhuǎn)譯指令,并依據(jù)轉(zhuǎn)譯指令的形式采取適當(dāng)?shù)膭幼?。指令轉(zhuǎn)譯器106會轉(zhuǎn)譯微處理器100的指令集中所定義的指令。若指令轉(zhuǎn)譯器106要轉(zhuǎn)譯未定義于微處理器100指令集中的指令,則會產(chǎn)生不合法的指令異常。
      在一具體實(shí)施例中,微處理器100的指令集實(shí)質(zhì)上近似于英特爾PentiumIII或PentiumIV微處理器的指令集。然而有利的是,本發(fā)明的微處理器100包括額外的指令,其是有關(guān)于RNG單元136的隨機(jī)數(shù)產(chǎn)生功能。一個額外的指令為XSTORE指令,可儲存RNG單元136所產(chǎn)生的隨機(jī)數(shù)。另一額外的指令為XLOAD指令,可從系統(tǒng)存儲器將控制值載入RNG單元136中的控制與狀態(tài)暫存器(control and status register,CSR)226及串流SIMD延伸(Streaming SIMD Extensions,SSE)暫存器XMM0 372,這部分在下文會配合圖2及圖3做說明。XSTORE及XLOAD指令在下文亦會做更詳細(xì)地說明。
      此外,指令轉(zhuǎn)譯器106會將轉(zhuǎn)譯指令的相關(guān)信息送到中斷單元146,以使中斷單元146能適當(dāng)?shù)刂履芗俺苤袛唷6?,指令轉(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)行一工作切換,如下文所述。
      在一具體實(shí)施例中,指令轉(zhuǎn)譯器106會將宏指令,如Pentium III或IV的指令,轉(zhuǎn)譯為由微處理器100管線所執(zhí)行的一個或多個微指令。
      微處理器100也包括一微程序代碼ROM 132,其耦接至指令轉(zhuǎn)譯器106。微程序代碼ROM 132會儲存微程序代碼指令,以送到指令轉(zhuǎn)譯器106,由微處理器100來執(zhí)行。微處理器100指令集中的某些指令,是以微程序代碼來實(shí)作。也就是說,當(dāng)指令轉(zhuǎn)譯器106轉(zhuǎn)譯這些指令的其中一個時,指令轉(zhuǎn)譯器106會使微程序代碼ROM 132內(nèi)的一微指令常式被執(zhí)行,藉以執(zhí)行轉(zhuǎn)譯的宏指令。在一具體實(shí)施例中,XSTORE及/或XLOAD指令是以微程序代碼實(shí)作。此外,在一具體實(shí)施例中,XSTORE及XLOAD指令是連續(xù)執(zhí)行的,此因其為不可中斷的。也就是說,在XSTORE及XLOAD指令的執(zhí)行期間,中斷會被除能。
      微處理器100也包括一暫存器檔案108,其耦接至指令轉(zhuǎn)譯器106。暫存器檔案108包括微處理器100的使用者可見暫存器,及使用者不可見暫存器。在一具體實(shí)施例中,暫存器檔案108包括八個32位的一般用途使用者不可見的暫存器,標(biāo)示為r0到r7。在另一具體實(shí)施例中,暫存器檔案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)存儲器,并從系統(tǒng)存儲器回存暫存器檔案108的暫存器(包括SSE暫存器352)中關(guān)于第二工作的內(nèi)容。
      微處理器100也包括一地址產(chǎn)生器112,其耦接至?xí)捍嫫鳈n案108。地址產(chǎn)生器112會依據(jù)存于暫存器檔案108中的操作數(shù)及由指令轉(zhuǎn)譯器106轉(zhuǎn)譯的指令所提供的操作數(shù),而產(chǎn)生存儲器地址。特別是,地址產(chǎn)生器112會產(chǎn)生存儲器地址,以指定系統(tǒng)存儲器中的位置,由XSTORE指令將多個字節(jié)的隨機(jī)數(shù)據(jù)儲存其中。此外,地址產(chǎn)生器112亦產(chǎn)生指定系統(tǒng)存儲器中的位置的存儲器地址,由XLOAD指令載入其中的控制值,以經(jīng)由一數(shù)據(jù)總線142存入圖2的CSR 226中。
      微處理器100也包括一載入單元114,其耦接至地址產(chǎn)生器112。載入單元114會從系統(tǒng)存儲器中載入數(shù)據(jù)至微處理器100。載入單元114也包括一數(shù)據(jù)高速緩存,以快取從系統(tǒng)存儲器所讀取的數(shù)據(jù)。載入單元114會經(jīng)由數(shù)據(jù)總線142,將載入的數(shù)據(jù)送到微處理器100中的執(zhí)行單元,如SSE單元134、RNG單元136及包含于執(zhí)行階段116中的執(zhí)行單元。特別是,載入單元114會從系統(tǒng)存儲器載入控制值,存到圖2的CSR 226中,以執(zhí)行XLOAD指令。
      微處理器100也包括執(zhí)行階段116,其經(jīng)由數(shù)據(jù)總線142耦接至載入單元114。執(zhí)行階段116包括執(zhí)行單元,如算術(shù)邏輯單元,其用以執(zhí)行算術(shù)與邏輯運(yùn)算,像是加、減、乘、除及布爾運(yùn)算。在一具體實(shí)施例中,執(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指令集中的那些指令。在一具體實(shí)施例中,雖然圖3的SSE暫存器352概念上是包含在暫存器檔案108中,但實(shí)際上是位于SSE單元134中,用以儲存SSE單元134所使用的操作數(shù)。
      微處理器100也包括RNG單元136,其經(jīng)由數(shù)據(jù)總線142耦接至指令轉(zhuǎn)譯器106及載入單元114。RNG單元136提供隨機(jī)數(shù)據(jù)字節(jié)以及一計(jì)數(shù)值于數(shù)據(jù)總線144上,其中該計(jì)數(shù)值是表示提供給一XSTORE指令的隨機(jī)數(shù)據(jù)字節(jié)的數(shù)量。RNG單元136在下文將會配合其余附圖做更詳細(xì)的說明。
      微處理器100也包括一儲存單元118,其耦接至執(zhí)行單元116、SSE單元134以及RNG單元136。儲存單元118會將數(shù)據(jù)儲存到系統(tǒng)存儲器及載入單元114中的數(shù)據(jù)高速緩存。儲存單元118會將執(zhí)行單元116、SSE單元134及RNG單元136所產(chǎn)生的結(jié)果儲存至系統(tǒng)存儲器。特別是,儲存單元118會將RNG單元136在數(shù)據(jù)總線144上所提供的XSTORE指令計(jì)數(shù)及隨機(jī)數(shù)據(jù)字節(jié)儲存至系統(tǒng)存儲器。
      微處理器100也包括一回寫單元122,其耦接至執(zhí)行單元116及暫存器檔案108?;貙憜卧?22會將指令結(jié)果回寫至?xí)捍嫫鳈n案108。
      微處理器100也包括寫入緩沖器124,其耦接至回寫單元122。寫入緩沖器124會保持等待寫入至系統(tǒng)存儲器的數(shù)據(jù),如XSTORE指令計(jì)數(shù)及數(shù)據(jù)。
      微處理器100也包括一總線接口單元(BIU)128,其耦接至寫入緩沖器124。BIU 128是做為微處理器100與一處理器總線138的接口。處理器總線138將微處理器100耦接至系統(tǒng)存儲器。BIU 128并執(zhí)行處理器總線138上的總線作業(yè),以在微處理器100與系統(tǒng)存儲器的間傳遞數(shù)據(jù)。特別是,BIU 128會執(zhí)行處理器總線138上的一個或多個總線作業(yè),以將XSTORE指令計(jì)數(shù)及數(shù)據(jù)儲存至系統(tǒng)存儲器。此外,BIU 128會執(zhí)行處理器總線138上的一個或多個總線作業(yè),以從系統(tǒng)存儲器載入XLOAD指令控制值。
      微處理器100也包括讀取緩沖器126,其耦接至BIU 128及暫存器檔案108。對于經(jīng)由BIU 128從系統(tǒng)存儲器所接收的數(shù)據(jù),在其等待送到載入單元114或暫存器檔案108時,讀取緩沖器126會將其保存著。特別是,當(dāng)從系統(tǒng)存儲器接收的XLOAD指令數(shù)據(jù)在等待送到載入單元114及其后的RNG單元136時,讀取緩沖器126會將此數(shù)據(jù)保存。
      現(xiàn)請參照圖2,其為本發(fā)明圖1的微處理器100中RNG單元136的方塊圖。
      RNG單元136包括控制邏輯244??刂七壿?44包括大量的組合及循序邏輯,用以控制RNG單元136中的各種元件。控制邏輯244會接收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ì)地說明。MSR 212也耦接至控制邏輯244。自我測試單元202會將自我測試失敗信號288送到控制邏輯244。若自我測試單元202被自我測試致能信號292所致能,則自我測試單元202會執(zhí)行各種RNG單元136的自我測試。若自我測試失敗,自我測試單元202會產(chǎn)生真值的自我測試失敗信號288,并送至MSR212。在一具體實(shí)施例中,自我測試單元202會執(zhí)行隨機(jī)數(shù)產(chǎn)生器統(tǒng)計(jì)測試,如聯(lián)邦信息處理標(biāo)準(zhǔn)(FIPS)刊物第140-2期的第35-36頁所定義的,此處予以參考并入。
      在一具體實(shí)施例中,自我測試單元202在使用者的要求下執(zhí)行自我測試。在一具體實(shí)施例中,在微處理器100重置之后,自我測試單元202會執(zhí)行自我測試。若自我測試失敗,不論是使用者所要求的或重置后所做的,自我測試單元202都會產(chǎn)生真值的自我測試失敗信號288,其是反映于圖3中MSR212的自我測試失敗位318??刂七壿?44在重置時,會檢查自我測試失敗位318。若自我測試失敗位318為真,控制邏輯244會設(shè)定一偽值的RNG存在信號286,送到MSR 212,以更新圖3的RNG存在位314。
      RNG存在信號286也會送到一CPUID暫存器204,其包括圖3的RNG存在位302,而RNG存在位302亦會經(jīng)由RNG存在信號286來更新。也就是說,CPUID暫存器204的RNG存在位302為MSR 212的RNG存在位314的副本。在一具體實(shí)施例中,應(yīng)用程序可經(jī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的電源。在一具體實(shí)施例中,關(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ī)制”(文件編號為CNTR.2113、CNTR.2155及CNTR.2156),其中均對隨機(jī)位產(chǎn)生器0 206做了詳細(xì)說明,此處全部予以參考并入。
      RNG單元136也包括一具有兩輸入端的多工器214,其輸入端耦接至隨機(jī)位產(chǎn)生器206及208的輸出端。多工器214依據(jù)CSR 226所提供的產(chǎn)生器選擇信號252,來選擇兩輸入端的其中一個。產(chǎn)生器選擇信號252會傳送圖3中CSR 226的產(chǎn)生器選擇位336所儲存的值。
      RNG單元136也包括一范紐曼白化器216,或稱壓縮器,其耦接至多工器214的輸出端。白化器216是經(jīng)由從MSR212所接收的原始位信號254,而選擇性地被致能/除能。原始位信號254會傳送儲存于圖3中MSR 212的原始位字段324中的值。若原始位信號254為真,則白化器216讓多工器214所接收的位直接通過而輸出,并不執(zhí)行白化的功能。白化器216是依據(jù)一預(yù)定的輸入/輸出函數(shù),接收來自多工器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中。
      在一具體實(shí)施例中,CNT單元222所執(zhí)行的連續(xù)隨機(jī)數(shù)產(chǎn)生器測試,實(shí)質(zhì)上符合FIPS第140-2期中第37頁所述的連續(xù)隨機(jī)數(shù)產(chǎn)生器測試,其在此予以參考并入。在一具體實(shí)施例中,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í)施例中,只要設(shè)定圖3的CNT致能位342及CNT失敗位344,XSTORE指令傳回的可用字節(jié)計(jì)數(shù)值就為0。在一具體實(shí)施例中,微處理器100在特定的XSTORE指令執(zhí)行時,將可用字節(jié)計(jì)數(shù)值及隨機(jī)數(shù)據(jù)字節(jié)儲存至系統(tǒng)存儲器,其中特定XSTORE指令的執(zhí)行是激活了該失敗的連續(xù)隨機(jī)數(shù)產(chǎn)生器測試。
      在一具體實(shí)施例中,連續(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所接收的最大計(jì)數(shù)(max_cnt)信號258來指定。max_cnt信號258會傳送圖3中CSR 226的串過濾裝置最大計(jì)數(shù)字段346所指定的值。在一具體實(shí)施例中,max_cnt346的默認(rèn)值為26個位。在一具體實(shí)施例中,串過濾裝置最大計(jì)數(shù)字段346的值必須至少為8。若串過濾裝置224偵測到一連續(xù)的相似位串長度超過max_cnt 258,則串過濾裝置224將一過濾失敗信號256設(shè)為真,此信號是儲存于圖3中CSR 226的串過濾裝置失敗位338中。串過濾裝置224在下面會配合圖10到12做更詳細(xì)地說明。
      RNG單元136也包括一具有兩輸入端的第二多工器228。其中一輸入端是耦接至串過濾裝置224的輸出端,而另一輸入端是耦接至移位暫存器218的輸出端。多工器228依據(jù)CSR 226所提供的過濾致能信號262,而選擇其中一輸入端,以傳送圖3中CSR 226的串過濾裝置致能位334所存的值。
      RNG單元136也包括一個具有一輸入端與兩輸出端的解多工器232,其輸入端是耦接至多工器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經(jīng)由XSTORE指令,來累積要儲存至系統(tǒng)存儲器的隨機(jī)數(shù)據(jù)字節(jié)。在一具體實(shí)施例中,緩沖器0 242及緩沖器1 246各可儲存15個字節(jié)的隨機(jī)數(shù)據(jù)。在一具體實(shí)施例中,緩沖器0 242及緩沖器1 246各可儲存16個字節(jié)的隨機(jī)數(shù)據(jù)。
      RNG單元136也包括一具有兩個輸入端的第三多工器236,其輸入端是耦接至緩沖器0 242及緩沖器1 246的輸出端。多工器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é)被存入buf0 242或buf1 246,控制邏輯244宣告遞增信號221。解多工器215將所接收到的遞增信號221提供給根據(jù)fil1_select信號264所選擇的輸出端。
      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也包括兩個計(jì)數(shù)器,標(biāo)示為計(jì)數(shù)器0 211及計(jì)數(shù)器1 213,其耦接至解多工器215及解多工器217。計(jì)數(shù)器0 211及計(jì)數(shù)器1 213各具有一遞增(或計(jì)數(shù))輸入端。計(jì)數(shù)輸入端是耦接至解多工器215的輸出端。因此,當(dāng)控制邏輯244將遞增信號221設(shè)為真時,計(jì)數(shù)器0 211及計(jì)數(shù)器1 213中由fill_select信號264所指定的一個會遞增。計(jì)數(shù)器0 211及計(jì)數(shù)器1 213中也各具有一清除輸入端。清除輸入端是耦接至解多工器217的輸出端。因此,當(dāng)控制邏輯244將清除信號223設(shè)為真時,計(jì)數(shù)器0 211及計(jì)數(shù)器1 213中由store_select信號266所指定的一個會被清除為0。
      RNG單元136也包括兩個比較器225,其耦接至計(jì)數(shù)器0 211及計(jì)數(shù)器1 213的輸出端。比較器225將計(jì)數(shù)器0 211及計(jì)數(shù)器1 213所輸出的計(jì)數(shù)值,與計(jì)數(shù)器0 211及計(jì)數(shù)器1 213可儲存的字節(jié)數(shù)目做比較,以判斷計(jì)數(shù)器0211及計(jì)數(shù)器1 213是否已滿,并產(chǎn)生full0信號229及full1信號227,以將比較結(jié)果告知控制邏輯244。
      RNG單元136也包括一具有兩個輸入端的第四多工器219,其輸入端是耦接至計(jì)數(shù)器0 211及計(jì)數(shù)器1 213的輸出端。多工器219會依據(jù)儲存選擇(store_select)信號266,選取其輸入端的其中一計(jì)數(shù)值,以輸出作為可用字節(jié)計(jì)數(shù)234。可用字節(jié)計(jì)數(shù)234也會送到CSR 226。
      RNG單元136也包括一暫存器,標(biāo)示為RNG R5 238,或R5 238。R5 238具有一輸入端,其耦接至多工器236的輸出端,以接收數(shù)據(jù)字節(jié)278。R5 238具有另一個輸入端,其耦接至多工器219的輸出端,以接收可用字節(jié)計(jì)數(shù)234。R5 238的輸出端是耦接至圖1的數(shù)據(jù)總線144。R5 238會保持XSTORE指令的計(jì)數(shù)值及數(shù)據(jù)。在一具體實(shí)施例中,計(jì)數(shù)值是儲存于R5 238的最小有效字節(jié)中,而有效的數(shù)據(jù)字節(jié)則儲存于與此計(jì)數(shù)值相連的有效字節(jié)的位置。在一具體實(shí)施例中,R5 238可儲存一計(jì)數(shù)字節(jié),加上緩沖器0 242及緩沖器1 246所能儲存的隨機(jī)數(shù)據(jù)字節(jié)。
      在一具體實(shí)施例中,RNG單元136包括四個緩沖器,而非兩個。每一緩沖器可儲存多達(dá)八個字節(jié)的隨機(jī)數(shù)據(jù)。在此實(shí)施例中,解多工器215、217及232包含具四個輸出端的解多工器;多工器219及236包含具四個輸入端的多工器;比較器225包括四個比較器,以產(chǎn)生四個充滿輸出;而fill_select信號264及store_select信號266包括兩個位,用以選擇四個計(jì)數(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)生無效指令異常。此外,讀取MSR212中的位,結(jié)果是未定義,而嘗試寫入,則不會產(chǎn)生任何效果。RNG存在位302是為MSR212的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不能經(jīng)由設(shè)定RNG致能位312來致能,并且,讀取MSR 212中的位,結(jié)果是未定義,而嘗試寫入,則不會產(chǎn)生任何效果。此外,若RNG單元136的自我測試失敗,則RNG存在位314將被清除,如前文圖2部分所述。
      MSR 212也包括一只讀的統(tǒng)計(jì)自我測試致能位316。自我測試致能位316是表示前述圖2部分的重置后的自我測試目前是否致能。若自我測試致能位316為0,則在重置之后,不會執(zhí)行自我測試。若自我測試致能位316為1,則在重置之后,會執(zhí)行自我測試。在一具體實(shí)施例中,在微處理器100的暖重置及電源開啟重置之后,會執(zhí)行自我測試。
      MSR 212也包括一只讀的統(tǒng)計(jì)自我測試失敗位318。自我測試失敗位318是表示前述圖2部分的最近重置后的自我測試是否失敗。在一具體實(shí)施例中,若自我測試失敗位318為1,則RNG單元136無法被致能。
      MSR 212也包括可寫入的直流偏壓位322。在一具體實(shí)施例中,直流偏壓位322包括三個位。直流偏壓位322是用以控制送到隨機(jī)位產(chǎn)生器0 206的直流偏壓,其會影響隨機(jī)位產(chǎn)生器0 206的運(yùn)作速度及可能的隨機(jī)度。在一具體實(shí)施例中,若在重置時執(zhí)行統(tǒng)計(jì)自我測試,則自我測試單元202會決定出直流偏壓位322的正確值或最佳值,并將其設(shè)定為此值。在重置之后,直流偏壓位322的值即變?yōu)?00。
      MSR 212也包括可寫入的原始位位324。若原始位位324設(shè)定為0,則圖2的白化器216會執(zhí)行前文圖2部分所述的白化功能,并將白化位傳送到移位暫存器218。若原始位位324設(shè)定為1,則白化器216不會執(zhí)行白化功能,而將來自于多工器214的原始位傳送到移位暫存器218。在重置之后,原始位位324的值即變?yōu)?。
      圖3也顯示圖2中的CSR 226。在一具體實(shí)施例中,CSR 226為128位的暫存器。CSR 226包括只讀的可用字節(jié)計(jì)數(shù)字段332??捎米止?jié)計(jì)數(shù)字段332會指明在store_select信號266所選擇的緩沖器0 242或緩沖器1 246中,目前有多少字節(jié)的隨機(jī)數(shù)據(jù)可經(jīng)由XSTORE指令來儲存。若有需要,可藉軟件來讀取可用字節(jié)計(jì)數(shù)字段332,以判斷目前有多少隨機(jī)數(shù)據(jù)字節(jié)可經(jīng)由XSTORE指令來儲存。由于RNG單元136會將字節(jié)同步地累積至緩沖器0242及緩沖器1 246,在執(zhí)行XSTORE的時候,可儲存的字節(jié)的實(shí)際數(shù)目可能大于先前通過XLOAD所讀取的可用字節(jié)計(jì)數(shù)332。在RNG單元136致能之后,可用字節(jié)計(jì)數(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,以經(jīng)由圖2的多工器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。然而,軟件可經(jīng)由將0寫入其中,清除串過濾裝置失敗位338。在一具體實(shí)施例中,過濾失敗位338可經(jīng)由過濾失敗信號256的脈沖設(shè)定為1,并且維持于1,直到軟件將其清除為止。在RNG單元136致能之后,串過濾裝置失敗位338的值即變?yōu)?。
      CSR 226也包括可寫入的計(jì)數(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。在一具體實(shí)施例中,當(dāng)CNT致能位342及CNT失敗位344同時為1時,執(zhí)行XSTORE指令會將可用字節(jié)計(jì)數(shù)值0儲存至系統(tǒng)存儲器,而不會將數(shù)據(jù)字節(jié)儲存于系統(tǒng)存儲器。因此,若一工作設(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部分所述。在一具體實(shí)施例中,串過濾裝置max_cnt字段346包括5個位。在一具體實(shí)施例中,串過濾裝置max_cnt字段346的預(yù)設(shè)值為26。
      在一具體實(shí)施例中,MSR 212的各個字段是包含于CSR 226,而不是MSR 212中。因此,MSR 212的值會以CSR 226來做儲存及回存,以適用于多工運(yùn)作,如此處所述,特別是圖4到9的部分。
      圖3也顯示圖2的RNG R5暫存器238。R5 238包括兩個字段可用字節(jié)計(jì)數(shù)字段362,以及用于儲存隨機(jī)數(shù)據(jù)字節(jié)的另一字段364,如上所述。在一具體實(shí)施例中,有效的隨機(jī)數(shù)據(jù)字節(jié)會向右調(diào)整至緊鄰可用字節(jié)計(jì)數(shù)字段362。
      圖3也顯示SSE暫存器352。SSE暫存器352包括8個128位的暫存器,標(biāo)示為XMM0到XMM7。在圖3中,XMM0稱為XMM0 372、XMM3稱為XMM3 376、而XMM5稱為XMM5 374。在一具體實(shí)施例中,SSE暫存器352實(shí)質(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,如下文所述。
      在一具體實(shí)施例中,微處理器100包括各種熔絲,在微處理器100的制造過程中,其會暫時或永久地加以設(shè)定,以便于重置時,能選取CSR 226及MSR 212中各個位的值,取代前述的重置值。
      現(xiàn)請參照圖4,其繪示根據(jù)本發(fā)明,圖1的微處理器100執(zhí)行將值載入圖3XMM0暫存器372的指令的運(yùn)作流程圖。載入XMM0 372的指令是由微處理器100執(zhí)行,其從系統(tǒng)存儲器將值載入XMM0暫存器372中,如MOVAPS指令。MOVAPS指令將來自系統(tǒng)存儲器的數(shù)據(jù)搬移到指定的XMM暫存器,反之亦然,這部分是敘述于IA-32英特爾架構(gòu)軟件開發(fā)者手冊第二冊指令集參考(2001年)的第3-443頁到第3-444頁,其在此予以參考并入。其它從系統(tǒng)存儲器載入XMM0 372的指令,則如MOVAPD及MOVDQA。由于XMM0 372是操作系統(tǒng)在進(jìn)行工作切換時,被儲存至存儲器及從存儲器回存的暫存器,所以當(dāng)工作切換發(fā)生時,操作系統(tǒng)會執(zhí)行如MOVAPS的指令,以從存儲器回存切換后的工作中,XMM0 372先前的值。流程從方塊402開始。
      于方塊402中,微處理器100經(jīng)由提取一指令(如MOVAPS)于系統(tǒng)存儲器所指定位置的值,而執(zhí)行該指令,并將此值載入XMM0 372。因此,任何時候從存儲器載入XMM0 372,皆可能發(fā)生工作切換。流程繼續(xù)進(jìn)行至方塊404。
      于方塊404中,指令轉(zhuǎn)譯器106會告知RNG單元136,MOVAPS指令(或其它從存儲器載入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)作所需的控制值。因?yàn)镃SR 226不存在于Pentium III或IV中,所以需要Pentium III或IV指令集外的新指令,以載入CSR 226。有利的是,XLOAD指令也會將控制值載入XMM0 372,便于以RNG單元136進(jìn)行多工操作,如此處所述。
      圖5顯示了指定XMM0 372的XLOAD指令的格式,其為
      XLOAD XMM0,memaddr
      其中memaddr指定了系統(tǒng)存儲器502中的一存儲器地址。XLOAD指令的運(yùn)作與MOVAPS指令類似,不過前者除了XMM0 372外,亦會將系統(tǒng)存儲器的值載入CSR 226。在一具體實(shí)施例中,XLOAD會將16個字節(jié)的數(shù)據(jù)504從memaddr移到CSR 226及XMM0 372,如圖所示。在一具體實(shí)施例中,XLOAD指令的運(yùn)算碼值為0x0F 0x5A,其后接著x86指令所指定的標(biāo)準(zhǔn)modR/M暫存器及地址格式字節(jié)。在另一具體實(shí)施例中,XLOAD指令的運(yùn)算碼值則為0x0F 0xA6 0xC0。若XLOAD指令指定SSE暫存器352中的一個,而非XMM0 372,則會載入指定的SSE暫存器352;然而,并不會載入CSR226。
      現(xiàn)請參照圖6,其是根據(jù)本發(fā)明,圖1的微處理器100執(zhí)行將值載入圖3的XMM0暫存器372的XLOAD指令的運(yùn)作流程圖。流程從方塊602開始。
      于方塊602中,微處理器100將系統(tǒng)存儲器502中,XLOAD指令所指定的存儲器地址的值,載入圖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會將計(jì)數(shù)器0 211及計(jì)數(shù)器1 213中的可用字節(jié)計(jì)數(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é);而計(jì)數(shù)器0 211及計(jì)數(shù)器1 213則依據(jù)fill_select信號264,計(jì)算緩沖器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é)的計(jì)數(shù)值及本身從R5 238儲存至系統(tǒng)存儲器的工具。因?yàn)镽NG R5 238不存在于Pentium III或IV中,所以需要Pentium III或IV指令集外的新指令,以儲存RNG R5 238。有利的是,XSTORE指令會以整體不可分割的方式,將計(jì)數(shù)值及數(shù)據(jù)字節(jié)寫入存儲器,便于以RNG單元136進(jìn)行多工操作,如此處所述。也就是說,XSTORE指令是不可中斷的。因此,當(dāng)某工作執(zhí)行XSTORE指令時,另一工作不可中斷XSTORE指令來修改要經(jīng)由XSTORE指令,寫入系統(tǒng)存儲器的可用字節(jié)計(jì)數(shù)或隨機(jī)數(shù)據(jù)字節(jié)。因此,經(jīng)由整體不可分割的方式寫入數(shù)據(jù)及計(jì)數(shù)值,XSTORE指令提供了數(shù)量可變的隨機(jī)數(shù)據(jù)字節(jié),本質(zhì)上有利地便于多工的進(jìn)行。
      圖7是顯示XSTORE指令的格式,其為
      XSTORE memaddr,XMM5
      Memaddr會指定系統(tǒng)存儲器502中的存儲器地址。XSTORE指令的運(yùn)作與MOVAPS指令類似,除了所指定的XMM暫存器不會儲存至系統(tǒng)存儲器;取而代之的是,若指定了XMM5 374,則R5 238會被存至系統(tǒng)存儲器。也就是說,R5 238會遮蔽XMM5 374。XSTORE會將圖3的可用有效隨機(jī)數(shù)據(jù)字節(jié)362的計(jì)數(shù)值,從R5 238移到系統(tǒng)存儲器502中memaddr的位置702,如圖所示。此外,XSTORE將計(jì)數(shù)值362所指定的有效隨機(jī)字節(jié)的數(shù)據(jù)364,移到系統(tǒng)存儲器502中緊鄰可用字節(jié)計(jì)數(shù)702的位置704,如圖所示。
      在一具體實(shí)施例中,XSTORE指令的運(yùn)算碼值為0x0F 0x5B,其后接著x86指令所指定的標(biāo)準(zhǔn)mod R/M暫存器及地址格式字節(jié)。在另一具體實(shí)施例中,XSTORE指令的運(yùn)算碼值為0x0F 0xA7 0xC0。在一具體實(shí)施例中,XSTORE指令要求暫存器檔案108中的ESEDI暫存器來指定memaddr,也就是說,指到要儲存計(jì)數(shù)及隨機(jī)數(shù)據(jù)字節(jié)的起始存儲器地址。在一具體實(shí)施例中,XSTORE不允許區(qū)段重疊。若XSTORE指令指定了SSE暫存器352的其中一個,而非XMM5 374,則結(jié)果會呈未定狀態(tài)。
      在一具體實(shí)施例中,微處理器100儲存于系統(tǒng)存儲器的隨機(jī)數(shù)據(jù)字節(jié)704的數(shù)目,是等于也寫入系統(tǒng)存儲器的可用字節(jié)計(jì)數(shù)702。
      在另一具體實(shí)施例中,微處理器100儲存于系統(tǒng)存儲器的隨機(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é)計(jì)數(shù)362,則微處理器100會將16個字節(jié)存至系統(tǒng)存儲器50215個字節(jié)的隨機(jī)數(shù)據(jù)存到隨機(jī)數(shù)據(jù)字節(jié)704的位置,而一個計(jì)數(shù)字節(jié)則存到可用字節(jié)計(jì)數(shù)702的位置。然而,在寫入系統(tǒng)存儲器502的15個字節(jié)中,某些可能不是有效的。在一具體實(shí)施例中,寫入存儲器的字節(jié)的數(shù)目皆為2的次方。只有前N個字節(jié)是有效的,其中N為可用字節(jié)計(jì)數(shù)702。
      在此具體實(shí)施例中,RNG單元136會清除XSTORE運(yùn)算所指涉的緩沖器(也就是說,圖2的緩沖器0 242或緩沖器1 246)。經(jīng)由清除緩沖器,微處理器100可避免各個工作看到彼此的隨機(jī)數(shù)據(jù)所產(chǎn)生的問題,而提升安全性。例如,假設(shè)第一工作執(zhí)行第一XSTORE運(yùn)算,將15個字節(jié)的隨機(jī)數(shù)據(jù)從緩沖器0 242儲存到系統(tǒng)存儲器,并執(zhí)行第二XSTORE運(yùn)算,將15個字節(jié)的隨機(jī)數(shù)據(jù)從緩沖器1 246儲存到系統(tǒng)存儲器;然后操作系統(tǒng)切換到第二工作,其會在RNG單元136將任何隨機(jī)數(shù)據(jù)字節(jié)累積到緩沖器0 242之前,立即執(zhí)行XSTORE運(yùn)算。若在第一XSTORE運(yùn)算后,RNG單元136未清除緩沖器0 242,則第一工作所接收到的隨機(jī)數(shù)據(jù)也會儲存到第二工作的存儲器位置,如此會使第二工作看到第一工作的隨機(jī)數(shù)據(jù)。
      在一具體實(shí)施例中,XSTORE指令指定了要存至系統(tǒng)存儲器的最大數(shù)目的隨機(jī)數(shù)據(jù)字節(jié)。在此具體實(shí)施例中,該最大數(shù)目是指定于暫存器檔案108的其中一個一般用途暫存器中,如ECX。在此具體實(shí)施例中,若store_select信號266所選取的緩沖器0 242或緩沖器1 246中的可用字節(jié)多于ECX中所指定的最大數(shù)目,則微處理器100只會儲存ECX中所指定的最大數(shù)目的字節(jié);否則,XSTORE指令會儲存可用數(shù)目的有效字節(jié)。在前述任一種情況下,XSTORE指令皆會將存至系統(tǒng)存儲器502的數(shù)據(jù)字節(jié)位置704的有效隨機(jī)數(shù)據(jù)字節(jié)的數(shù)量,儲存到可用字節(jié)計(jì)數(shù)位置702。
      在一具體實(shí)施例中,XSTORE指令指定了要存至系統(tǒng)存儲器的所需數(shù)目的隨機(jī)數(shù)據(jù)字節(jié)。在此具體實(shí)施例中,該所需數(shù)目是指定于暫存器檔案108的其中一個一般用途暫存器中,如ECX。在此具體實(shí)施例中,XSTORE指令是加上一x86 REP前置碼(prefix)。在此具體實(shí)施例中,REP XSTORE指令并非需連續(xù)執(zhí)行的。也就是說,因?yàn)樗璧碾S機(jī)字節(jié)的數(shù)目可能會很大,所以REP XSTORE是可中斷的。然而,由于所儲存的隨機(jī)數(shù)據(jù)字節(jié)數(shù)目是不可變的((也就是說,軟件知道將要存至存儲器的隨機(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)存儲器載入XMM0 372所表示的,所以CSR 226可能不具有目前執(zhí)行XSTORE指令的工作所需的正確控制值。因此,XSTORE指令必須以正確的控制值來更新CSR 226。正確值是儲存于XMM0 372中,此因當(dāng)工作初始時,該正確控制值是經(jīng)由執(zhí)行XLOAD而被載入XMM0 372及CSR 226中,而后當(dāng)操作系統(tǒng)切回至目前工作時,正確控制值也被回存至XMM0 372。流程會繼續(xù)進(jìn)行方塊808。
      在方塊808中,因?yàn)槔鄯e于緩沖器0 242及緩沖器1 246的隨機(jī)數(shù)據(jù)字節(jié),不會隨著CSR中新工作所需的新控制值而產(chǎn)生,其中這些新控制值是于方塊806中被復(fù)制到CSR226中,所以RNG單元136會回應(yīng)CSR 226的載入,而丟棄緩沖器0 242及緩沖器1 246的內(nèi)容。流程會繼續(xù)進(jìn)行方塊812。
      在方塊812中,因?yàn)樵诜綁K808,會丟棄在緩沖器0 242及緩沖器1 246中的隨機(jī)數(shù)據(jù)字節(jié),所以在計(jì)數(shù)器0 211及計(jì)數(shù)器1 213中,RNG單元136會將可用字節(jié)計(jì)數(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)存儲器502中,由XSTORE指令所指定的存儲器地址,其會保持store_select信號266所指定的計(jì)數(shù)器0 211或計(jì)數(shù)器1 213的值,以及store_select信號266所指定的緩沖器0 242或緩沖器1 246中的有效隨機(jī)數(shù)據(jù)字節(jié),如圖7所示。流程會繼續(xù)進(jìn)行方塊818。
      在方塊818中,因?yàn)樵诜綁K816,有效隨機(jī)數(shù)據(jù)字節(jié)已被儲存至存儲器的動作所消耗,所以控制邏輯244會將清除信號223設(shè)為真,以清除store_select信號266所指定的計(jì)數(shù)器0 211或計(jì)數(shù)器1213。流程會繼續(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中,因?yàn)橐淹瓿蒟STORE指令的執(zhí)行,所以中斷單元146會使中斷致能。流程會結(jié)束于方塊824。
      現(xiàn)在參照圖9,其是繪示根據(jù)本發(fā)明,圖1微處理器100進(jìn)行關(guān)于隨機(jī)數(shù)產(chǎn)生的多工運(yùn)作范例的動作流程圖。圖9的流程圖是繪示典型的狀況,其中兩個工作皆初始化RNG單元136,并執(zhí)行XSTORE指令,將隨機(jī)數(shù)據(jù)字節(jié)儲存至存儲器。圖9是繪示本發(fā)明如何有利支持兩個工作(工作A及工作B)間的多工,即使操作系統(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)容、清除計(jì)數(shù)器0211及計(jì)數(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重新開始后所累積的計(jì)數(shù)值及數(shù)據(jù),儲存至系統(tǒng)存儲器,如圖7及圖8所示。流程會繼續(xù)進(jìn)行方塊914。
      在方塊914中,操作系統(tǒng)會執(zhí)行從工作A到工作B的工作切換。其中,操作系統(tǒng)會將XMM0 372的值(其包含控制值A(chǔ))儲存至系統(tǒng)存儲器,以保留工作A的狀態(tài)。然而,操作系統(tǒng)不知道CSR 226的情況,所以操作系統(tǒng)不會將CSR 226儲存至系統(tǒng)存儲器以保留其狀態(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)容、清除計(jì)數(shù)器0211及計(jì)數(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重新開始后所累積的計(jì)數(shù)值及數(shù)據(jù),儲存至系統(tǒng)存儲器,如圖7及圖8所示。流程會繼續(xù)進(jìn)行方塊928。
      在方塊928中,操作系統(tǒng)會執(zhí)行從工作B到工作A的工作切換。其中,操作系統(tǒng)會將XMM0 372的值(其包含控制值B)儲存至系統(tǒng)存儲器,以保留工作B的狀態(tài)。然而,操作系統(tǒng)不知道CSR 226的情況,所以操作系統(tǒng)不會將CSR 226儲存至系統(tǒng)存儲器以保留其狀態(tài)。此外,操作系統(tǒng)會回存工作A的狀態(tài),其包括將先前在方塊914所保留的值A(chǔ),從系統(tǒng)存儲器載入到XMM0372。流程會繼續(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,CSR 226中的值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)容、清除計(jì)數(shù)器0 211與計(jì)數(shù)器1 213以及重新開始隨機(jī)數(shù)的產(chǎn)生及累積。流程會繼續(xù)進(jìn)行方塊942。
      在方塊942中,為執(zhí)行方塊934的XSTORE,RNG單元136會連續(xù)地將于先前的方塊重新開始后所累積的計(jì)數(shù)值及數(shù)據(jù),儲存至系統(tǒng)存儲器,如圖7及圖8所示。在此情況下,由于在先前方塊中,已清除計(jì)數(shù)器0 211及計(jì)數(shù)器1 213,并丟棄緩沖器0 242及緩沖器1 246的內(nèi)容,所以計(jì)數(shù)值為0,且未有有效隨機(jī)數(shù)據(jù)字節(jié)儲存到系統(tǒng)存儲器中。流程會繼續(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重新開始后所累積的計(jì)數(shù)值及數(shù)據(jù),儲存至系統(tǒng)存儲器,如圖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重新開始后所累積的計(jì)數(shù)值及數(shù)據(jù),扣掉方塊944中由前次XSTORE所儲存的字節(jié),再將結(jié)果連續(xù)地儲存至系統(tǒng)存儲器,如圖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信號1038A,若隨機(jī)數(shù)據(jù)字節(jié)298包含尾端的1位,則此信號為真。
      串過濾裝置224也包括第一計(jì)數(shù)器1016A,以儲存連續(xù)1位的現(xiàn)時計(jì)數(shù)。在一具體實(shí)施例中,計(jì)數(shù)器1016A包括一6位的暫存器。計(jì)數(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,選取其中一輸入端,輸出到計(jì)數(shù)器1016A。
      比較邏輯1002會產(chǎn)生num_leading_zeros信號1022B,以指定隨機(jī)數(shù)據(jù)字節(jié)298中前導(dǎo)0位的數(shù)目。
      比較邏輯1002會產(chǎn)生num_trailing_zeros信號1028B,以指定隨機(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é)298包含前導(dǎo)的0位,則此信號為真。
      比較邏輯1002也會產(chǎn)生trailing_zeros信號1038B,若隨機(jī)數(shù)據(jù)字節(jié)298包含尾端的0位,則此信號為真。
      串過濾裝置224也包括第二計(jì)數(shù)器1016B,以儲存連續(xù)0位的現(xiàn)時計(jì)數(shù)。在一具體實(shí)施例中,計(jì)數(shù)器1016B包括一6位的暫存器。計(jì)數(shù)器1016B的輸出為zeros_cnt信號1024B。
      串過濾裝置224也包括第二加法器1012B,其將num_leading_zeros信號1022與zeros_cnt信號1024B相加,以產(chǎn)生new_zeros_cnt信號1026B。
      串過濾裝置224也包括四輸入端的第二多工器1014B。多工器1014B在其輸入端接收zeros_cnt信號1024B、new_zeros_cnt信號1026B、num_trailing_zero1s信號1028B以及固定的零值1032B。多工器1014B會依據(jù)zero_select信號1042B,選取其中一輸入端,輸出到計(jì)數(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。
      retain_counts=max_cnt exceeded &amp; filter_enable;  increment_zeros=all_zeros&amp;(!retain_counts);  load_zeros=trail_zeros&amp;(!retain_counts)&amp;(!increment_zeros);  clear_zeros=(!retain_counts)&amp;(!increment_zeros)&amp;(!load_zeros);  increment_ones=all_ones&amp;(!retain_counts);  load_ones=trail_ones&amp;(!retain_counts)&amp;(!increment_counts);  clear_ones=(!retain_counts)&amp;(!increment_ones)&amp;(!load_ones);  if(retain_counts){   zero_select=3;∥選擇zeros_cnt當(dāng)輸入  }else if(increment_zeros){   zero_select=2;∥選擇new_zeros_cnt當(dāng)輸入  }else if(load_zeros){<!-- SIPO <DP n="34"> --><dp n="d34"/>  zero_select=1;∥選擇num_trailing_zeros當(dāng)輸入  }else if(clear_zeros){   zero_select=0;∥選擇hard_coded 0當(dāng)輸入  }  if(retain_counts){   one_select=3;∥選擇ones_cnt當(dāng)輸入  }else if(increment_ones){   one_select=2;∥選擇new_ones_cnt當(dāng)輸入  }else if(load_ones){   one_select=1;∥選擇num_trailing_ones當(dāng)輸入  }else if(clear_ones){   one_select=0;∥選擇hard_coded 0當(dāng)輸入  }
      現(xiàn)在參照圖11,其是繪示根據(jù)本發(fā)明,圖10的串過濾裝置224的運(yùn)作流程圖。流程從方塊1102開始。
      在方塊1102中,計(jì)數(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)生1026B。流程會繼續(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。流程會繼續(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的值,以使多工器1014A及1014B分別保留目前的ones_cnt 1024A及zeros_cnt 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的值,以使多工器1014B選取new_zeros_cnt信號1026B,并且于one_select信號1042A中產(chǎn)生0的值,以使多工器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的值,以使多工器1014B選取num_trailing_zeros信號1028B,并且于one_select信號1042A中產(chǎn)生0的值,以使多工器1014A選取固定的0值輸入1032A。流程會繼續(xù)進(jìn)行方塊1148。
      在方塊1134中,選擇邏輯1006于zero_select信號1042B中產(chǎn)生0的值,以使多工器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的值,以使多工器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的值,以使多工器1014A選擇num_trailing_ones信號1028A。流程會繼續(xù)進(jìn)行方塊1148。
      在方塊1146中,選擇邏輯1006于one_select信號1042A中產(chǎn)生0的值,以使多工器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所選擇的計(jì)數(shù)器0 211或計(jì)數(shù)器1 213。流程接著返回方塊1104。
      現(xiàn)在參照圖12,其是繪示根據(jù)本發(fā)明的另一具體實(shí)施例,圖1微處理器100執(zhí)行XSTORE指令的運(yùn)作方塊圖。圖12的XSTORE指令是類似于圖7的XSTORE指令,不過在此具體實(shí)施例中,有效隨機(jī)數(shù)據(jù)字節(jié)的計(jì)數(shù)值會被載入暫存器檔案108的其中一個一般用途暫存器中,如EAX 1202暫存器,而不會儲存至系統(tǒng)存儲器。有利的是,與圖7的XSTORE指令類似,圖12的XSTORE指令會連續(xù)地將計(jì)數(shù)值載入EAX,并將隨機(jī)數(shù)據(jù)字節(jié)儲存至存儲器,以促進(jìn)與RNG單元136的多工運(yùn)作。也就是說,圖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及storev_select信號266初始化為0,并回應(yīng)方塊1302的重置動作而清除計(jì)數(shù)器0 211及計(jì)數(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經(jīng)由power_cntrl信號231開啟所選擇的隨機(jī)位產(chǎn)生器的電源。流程會繼續(xù)進(jìn)行方塊1314。
      在方塊1314中,根據(jù)圖8的方塊816及如圖7所示,微處理器100將由store_select信號266所選擇的計(jì)數(shù)器0 211或計(jì)數(shù)器1 213的值,以及由store_select信號266所選擇的緩沖器0 242或緩沖器1 246中的有效數(shù)據(jù)字節(jié),連續(xù)地儲存至系統(tǒng)存儲器。流程會繼續(xù)進(jìn)行方塊1316。
      在方塊1316中,控制邏輯244將清除信號223設(shè)為真,以清除由store_select信號266所選擇的計(jì)數(shù)器0 211或計(jì)數(shù)器1 213。流程會繼續(xù)進(jìn)行方塊1318。
      在方塊1318中,控制邏輯244更新store_select信號266,以選擇另一個緩沖器及計(jì)數(shù)器。在RNG單元136包含兩個以上緩沖器的實(shí)施例中,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所選擇的計(jì)數(shù)器0 211或計(jì)數(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包含兩個緩沖器的實(shí)施例中,更新fill_select信號264的動作包括切換fill_select信號264。在RNG單元136包括兩個以上緩沖器的實(shí)施例中,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就經(jīng)由power_cntrl信號231,關(guān)閉隨機(jī)位產(chǎn)生器0 206及隨機(jī)位產(chǎn)生器1 208的電源。流程會返回判斷方塊1306。
      現(xiàn)在參照圖14,其是繪示根據(jù)本發(fā)明的另一具體實(shí)施例,圖1的微處理器100執(zhí)行圖3的XLOAD指令的運(yùn)作流程圖。圖14的流程圖與圖6的流程圖相同,并且標(biāo)號相同的方塊是一樣的,除了圖14包括額外的判斷方塊1403。流程會從方塊602進(jìn)行到判斷方塊1403。在判斷方塊1403中,圖2的控制邏輯244判斷CSR 226的相關(guān)位是否已因方塊602中CSR 226的載入而改變。若是,流程會繼續(xù)進(jìn)行如圖6的方塊604。否則,流程會繼續(xù)進(jìn)行方塊612,如圖所示。此實(shí)施例的優(yōu)點(diǎn)是,不必丟棄已累積的隨機(jī)字節(jié)及重新開始隨機(jī)字節(jié)的累積。也就是說,若CSR 226的載入對于會影響RNG單元136的隨機(jī)數(shù)產(chǎn)生功能的值未做任何改變,則由于隨機(jī)字節(jié)是通過使用所要的控制值而產(chǎn)生,所以不需丟棄已累積的隨機(jī)字節(jié)及重新開始隨機(jī)字節(jié)的累積。在一具體實(shí)施例中,相關(guān)的CSR 226位為串過濾裝置致能位334、產(chǎn)生器選擇位336、CNT致能位342以及串過濾裝置max_cnt 346。
      現(xiàn)在參照圖15,其是繪示根據(jù)本發(fā)明的另一具體實(shí)施例圖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,如圖所示。此實(shí)施例的優(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é)的累積。在一具體實(shí)施例中,相關(guān)的CSR 226位為串過濾裝置致能位334、產(chǎn)生器選擇位336、CNT致能位342以及串過濾裝置max_cnt 346。
      現(xiàn)在參照圖16,其是繪示根據(jù)本發(fā)明的另一具體實(shí)施例,圖1的微處理器100執(zhí)行XSTORE指令的運(yùn)作方塊圖。圖16的XSTORE指令類似于圖12的XSTORE指令,然而在圖16的實(shí)施例中,XSTORE指令的目的操作數(shù)會指定微處理器100的一個暫存器,如XMM暫存器、浮點(diǎn)暫存器、MMX暫存器或整數(shù)單元(integer_unit)暫存器中的一個(如EBX),而不是指定系統(tǒng)存儲器中的地址。也就是說,有效隨機(jī)數(shù)據(jù)字節(jié)是連續(xù)地被寫入暫存器檔案108的其中一個使用者可見暫存器中,而不會儲存至系統(tǒng)存儲器。在圖16的例子中,XSTORE指令會指定圖3SSE暫存器352中的XMM3暫存器376,以寫入有效隨機(jī)數(shù)據(jù)字節(jié),如圖所示。有利的是,與圖12的XSTORE指令類似,圖16的XSTORE指令會連續(xù)地將隨機(jī)數(shù)據(jù)字節(jié)寫入該使用者可見暫存器,并將計(jì)數(shù)值載入EAX 1202,以促進(jìn)與RNG單元136的多工運(yùn)作。也就是,圖16的XSTORE指令也是不可中斷的。
      現(xiàn)在參照圖17,其是繪示根據(jù)本發(fā)明的另一具體實(shí)施例,圖1的微處理器100執(zhí)行XSTORE指令的運(yùn)作方塊圖。圖17的XSTORE指令類似于圖12的XSTORE指令,然而在圖17的實(shí)施例中,XSTORE指令包括一x86架構(gòu)的REP前置碼。經(jīng)由REP XSTORE指令,要存至系統(tǒng)存儲器的隨機(jī)數(shù)據(jù)字節(jié)的數(shù)目,會被指定為暫存器檔案108的ECX暫存器1702的輸入?yún)?shù),如圖所示。軟件在執(zhí)行REP XSTORE指令前,會將要存至系統(tǒng)存儲器的隨機(jī)數(shù)據(jù)字節(jié)的理想計(jì)數(shù)值載入ECX 1702中。
      在一具體實(shí)施例中,在將隨機(jī)數(shù)據(jù)字節(jié)存至系統(tǒng)存儲器的儲存動作間,REP XSTORE指令是可中斷的。存儲器地址于初始時,是指定于暫存器檔案108的一般用途暫存器中。在圖17的例子中,存儲器地址是指定于暫存器檔案108的ESEDI 1704中,如圖所示。每當(dāng)有一或更多個隨機(jī)數(shù)據(jù)字節(jié)被寫入系統(tǒng)存儲器時,ESEDI 1702即更新為系統(tǒng)存儲器中,下個用以儲存隨機(jī)數(shù)據(jù)字節(jié)的位置。此外,每當(dāng)有一或更多個隨機(jī)數(shù)據(jù)字節(jié)儲存至系統(tǒng)存儲器時,ECX 1702即更新,以反映尚待儲存儲存的隨機(jī)字節(jié)數(shù)目。例如,假設(shè)REP XSTORE指令于ECX 1702中指定一字節(jié)計(jì)數(shù)值28及0x12345678的存儲器地址。假設(shè)在緩沖器0 242及緩沖器1 246兩者之一中,RNG單元136有8個可用的字節(jié),且當(dāng)累積更多的隨機(jī)數(shù)據(jù)字節(jié)時,將8個字節(jié)寫入系統(tǒng)存儲器。當(dāng)8個字節(jié)被寫至存儲器時,ECX 1702會更新為20,以表示還有20個隨機(jī)數(shù)據(jù)字節(jié)必須寫入系統(tǒng)存儲器。此外,地址會被更新為系統(tǒng)存儲器中,下個將要寫入大量隨機(jī)數(shù)據(jù)字節(jié)的位置0x12345680。中斷可能會發(fā)生在這個時候,而軟件會檢查更新的值。當(dāng)中斷已執(zhí)行且控制權(quán)回歸至REPXSTORE指令時,REP XSTORE指令將使用ECX 1702及ESEDI 1704中的更新值回復(fù)執(zhí)行。此外,完成REP XSTORE指令時,圖2的CSR 226的現(xiàn)時值會被復(fù)制到暫存器檔案108的EAX暫存器1202中。
      請參閱圖18,圖18根據(jù)本發(fā)明的一具體實(shí)施例,當(dāng)如圖1的處理器100執(zhí)行XSTORE指令的方塊圖。圖18的XSTORE指令和圖12的XSTORE指令非常相近。然而,在圖18的具體實(shí)施例中,只有部分暫存在R5 238的隨機(jī)數(shù)據(jù)字節(jié)被存到系統(tǒng)存儲器502。將N定義為2的(指數(shù)因子)冪次。提供一個N,用來選擇在R5 238中的每第N個位儲存到系統(tǒng)存儲器502。也就是說,N等于2的(指數(shù)因子)冪次來當(dāng)作參考。被EDX 1802暫存器所指定指數(shù)因子是如圖18XSTORE指令的一個輸入?yún)?shù)。EDX 1802為暫存器檔案108中一個使用者可見的通用暫存器。
      在一實(shí)施例中,暫存在R5 238的隨機(jī)數(shù)據(jù)位組長度為8位或64位,因此在EDX 1802被指定的指數(shù)因子容許值可為0,1,2,3,而可能的N值就為1,2,4,8。因此,在如圖18的XSTORE指令實(shí)施例中,被存到系統(tǒng)存儲器的有效隨機(jī)數(shù)據(jù)位組長度就為8/N,也就是8,4,2,1。在另一實(shí)施例中,在EDX 1802被指定的因子指數(shù)容許值為1,2,3,而可能的N值就為1,2,4,8。在XSTORE指令執(zhí)行完成后,決定系統(tǒng)存儲器502的有效隨機(jī)數(shù)據(jù)位組長度以及指令狀態(tài)同時被放到EAX 1202。
      如圖18的XSTORE指令也包括有根據(jù)前圖所述的其它XSTORE指令實(shí)施例特征。舉例來說,如圖18的XSTORE指令可以將每第N個累積且被選擇的位儲存到在微處理器中的一暫存器,而不是如根據(jù)圖16的具體實(shí)施例所述儲存到存儲器;或是有效位計(jì)數(shù)值可儲存到存儲器,而不是如根據(jù)圖7的具體實(shí)施例所述儲存到EAX暫存器;或是一REP前置碼可被包括在如圖17所述的具體實(shí)施例中。
      請參閱圖19,圖19根據(jù)本發(fā)明,當(dāng)如圖18的XSTORE指令時執(zhí)行的一操作實(shí)例。一個在R5 238的二進(jìn)制隨機(jī)數(shù)據(jù)位值的實(shí)際例子。圖標(biāo)中,每一個在R5 238的位以八進(jìn)位表示。圖標(biāo)中也顯示出隨機(jī)數(shù)據(jù)字節(jié)根據(jù)如圖18所給定四個容許值的一被存到系統(tǒng)存儲器502。如果EDX為0,則所有從R5 238來的64位將被儲存到系統(tǒng)存儲器502。如果EDX為1,則只有由R5 238每兩個選一個所組成的32位將被儲存到系統(tǒng)存儲器502。如果EDX為2,則只有由R5 238每四個選一個所組成的16位將被儲存到系統(tǒng)存儲器502。如果EDX為3,則只有由R5 238每八個選一個所組成的8位將被儲存到系統(tǒng)存儲器502。
      本發(fā)明的優(yōu)點(diǎn)是,如圖18的XSTORE指令減低了RNG單元136產(chǎn)生的連續(xù)位間的關(guān)連性,其中,RNG單元136是由使用者致能且指定儲存在EDX 1802的指數(shù)因子,該指數(shù)因子用以選擇在R5 238的每N個位,指數(shù)因子與N的關(guān)系可表示為N=2^(指數(shù)因子)。
      請參閱圖20,圖20為根據(jù)本發(fā)明的一具體實(shí)施例,是為如圖1的RNG單元136減少連續(xù)位間相關(guān)性的操作流程圖。在圖20的具體實(shí)施例中,用來執(zhí)行減低連續(xù)位間相關(guān)性功能的裝置包括有如圖1微處理器100的多個元件,如檔案暫存器108、地址產(chǎn)生器112、載入單元114、執(zhí)行單元116(包括ALU 162)、RNG單元136、儲存單元118、回寫單元122、寫入緩沖器124及總線接口單元128。儲存在如圖1所示微碼存儲器132的微碼指令,根據(jù)如圖21所示的程序行表(program listing)控制微處理器100的元件。圖20的流程圖描述普通如圖21所示的程序行表的微碼指令。流程開始于方塊2002。
      在方塊2002中,如圖2所示的RNG單元136經(jīng)由隨機(jī)位產(chǎn)生器206或208,多工器214及白化器216產(chǎn)生一連串的隨機(jī)數(shù)據(jù)位,并且經(jīng)由如圖2及前圖所述的移位暫存器218、串過濾裝置224、多工器228、解多工器232、緩沖器0 242及緩沖器1 246兩數(shù)據(jù)緩沖器、多工器236、R5 238及控制邏輯244將位累積成字節(jié)。流程下一步到判斷方塊2004。
      在判斷方塊2004中,微處理器100經(jīng)由從圖3的CSR 226來的可利用位計(jì)數(shù)值332判斷是否八個隨機(jī)數(shù)據(jù)字節(jié)已在buf0 242或buf1 246中累積。若為是,流程下一步到方塊2012;否則,流程下一步到方塊2006。
      在方塊2006中,既然尚未累積到八個隨機(jī)數(shù)據(jù)字節(jié),微處理器100將有效隨機(jī)數(shù)據(jù)字節(jié)的長度設(shè)定為0。流程下一步到方塊2008。
      在方塊2008中,微處理器100載入EAX 1202由CSR 226得到的狀態(tài),及已儲存在存儲器的有效隨機(jī)數(shù)據(jù)字節(jié)的長度。假如方塊2008是從方塊2006來的,則有效隨機(jī)數(shù)據(jù)字節(jié)的長度為0。假如方塊2008是從方塊2018來的,則有效隨機(jī)數(shù)據(jù)字節(jié)的長度為8。假如方塊2008是從方塊2044來的,則有效隨機(jī)數(shù)據(jù)字節(jié)的長度為在EDX中所指定的指數(shù)因子的關(guān)系函式,諸如2^(3-指數(shù)因子)。流程在方塊2008結(jié)束。
      在方塊2012中,微處理器100將R5 238的內(nèi)容載入到一暫時儲存位置,如圖20的temp1。在一實(shí)施例中,只有從R5 238來的隨機(jī)數(shù)據(jù)字節(jié)被載入到temp1,而不是有效字節(jié)計(jì)數(shù)值。在如圖21的微碼列表實(shí)施例中兩個32位的暫存器r4、r5被共同用來當(dāng)作temp1。流程下一步到判斷方塊2014。
      在判斷方塊2014中,微處理器100判斷在EDX 1802所指定的指數(shù)因子是否為0,也就是說,是否所有從R5來的字節(jié)將被儲存到存儲器。若為是,流程到方塊2016,否則,流程到方塊2022。
      在判斷方塊2016中,微處理器100將全部在R5 238累積的八個有效隨機(jī)數(shù)據(jù)字節(jié)儲存到圖18中的系統(tǒng)存儲器。流程下一步到方塊2018。
      在方塊2018中,既然全部八個字節(jié)在方塊2016中被儲存到系統(tǒng)存儲器502,微處理器100將有效隨機(jī)數(shù)據(jù)字節(jié)的長度設(shè)定為8。流程下一步到方塊2008。
      在方塊2022中,微處理器100將儲存在EDX 1802 XSTORE指令的一個輸入?yún)?shù),經(jīng)由2的冪次計(jì)算N值。流程下一步到方塊2024。
      在方塊2024中,微處理器100經(jīng)由計(jì)算64除以N得到一循環(huán)計(jì)數(shù)值。該循環(huán)計(jì)數(shù)也就是將被儲存到系統(tǒng)存儲器502的長度。流程下一步到方塊2026。
      在方塊2026中,微處理器100清除EAX1202設(shè)為0。流程下一步到方塊2028。
      在方塊2028中,微處理器100將EAX 1202左移一個位,以清出一個EAX空間來給從R5 238得到原始數(shù)據(jù)所選定及累積的下一個位。流程下一步到方塊2032。
      在方塊2032中,微處理器100經(jīng)由從temp1取出中最后一個位(也就是除了最后一個位外,全部舍棄)并且將該最后一個位加入EAX 1202中來達(dá)成選定并累積下一個第N位。流程下一步到方塊2034。
      在方塊2034中,微處理器100將temp1右移N個位,因此將下一個被選定的N位放入temp1的位置,經(jīng)由將temp1右移N個位,將前次在方塊2032中被選定及累積的位被舍棄。流程下一步到方塊2036。
      在方塊2036中,微處理器100將循環(huán)計(jì)數(shù)值遞減1。流程下一步到方塊2038。
      在方塊2038中,微處理器100判斷循環(huán)計(jì)數(shù)值是否已到達(dá)0。若為是,流程到方塊2042,否則,流程到方塊2028。
      在方塊2042中,微處理器100將EAX 1202儲存到系統(tǒng)存儲器502。EAX1202包括有從R5 238所選定并累積的每第N個位。在一實(shí)施例中,EAX1202的全部內(nèi)容被存入系統(tǒng)存儲器502,即使在EAX 1202的一些位也許不包含有效隨機(jī)數(shù)據(jù)字節(jié)。然而在2008方塊中,每一次完成XSTORE指令。有效隨機(jī)數(shù)據(jù)字節(jié)被存入系統(tǒng)存儲器502的長度會反應(yīng)在EAX 1202。因此,致能程序以決定有效隨機(jī)數(shù)據(jù)字節(jié)被存入系統(tǒng)存儲器502的長度。舉例來說,假如EAX 1202為2,則四個字節(jié)只有兩個字節(jié)被存入到系統(tǒng)存儲器502中,并且有效隨機(jī)數(shù)據(jù)字節(jié)的長度會根據(jù)EAX1202的狀態(tài)設(shè)定成2。
      在方塊2044,既然N是2、4或8,及所有(8/N)個位在方塊2042中會被存入系統(tǒng)存儲器502中,微處理器100將有效隨機(jī)數(shù)據(jù)字節(jié)的長度設(shè)定成8除以N。流程到方塊2008。
      請參閱圖21,圖21是為根據(jù)本發(fā)明使如圖1的處理器100減少連續(xù)位間相關(guān)性的一微碼指令列表。下面的討論將有助于了解微碼列表。
      這個微碼列表包括有被稱為跳躍指令(jump instruction)的分支指令(branch instruction),如je.32,je1.32、循環(huán)指令(loop instruction),如loopn.32、返回指令(return instruction)。所有跟在分支指令之后的指令位置都被稱為一延遲時槽(delay slot),所有在延遲時槽的指令均會執(zhí)行而不考慮該分支是否已被選取。如此,如果該分支尚未被選取,則在延遲時槽的指令及其下一個指令將會被執(zhí)行。如果該分支已被選取,在延遲時槽的指令及在分支目標(biāo)地址的指令下一個將會被執(zhí)行。
      微碼指令使用八個在暫存器檔案108中32位的通用暫存器,在列表中被表示成r0到r7。在一實(shí)施例中,r0到r7不是使用者可視的暫存器。被存在r0的值在所有時間都是0。在一實(shí)施例中,由微碼指令指定的算術(shù)及邏輯操作如及、加、移位指令主要由圖1中的ALU 162所執(zhí)行。
      除了分支指令,這三個操作數(shù)指令的格式為
      <opcode><目的><來源一><來源二>
      由第8行指令dmtid r4,r5所跟隨的在第7行指令mfxd.64 XMM5使如圖2的64位R5 238的內(nèi)容被復(fù)制到兩個32位的暫存器r4,r5。根據(jù)第1行dmtidr2,r3指令,微碼的部分分支到get_random_data包括在分支之后延遲時槽的一mfxd.64指令(也就是CSR 226)。因此,結(jié)合兩個指令使64位CSR 226的內(nèi)容被復(fù)制到兩個32位的暫存器r2,r3。
      請參閱圖22,圖22是為根據(jù)本發(fā)明的一具體實(shí)施例,如圖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í)施例中,中間數(shù)據(jù)總線2206與數(shù)據(jù)總線144都是64位,以及R5 238包括64位用以儲存隨機(jī)數(shù)據(jù)字節(jié),也就是說,儲存8個隨機(jī)數(shù)據(jù)字節(jié)。位選擇器2202也包括有用來接收指數(shù)因子信號2204的一控制輸入,該指數(shù)因子信號2204的值在圖18中被當(dāng)作一個XSTORE指令得輸入?yún)?shù)。在一實(shí)施例中,位選擇器2202根據(jù)指數(shù)因子2204的值從中間數(shù)據(jù)總線2206選擇每一個位、每兩個位、每四個位或是每八個位,以各自提供8、4、2或1個隨機(jī)數(shù)據(jù)字節(jié)給數(shù)據(jù)總線144,如上所述及如圖19的實(shí)施例所示。
      請參閱圖23,圖23是為根據(jù)本發(fā)明,如圖22的位選擇器2202的詳細(xì)方塊圖。位選擇器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對應(yīng)到DB 144的位長度,且2302-n一般表示為輸出連接到DB 144[n]的多工器2303。多工器2302-0的輸出連接到DB 144
      ,也就是DB 144的第0位,如圖22所示。同理,多工器2302-1的輸出連接到DB 144[1]。多工器2302-2的輸出連接到DB 144[2]。多工器2302-3的輸出連接到DB144[3]。多工器2302-n的輸出連接到DB 144[n]。多工器2302-63的輸出連接到DB 144[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)生隨機(jī)數(shù)隨機(jī)性的連續(xù)產(chǎn)生位間取得最小的關(guān)連性。有優(yōu)勢的地方是,經(jīng)由隨機(jī)位產(chǎn)生器在每N個位中選擇一位,本發(fā)明可以被觀察到Shannon熵值增加及對應(yīng)的最小隨機(jī)數(shù)據(jù)位產(chǎn)生器率如下
      雖然本發(fā)明的目標(biāo)、特征和優(yōu)點(diǎn)已經(jīng)被詳述,其它的一些實(shí)施例也應(yīng)包括在本發(fā)明范圍內(nèi)。舉例來說,在一些實(shí)施例中,指數(shù)因子是以2為底數(shù),本發(fā)明當(dāng)然也可以適用在其它的基數(shù)值。此外,雖然在一些實(shí)施例中的因子是用來計(jì)算2的冪次的方式存在暫存器中,但因子也可以其它方式指定。例如說當(dāng)該值被除在一暫存器中,因子可以被該值直接指定。
      總之,以上所述僅為本發(fā)明的較佳實(shí)施例而已,當(dāng)不能以之限定本發(fā)明所實(shí)施的范圍。大凡依本發(fā)明權(quán)利要求所作的均等變化與修飾,皆應(yīng)仍屬于本發(fā)明專利涵蓋的范圍內(nèi)。
      權(quán)利要求
      1.一種用于改善由一隨機(jī)數(shù)產(chǎn)生器所產(chǎn)生數(shù)據(jù)的隨機(jī)性的方法,其特征在于包括以下步驟
      由一隨機(jī)位產(chǎn)生器產(chǎn)生多個位;
      從該多個位中選出每第N個位,其中,N為大于1的整數(shù);
      以及累積所選出的每第N個位。
      2.如權(quán)利要求1所述的方法,其特征在于,還包括有以下步驟
      舍棄未被選定的多個位。
      3.如權(quán)利要求1所述的方法,其特征在于,其中該累積步驟包括將該每第N個位累積到一微處理器的一暫存器中。
      4.如權(quán)利要求3所述的方法,其特征在于,還包括
      儲存已累積的該每第N個位。
      5.如權(quán)利要求4所述的方法,其特征在于,其中該儲存步驟包括將已累積的該每第N個位儲存到連接該微處理器的一存儲器。
      6.如權(quán)利要求4所述的方法,其特征在于,其中該儲存步驟包括將已累積的該每第N個位儲存到在該微處理器的一第二暫存器。
      7.如權(quán)利要求4所述的方法,其特征在于,其中儲存已累積的該每第N個位被執(zhí)行,以回應(yīng)該微處理器執(zhí)行用來儲存一部份該多個位的一指令。
      8.如權(quán)利要求1所述的方法,其特征在于,其中該N值是由2的冪次所組成。
      9.如權(quán)利要求1所述的方法,其特征在于,還包括
      設(shè)定一值到一暫存器中;及在選出該每第N個位之前,根據(jù)設(shè)定到該暫存器中的該值計(jì)算出該N值。
      10.一種微處理器,其特征在于包括
      一隨機(jī)位產(chǎn)生器,用以產(chǎn)生一串隨機(jī)位;
      以及一算數(shù)邏輯單元,連接該隨機(jī)位產(chǎn)生器,用以選擇在該串隨機(jī)位的每第N個位,其中,N為大于1的整數(shù),并用以累積被選定的每第N個位到連接該算數(shù)邏輯單元的一暫存器。
      11.如權(quán)利要求10所述的微處理器,其特征在于,還包括
      一可程序化暫存器,連接到該算數(shù)邏輯單元,用以儲存計(jì)算該N值的一值。
      12.如權(quán)利要求10所述的微處理器,其特征在于,還包括
      一指令轉(zhuǎn)譯器,用以將在該微處理器中一指令集的一指令轉(zhuǎn)譯,該指令指示該微處理器儲存已選出及累積的該每第N個位。
      13.如權(quán)利要求12所述的微處理器,其特征在于,還包括
      一存儲器,連接到該算數(shù)邏輯單元,用以儲存多個微碼指令,該微碼指令包括用以執(zhí)行該指令的多個指令。
      14.如權(quán)利要求13所述的微處理器,其特征在于,其中該多個指令包括有一個或多個指令,以指示該算數(shù)邏輯單元將該串隨機(jī)位移動N個位。
      15.如權(quán)利要求14所述的微處理器,其特征在于,其中該多個指令包括有一個或多個指令,以指示該算數(shù)邏輯單元執(zhí)行邏輯運(yùn)算以取出被移動的該串隨機(jī)位之一。
      16.如權(quán)利要求15所述的微處理器,其特征在于,其中取出被移動的該串隨機(jī)位之一的邏輯運(yùn)算包括一邏輯與運(yùn)算。
      17.如權(quán)利要求15所述的微處理器,其特征在于,該多個指令包括有一個或多個指令以指示該算數(shù)邏輯單元執(zhí)行算數(shù)或邏輯運(yùn)算以累積被移動的該串隨機(jī)位之一到該暫存器。
      18.如權(quán)利要求17所述的微處理器,其特征在于,其中該算數(shù)或邏輯運(yùn)算以累積被移動的該串隨機(jī)位之一到的該暫存器包括一加法運(yùn)算。
      19.如權(quán)利要求17所述的微處理器,其特征在于,其中該算數(shù)或邏輯運(yùn)算以累積被移動的該串隨機(jī)位之一到的該暫存器包括一移位運(yùn)算。
      20.一種用以減低連續(xù)隨機(jī)位間的相關(guān)性的裝置,其特征在于包括
      一隨機(jī)位產(chǎn)生器,用以產(chǎn)生一組隨機(jī)位;
      一第一暫存器,連接到該隨機(jī)位產(chǎn)生器,用以儲存該組隨機(jī)位;
      多個多工器,連接到該第一暫存器,用以選擇在該組隨機(jī)位的每第N個位,該多個多工器經(jīng)由一控制值選擇每第N個位;
      以及一第二暫存器,連接到該多個多工器,用以儲存該多個多工器所選擇的該組隨機(jī)位的每第N個位。
      全文摘要
      一種用以減低在隨機(jī)數(shù)產(chǎn)生器中連續(xù)位相關(guān)性的裝置與方法。該方法包括有產(chǎn)生一組隨機(jī)位,并在該組隨機(jī)位中選出每第N個位后,累積并傳送到要求隨機(jī)數(shù)的應(yīng)用軟件,而不是將整組隨機(jī)位送到應(yīng)用軟件。其中,N為一可程序化的值。在一實(shí)施例中,實(shí)現(xiàn)該方法的裝置包括一微處理器,該微處理器包括有許多的元件,諸如算數(shù)邏輯單元、儲存單元、分支電路及執(zhí)行儲存在微碼存儲器的微碼指定指令的暫存器。在另一實(shí)施例中,該裝置包括有選擇每第N個位的多個多工器。在一實(shí)施例中,N被指定成用以儲存被選定的隨機(jī)位的一微處理器指令的一輸入?yún)?shù)。
      文檔編號G06F7/58GK1514345SQ0315875
      公開日2004年7月21日 申請日期2003年9月22日 優(yōu)先權(quán)日2003年2月11日
      發(fā)明者湯瑪斯·A·克利斯賓, 湯瑪斯 A 克利斯賓 申請人:智慧第一公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1