专利名称:自我测试结果决定可用性随机数产生器的微处理器及方法
技术领域:
本发明涉及一种具有依自我测试结果决定可用性的随机数产生(randomnumber generation)器的微处理器及方法,特别是有关于微处理器内,一随机数产生器依自我测试结果所决定地可见性。
背景技术:
就历史来看,许多计算机应用软件需要提供随机数。例如,物理现象的蒙地卡罗仿真,如大规模的天气仿真,就需要提供随机数,以仿真物理现象。需要使用随机数的其它例子为线上游戏,以仿真洗牌,掷骰子等;彩券号码的产生;统计分析数据的产生,如心理学的测验;以及计算机游戏等。
在这些型式的应用中,所需的随机度,以及对产生随机数的效能要求是不同的。许多应用软件,如计算机游戏,对于随机度的要求是不高的。心理学测验上的应用,对随机度有着更严格的要求,但效能需求则相当低。然而,大规模的运用蒙地卡罗的仿真会有非常高的效能需求,且需要良好的随机数统计特性,虽然不可预测性并非特别重要。其它的应用,如线上赌博,则对于随机度及不可预测性皆有非常严格的要求。
虽然上述这些应用仍然是重要的,但是在计算机安全领域,则对高品质随机数有最大的需求。最近,个人计算机网络及网际网络交易的爆炸性成长,对于各种安全机制的需求,已明显地增加。
对所有计算机安全的主要构成要素而言,高品质的随机数皆为必要。这些要素包含机密性、身分确认以及数据完整性。
数据加密为提供机密性的主要机制。有许多种不同的加密算法,如对称式加密、公共钥匙及一次性密码本,但是这些算法都具有一关键特性,即加密/解密钥匙不能被简单地预测出来。一个加密系统的密码强度基本上即是其所用钥匙的强度,亦即预测、猜想或计算解密钥匙的难度多高。最好的钥匙为够长的真随机数,而在所有严格要求安全的应用中,随机数产生器是为产生密码钥匙的基础。
许多对密码算法成功的攻击,已非专注于加密算法,而是专注于产生随机数的来源。一个为人熟知的例子是,网景的安全插座层(Secure Sockets Layer,SSL)的早期版本,会从系统时钟与程序ID表搜集数据,以产生软件式准随机数产生器的起始值。所产生的随机数是用来产生一对称钥匙,以加密通联数据。有二个研究生想出了可准确猜测随机数的程序,在一分钟内,就猜出通联钥匙,破坏这个机制。
与解密钥匙类似,用以确认存取信息的使用者身份的密码,其强度实际上就是预测或猜测密码的难度有多高。最好的密码为够长的真随机数。此外,在有使用暗号协议(challenge protocol)的确认协议(authentication protocol)中,关键因素就是使暗号无法由进行确认的一方加以预测。而随机数则是用来产生确认身份的暗号。
数字签名及信息摘要是用来确保网络上通信的完整性。随机数是用于大部分的数字签名算法,以使恶意的一方难于伪造签名。随机数的品质会直接影响到签名的效力。总而言之,良好的安全需要良好的随机数。
数值本身不是随机的。随机度的定义必须不仅包括所产生的数值的特征,而且也包括用以产生数值的产生器的特征。运用软件的随机数产生器是常见的,并且对于许多应用而言已足够。然而,对某些应用来说,软件式产生器是不足的。这些应用需要硬件式产生器,其可产生与藉由随机物理程序所产生数值的特征相同的数值。此处,重要的特征是,其产生数值所具有的统计分布的无偏差程度,以及不可预测与不可重制的程度。
具有无偏差的统计分布,是意谓所有的值具有相等的发生机率,无论样本大小为何。几乎所有的应用皆要求其随机数具有良好的统计分布,而高品质的软件式随机数产生器通常能满足此需求。只满足无偏差统计分布的需求的产生器称为准随机数产生器。
不可预测性是指在一位序列中,正确猜测下个位的机率应刚好为一半,无论先前所产生的位值为何。某些应用不需要此种不可预测性的特征;然而,对安全应用所使用的随机数而言,则是重要的。若使用软件式产生器,则要有效满足不可预测性的需求,必须隐藏软件算法及其初始值。从安全的观点而言,隐藏算法的做法是非常不保险的。对于使用可预测的隐藏算法随机数产生器的应用软件而言,有不少安全上遭致破坏的例子是为人所熟知的。同时满足前二种需求的产生器称为密码安全准随机数产生器。
产生器若为不可重制的,则二个具有相同起始条件的相同产生器,必须产生不同的输出。软件算法不能满足此需求。只有基于随机物理程序的硬件式产生器,能产生满足安全所需的严格不可重制性的数值。满足所有三个需求的产生器称为真随机数产生器。
软件算法是用来产生计算机应用所需的大部分随机数。这些称为准随机数产生器,此因这些产生器不能满足不可预测性及不可重制性的需求。再者,有些也不能满足无偏差统计分布的需求。
通常,软件式产生器以一初始值或种子(seed)开始运作,该初始值有时是由使用者所提供。产生器以该初始值执行算术运算,以产生第一随机结果,其作为产生第二结果的种子,依此类推。软件式产生器必然是循环式的,最终其会重复相同的输出序列。猜测种子就等于能预测整个所产生的数值序列。其不可重制性只与算法及初始种子的机密程度一样,而这可能是安全上的应用并不想要的特性。再者,软件算法是可重制的,因为以相同输入开始,其会产生相同的结果。最后,软件算法不必然会产生输出数据大小的范围内的每个可能的值,这可能无法完全满足无偏差统计分布的需求。
有一种随机数产生器,是软件式产生器与纯硬件式产生器混合而成,称为熵产生器(entropy generator)。熵为不可预测性的另一种说法。产生器所产生的数值愈不可预测,产生器所具有的熵就愈多。熵产生器会将软件算法应用于由物理现象所产生的种子。例如,常用的PC加密程序会记录几秒钟的鼠标移动及键盘敲击的特性,以获得其所需的种子。这些动作不见得会产生不理想的熵数,且通常需要使用者某种程度的涉入。对多数的熵产生器而言,最不理想的特征就是要花很多时间,才能达到足够的熵。
所以很明显的,熵产生器无法在前述一些应用上被利用,包括安全应用上。这些应用要求只能由随机物理程序所产生真正的随机数。随机物理程序可以是通过半导体二极管或电阻的热噪声、自由执行震荡器(free-running ocsillator)所产生的频率不稳定性、或是半导体电容在一段特殊的时间周期内的充电量。这几种随机数源已用于一些商业用途的加入式(add-in)随机数产生器装置,如PCI卡及串行总线装置。这些装置在商业上的使用并不广泛,明显是因为它们不是相当慢就是相当贵。
一种可提供便宜、高效能的硬件式随机数产生器的解决方案,是将其并入微处理器内。随机数产生器可利用前述的随机物理程序产生随机数,并且成本相当低廉,因为其可并入既有的半导体晶体中。这种微处理器需要一种方式来告诉其所执行的软件,此随机数产生器是否存在。再者,应用程序也需要知道随机数产生器是否存在及/或是否运作正常,如此这些程序就不会在随机数产生器不存在或运作不正常时,还企图使用随机数产生器。
发明内容
本发明是涉及一种微处理器,其包含一随机数产生器,可依据重置自我测试的结果决定是否可用。因此,为了达成上述的目的,本发明的一项特征是,提供一种微处理器。此微处理器包括一随机数产生器,及一自我测试单元,耦接至该随机数产生器,以在随机数产生器上执行一自我测试。此微处理器亦包括一控制逻辑,耦接至自我测试单元,于该自我测试失败时将该随机数产生器除能。
另一方面,本发明的一项特征是,提出一种微处理器。此微处理器包括一随机数产生器,及一自我测试单元,耦接至该随机数产生器,可响应一重置动作,测试该随机数产生器是否正常运作。此微处理器亦包括一指令翻译器,耦接至该自我测试单元,用以侦测该微处理器的一指令集中,与该随机数产生器的运作相关的复数个指令。若该自我测试单元先前已判断该随机数产生器未正常运作,则该微处理器会响应其中一该些指令之执行,而产生一错误。
另一方面,本发明的一项特征是,提出一种微处理器。此微处理器包括一随机数产生器,及一自我测试单元,耦接至该随机数产生器,可测试该随机数产生器以判断其是否正常运作。该自我测试单元产生一信号,以指出该随机数产生器是否正常运作。此微处理器亦包括一状态指示器,耦接至该自我测试单元,依据该信号指出该随机数产生器是否可用来提供随机数。
另一方面,本发明的一项特征是,提出一种可在一微处理器中选择性地提供随机数产生功能的方法。此方法包括响应该微处理器的一随机数产生器的一重置动作,而测试该随机数产生器的功能;储存该测试的结果的一个指示;执行要求该随机数产生器的功能的一个指令;以及因应该执行动作,而以该指示回复。
本发明的优点之一是,可将随机数产生器可用与否告知软件,以使软件可在随机数产生器正常运作时,从随机数产生器取得随机数,或是在随机数产生器没有正常运作时,如依照重置自我测试的结果所判断的,从另一随机数来源取得随机数。
在参考本说明书的其余部份及所附图式后,本发明的其它特征及优点将更为明显易知。
图1是本发明的微处理器的方块图。
图2是本发明图1的微处理器中RNG单元的方块图。
图3是本发明图1微处理器中,与图1RNG单元有关的各种缓存器的方块图。
图4是根据本发明图1的微处理器执行将值加载图3XMM0缓存器的指令的运作流程图。
图5是根据本发明图1微处理器于执行XLOAD指令时的运作方块图。
图6是根据本发明图1的微处理器执行XLOAD指令的运作流程图。
图7是根据本发明图1微处理器于执行XSTORE指令时的运作方块图。
图8是根据本发明图1的微处理器执行XSTORE指令的运作流程图。
图9是根据本发明,图1微处理器进行关于随机数产生的多任务运作范例的动作流程图。
图10是根据本发明图1微处理器中,图2RNG单元的串过滤装置的方块图。
图11是根据本发明图10的串过滤装置的运作流程图。
图12是根据本发明的另一具体实施例,图1微处理器执行XSTORE指令的运作方块图。
图13是根据本发明图2RNG单元的多重缓冲运作的流程图。
图14是根据本发明的另一具体实施例,图1微处理器执行XLOAD指令的运作流程图。
图15是根据本发明的另一具体实施例,图1微处理器100执行XSTORE指令的运作流程图。
图16及图17是根据本发明的另外具体实施例,图1微处理器执行XSTORE指令的运作方块图。
图18是根据本发明的一具体实施例,如图1的处理器执行XSTORE指令的方块图。
图19是根据本发明如图18XSTORE指令时执行的一操作实例。
图20是根据本发明的一具体实施例,如图1的RNG单元减少连续位间相关性的操作流程图。
图21是为根据本发明如图1的处理器100减少连续位间相关性的一微码指令列表。
图22是根据本发明的一具体实施例,如图1的RNG单元的部分,包括有一位选择器,以减少连续位间相关性时的方块图。
图23是根据本发明,如图22的位选择器的详细方块图。
图24是显示依据本发明,图1的微处理器执行重置的自我测试的动作流程图。
图25是显示依据本发明,图1的微处理器执行图2RNG单元的相关指令的动作流程图。
其中,附图标记说明如下
100微处理器
102指令高速缓存
104指令控制器
106指令翻译器
108缓存器档案
112地址产生器
114加载单元
116执行阶段
118储存单元
122回写单元
124写入缓冲器
126读取缓冲器
128总线接口单元(BIU)
132微程序代码ROM
134SSE单元
136随机数产生器(RNG)单元
138处理器总线
142,278数据总线
144数据总线
146中断单元
148中断信号
152中断向量
202自我测试单元
204CPU ID缓存器
206,208随机位产生器
211,213计数器
212机器特定缓存器(MSR)
214、219、228、236多任务器(mux)
215、217、232解多任务器(demultiplexer)
216白化器
218移位缓存器
221增加信号
222连续数目测试(CNT)单元
223清除信号
224串过滤装置
225比较器
226控制与状态缓存器(CSR)
227充满1信号
229充满0信号
231power_cntrl信号
234,702可用字节计数
238缓存器R5
242缓冲器0
244控制逻辑
246缓冲器1
248重置信号
252产生选择信号
254原始位信号
256过滤失败信号
258max_cnt信号
262过滤致能信号
264fill_select信号
266store_select信号
268xstore信号
272xload信号
274TSPO标记
266xstore信号
282字节产生信号
284CNT致能信号
286RNG存在信号
288自我测试失败信号
292自我测试致能信号
294CNT失败信号
296直流偏压信号
298随机数据字节
302,314RNG存在位
312RNG致能位
316自我测试致能位
318自我测试失败位
322直流偏压位
324原始数值位
332,362字节计数字段
334串过滤装置致能位
336产生选择位
338串过滤装置失败位
342CNT致能位
344CNT失败位
346串过滤装置max_cnt字段
352SSE缓存器
364另一字段
372XMM0
374XMM3
376XMM5
502系统内存
50416字节的数据
704系统内存502中的位置
1002比较逻辑
1004或门
1006选择逻辑
1008与门
1012A第一加法器
1012B第二加法器
1014A第一个四个输入的多任务器
1014B第二个四个输入的多任务器
1016A第一计数器
1016B第二计数器
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指数因子信号
2206中间数据总线
2302多任务器
2402-2414执行重置之自我测试的动作流程
具体实施例方式
现请参照图1,其是表示本发明的微处理器100的方块图。图1的微处理器100为包括多个阶段的管线化微处理器,其中每一阶段负责整个程序指令执行过程的一部份,如下所述。
微处理器100包括一随机数产生器RNG单元136。微处理器100所执行的操作系统及应用程序,可能会使用随机数来执行各种功能,如数据加密、物理现象的仿真、统计分析、数值分析或是其它。RNG单元136会产生用于这些功能的随机数。RNG单元136将于下文做更详细地说明。
微处理器100也包括一指令高速缓存102。指令高速缓存102会快取从耦接至微处理器100的系统内存所提取的程序指令。
微处理器100也包括一指令控制器104,其耦接至指令高速缓存102。指令控制器104会控制从系统内存及/或指令高速缓存102提取指令的动作。指令控制器104会选取一个值给由微处理器100所维护的指令指位器(instructionpointer)。指令指位器会指定下个内存地址,以从该处提取指令。一般来说,指令指位器会循序递增,而指到下个指令。然而,流程控制指令(如分支(branch)、跳跃、副例程呼叫及返回)会将指令指位器更新为流程控制指令所指定的非循序内存地址。此外,中断可能驱使指令控制器104将指令指位器更新为非循序地址。
微处理器100也包括一中断单元146,其耦接至指令控制器104。中断单元146会接收一中断信号148及一中断向量152。微处理器100之外的组件可能会致能中断信号148,并提供中断向量152,以使微处理器100执行中断服务例程。中断单元146会依据中断向量152,决定中断服务例程的内存地址,并将中断服务例程的内存地址送到指令控制器104,以将指令指位器更新为中断服务例程地址。中断单元146也会依照微处理器100所执行的特定指令,选择性地除能及致能中断服务。亦即,若中断被除能,则即使中断线148被致能,指令指位器的内容也不会改变,直到中断被致能为止。
微处理器100也包括一指令翻译器106,其耦接至指令控制器104、中断单元146及RNG单元136。指令翻译器106会翻译从指令高速缓存102及/或系统内存所接收的指令。指令翻译器106会翻译指令,并依据翻译指令的型式采取适当的动作。指令翻译器106会翻译微处理器100的指令集中所定义的指令。若指令翻译器106要翻译未定义于微处理器100指令集中的指令,则会产生不合法的指令异常。
在一具体实施例中,微处理器100的指令集实质上近似于英特尔PentiumIII或Pentium IV微处理器的指令集。然而有利的是,本发明的微处理器100包括额外的指令,其是有关于RNG单元136的随机数产生功能。一个额外的指令为XSTORE指令,可储存RNG单元136所产生的随机数。另一额外的指令为XLOAD指令,可从系统内存将控制值加载RNG单元136中的控制与状态缓存器(control and status register,CSR)226及串流SIMD延伸(StreamingSIMD Extensions,SSE)缓存器XMM0 372,这部分在下文会配合图2及图3做说明。XSTORE及XLOAD指令在下文亦会做更详细地说明。
此外,指令翻译器106会将翻译指令的相关信息送到中断单元146,以使中断单元146能适当地致能及除能中断。再者,指令翻译器106会将翻译指令的相关信息送到RNG单元136。例如,指令翻译器106会将关于翻译的XSTORE及XLOAD指令的信息送到RNG单元136。此外,当将一值加载SSE缓存器XMM0 372的指令被翻译时,指令翻译器106会通知RNG单元136,以使RNG单元136采取某些动作,如设定标记,以指出操作系统可能会进行一工作切换,如下文所述。
在一具体实施例中,指令翻译器106会将巨指令,如Pentium III或IV的指令,翻译为由微处理器100管线所执行的一或多个微指令。
微处理器100也包括一微程序代码ROM132,其耦接至指令翻译器106。微程序代码ROM132会储存微程序代码指令,以送到指令翻译器106,由微处理器100来执行。微处理器100指令集中的某些指令,是以微程序代码来实际操作。亦即,当指令翻译器106翻译这些指令的其中一个时,指令翻译器106会使微程序代码ROM132内的一微指令例程被执行,藉以执行翻译的巨指令。在一具体实施例中,XSTORE及/或XLOAD指令是以微程序代码实际操作。此外,在一具体实施例中,XSTORE及XLOAD指令是连续执行的,此因其为不可中断的。亦即,在XSTORE及XLOAD指令的执行期间,中断会被除能。
微处理器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包括目前操作系统所熟知的缓存器。因此,当操作系统从第一工作切换到第二工作时,操作系统将缓存器档案108的缓存器(包括SSE缓存器352)中关于第一工作的内容,存到系统内存,并从系统内存回存缓存器档案108的缓存器(包括SSE缓存器352)中关于第二工作的内容。
微处理器100也包括一地址产生器112,其耦接至缓存器档案108。地址产生器112会依据存于缓存器档案108中的操作数及由指令翻译器106翻译的指令所提供的操作数,而产生内存地址。特别是,地址产生器112会产生内存地址,以指定系统内存中的位置,由XSTORE指令将多个字节的随机数据储存其中。此外,地址产生器112亦产生指定系统内存中的位置的内存地址,由XLOAD指令加载其中的控制值,以经由一数据总线142存入图2的CSR226中。
微处理器100也包括一加载单元114,其耦接至地址产生器112。加载单元114会从系统内存中加载数据至微处理器100。加载单元114也包括一数据高速缓存,用以快速存取从系统内存所读取的数据。加载单元114会经由数据总线142,将加载的数据送到微处理器100中的执行单元,如SSE单元134、RNG单元136及包含于执行阶段116中的执行单元。特别是,加载单元114会从系统内存加载控制值,存到图2的CSR226中,以执行XLOAD指令。
微处理器100也包括执行阶段116,其经由数据总线142耦接至加载单元114。执行阶段116包括执行单元,如算术逻辑单元,其用以执行算术与逻辑运算,像是加、减、乘、除及布尔运算。在一具体实施例中,执行阶段116包括一用以执行整数运算的整数单元,及一用以执行浮点运算的浮点单元。
微处理器100也包括SSE单元134,其耦接至加载单元114及指令翻译器106。SSE单元134包括算术与逻辑单元,用以执行SSE指令,如包含于PentiumIII与IV的SSE或SSE2指令集中的那些指令。在一具体实施例中,虽然图3的SSE缓存器352概念上是包含在缓存器档案108中,但实际上是位于SSE单元134中,用以储存SSE单元134所使用的操作数。
微处理器100也包括RNG单元136,其经由数据总线142耦接至指令翻译器106及加载单元114。RNG单元136提供随机数据字节以及一计数值于数据总线144上,其中该计数值是表示提供给一XSTORE指令的随机数据字节的数量。RNG单元136在下文将会配合其余图式做更详细的说明
微处理器100也包括一储存单元118,其耦接至执行单元116、SSE单元134以及RNG单元136。储存单元118会将数据储存到系统内存及加载单元114中的数据高速缓存。储存单元118会将执行单元116、SSE单元134及RNG单元136所产生的结果储存至系统内存。特别是,储存单元118会将RNG单元136在数据总线144上所提供的XSTORE指令计数及随机数据字节储存至系统内存。
微处理器100也包括一回写单元122,其耦接至执行单元116及缓存器档案108。回写单元122会将指令结果回写至缓存器档案108。
微处理器100也包括写入缓冲器124,其耦接至回写单元122。写入缓冲器124会保持等待写入至系统内存的数据,如XSTORE指令计数及数据。
微处理器100也包括一总线接口单元(BIU)128,其耦接至写入缓冲器124。BIU128是做为微处理器100与一处理器总线138的接口。处理器总线138将微处理器100耦接至系统内存。BIU128并执行处理器总线138上的总线作业,以在微处理器100与系统内存之间传递数据。特别是,BIU128会执行处理器总线138上的一或多个总线作业,以将XSTORE指令计数及数据储存至系统内存。此外,BIU128会执行处理器总线138上的一或多个总线作业,以从系统内存加载XLOAD指令控制值。
微处理器100也包括读取缓冲器126,其耦接至BIU128及缓存器档案108。对于藉由BIU128从系统内存所接收的数据,在其等待送到加载单元114或缓存器档案108时,读取缓冲器126会将其保存着。特别是,当从系统内存接收的XLOAD指令数据在等待送到加载单元114及其后的RNG单元136时,读取缓冲器126会将此数据保存着。
现请参照图2,其为本发明图1的微处理器100中RNG单元136的方块图。
RNG单元136包括控制逻辑244。控制逻辑244包括大量的组合及循序逻辑,用以控制RNG单元136中的各种组件。控制逻辑244会接收xload信号272及xstore信号268,其分别表示正执行XLOAD或XSTORE指令。控制逻辑244也会接收重置信号248,其表示正在重置RNG单元136。底下会结合RNG单元136的其余部分,对控制逻辑244做更详细地说明。
RNG单元136也包括一自我测试单元202,其耦接至控制逻辑244。自我测试单元202会从一控制与状态缓存器,称为机器特定缓存器(MSR)212,接收自我测试致能信号292,MSR212将在下文配合图3做更详细地说明。MSR212也耦接至控制逻辑244。自我测试单元202会将自我测试失败信号288送到控制逻辑244。若自我测试单元202被自我测试致能信号292所致能,则自我测试单元202会执行各种RNG单元136的自我测试。若自我测试失败,自我测试单元202会产生真值的自我测试失败信号288,并送至MSR212。在一具体实施例中,自我测试单元202会执行随机数产生器统计测试,如联邦信息处理标准(FIPS)刊物第140-2期的第35-36页所定义的,此处予以参考并入。
在一具体实施例中,自我测试单元202在使用者的要求下执行自我测试。在一具体实施例中,在微处理器100重置后,自我测试单元202会执行自我测试。若自我测试失败,不论是使用者所要求的或重置后所做的,自我测试单元202都会产生真值的自我测试失败信号288,其是反映于图3中MSR212的自我测试失败位318。控制逻辑244在重置时,会检查自我测试失败位318。若自我测试失败位318为真,控制逻辑244会设定一伪值的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的副本。在一具体实施例中,应用程序可藉由执行IA-32指令集中的CPUID指令来读取CPUID缓存器204。若RNG存在位302为伪,则表示RNG单元136并不存在于微处理器100,且微处理器100不具备随机数产生的特征。有利的是,需要随机数的应用可透过RNG存在位302,来侦测微处理器100中的RNG单元136是否存在,且若RNG单元136不存在,则选择由另一个也许效能较低的来源来取得随机数。
RNG单元136也包括两个耦接至控制逻辑244的随机位产生器,称为随机位产生器0206及随机位产生器1208。其随机位产生器206及208皆会产生一串随机位,由RNG单元136累积成随机数据的字节。随机位产生器206及208都会接收一电源控制(Power_cntrl)信号231,其是用以指定是否关闭随机位产生器206及208的电源。在一具体实施例中,关闭随机位产生器206及208电源的动作包括不送时钟信号给它们。随机位产生器206及208皆会依据微处理器100的随机电气特性(如热噪声),而产生一连串随机数据位。
随机位产生器0206会从MSR212接收一直流偏压信号296。直流偏压信号296是传送图3中MSR 212的直流偏压位322所存的值。直流偏压信号296的值指定一直流偏压电压,以部分地控制随机位产生器0206中的自发振铃振荡器的工作电压。
随以下申请中的美国专利案,申请号为10/046055、10/046054及10/046057,标题分别为「用以产生随机数的装置」、「振荡器偏压变化机制」及「振荡器频率变化机制」(文件编号为CNTR.2113、CNTR.2155及CNTR.2156),其中均对随机位产生器0206做了详细说明,此处全部予以参考并入。
RNG单元136也包括一具有两输入端的多任务器214,其输入端耦接至随机位产生器206及208的输出端。多任务器214依据CSR226所提供的产生器选择信号252,来选择两输入端的其中一个。产生器选择信号252会传送图3中CSR226的产生器选择位336所储存的值。
RNG单元136也包括一范纽曼白化器216,或称压缩器,其耦接至多任务器214的输出端。白化器216是藉由从MSR212所接收的原始位信号254,而选择性地被致能/除能。原始位信号254会传送储存于图3中MSR212的原始位字段324中的值。若原始位信号254为真,则白化器216让多任务器214所接收的位直接通过而输出,并不执行白化的功能。白化器216是依据一预定的输入/输出函数,接收来自多任务器214的一对位并输出两者中任一个位或都不输出,藉以明显降低可能存在于随机位产生器206及208的残余偏压。白化器216的输入/输出函数是如下表一所示。
表一
RNG单元136也包括一8位的移位缓存器218,其耦接至白化器216。移位缓存器218会暂存从白化器216所接收的随机数据位,将其累积成8位的字节,并输出所累积的随机数据字节。移位缓存器218将一送至控制逻辑244的字节产生信号282设定为真,以表示其已累积并输出一随机数据字节298。
RNG单元136也包括一连续数目测试(CNT)单元222,其耦接至移位缓存器218的输出端。CNT单元222会从移位缓存器218接收随机字节298,并对随机字节298进行一连续随机数产生器测试。CNT单元222是依据从CSR226所接收的CNT致能信号284,而选择性地被致能/除能。CNT致能信号284会传送储存于图3中CSR226的CNT致能位342中的值。若连续随机数产生器测试失败,则CNT单元222将一送到CSR226的CNT失败信号294设定为真,并储存于图3中CSR226的CNT失败位344中。
在一具体实施例中,CNT单元222所执行的连续随机数产生器测试,实质上符合FIPS第140-2期中第37页所述的连续随机数产生器测试,其在此予以参考并入。在一具体实施例中,CNT单元222会使用二个8字节的缓冲器(称为「旧」及「新」),来执行测试。在重置及自我测试(若有被致能)后,由移位缓存器218所传送的前八个字节会累积于旧缓冲器中。接下来的八个字节则累积于新缓冲器中。执行XSTORE指令时,旧缓冲器中的8个字节会与新缓冲器中的8个字节做比较。若字节不相等,测试即通过,且新缓冲器中的8个字节被移到旧缓冲器。新缓冲器则被清除,以等待累积新的8个字节。然而,若字节相等,则CNT单元222会将CNT失败信号294设为真,以表示连续随机数产生器测试失败。
在一具体实施例中,只要设定图3的CNT致能位342及CNT失败位344,XSTORE指令传回的可用字节计数值就为0。在一具体实施例中,微处理器100在特定的XSTORE指令执行时,将可用字节计数值及随机数据字节储存至系统内存,其中特定XSTORE指令的执行是激活了该失败的连续随机数产生器测试。
在一具体实施例中,连续随机数产生器测试不会横跨数个并未全部致能该测试的工作。亦即,当CNT致能位342被设定时,新及旧的缓冲器皆会更新,并且连续随机数产生器测试只会因执行XSTORE指令而进行。因此,可确保一特定的工作绝不会接收两组连续且其值相等的8个字节。然而,若二个工作正执行,且其中一个设定CNT致能位342,而另一个并未设定,则RNG单元136可能以XSTORE指令,将8个字节储存至其中一个工作,并产生工作切换,而RNG单元136再以XSTORE指令,将与先前8个字节相等的8个字节储存至另一个工作;然而,在此情况下,连续随机数产生器测试将不会失败。
RNG单元136也包括一串过滤装置(string filter)224,其耦接至移位缓存器218的输出端。串过滤装置224会从移位缓存器218接收随机字节298,并选择性地丢弃某些随机字节,如底下所述,且输出未丢弃的随机字节。串过滤装置224会确保RNG单元136不会产生比一指定值长的连续相似位(亦即连续的0位串或连续的1位串)。此指定值是由从CSR 226所接收的最大计数(max_cnt)信号258来指定。max_cnt信号258会传送图3中CSR226的串过滤装置最大计数字段346所指定的值。在一具体实施例中,max_cnt346的默认值为26个位。在一具体实施例中,串过滤装置最大计数字段346的值必须至少为8。若串过滤装置224侦测到一连续的相似位串长度超过max_cnt258,则串过滤装置224将一过滤失败信号256设为真,此信号是储存于图3中CSR226的串过滤装置失败位338中。串过滤装置224在底下会配合图10到12做更详细地说明。
RNG单元136也包括一具有两输入端的第二多任务器228。其中一输入端是耦接至串过滤装置224的输出端,而另一输入端是耦接至移位缓存器218的输出端。多任务器228依据CSR226所提供的过滤致能信号262,而选择其中一输入端,以传送图3中CSR226之串过滤装置致能位334所存的值。
RNG单元136也包括一个具有一输入端与两输出端的解多任务器232,其输入端是耦接至多任务器228的输出。解多任务器电路是包括单一数据输入端及复数个数据输出端。解多任务器也包括一控制输入端。解多任务器会依据控制输入端的信号来选择复数个数据输出端的其中一个,并将数据输入端所接收的数据送到所选的输出端。此处解多任务器232则依据控制逻辑244所提供的填充选择(fill_select)信号264,将输入端所接收的随机数据字节选择性地送到其中一个输出端。
RNG单元136也包括两个数据缓冲器,标示为缓冲器0242及缓冲器1246,皆耦接至解多任务器232的输出端。缓冲器0242及缓冲器1246藉由XSTORE指令,来累积要储存至系统内存的随机数据字节。在一具体实施例中,缓冲器0242及缓冲器1246各可储存15个字节的随机数据。在一具体实施例中,缓冲器0242及缓冲器1246各可储存16个字节的随机数据。
RNG单元136也包括一具有两个输入端的第三多任务器236,其输入端是耦接至缓冲器0242及缓冲器1246的输出端。多任务器236依据控制逻辑244所提供的储存选择(store_select)信号266,选取其输入端的其中一组随机数据字节,以输出至一数据总线278上。
RNG单元136也包括一TSPO标记缓存器274,其耦接至控制逻辑244。TSPO标记缓存器274储存一标记,用以表示操作系统所进行的工作切换是否可能发生。TSPO标记缓存器274的使用在底下会做更详细地说明。
RNG单元136也包括有两输入端的第二解多任务器215,连接到控制逻辑244。第二解多任务器215的输入端接收由控制逻辑244所产生的一递增信号221。当每次随机数据字节被存入buf0242或buf1246,控制逻辑244宣告递增信号221。解多任务器215将所接收到的递增信号221提供给根据fill_select信号264所选择的输出端。
RNG单元136也包括一具有两输入端的第三解多任务器217,其耦接至控制逻辑244。解多任务器217的输入端是耦接至控制逻辑244,以接收其所产生的清除信号223。每当执行一XSTORE指令时,控制逻辑244会将清除信号223设为真,以使得有效的随机数据字节从缓冲器0242或缓冲器1246中移除。解多任务器217依据store_select信号266,将其输入端所接收的清除信号223选择性地送到其中一输出端。
RNG单元136也包括两个计数器,标示为计数器0211及计数器1213,其耦接至解多任务器215及解多任务器217。计数器0211及计数器1213各具有一递增(或计数)输入端。计数输入端是耦接至解多任务器215的输出端。因此,当控制逻辑244将递增信号221设为真时,计数器0211及计数器1213中由fill_select信号264所指定的一个会递增。计数器0211及计数器1213中也各具有一清除输入端。清除输入端是耦接至解多任务器217的输出端。因此,当控制逻辑244将清除信号223设为真时,计数器0211及计数器1213中由store_select信号266所指定的一个会被清除为0。
RNG单元136也包括两个比较器225,其耦接至计数器0211及计数器1213的输出端。比较器225将计数器0211及计数器1213所输出的计数值,与计数器0211及计数器1213可储存的字节数目做比较,以判断计数器0211及计数器1213是否已满,并产生fu110信号229及fu111信号227,以将比较结果告知控制逻辑244。
RNG单元136也包括一具有两个输入端的第四多任务器219,其输入端是耦接至计数器0211及计数器1213的输出端。多任务器219会依据储存选择(store_select)信号266,选取其输入端的其中一计数值,以输出作为可用字节计数234。可用字节计数234也会送到CSR226。
RNG单元136也包括一缓存器,标示为RNG R5 238,或R5 238。R5 238具有一输入端,其耦接至多任务器236的输出端,以接收数据字节278。R5 238具有另一个输入端,其耦接至多任务器219的输出端,以接收可用字节计数234。R5 238的输出端是耦接至图1的数据总线144。R5 238会保持XSTORE指令的计数值及数据。在一具体实施例中,计数值是储存于R5 238的最小有效字节中,而有效的数据字节则储存于与此计数值相连的有效字节的位置。在一具体实施例中,R5 238可储存一计数字节,加上缓冲器0242及缓冲器1246所能储存的随机数据字节。
在一具体实施例中,RNG单元136包括四个缓冲器,而非两个。每一缓冲器可储存多达八个字节的随机数据。在此实施例中,解多任务器215、217及232包含具四个输出端的解多任务器;多任务器219及236包含具四个输入端的多任务器;比较器225包括四个比较器,以产生四个充满输出;而fill_select信号264及store_select信号266包括二个位,用以选择四个计数器及缓冲器的其中一个。
现请参照图3,其是本发明图1微处理器100中,与图1RNG单元136有关的各种缓存器的方块图。
图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遇到这些指令时,将产生无效指令异常。此外,读取MSR212中的位,结果是未定义,而尝试写入,则不会产生任何效果。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遇到这些指令时,将产生无效指令异常。此外,读取MSR212中的位,结果是未定义,而尝试写入,则不会产生任何效果。RNG致能位312的值在重置之后,即变为0。
MSR212也包括一只读的RNG存在位314。RNG存在位314是表示RNG单元136是否存在于微处理器100中。若RNG存在位314为0,则RNG单元136不能藉由设定RNG致能位312来致能,并且,读取MSR212中的位,结果是未定义,而尝试写入,则不会产生任何效果。此外,若RNG单元136的自我测试失败,则RNG存在位314将被清除,如前文图2部分所述。
MSR212也包括一只读的统计自我测试致能位316。自我测试致能位316是表示前述图2部分的重置后的自我测试目前是否致能。若自我测试致能位316为0,则在重置之后,不会执行自我测试。若自我测试致能位316为1,则在重置之后,会执行自我测试。在一具体实施例中,在微处理器100的热重置及电源开启重置之后,会执行自我测试。
MSR212也包括一只读的统计自我测试失败位318。自我测试失败位318是表示前述图2部分的最近重置后的自我测试是否失败。在一具体实施例中,若自我测试失败位318为1,则RNG单元136无法被致能。
MSR212也包括可写入的直流偏压位322。在一具体实施例中,直流偏压位322包括三个位。直流偏压位322是用以控制送到随机位产生器0206的直流偏压,其会影响随机位产生器0206的运作速度及可能的随机度。在一具体实施例中,若在重置时执行统计自我测试,则自我测试单元202会决定出直流偏压位322的正确值或最佳值,并将其设定为此值。在重置之后,直流偏压位322的值即变为000。
MSR212也包括可写入的原始位位324。若原始位位324设定为0,则图2的白化器216会执行前文图2部分所述的白化功能,并将白化位传送到移位缓存器218。若原始位位324设定为1,则白化器216不会执行白化功能,而将来自于多任务器214的原始位传送到移位缓存器218。在重置之后,原始位位324的值即变为0。
图3也显示图2中的CSR226。在一具体实施例中,CSR226为128位的缓存器。CSR226包括只读的可用字节计数字段332。可用字节计数字段332会指明在store_select信号266所选择的缓冲器0242或缓冲器1246中,目前有多少字节的随机数据可藉由XSTORE指令来储存。若有需要,可藉软件来读取可用字节计数字段332,以判断目前有多少随机数据字节可藉由XSTORE指令来储存。由于RNG单元136会将字节同步地累积至缓冲器0242及缓冲器1246,在执行XSTORE的时候,可储存的字节的实际数目可能大于先前藉XLOAD所读取之可用字节计数332。在RNG单元136致能之后,可用字节计数字段332的值即变为0。
CSR226也包括可写入的串过滤装置致能位334。若串过滤装置致能位334为1,则串过滤装置224被致能;否则串过滤装置224被除能。串过滤装置224的运作在底下会配合图10到图12,做更详细地说明。在RNG单元136致能之后,串过滤装置致能位334的值即变为0。
CSR226也包括可写入的产生器选择位336。若产生器选择位336设定为0,则选取随机位产生器0206,以经由图2的多任务器214,提供随机比特流加以累积;否则,会选取随机位产生器1208。在RNG单元136致能之后,产生器选择位336的值即变为0。
CSR226也包括串过滤装置失败位338。若串过滤装置失败位338设定为1,是表示串过滤装置224侦测到一连续的相似位串长于串过滤装置max_cnt字段346所指定的值,如前文图2及图10到图12部分所述。只有RNG单元136可将串过滤装置失败位338设定为1。然而,软件可藉由将0写入其中,清除串过滤装置失败位338。在一具体实施例中,过滤失败位338可藉由过滤失败信号256的脉冲设定为1,并且维持于1,直到软件将其清除为止。在RNG单元136致能之后,串过滤装置失败位338的值即变为0。
CSR226也包括可写入的计数(CNT)致能位342。若CNT致能位342设定为1,则CNT单元222会执行连续的随机数产生器测试,如图2部分所述。在RNG单元136致能之后,CNT致能位342的值即变为0。
CSR226也包括只读的CNT失败位344。若CNT致能位342为1且连续随机数产生器测试失败,则RNG单元136将CNT失败位344设定为1。在一具体实施例中,当CNT致能位342及CNT失败位344同时为1时,执行XSTORE指令会将可用字节计数值0储存至系统内存,而不会将数据字节储存于系统内存。因此,若一工作设定了CNT致能位342,并且在此工作执行时发生失败,则针对此工作,RNG单元136会有效地被除能。然而,RNG单元136不会针对其它未设定CNT致能位342的工作而除能。在RNG单元136致能之后,CNT失败位344的值即变为0。
CSR226也包括可写入的串过滤装置max_cnt字段346。软件将值写入串过滤装置max_cnt字段346,以指定可容忍的最大数目的可允许连续相似位,如底下图10到图12部分所述。在一具体实施例中,串过滤装置max_cnt字段346包括5个位。在一具体实施例中,串过滤装置max_cnt字段346的默认值为26。
在一具体实施例中,MSR212的各个字段是包含于CSR226,而不是MSR212中。因此,MSR212的值会以CSR226来做储存及回存,以适用于多任务运作,如此处所述,特别是图4到图9的部分。
图3也显示图2的RNGR5缓存器238。R5 238包括二个字段可用字节计数字段362,以及用于储存随机数据字节的另一字段364,如上所述。在一具体实施例中,有效的随机数据字节会向右调整至紧邻可用字节计数字段362。
图3也显示SSE缓存器352。SSE缓存器352包括8个128位的缓存器,标示为XMM0到XMM7。在图3中,XMM0称为XMM0 372、XMM3称为XMM3 376、而XMM5称为XMM5 374。在一具体实施例中,SSE缓存器352实质上近似于Pentium III或IV所包含的SSE缓存器,如IA-32英特尔架构软件开发者手册第一册基本架构(2002年)的第10-14页所述,其在此加以参考并入。RNG CSR 226会遮蔽(shadow)XMM0 372,而RNG R5 238会遮蔽XMM5 374,如下文所述。
在一具体实施例中,微处理器100包括各种熔丝,在微处理器100的制造过程中,其会暂时或永久地加以设定,以便于重置时,能选取CSR226及MSR212中各个位的值,取代前述的重置值。
现请参照图4,其根据本发明,图1的微处理器100执行将值加载图3XMM0缓存器372的指令的运作流程图。加载XMM0 372的指令是由微处理器100执行,其从系统内存将值加载XMM0缓存器372中,如MOVAPS指令。MOVAPS指令将来自系统内存的数据搬移到指定的XMM缓存器,反之亦然,这部分是叙述于IA-32英特尔架构软件开发者手册第二册指令集参考(2001年)的第3-443页到第3-444页,其在此予以参考并入。其它从系统内存加载XMM0 372的指令,则如MOVAPD及MOVDQA。由于XMM0 372是操作系统在进行工作切换时,被储存至内存及从内存回存的缓存器,所以当工作切换发生时,操作系统会执行如MOVAPS的指令,以从内存回存切换后的工作中,XMM0 372先前的值。流程从方块402开始。
于方块402中,微处理器100藉由控制一指令(如MOVAPS)于系统内存所指定位置的值,而执行该指令,并将此值加载XMM0 372。因此,任何时候从内存加载XMM0 372,皆可能发生工作切换。流程继续进行至方块404。
于方块404中,指令翻译器106会告知RNG单元136,MOVAPS指令(或其它从内存加载XMM0 372的类似指令)已被翻译。一旦此值已加载XMM0372,RNG单元136的控制逻辑244会设定TSPO标记274,以表示可能发生工作切换。流程会结束于方块404。
现请参照图5,其是根据本发明,图1微处理器100于执行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指定了系统内存502中的一内存地址。XLOAD指令的运作与MOVAPS指令类似,不过前者除了XMM0 372外,亦会将系统内存的值加载CSR226。在一具体实施例中,XLOAD会将16个字节的数据504从memaddr移到CSR226及XMM0 372,如图所示。在一具体实施例中,XLOAD指令的运算码值为0x0F 0x5A,其后接着x86指令所指定的标准mod R/M缓存器及地址格式字节。在另一具体实施例中,XLOAD指令的运算码值则为0x0F 0xA60xC0。若XLOAD指令指定SSE缓存器352中的一个,而非XMM0 372,则会加载指定的SSE缓存器352;然而,并不会加载CSR226。
现请参照图6,其根据本发明,图1的微处理器100执行将值加载图3XMM0缓存器372的XLOAD指令的运作流程图。流程从方块602开始。
于方块602中,微处理器100将系统内存502中,XLOAD指令所指定的内存地址的值,加载图2的CSR226及图3的XMM0 372,如图5所示。流程继续进行至方块604。
于方块604中,由于累积于缓冲器0242及缓冲器1246的随机数据字节并不会随着CSR226中的控制值而产生,其中这些控制值是正加载CSR226的新工作之所需,所以RNG单元136会响应CSR226的加载动作,而丢弃缓冲器0242及缓冲器1246的内容。流程继续进行至方块606。
于方块606中,由于缓冲器0242及缓冲器1246中的随机数据字节在方块604时被丢弃,所以RNG单元136会将计数器0211及计数器1213中的可用字节计数清除为0。流程继续进行至方块608。
于方块608中,RNG单元136重新开始累积随机数。亦即,产生器选择信号252所选取的随机位产生器206或208,在随机位产生器0206的情况下,会依据直流偏压信号296来产生随机位;白化器216则依据原始位信号254,选择性地白化这些位;CNT单元222根据CNT致能信号284,选择性地执行连续随机数产生器测试;串过滤装置224根据过滤致能信号262及max_cnt信号258,选择性地过滤移位缓存器218所累积的字节;缓冲器0242及缓冲器1246依据fill_select信号264,累积随机数据字节;而计数器0211及计数器1213则依据fill_select信号264,计算缓冲器0242及缓冲器1246中所累积的字节数目。
于方块612中,由于CSR226已被更新为目前工作所需要的控制值,所以控制逻辑244会清除TSPO标记274。流程会结束于方块612。
现请参照图7,其是根据本发明,图1微处理器100于执行XSTORE指令时的运作方块图。XSTORE指令是软件藉以将可用随机数据字节的计数值及本身从R5 238储存至系统内存的工具。因为RNG R5 238不存在于PentiumIII或IV中,所以需要Pentium III或IV指令集外的新指令,以储存RNG R5238。有利的是,XSTORE指令会以整体不可分割的方式,将计数值及数据字节写入内存,便于以RNG单元136进行多任务操作,如此处所述。亦即,XSTORE指令是不可中断的。因此,当某工作执行XSTORE指令时,另一工作不可中断XSTORE指令来修改要藉由XSTORE指令,写入系统内存的可用字节计数或随机数据字节。因此,藉由整体不可分割的方式写入数据及计数值,XSTORE指令提供了数量可变的随机数据字节,本质上有利地便于多任务的进行。
图7是显示XSTORE指令的格式,其为
XSTORE memaddr,XMM5
Memaddr会指定系统内存502中的内存地址。XSTORE指令的运作与MOVAPS指令类似,除了所指定的XMM缓存器不会储存至系统内存;取而代之的是,若指定了XMM5 374,则R5 238会被存至系统内存。亦即,R5 238会遮蔽XMM5 374。XSTORE会将图3之可用有效随机数据字节362的计数值,从R5 238移到系统内存502中memaddr的位置702,如图所示。此外,XSTORE将计数值362所指定的有效随机字节的数据364,移到系统内存502中紧邻可用字节计数702的位置704,如图所示。
在一具体实施例中,XSTORE指令的运算码值为0x0F 0x5B,其后接着x86指令所指定的标准mod R/M缓存器及地址格式字节。在另一具体实施例中,XSTORE指令的运算码值为0x0F 0xA7 0xC0。在一具体实施例中,XSTORE指令要求缓存器档案108中的ESEDI缓存器来指定memaddr,亦即,指到要储存计数及随机数据字节的起始内存地址。在一具体实施例中,XSTORE不允许区段重叠。若XSTORE指令指定了SSE缓存器352的其中一个,而非XMM5 374,则结果会呈未定状态。
在一具体实施例中,微处理器100储存于系统内存的随机数据字节704的数目,是等于也写入系统内存的可用字节计数702。
在另一具体实施例中,微处理器100储存于系统内存的随机数据字节704的数目,是等于一个比RNG R5 238中的字节还少的数目。亦即,若RNG R5238为16个字节的缓存器,可储存最多达15个随机数据字节364及一个字节的可用字节计数362,则微处理器100会将16个字节存至系统内存50215个字节的随机数据存到随机数据字节704的位置,而一个计数字节则存到可用字节计数702的位置。然而,在写入系统内存502的15个字节中,某些可能不是有效的。在一具体实施例中,写入内存的字节的数目皆为2的次方。只有前N个字节是有效的,其中N为可用字节计数702。
在此具体实施例中,RNG单元136会清除XSTORE运算所指涉的缓冲器(亦即,图2的缓冲器0242或缓冲器1246)。藉由清除缓冲器,微处理器100可避免各个工作看到彼此的随机数据所产生的问题,而提升安全性。例如,假设第一工作执行第一XSTORE运算,将15个字节的随机数据从缓冲器0 242储存到系统内存,并执行第二XSTORE运算,将15个字节的随机数据从缓冲器1246储存到系统内存;然后操作系统切换到第二工作,其会在RNG单元136将任何随机数据字节累积到缓冲器0 242之前,立即执行XSTORE运算。若在第一XSTORE运算后,RNG单元136未清除缓冲器0 242,则第一工作所接收到的随机数据也会储存到第二工作的内存位置,如此会使第二工作看到第一工作的随机数据。
在一具体实施例中,XSTORE指令指定了要存至系统内存的最大数目的随机数据字节。在此具体实施例中,该最大数目是指定于缓存器档案108的其中一个一般用途缓存器中,如ECX。在此具体实施例中,若store_select信号266所选取的缓冲器0242或缓冲器1246中的可用字节多于ECX中所指定的最大数目,则微处理器100只会储存ECX中所指定的最大数目的字节;否则,XSTORE指令会储存可用数目的有效字节。在前述任一种情况下,XSTORE指令皆会将存至系统内存502的数据字节位置704的有效随机数据字节的数量,储存到可用字节计数位置702。
在一具体实施例中,XSTORE指令指定了要存至系统内存的所需数目的随机数据字节。在此具体实施例中,该所需数目是指定于缓存器档案108的其中一个一般用途缓存器中,如ECX。在此具体实施例中,XSTORE指令是加上一x86 REP前置码(prefix)。在此具体实施例中,REP XSTORE指令并非需连续执行的。亦即,因为所需之随机字节的数目可能会很大,所以REPXSTORE是可中断的。然而,由于所储存的随机数据字节的数目是不可变的(亦即,软件知道将要存至内存的随机数据字节的数目),所以指令不必连续执行。
现请参照图8,其是根据本发明,图1的微处理器100执行来自于图3XMM5缓存器的XSTORE指令的运作流程图。流程从方块802开始。
在方块802中,对于图1的指令翻译器106通知XSTORE指令已翻译,中断单元146会响应以将中断除能。流程继续进行判断方块804。
在判断方块804中,图2的控制逻辑244会检查TSPO标记274,以判断标记是否设定。若设定,则流程会继续进行方块806。否则,流程会继续进行方块816。
在方块806中,RNG单元136会将XMM0 372的内容复制到CSR226,并且会清除TSPO标记274。由于TSPO标记274是表示自前次XSTORE或XLOAD执行以后,工作切换已可能发生,就如图4的步骤402中,从系统内存加载XMM0 372所表示的,所以CSR226可能不具有目前执行XSTORE指令的工作所需的正确控制值。因此,XSTORE指令必须以正确的控制值来更新CSR 226。正确值是储存于XMM0 372中,此因当工作初始时,该正确控制值是藉由执行XLOAD而被加载XMM0 372及CSR226中,而后当操作系统切回至目前工作时,正确控制值亦被回存至XMM0 372。流程会继续进行方块808。
在方块808中,因为累积于缓冲器0 242及缓冲器1 246的随机数据字节,不会随着CSR中新工作所需的新控制值而产生,其中这些新控制值是于方块806中被复制到CSR226中,所以RNG单元136会响应CSR226的加载,而丢弃缓冲器0 242及缓冲器1 246的内容。流程会继续进行方块812。
在方块812中,因为在方块808,会丢弃在缓冲器0 242及缓冲器1 246中的随机数据字节,所以在计数器0 211及计数器1 213中,RNG单元136会将可用字节计数清除为0。流程会继续进行方块814。
在方块814中,RNG单元136会重新开始随机数的累积,如图6的方块608部分所述。流程会继续进行方块816。
在方块816中,RNG单元136会连续地将R5 238储存于系统内存502中,由XSTORE指令所指定的内存地址,其会保持store_select信号266所指定的计数器0 211或计数器1 213的值,以及store_select信号266所指定的缓冲器0 242或缓冲器1 246中的有效随机数据字节,如图7所示。流程会继续进行方块818。
在方块818中,因为在方块816,有效随机数据字节已被储存至内存的动作所消耗,所以控制逻辑244会将清除信号223设为真,以清除store_select信号266所指定的计数器0 211或计数器1 213。流程会继续进行方块822。
在方块822中,控制逻辑244会更新store_select信号266。亦即,若store_select信号266为0,则控制逻辑244会将store_select信号266更新为1。反之,若store_select信号266为1,则控制逻辑244会将store_select信号266更新为0。流程会继续进行方块824。
在方块824中,因为已完成XSTORE指令的执行,所以中断单元146会使中断致能。流程会结束于方块824。
现在参照图9,其是根据本发明,图1微处理器100进行关于随机数产生的多任务运作范例的动作流程图。图9的流程图是绘示典型的状况,其中两个工作皆初始化RNG单元136,并执行XSTORE指令,将随机数据字节储存至内存。图9是本发明如何有利支持两个工作(工作A及工作B)间的多任务,即使操作系统不支持储存及回存RNG单元136的状态(即CSR226)。流程从方块902开始。
在方块902中,会发生重置,这会使控制逻辑244清除TSPO标记274。流程会继续进行方块904。
在方块904中,操作系统会激活工作A,并且工作A的初始码会执行XLOAD至XMM0 372的指令,以所要的控制值(表示为值A)来初始化CSR226及XMM0 372。流程会继续进行方块906。
在方块906中,根据图6的方块604、606、608以及612,RNG单元136会响应XLOAD,而丢弃缓冲器0242及缓冲器1246的内容、清除计数器0211及计数器1213、重新开始随机数的产生与累积以及清除TSPO标记274。流程会继续进行方块908。
在方块908中,工作A执行XSTORE指令,以储存依据方块904加载至CSR226的控制值A所产生的随机数据。流程会继续进行方块912。
在方块912中,为了执行前一方块的XSTORE,RNG单元136会连续地将于方块906重新开始后所累积的计数值及数据,储存至系统内存,如图7及图8所示。流程会继续进行方块914。
在方块914中,操作系统会执行从工作A到工作B的工作切换。其中,操作系统会将XMM0 372的值(其包含控制值A)储存至系统内存,以保留工作A的状态。然而,操作系统不知道CSR226的情况,所以操作系统不会将CSR226储存至系统内存以保留其状态。流程会继续进行方块916。
在方块916中,根据图4的步骤404,RNG单元136会响应在方块914的XMM0 372的加载,而设定TSPO标记274。流程会继续进行方块918。
在方块918中,操作系统激活工作B,并且工作B的初始码会执行XLOAD至XMM0 372的指令,以所要的控制值(表示为值B)来初始化CSR226及XMM0 372。流程会继续进行方块922。
在方块922中,根据图6的方块604、606、608以及612,RNG单元136会响应XLOAD,而丢弃缓冲器0242及缓冲器1246的内容、清除计数器0211及计数器1213、重新开始随机数的产生与累积以及清除TSPO标记274。流程会继续进行方块924。
在方块924中,工作B执行XSTORE指令,以储存依据方块918加载至CSR226的控制值B所产生的随机数据。流程会继续进行方块924。
在方块926中,为了执行前一方块的XSTORE,RNG单元136会连续地将于方块922重新开始后所累积的计数值及数据,储存至系统内存,如图7及图8所示。流程会继续进行方块928。
在方块928中,操作系统会执行从工作B到工作A的工作切换。其中,操作系统会将XMM0 372的值(其包含控制值B)储存至系统内存,以保留工作B的状态。然而,操作系统不知道CSR226的情况,所以操作系统不会将CSR226储存至系统内存以保留其状态。此外,操作系统会回存工作A的状态,其包括将先前在方块914所保留的值A,从系统内存加载到XMM0 372。流程会继续进行方块932。
在方块932中,根据图4的步骤404,RNG单元136会响应在方块928的XMM0 372的加载,而设定TSPO标记274。流程会继续进行方块934。
在方块934中,工作A执行XSTORE指令,以储存依据方块904加载至CSR226的控制值A所产生的随机数据。然而,在方块918,CSR226中的值A会被覆写。因此,目前累积于缓冲器0242及缓冲器1246的随机数据字节并非依据值A产生,而是依据值B而产生。流程会继续进行方块936。
在方块936中,RNG单元136依图8的方块804,判断TSPO标记274已设定,于是会依据图8的方块806,将XMM0 372的内容复制到CSR226,藉以将值A回存至CSR226。此外,由于CSR226已被回存,所以根据方块806,RNG单元136会清除TSPO标记274。流程会继续进行方块938。
在方块938中,根据图8的方块808、812以及814,RNG单元136会响应方块936中复制到CSR226的动作,而丢弃缓冲器0242及缓冲器1246的内容、清除计数器0211与计数器1213以及重新开始随机数的产生及累积。流程会继续进行方块942。
在方块942中,为执行方块934的XSTORE,RNG单元136会连续地将于先前的方块重新开始后所累积的计数值及数据,储存至系统内存,如图7及图8所示。在此情况下,由于在先前方块中,已清除计数器0211及计数器1213,并丢弃缓冲器0242及缓冲器1246的内容,所以计数值为0,且未有有效随机数据字节储存到系统内存中。流程会继续进行方块944。
在方块944中,工作A执行XSTORE指令,以储存依据方块904加载至CSR226的控制值A所产生的随机数据,其中CSR226在方块936,已回存为值A。流程会继续进行方块946。
在方块946中,为执行先前方块的XSTORE,RNG单元136会连续地将于方块938重新开始后所累积的计数值及数据,储存至系统内存,如图7及图8所示。流程会继续进行方块948。
在方块948中,工作A执行XSTORE指令,以储存依据方块904加载至CSR226的控制值A所产生的随机数据,其中CSR226在方块936,已回存为值A。流程会继续进行方块952。
在方块952中,为执行先前方块的XSTORE,RNG单元136会将于方块938重新开始后所累积的计数值及数据,扣掉方块944中由前次XSTORE所储存的字节,再将结果连续地储存至系统内存,如图7及图8所示。流程则结束于方块952。
现在参照图10,其是根据本发明,图1微处理器100中,图2RNG单元136的串过滤装置224的方块图。
配合本发明的目的,前导的1位是定义为一个字节开头的连续1位。一个字节可能包含0到8个前导的1位。例如,字节00011111具有5个前导的1位;字节11111110具有0个前导的1位;而字节11111111则具有8个前导的1位。
配合本发明的目的,前导的0位是定义为一个字节开头的连续0位。一个字节可能包含0到8个前导的0位。例如,字节11100000具有5个前导的0位;字节00000001具有0个前导的0位;而字节00000000则具有8个前导的0位。
配合本发明的目的,尾端的1位是定义为一个字节结尾的连续1位;然而一个均为1的字节则定义为没有尾端的1位。一个字节可能包含0到7个尾端的1位。例如,字节11110000具有4个尾端的1位;字节11111110具有7个尾端的1位;字节01111111具有0个尾端的1位;而字节11111111则具有0个尾端的1位。
配合本发明的目的,尾端的0位是定义为一个字节结尾的连续0位;然而一个均为0的字节则定义为没有尾端的0位。一个字节可能包含0到7个尾端的0位。例如,字节00001111具有4个尾端的0位;字节00000001具有7个尾端的0位;字节10000000具有0个尾端的0位;而字节00000000则具有0个尾端的1位。
串过滤装置224包括比较逻辑1002。比较逻辑1002会从图2的移位缓存器218接收随机数据字节298。比较逻辑1002会检查随机数据字节298中的位值,并且产生用于侦测1及0之连续位串的各种信号,如以下所述。
比较逻辑1002会产生num_leading_ones信号1022A,以指定随机数据字节298中前导1位的数目。
比较逻辑1002会产生num_trailing_ones信号1028A,以指定随机数据字节298中尾端1位的数目。
比较逻辑1002也会产生all_ones信号1048A,若随机数据字节298包含均为1的位,则此信号为真。
比较逻辑1002也会产生leading_ones信号1036A,若随机数据字节298包含前导的1位,则此信号为真。
比较逻辑1002也会产生trailing_ones信号1038A,若随机数据字节包含尾端的1位,则此信号为真。
串过滤装置224也包括第一计数器1016A,以储存连续1位的现时计数。在一具体实施例中,计数器1016A包括一6位的缓存器。计数器1016A的输出为ones_cnt信号1024A。
串过滤装置224也包括第一加法器1012A,其将num_leading_ones信号1022A与ones_cnt信号1024A相加,以产生new_ones_cnt信号1026A。
串过滤装置224也包括四输入端的第一多任务器1014A。多任务器1014A在其输入端接收ones_cnt信号1024A、new_ones_cnt信号1026A、num_trailing_ones信号1028A以及固定(hard-coded)的零值1032A。多任务器1014A会依据one_select信号1042A,选取其中一输入端,输出到计数器1016A。
比较逻辑1002会产生num_leading_zeros信号1022B,以指定随机数据字节298中前导0位的数目。
比较逻辑1002会产生num_trailing_zeros信号1028B,以指定随机数据字节298中尾端0位的数目。
比较逻辑1002也会产生all_zeros信号1048B,若随机数据字节298包含均为0的位,则此信号为真。
比较逻辑1002也会产生leading_zeros信号1036B,若随机数据字节298包含前导的0位,则此信号为真。
比较逻辑1002也会产生trailing_zeros信号1038B,若随机数据字节包含尾端的0位,则此信号为真。
串过滤装置224也包括第二计数器1016B,以储存连续0位的现时计数。在一具体实施例中,计数器1016B包括一6位的缓存器。计数器1016B的输出为zeros_cnt信号1024B。
串过滤装置224也包括第二加法器1012B,其将num_leading_zeros信号1022B与zeros_cnt信号1024B相加,以产生new_zeros_cnt信号1026B。
串过滤装置224也包括四输入端之第二多任务器1014B。多任务器1014B在其输入端接收zeros_cnt信号1024B、new_zeros_cnt信号1026B、num_trailing_zeros信号1028B以及固定的零值1032B。多任务器1014B会依据zero_select信号1042B,选取其中一输入端,输出到计数器1016B。
串过滤装置224也包括第一比较器1046A,其将new_ones_cnt信号1026A与图2中的max_cnt信号258做比较。若new_ones_cnt信号1026A大于max_cnt信号258,则比较器1046A会产生真值的ones_exceeded信号1034A;否则,比较器1046A产生伪值的ones_exceeded信号1034A。
串过滤装置224也包括第二比较器1046B,其将new_zeros_cnt信号1026B与图2中的max_cnt信号258做比较。若new_zeros_cnt信号1026B大于max_cnt信号258,则比较器1046B会产生真值的zeros_exceeded信号1034B;否则,比较器1046B产生伪值的zeros_exceeded信号1034B。
串过滤装置224也包括两输入端的或门(0R gate)1004,其输入端是耦接至比较器1046A及比较器1046B的输出端。或门1004在其输入端接收ones_exceeded信号1034A及zeros_exceeded信号1034B。或门1004会产生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根据以下的程序代码,来产生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当输入 }
现在参照图11,其是根据本发明,图10的串过滤装置224的运作流程图。流程从方块1102开始。
在方块1102中,计数器1016A及1016B会初始化为0。流程会继续进行方块1104。
在方块1104中,图1的RNG单元136产生1字节的随机数据于图2的随机字节信号298中,而比较逻辑1002则依据随机数据字节的检查结果,产生其信号。流程会继续进行方块1106。
在方块1106中,加法器1012A将num_leading_ones 1022A与ones_cnt1024A相加,以产生new_ones_cnt 1026A,而加法器1012B则将num_leading_zeros 1022B与zeros_cnt 1024B相加,以产生new_zeros_cnt1026B。流程会继续进行判断方块1112。
在判断方块1112中,选择逻辑1006检查max_cnt_exceeded 1044,以判断连续0或1的数目是否已超过max_cnt 258。若是,流程会继续进行判断方块1114。否则,流程会继续进行判断方块1124。
在判断方块1114中,与门1008检查过滤致能信号262,以判断串过滤装置224是否致能。若是,与门1008会产生真值于图2的过滤失败信号256。流程会继续进行方块1118。
在方块1118中,控制逻辑244响应具真值的过滤失败信号256,而不将图2的递增信号221设为真,并且不使随机字节298被加载缓冲器0242或缓冲器1246,即使移位缓存器218已产生真值的字节产生信号282。因此,由于随机字节298已使连续1或0的数目超过max_cnt 258,所以RNG单元136会丢弃随机字节298。流程会继续进行方块1122。
在方块1122中,选择逻辑1006于one_select信号1042A及zero_select信号1042B中,皆产生3的值,以使多任务器1014A及1014B分别保留目前的ones_cnt 1024A及zeros_cnt 1024B。流程接着返回方块1104。
在判断方块1124中,选择逻辑1006检查all_zeros信号1048B,以判断随机数据字节298是否均为0。若是,流程会继续进行方块1126。否则,流程会继续进行判断方块1128。
在方块1126中,选择逻辑1006于zero_select信号1042B中产生2的值,以使多任务器1014B选取new_zeros_cnt信号1026B,并且于one_select信号1042A中产生0的值,以使多任务器1014A选取固定的0值输入1032A。流程会继续进行方块1148。
在判断方块1128中,选择逻辑1006检查trailing_zeros信号1038B,以判断随机数据字节298是否包含任何的尾端0。若是,流程会继续进行方块1132。否则,流程会继续进行方块1134。
在方块1132中,选择逻辑1006于zero_select信号1042B中产生1的值,以使多任务器1014B选取num_trailing_zeros信号1028B,并且于信号1042A中产生0的值,以使多任务器1014A选取固定的0值输入1032A流程会继续进行方块1148。
在方块1134中,选择逻辑1006于zero_select信号1042B中产生0的值,以使多任务器1014B选择固定的0值输入1032B。流程会继续进行判断方块1136。
在判断方块1136中,选择逻辑1006检查all_ones信号1048A,以判断随机数据字节298是否均为1。若是,流程会继续进行方块1138。否则,流程会继续进行判断方块1142。
在方块1138中,选择逻辑1006于one_select信号1042A中产生2的值,以使多任务器1014A选择new_ones_cnt信号1026A。流程会继续进行方块1148。
在判断方块1142中,选择逻辑1006检查trailing_ones信号1038,以判断随机数据字节298是否包含任何的尾端1。若是,流程会继续进行方块1144。否则,流程会继续进行方块1146。
在方块1144中,选择逻辑1006于one_select信号1042A中产生1的值,以使多任务器1014A选择num_trailing_ones信号1028A。流程会继续进行方块1148。
在方块1146中,选择逻辑1006于one_select信号1042A中产生0的值,以使多任务器1014A选择固定的0值输入1032A。流程会继续进行方块1148。
在方块1148中,控制逻辑244使随机数据字节298被加载由fill_select信号264所选择的缓冲器0242或缓冲器1246中,并将递增信号221设为真,以递增由fill_select信号264所选择的计数器0211或计数器1213。流程接着返回方块1104。
现在参照图12,其是根据本发明的另一具体实施例,图1微处理器100执行XSTORE指令的运作方块图。图12的XSTORE指令是类似于图7的XSTORE指令,不过在此具体实施例中,有效随机数据字节的计数值会被加载缓存器档案108的其中一个一般用途缓存器中,如EAX1202缓存器,而不会储存至系统内存。有利的是,与图7的XSTORE指令类似,图12的XSTORE指令会连续地将计数值加载EAX,并将随机数据字节储存至内存,以促进与RNG单元136的多任务运作。也就是,图12的XSTORE指令也是不可中断的。
现在参照图13,其是根据本发明,图2RNG单元136的多重缓冲(multi-buffering)运作的流程图。流程是从方块1302开始。
在方块1302中,重置信号248被设为真。流程会继续进行方块1304。
在方块1304中,图2的控制逻辑244将fill_select信号264及store_select信号266初始化为0,并响应方块1302的重置动作而清除计数器0211及计数器1213。流程会继续进行判断方块1306。
在判断方块1306中,控制逻辑244检查xstore信号268,以判断是否已执行XSTORE指令。若是,流程会继续进行判断方块1308。否则,流程会继续进行判断方块1322。
在判断方块1308中,控制逻辑244判断由产生器选择信号252所选择的随机位产生器0206或随机位产生器1208的电源是否已关闭。若是,流程会继续进行方块1312。否则,流程会继续进行方块1314。
在方块1312中,控制逻辑244藉由power_cntrl信号231开启所选择的随机位产生器的电源。流程会继续进行方块1314。
在方块1314中,根据图8的方块816及如图7所示,微处理器100将由store_select信号266所选择的计数器0211或计数器1213的值,以及由store_select信号266所选择的缓冲器0242或缓冲器1246中的有效数据字节,连续地储存至系统内存。流程会继续进行方块1316。
在方块1316中,控制逻辑244将清除信号223设为真,以清除由store_select信号266所选择的计数器0211或计数器1213。流程会继续进行方块1318。
在方块1318中,控制逻辑244更新store_select信号266,以选择另一个缓冲器及计数器。在RNG单元136包含二个以上缓冲器的实施例中,store_select信号266包括多于1个的位,并且更新store_select信号266的动作包括递增store_select信号266,以及当递增超过缓冲器的数目时,会回归为0。流程会继续进行方块1322。
在判断方块1322中,控制逻辑244检查字节产生信号282是否为真及检查过滤失败信号256是否为伪,以判断是否产生了良好的随机数据字节。若已产生,流程会继续进行方块1324。否则,流程会继续进行判断方块1306。
在方块1324中,控制逻辑244将良好的随机数据字节加载由fill_select信号264所选择的缓冲器0242或缓冲器1246中,并且递增由fill_select信号264所选择的计数器0211或计数器1213。流程会继续进行判断方块1326。
在判断方块1326中,控制逻辑244检查由fill_select信号264所指定的full0信号229或full1信号227,以判断由fill_select信号264所选择的缓冲器0242或缓冲器1246是否已满。若是,流程会继续进行方块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,以及当递增超过缓冲器的数目时,会回归为0。流程会继续进行判断方块1332。
在判断方块1332中,控制逻辑244检查由方块1328更新的fill_select信号264所指定的full0信号229或full1信号227,以判断由fill_select信号264所选择的缓冲器0242或缓冲器1246是否已满(亦即,判断所有的缓冲器是否已满)。若是,流程会继续进行方块1334。否则,流程会返回方块1306。在方块1334中,由于所有的缓冲器已满,控制逻辑244就藉由power_cntrl信号231,关闭随机位产生器0206及随机位产生器1208的电源。流程会返回判断方块1306。
现在参照图14,其是根据本发明的另一具体实施例,图1微处理器100执行图3的XLOAD指令的运作流程图。图14的流程图与图6的流程图相同,并且标号相同的方块是一样的,除了图14包括额外的判断方块1403。流程会从方块602进行到判断方块1403。在判断方块1403中,图2的控制逻辑244判断CSR226的相关位是否已因方块602中CSR226的加载而改变。若是,流程会继续进行如图6的方块604。否则,流程会继续进行方块612,如图所示。此实施例的优点是,不必丢弃已累积的随机字节及重新开始随机字节的累积。亦即,若CSR226的加载对于会影响RNG单元136的随机数产生功能的值未做任何改变,则由于随机字节是藉使用所要的控制值而产生,所以不需丢弃已累积的随机字节及重新开始随机字节的累积。在一具体实施例中,相关的CSR226位为串过滤装置致能位334、产生器选择位336、CNT致能位342以及串过滤装置max_cnt 346。现在参照图15,其是根据本发明的另一具体实施例,图1微处理器100执行图3的XSTORE指令的运作流程图。图15的流程图与图8的流程图相同,并且标号相同的方块是一样的,除了图15包括额外的判断方块1507。流程会从方块806进行到判断方块1507。在判断方块1507中,图2的控制逻辑244判断CSR226的相关位是否已因方块806中复制至CSR226的动作而改变。若是,流程会继续进行如图8的方块808。否则,流程会继续进行方块816,如图所示。此实施例的优点是,不必丢弃已累积的随机字节及重新开始随机字节的累积。亦即,若复制至CSR226的动作对于会影响RNG单元136的随机数产生功能的值未做任何改变,则由于随机字节是藉使用所要的控制值而产生,所以不需丢弃已累积的随机字节及重新开始随机字节的累积。在一具体实施例中,相关的CSR226位为串过滤装置致能位334、产生器选择位336、CNT致能位342以及串过滤装置max_cnt 346。
现在参照图16,其是根据本发明的另一具体实施例,图1微处理器100执行XSTORE指令的运作方块图。图16的XSTORE指令类似于图12的XSTORE指令,然而在图16的实施例中,XSTORE指令的目的操作数会指定微处理器100的一个缓存器,如XMM缓存器、浮点缓存器、MMX缓存器或整数单元(integer unit)缓存器中的一个(如EBX),而不是指定系统内存中的地址。亦即,有效随机数据字节是连续地被写入缓存器档案108的其中一个使用者可见缓存器中,而不会储存至系统内存。在图16的例子中,XSTORE指令会指定图3SSE缓存器352中的XMM3缓存器376,以写入有效随机数据字节,如图所示。有利的是,与图12的XSTORE指令类似,图16的XSTORE指令会连续地将随机数据字节写入该使用者可见缓存器,并将计数值加载EAX1202,以促进与RNG单元136的多任务运作。也就是,图16的XSTORE指令也是不可中断的。
现在参照图17,其是根据本发明的另一具体实施例,图1微处理器100执行XSTORE指令的运作方块图。图17的XSTORE指令类似于图12的XSTORE指令,然而在图17的实施例中,XSTORE指令包括一×86架构的REP前置码。藉由REP XSTORE指令,要存至系统内存的随机数据字节的数目,会被指定为缓存器档案108的ECX缓存器1702的输入参数,如图所示。软件在执行REP XSTORE指令前,会将要存至系统内存的随机数据字节的理想计数值加载ECX1702中。
在一具体实施例中,在将随机数据字节存至系统内存的储存动作间,REPXSTORE指令是可中断的。内存地址于初始时,是指定于缓存器档案108的一般用途缓存器中。在图17的例子中,内存地址是指定于缓存器档案108的ESEDI1704中,如图所示。每当有一或更多个随机数据字节被写入系统内存时,ESEDI1702即更新为系统内存中,下个用以储存随机数据字节的位置。此外,每当有一或更多个随机数据字节储存至系统内存时,ECX1702即更新,以反映尚待储存储存的随机字节数目。例如,假设REP XSTORE指令于ECX1702中指定一字节数值228及0x12345678的内存地址。假设在缓冲器0242及缓冲器1246两者之一中,RNG单元136有8个可用的字节,且当累积更多的随机数据字节时,将8个字节写入系统内存。当8个字节被写至内存时,ECX1702会更新为20,以表示还有20个随机数据字节必须写入系统内存。此外,地址会被更新为系统内存中,下个将要写入大量随机数据字节的位置0x12345680。中断可能会发生在这个时候,而软件会检查更新的值。当中断已执行且控制权回归至REP XSTORE指令时,REP XSTORE指令将使用ECX1702及ESEDI1704中的更新值回复执行。此外,完成REP XSTORE指令时,图2CSR 226的现时值会被复制到缓存器档案108的EAX缓存器1202中。
请参阅图18,图18根据本发明的一具体实施例,当如图1的处理器100执行XSTORE指令的方块图。图18的XSTORE指令和图12的XSTORE指令非常相近。然而,在图18的具体实施例中,只有部分暂存在R5 238的随机数据字节被存到系统内存502。将N定义为2的(指数因子)幂次。提供一个N,用来选择在R5 238中的每第N个位储存到系统内存502。也就是说,N等于2的(指数因子)幂次来当作参考。被EDX1802缓存器所指定指数因子是如图18XSTORE指令的一个输入参数。EDX1802为缓存器档案108中一个使用者可见的通用缓存器。
在一实施例中,暂存在R5 238的随机数据位组长度为8位或64位,因此在EDX1802被指定的指数因子容许值可为0,1,2,3,而可能的N值就为1,2,4,8。因此,在如图18的XSTORE指令实施例中,被存到系统内存的有效随机数据位组长度就为8/N,也就是8,4,2,1。在另一实施例中,在EDX1802被指定的因子指数容许值为1,2,3,而可能的N值就为1,2,4,8。在XSTORE指令执行完成后,决定系统内存502的有效随机数据位组长度以及指令状态同时被放到EAX1202。
如图18的XSTORE指令也包括有根据前图所述的其它XSTORE指令实施例特征。举例来说,如图18的XSTORE指令可以将每第N个累积且被选择的位储存到在微处理器中的一缓存器,而不是如根据图16的具体实施例所述储存到内存;或是有效位计数值可储存到内存,而不是如根据图7的具体实施例所述储存到EAX缓存器;或是一REP前置码可被包括在如图17所述的具体实施例中。
请参阅图19,图19根据本发明,当如图18XSTORE指令时执行的一操作实例。一个在R5 238的二进制随机数据位值的实际例子。图标中,每一个在R5 238的位以八进位表示。图标中也显示出随机数据字节根据如图18所给定四个容许值之一被存到系统内存502。如果EDX为0,则所有从R5 238来的64位将被储存到系统内存502。如果EDX为1,则只有由R5 238每两个选一个所组成的32位将被储存到系统内存502。如果EDX为2,则只有由R5 238每四个选一个所组成的16位将被储存到系统内存502。如果EDX为3,则只有由R5 238每八个选一个所组成的8位将被储存到系统内存502。
本发明的优点是,如图18XSTORE指令减低了RNG单元136产生的连续位间的关连性,其中,RNG单元136是由使用者致能且指定储存在EDX1802的指数因子,该指数因子用以选择在R5 238的每N个位,指数因子与N的关系可表示为N=2^(指数因子)。
请参阅图20,图20为根据本发明的一具体实施例,是为如图1的RNG单元136减少连续位间相关性的操作流程图。在图20的具体实施例中,用来执行减低连续位间相关性功能的装置包括有如图1微处理器100的多个组件,如档案缓存器108、地址产生器112、加载单元114、ALU162、RNG单元136、储存单元118、回写单元122、写入缓冲器124及总线接口单元128。储存在如图1所示微码内存132的微码指令,根据如图21所示的程序行表(programlisting)控制微处理器100的组件。图20的流程图描述普通如图21所示的程序行表的微码指令。流程开始于方块2002。
在方块2002中,如图2所示的RNG单元136经由随机位产生器206或208,多任务器214及白化器216产生一连串的随机数据位,并且藉由如图2及前图所述的移位缓存器218、串过滤装置224、多任务器228、解多任务器232、缓冲器0242及缓冲器1246两数据缓冲器、多任务器236、R5 238及控制逻辑244将位累积成字节。流程下一步到判断方块2004。
在判断方块2004中,微处理器100藉由从图3CSR226来的可利用位计数值332判断是否八个随机数据字节已在buf0 242或buf1 246中累积。若为是,流程下一步到方块2012;否则,流程下一步到方块2006。
在方块2006中,既然尚未累积到八个随机数据字节,微处理器100将有效随机数据字节的长度设定为0。流程下一步到方块2008。
在方块2008中,微处理器100加载EAX 1202由CSR 226得到的状态,及已储存在内存的有效随机数据字节的长度。假如方块2008是从方块2006来的,则有效随机数据字节的长度为0。假如方块2008是从方块2018来的,则有效随机数据字节的长度为8。假如方块2008是从方块2044来的,则有效随机数据字节的长度为在EDX中所指定的指数因子的关系函式,诸如2^3(3-指数因子)。流程在方块2008结束。
在方块2012中,微处理器100将R5 238的内容加载到一暂时储存位置,如图20的temp1。在一实施例中,只有从R5 238来的随机数据字节被加载到temp1,而不是有效字节计数值。在如图21的微码列表实施例中两个32位的缓存器r4、r5被共同用来当作temp1。流程下一步到判断方块2014。
在判断方块2014中,微处理器100判断在EDX 1802所指定的指数因子是否为0,也就是说,是否所有从R5来的字节将被储存到内存。若为是,流程到方块2016,否则,流程到方块2022。
在判断方块2016中,微处理器100将全部在R5 238累积的八个有效随机数据字节储存到图18中的系统内存。流程下一步到方块2018。
在方块2018中,既然全部八个字节在方块2016中被储存到系统内存502,微处理器100将有效随机数据字节的长度设定为8。流程下一步到方块2008。
在方块2022中,微处理器100将储存在EDX 1802 XSTORE指令的一个输入参数,藉由2的幂次计算N值。流程下一步到方块2024。
在方块2024中,微处理器100藉由计算64除以N得到一循环计数值。该循环计数也就是将被储存到系统内存502的长度。流程下一步到方块2026。
在方块2026中,微处理器100清除EAX1202设为0。流程下一步到方块2028。
在方块2028中,微处理器100将EAX1202左移一个位,以清出一个EAX空间来给从R5 238得到原始数据所选定及累积的下一个位。流程下一步到方块2032。
在方块2032中,微处理器100藉由从temp1中取出最后一个位(也就是除了最后一个位外,全部舍弃)并且将该最后一个位加入EAX1202中来达成选定并累积下一个第N位。流程下一步到方块2034。
在方块2034中,微处理器100将temp1右移N个位,因此将下一个被选定的N位放入temp1的位置,藉由将temp1右移N个位,将前次在方块2032中被选定及累积的位被舍弃。流程下一步到方块2036。
在方块2036中,微处理器100将循环计数值递减1。流程下一步到方块2038。
在方块2038中,微处理器100判断循环计数值是否已到达0。若为是,流程到方块2042,否则,流程到方块2028。
在方块2042中,微处理器100将EAX1202储存到系统内存502。EAX1202包括有从R5 238所选定并累积的每第N个位。在一实施例中,EAX1202的全部内容被存入系统内存502,即使在EAX1202的一些位也许不包含有效随机数据字节。然而在2008方块中,每一次完成XSTORE指令。有效随机数据字节被存入系统内存502的长度会反应在EAX1202。因此,致能程序以决定有效随机数据字节被存入系统内存502的长度。举例来说,假如EAX1202为2,则四个字节只有两个字节被存入到系统内存502中,并且有效随机数据字节的长度会根据EAX1202的状态设定成2。
在方块2044,既然N是2、4或8,及所有(8/N)个位在方块2042中会被存入系统内存502中,微处理器100将有效随机数据字节的长度设定成8除以N。流程到方块2008。
请参阅图21,图21是为根据本发明使如图1的处理器100减少连续位间相关性的一微码指令列表。下面的讨论将有助于了解微码列表。
这个微码列表包括有被称为跳跃指令(jump instruction)的分枝指令(branchinstruction),如je.32,jel.32、循环指令(loop instruction),如loopn.32、返回指令(retum instruction)。所有跟在分枝指令之后的指令位置都被称为一延迟时槽(delay slot),所有在延迟时槽的指令均会执行而不考虑该分枝是否已被选取。如此,如果该分枝尚未被选取,则在延迟时槽的指令及其下一个指令将会被执行。如果该分枝已被选取,在延迟时槽的指令及在分枝目标地址的指令下一个将会被执行。
微码指令使用八个在缓存器档案108中32位的通用缓存器,在列表中被表示成r0到r7。在一实施例中,r0到r7不是使用者可视的缓存器。被存在r0的值在所有时间都是0。
除了分枝指令,这三个操作数指令的格式为
<opcode> <目的> <来源一> <来源二>
由第8行指令dmtid r4,r5所跟随的在第7行指令mfxd.64 XMM5使如图2的64位R5 238的内容被复制到两个32位的缓存器r4,r5。根据第1行dmtidr2,r3指令,微码的部分分枝到get_random_data包括在分枝之后延迟时槽的一mfxd.64指令(也就是CSR226)。因此,结合两个指令使64位CSR226的内容被复制到两个32位的缓存器r2,r3。
请参阅图22,图22为根据本发明的一具体实施例,如图1的RNG单元136的部分,包括有一位选择器2202,以减少连续位间相关性时的方块图。如图22的RNG单元136与如图2的RNG单元136非常相近。然而,只有如图2的缓存器R5 238被表示在图22。然而不像图2,在图22中R5 238并不直接连接到数据总线144。取而代之的是R5 238的输出连接到中间数据总线(intermediate data bus)2206。如图22的RNG单元136也包括有位选择器2202。该位选择器2202的输入连接到中间数据总线2206。位选择器2202的输出连接到如图1的数据总线144,在图22被表示成DB 144。在如图22的实施例中,中间数据总线2206与数据总线144都是64位,以及R5 238包括64位用以储存随机数据字节,也就是说,储存8个随机数据字节。位选择器2202也包括有用来接收指数因子信号2204的一控制输入,该指数因子信号2204的值在图18中被当作一个XSTORE指令得输入参数。在一实施例中,位选择器2202根据指数因子2204的值从中间数据总线2206选择每一个位、每两个位、每四个位或是每八个位,以各自提供8、4、2或1个随机数据字节给数据总线144,如上所述及如图19实施例所示。
请参阅图23,图23为根据本发明,如图22的位选择器2202的详细方块图。位选择器2202包括有64个4对1的多任务器,表示成2302-0到2302-63,这64个多任务器表示成多任务器集合2302。多任务器集合2302的每一个多任务器包括有四个输入,表示成0、1、2及3。多任务器集合2302的每一个多任务器也包括有一控制输入连接到如图22中的指数因子信号2204。假如指数因子2204等于0,多任务器2302选择第0号输入提供给输出。假如指数因子2204等于1,多任务器2302选择第1号输入提供给输出。假如指数因子2204等于2,多任务器2302选择第2号输入提供给输出。假如指数因子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输入接收中间数据总线2206信号n;在它的1输入接收中间数据总线2206信号2n;在它的2输入接收中间数据总线2206信号4n;在它的3输入接收中间数据总线2206信号8n。因此,多任务器2302-0在它的0输入接收中间数据总线2206信号0;在它的1输入接收中间数据总线2206信号0;在它的2输入接收中间数据总线2206信号0;在它的3输入接收中间数据总线2206信号0。多任务器2302-1它的0输入接收中间数据总线2206信号1在它的1输入接收中间数据总线2206信号2在它的2输入接收中间数据总线2206信号4在它的3输入接收中间数据总线2206信号8。多任务器2302-2它的0输入接收中间数据总线2206信号2;在它的1输入接收中间数据总线2206信号4;在它的2输入接收中间数据总线2206信号8;在它的3输入接收中间数据总线2206信号16。多任务器2302-3在它的0输入接收中间数据总线2206信号3;在它的1输入接收中间数据总线2206信号6;在它的2输入接收中间数据总线2206信号12;在它的3输入接收中间数据总线2206信号24。多任务器2302-63在它的0输入接收中间数据总线2206信号63,如图所示。任何输入到多任务器2303的值大于63将被忽略。
如上所述,本发明可以被观察到,在一些环境条件下,在会减低所产生随机数随机性的连续产生位间取得最小的关连性。有优势的地方是,藉由随机位产生器在每N个位中选择一位,本发明可以被观察到Shannon熵值增加及对应的最小随机数据位产生器率如下
图24是显示依据本发明,图1的微处理器100执行重置的自我测试的动作流程图。流程开始于判断方块2402。
于判断方块2402中,图2的RNG单元136藉由检查重置信号248,判断是否发生重置事件。重置可能是开机重置,亦即当微处理器100激活时,或可能是暖重置(warm reset),亦即于微处理器100激活一段时间后所执行的重置,如在微处理器100上执行的程序所进行的重置,或是包含微处理器100的系统的重置。若一重置事件发生,流程即进行至判断方块2404。否则,流程返回判断方块2402,以等待重置事件发生。
于判断方块2404中,RNG单元136藉由检查自我测试致能信号292,以判断自我测试是否被致能。在一实施例中,图3MSR212的自我测试致能位316的预设激活值为1。若自我测试被致能,则流程进行至方块2406。否则,流程进行至方块2412。
于方块2406中,图2的自我测试单元202执行RNG单元136的自我测试,以判断RNG单元136是否正常运作。自我测试的相关说明已如前述,特别是关于图2与图3的部分。自我测试完成时,若自我测试失败,则自我测试单元202产生一真值的自我测试失败信号288,而若自我测试通过,则产生一假值的自我测试失败信号288。自我测试失败信号288的值会储存于图3MSR212的自我测试失败位318。在一实施例中,自我测试单元202包括图1微处理器100的不同组件,如缓存器108、地址产生器112、加载单元114、执行单元116、RNG单元136、储存单元118、回写单元122、写入缓冲器124及总线接口单元128。储存于图1微程序代码内存132的微程序代码指令,会控制微处理器100的组件来执行自我测试。流程接着进行至方块2408。
于判断方块2408中,RNG单元136藉由检查MSR212中的自我测试失败位318,以判断自我测试是否失败。若自我测试失败,则流程进行至方块2412。否则,流程进行至方块2414。
于方块2414中,RNG单元136将MSR212的RNG存在位314设定为1。流程接着返回方块2402,以等待另一重置事件发生。
于方块2414中,RNG单元136将MSR212的RNG存在位314清除为0。流程接着返回方块2402,以等待另一重置事件发生。
图25是显示依据本发明,图1的微处理器100执行RNG单元136的相关指令的动作流程图。流程开始于方块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是否被设定为1。RNG存在位314的值可依据如图24所述的自我测试来决定。若RNG存在位314为1,则流程接着进行至方块2512。否则,流程进行至方块2508。
于方块2508中,CPUID指令藉由将Centaur延伸功能信息加载EAX缓存器1202而执行完成。尤其,EAX缓存器1202的位28被清除为0,以显示RNG单元136被除能。在另一实施例中,CPU ID指令藉由将Centaur延伸功能信息加载图1缓存器档案108的图18EDX缓存器1802而执行完成。尤其,EDX缓存器1802的位2被清除为0,以显示RNG单元136被除能。流程结束于方块2508。
于方块2512中,CPU ID指令藉由将Centaur延伸功能信息加载EAX缓存器1202而执行完成。尤其,EAX缓存器1202的位28被设定为1,以显示RNG单元136被致能。在另一实施例中,CPUID指令藉由将Centaur延伸功能信息加载EDX缓存器1802而执行完成。尤其,EDX缓存器1802的位2被设定为1,以显示RNG单元136被致能。流程结束于方块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是否被设定为1。若RNG存在位314为1,则流程接着进行至方块2522。否则,流程进行至方块2518。
于方块2518中,微处理器100产生一个一般保护(GP)的错误,此因有一指定MSR212的RDMSR指令执行于RNG单元136被除能时。流程结束于方块2518。
于方块2522中,RDMSR指令藉由将MSR212的内容加载相连接之EAX1202与EDX1802缓存器,而执行完成。流程结束于方块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是否被设定为1。若RNG存在位314为1,则流程接着进行至方块2532。否则,流程进行至方块2528。
于方块2528中,微处理器100产生一个一般保护(GP)的错误,此因有一指定MSR 212的WRMSR指令执行于RNG单元136被除能时。流程结束于方块2528。
于方块2532中,WRMSR指令藉由将相连接之EAX 1202与EDX 1802缓存器的内容存入MSR212,而执行完成。流程结束于方块2532。
于判断方块2534中,微处理器100判断于方块2502所翻译的指令是否为前述之XSTORE或XLOAD指令。若是,则流程接着进行至判断方块2536。否则,流程进行至方块2544。
于判断方块2536中,微处理器100判断RNG存在位314是否被设定为1。若RNG存在位314为1,则流程接着进行至方块2542。否则,流程进行至方块2538。
于方块2538中,微处理器100产生一个无效运算码的错误,此因有一XSTORE或XLOAD指令执行于RNG单元136被除能时。流程结束于方块2538。
于方块2542中,该XSTORE或XLOAD指令是依前述实施例而执行。流程结束于方块2542。
于方块2544中,微处理器100执行方块2502所翻译的指令。流程结束于方块2544。
虽然本发明及其目的、特征与优点已详细叙述,其它实施例亦可包含在本发明的范围内。例如,虽然本发明是以包含两个随机位产生器的实施例进行说明,本发明仍可适用于两个以上的随机位产生器的情形。再者,虽然所叙述的随机位产生器是实作于微处理器中,在多个随机位产生器之间作选择的概念,仍可实施于一非微处理器之集成电路中。
总之,以上所述仅为本发明的较佳实施例而已,当不能以此限定本发明所实施的范围。凡依本发明权利要求所作的均等变化与修饰,皆应仍属于本发明专利涵盖的范围内。
权利要求
1一种微处理器,其中包含
一随机数产生器;
一自我测试单元,耦接至该随机数产生器,以在该随机数产生器上执行一自我测试;以及
一控制逻辑,耦接至该自我测试单元,于该自我测试失败时将该随机数产生器除能。
2如权利要求1所述的微处理器,其中该自我测试单元是响应该随机数产生器的一重置动作,而执行该自我测试。
3如权利要求1所述的微处理器,其中该自我测试单元是响应该微处理器的一重置动作,而执行该自我测试。
4如权利要求1所述的微处理器,其中该控制逻辑将该随机数产生器除能的动作包含将一状态指示器设为一预定值,以指出该随机数产生器已被除能。
5如权利要求4所述的微处理器,其中该状态指示器包含该微处理器的一缓存器的至少一个位。
6如权利要求4所述的微处理器,其中该微处理器响应一预定指令的执行,将该状态指示器加载该微处理器的一预定的使用者可见缓存器。
7如权利要求1所述的微处理器,其中该控制逻辑将该随机数产生器除能的动作,包含在一程序执行一指令以从该随机数产生器取得随机数据时,产生一错误。
8如权利要求1所述的微处理器,更包含
一状态缓存器,耦接至该自我测试单元,用以储存该随机数产生器的复数个相关状态位。
9如权利要求1所述的微处理器,其中该随机数产生器所执行的该自我测试,包含判断该随机数产生器是否正常运作的一测试。
10如权利要求1所述的微处理器,其中该自我测试单元包含微码指令,储存于该微处理器的一内存中,用以执行该自我测试。
11一种微处理器,包含
一随机数产生器;
一自我测试单元,耦接至该随机数产生器,组态为响应一重置动作,测试该随机数产生器是否正常运作;以及
一指令翻译器,耦接至该自我测试单元,用以侦测该微处理器的一指令集中,与该随机数产生器的运作相关的复数个指令,其中若该自我测试单元先前已判断该随机数产生器未正常运作,则该微处理器会响应该多个指令的其中之一执行,而产生一错误。
12如权利要求11所述的微处理器,其中该多个指令的该其中之一包含一指令,其用以读取该微处理器中,用以储存该随机数产生器的相关状态信息的一缓存器。
13如权利要求11所述的微处理器,其中该多个指令的该其中之一包含一指令,其用以写入该微处理器中,用以储存该随机数产生器的相关控制信息的一缓存器。
14如权利要求11所述的微处理器,其中该多个指令的该其中之一包含一指令,其用以取得该随机数产生器所产生的随机数。
15如权利要求11所述的微处理器,更包含
一状态缓存器,耦接至该自我测试单元,用以储存一指示,以指出该随机数产生器是否正常运作,如该自我测试单元先前所判断的。
16一种微处理器,包含
一随机数产生器;
一自我测试单元,耦接至该随机数产生器,组态为测试该随机数产生器,以判断其是否正常运作,该自我测试单元并组态为产生一信号,以指出该随机数产生器是否正常运作;以及
一状态指示器,耦接至该自我测试单元,组态为依据该信号,指出该随机数产生器是否可用来提供随机数。
17如权利要求16所述的微处理器,其中若该状态指示器指出该随机数产生器不可用来提供随机数,则该微处理器会响应一用以从该随机数产生器取得随机数的指令的执行,而产生一错误。
18一种可在一微处理器中选择性地提供随机数产生功能的方法,包括
响应该微处理器的一随机数产生器的一重置动作,而测试该随机数产生器的功能;
储存该测试动作的结果的一个指示;
执行要求该随机数产生器的功能的一个指令;以及
根据该执行动作,而以该指示回复。
19如权利要求18所述的方法,其中该储存动作包含将该指示储存于该微处理器的一缓存器中。
20如权利要求18所述的方法,其中该回复动作包含将该指示加载该微处理器的一使用者可见缓存器。
全文摘要
一种有依自我测试结果决定可用性的随机数产生器的微处理器及方法,包含一随机数产生器,可于重置时执行自我测试,并依据自我测试结果选择性地致能/除能其自身。此随机数产生器包括一自我测试单元,可于激活重置或暖重置时执行自我测试,以判断随机数产生器是否正常运作。若自我测试失败,则微处理器将随机数产生器除能。除能随机数产生器的动作,包含根据一CPUID指令的执行,以延伸功能信息回复,指出随机数产生器并不存在。除能随机数产生器的动作,可包含响应一RDMSR或WRMSR指令的执行,而产生一一般保护错误。除能随机数产生器的动作,可包含响应一企图从随机数产生器取得随机数的指令的执行,而产生一无效运算码错误。
文档编号G06F11/00GK1514347SQ200310102748
公开日2004年7月21日 申请日期2003年10月23日 优先权日2003年2月11日
发明者汤玛斯·A·克利斯宾, G·葛兰·亨利, 泰瑞·派克斯, 汤玛斯 A 克利斯宾, 派克斯, 肌ず嗬 申请人:智慧第一公司