首页> 中国专利> 用以减低在随机数产生器中连续位相关性的装置与方法

用以减低在随机数产生器中连续位相关性的装置与方法

摘要

一种用以减低在随机数产生器中连续位相关性的装置与方法。该方法包括有产生一组随机位,并在该组随机位中选出每第N个位后,累积并传送到要求随机数的应用软件,而不是将整组随机位送到应用软件。其中,N为一可程序化的值。在一实施例中,实现该方法的装置包括一微处理器,该微处理器包括有许多的元件,诸如算数逻辑单元、储存单元、分支电路及执行储存在微码存储器的微码指定指令的暂存器。在另一实施例中,该装置包括有选择每第N个位的多个多工器。在一实施例中,N被指定成用以储存被选定的随机位的一微处理器指令的一输入参数。

著录项

  • 公开/公告号CN1514345A

    专利类型发明专利

  • 公开/公告日2004-07-21

    原文格式PDF

  • 申请/专利权人 智慧第一公司;

    申请/专利号CN03158752.6

  • 发明设计人 汤玛斯·A·克利斯宾;

    申请日2003-09-22

  • 分类号G06F7/58;G06F9/22;G06F9/34;

  • 代理机构72003 隆天国际知识产权代理有限公司;

  • 代理人潘培坤;楼仙英

  • 地址 美国加利福尼亚

  • 入库时间 2023-12-17 15:26:25

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2009-01-21

    授权

    授权

  • 2004-09-29

    实质审查的生效

    实质审查的生效

  • 2004-07-21

    公开

    公开

说明书

技术领域

本发明涉及到与随机数产生方式相关的领域,尤指一种在连续位间无随机关连的随机数产生方式,即一种用以减低在随机数产生器中连续位相关性的装置与方法。

背景技术

就历史来看,许多计算机应用软件需要提供随机数。例如,物理现象的蒙地卡罗模拟,如大规模的天气模拟,就需要提供随机数,以模拟物理现象。需要使用随机数的其它例子为赌场游戏及线上赌博,如模拟洗牌,掷骰子等;彩券号码的产生;统计分析数据的产生,如心理学的测验;以及计算机游戏。

在这些形式的应用中,所需的随机度,以及对产生随机数的性能要求是不同的。许多应用软件,如计算机游戏,对于随机度的要求是不高的。心理学测验上的应用,对随机度有着更严格的要求,但性能需求则相当低。然而,大规模的运用蒙地卡罗的模拟会有非常高的性能需求,且需要良好的随机数统计特性,虽然不可预测性并非特别重要。其它的应用,如线上赌博,则对于随机度及不可预测性皆有非常严格的要求。

虽然上述这些应用仍然是重要的,但是在计算机安全领域,则对高品质随机数有最大的需求。最近,个人计算机网络及因特网交易的爆炸性成长,对于各种安全机制的需求已明显地增加。

对所有计算机安全的主要构成要素而言,高品质的随机数皆为必要。这些要素包含机密性、身分确认以及数据完整性。

数据加密为提供机密性的主要机制。有许多种不同的加密算法,如对称式加密、公共钥匙及一次性密码本,但是这些算法都具有一关键特性,即加密/解密钥匙不能被简单地预测出来。一个加密系统的密码强度基本上即是其所用钥匙的强度,也就是预测、猜想或计算解密钥匙的难度多高。最好的钥匙为够长的真随机数,而在所有严格要求安全的应用中,随机数产生器为产生密码钥匙的基础。

许多对密码算法成功的攻击,已非专注于加密算法,而是专注于产生随机数的来源。一个为人熟知的例子是,网景的安全插座层(Secure SocketsLayer,SSL)的早期版本,会从系统时钟脉冲与程序ID表搜集数据,以产生软件式准随机数产生器的起始值。所产生的随机数用来产生一对称钥匙,以加密通联数据。有两个研究生想出了可准确猜测随机数的程序,在一分钟内,就猜出通联钥匙,破坏了这个机制。

与解密钥匙类似,用以确认存取信息的使用者身份的密码,其强度实际上就是预测或猜测密码的难度有多高。最好的密码为够长的真随机数。此外,在有使用暗号协议(challenge protocol)的确认协议(authentication protocol)中,关键因素就是使暗号无法由进行确认的一方加以预测。而随机数则用来产生确认身份的暗号。

数字签名及信息摘要用来确保网络上通讯的完整性。随机数用于大部分的数字签名算法,以使恶意的一方难于伪造签名。随机数的品质会直接影响到签名的效力。总而言之,良好的安全需要良好的随机数。

数值本身不是随机的。随机度的定义必须不仅包括所产生的数值的特征,而且也包括用以产生数值的产生器的特征。运用软件的随机数产生器是常见的,并且对于许多应用而言已足够。然而,对某些应用来说,软件式产生器是不足的。这些应用需要硬件式产生器,其可产生与经由随机物理程序所产生数值的特征相同的数值。此处,重要的特征是,其产生数值所具有的统计分布的无偏差程度,以及不可预测与不可重制的程度。

具有无偏差的统计分布,意味着所有的值具有相等的发生机率,无论样本大小为何。几乎所有的应用皆要求其随机数具有良好的统计分布,而高品质的软件式随机数产生器通常能满足此需求。只满足无偏差统计分布的需求的产生器称为准随机数产生器。

不可预测性指在一位序列中,正确猜测下个位的机率应刚好为一半,无论先前所产生的位值为何。某些应用不需要此种不可预测性的特征;然而,对安全应用所使用的随机数而言则是重要的。若使用软件式产生器,则要有效满足不可预测性的需求,必须隐藏软件算法及其初始值。从安全的观点而言,隐藏算法的做法是非常不保险的。对于使用可预测的隐藏算法随机数产生器的应用软件而言,有不少安全上遭致破坏的例子是为人所熟知的。同时满足前两种需求的产生器称为密码安全准随机数产生器。

产生器若为不可重制的,则两个具有相同起始条件的相同产生器,必须产生不同的输出。软件算法不能满足此需求。只有基于随机物理程序的硬件式产生器,能产生满足安全所需的严格不可重制性的数值。满足所有三个需求的产生器称为真随机数产生器。

软件算法用来产生计算机应用所需的大部分随机数。这些称为准随机数产生器,这是因为这些产生器不能满足不可预测性及不可重制性的需求。而且,有些也不能满足无偏差统计分布的需求。

通常,软件式产生器以一初始值或种子(seed)开始运作,该初始值有时由使用者所提供。产生器以该初始值执行算术运算,以产生第一随机结果,其作为产生第二结果的种子,依此类推。软件式产生器必然是循环式的,最终其会重复相同的输出序列。猜测种子就等于能预测整个所产生的数值序列。其不可重制性只与算法及初始种子的机密程度一样,而这可能是安全上的应用并不想要的特性。而且,软件算法是可重制的,因为以相同输入开始,其会产生相同的结果。最后,软件算法不必然会产生输出数据大小的范围内的每个可能的值,这可能无法完全满足无偏差统计分布的需求。

有一种随机数产生器,是软件式产生器与纯硬件式产生器混合而成,称为熵产生器(entropy generator)。熵为不可预测性的另一种说法。产生器所产生的数值愈不可预测,产生器所具有的熵就愈多。熵产生器会将软件算法应用于由物理现象所产生的种子。例如,常用的PC加密程序会记录几秒钟的鼠标移动及键盘敲击的特性,以获得其所需的种子。这些动作不见得会产生不理想的熵数,且通常需要使用者某种程度的涉入。对多数的熵产生器而言,最不理想的特征就是要花很多时间才能达到足够的熵。

所以很明显的,熵产生器无法在前述一些应用上被利用,包括安全应用上。这些应用要求只能由随机物理程序所产生真正的随机数。随机物理程序可以是通过半导体二极管或电阻的热噪声、自由执行震荡器(free-runocsiliator)所产生的频率不稳定性、或是半导体电容在一段特殊的时间周期内的充电量。产生随机数的一个方法是利用一个或多个前述的物理程序产生一连串的位,这些位形成字节(byte)、或词(word)以提供应用程序使用。然而在一些环境的条件下,连续产生的位间彼此微小的相关性是可以被观察得到的。这些相关性会减低随机数的随机性。

所以,需要一个装置及方法来减低在由一随机数产生器所产生的连续位间的相关性。

发明内容

本发明提供一种微处理器(microprocessor),包括有一装置及一方法,经由提供在一连串随机位中的选出部分,以减低由硬件随机数产生器所产生的连续位间的相关性。因此,为达上述目的,本发明提供一种方法,以增进由随机数产生器所产生数据的随机度。该方法包括由一随机数产生器产生多个位,在该多个位中选出每第N个位、并且累积所选出的每第N个位。N为大于1的整数。

本发明的另一目的在于提供一种微处理器。该处理器包括有一随机位产生器,产生一连串的随机位;一算术逻辑单元(arithmetic logic unit,ALU),连接到该随机位产生器,用以在一连串随机位中选择每第N个位,并将所累积的每第N个位送到与该算术逻辑单元连接的暂存器(register),N为大于1的整数。

本发明的另一目的在于提供一种减低连续随机位间相关性的装置。该装置包括有:一随机位产生器,用以产生一组随机位;该装置也包括有一第一暂存器,连接到该随机位产生器,用以储存该组随机位;该装置还包括有多个多工器(multiplexer),连接到该第一暂存器,用以在该组随机位中选择每第N个位;该装置还包括有一第二暂存器,连接该多个多工器,用以储存由多工器在该组随机位中所选择的每第N个位。

本发明的技术方案是这样实现的:

一种用于改善由一随机数产生器所产生数据的随机性的方法,其特征在于包括以下步骤:

由一随机位产生器产生多个位;

从该多个位中选出每第N个位,其中,N为大于1的整数;

以及累积所选出的每第N个位。

还包括有以下步骤:舍弃未被选定的多个位。

其中该累积步骤包括将该每第N个位累积到一微处理器的一暂存器中。

还包括储存已累积的该每第N个位。

其中该储存步骤包括将已累积的该每第N个位储存到连接该微处理器的一存储器。

其中该储存步骤包括将已累积的该每第N个位储存到在该微处理器的一第二暂存器。

其中储存已累积的该每第N个位被执行,以回应该微处理器执行用来储存一部份该多个位的一指令。

其中该N值是由2的幂次所组成。

还包括设定一值到一暂存器中;及在选出该每第N个位之前,根据设定到该暂存器中的该值计算出该N值。

本发明还提供了一种微处理器,其特征在于包括:

一随机位产生器,用以产生一串随机位;

以及一算数逻辑单元,连接该随机位产生器,用以选择在该串随机位的每第N个位,其中,N为大于1的整数,并用以累积被选定的每第N个位到连接该算数逻辑单元的一暂存器。

还包括一可程序化暂存器,连接到该算数逻辑单元,用以储存计算该N值的一值。

还包括一指令转译器,用以将在该微处理器中一指令集的一指令转译,该指令指示该微处理器储存已选出及累积的该每第N个位。

还包括一存储器,连接到该算数逻辑单元,用以储存多个微码指令,该微码指令包括用以执行该指令的多个指令。

其中该多个指令包括有一个或多个指令,以指示该算数逻辑单元将该串随机位移动N个位。

其中该多个指令包括有一个或多个指令,以指示该算数逻辑单元执行逻辑运算以取出被移动的该串随机位之一。

其中取出被移动该串随机位之一的逻辑运算包括一逻辑与(AND)运算。

该多个指令包括有一个或多个指令以指示该算数逻辑单元执行算数或逻辑运算以累积被移动的该串随机位之一到该暂存器。

其中该算数或逻辑运算以累积被移动的该串随机位之一到的该暂存器包括一加法运算。

其中该算数或逻辑运算以累积被移动的该串随机位之一到的该暂存器包括一移位(shift)运算。

本发明还提供了一种用以减低连续随机位间的相关性的装置,其特征在于,包括:

一随机位产生器,用以产生一组随机位;

一第一暂存器,连接到该随机位产生器,用以储存该组随机位;

多个多工器,连接到该第一暂存器,用以选择在该组随机位的每第N个位,该多个多工器经由一控制值选择每第N个位;

以及一第二暂存器,连接到该多个多工器,用以储存该多个多工器所选择的该组随机位的每第N个位。

本发明的一个优点在于当使用者在较高的随机数产生率及较好的随机性间作一平衡(tradeoff后,本发明可以减低连续位间的相关性。

附图说明

图1是绘示本发明的微处理器的方块图

图2是本发明图1的微处理器中RNG单元的方块图

图3是绘示本发明图1的微处理器中,与图1的RNG单元有关的各种暂存器的方块图

图4是绘示根据本发明的图1的微处理器执行将值载入图3的XMM0暂存器的指令的运作流程图

图5是绘示根据本发明的图1的微处理器于执行XLOAD指令时的运作方块图

图6是绘示根据本发明的图1的微处理器执行XLOAD指令的运作流程图

图7是绘示根据本发明的图1的微处理器于执行XSTORE指令时的运作方块图

图8是绘示根据本发明的图1的微处理器执行XSTORE指令的运作流程图

图9是绘示根据本发明的图1的微处理器进行关于随机数产生的多工运作范例的动作流程图

图10是绘示根据本发明的图1的微处理器中,图2的RNG单元的串过滤装置的方块图

图11是绘示根据本发明的图10的串过滤装置的运作流程图

图12是绘示根据本发明的另一具体实施例,图1的微处理器执行XSTORE指令的运作方块图

图13是绘示根据本发明的图2的RNG单元的多重缓冲运作的流程图

图14是绘示根据本发明的另一具体实施例,图1的微处理器执行XLOAD指令的运作流程图

图15是绘示根据本发明的另一具体实施例,图1的微处理器100执行XSTORE指令的运作流程图

图16及17是绘示根据本发明的另外具体实施例,图1的微处理器执行XSTORE指令的运作方块图

图18根据本发明的一具体实施例,当如图1的处理器执行XSTORE指令的方块图

图19根据本发明的当如图18的XSTORE指令时执行的一操作实例

图20根据本发明的一具体实施例,如图1的RNG单元减少连续位间相关性的操作流程图。

图21是为根据本发明使如图1的处理器100减少连续位间相关性的一微码指令列表

图22根据本发明的一具体实施例,如图1的RNG单元的部分,包括有一位选择器,以减少连续位间相关性时的方块图

图23根据本发明,如图22的位选择器的详细方块图

其中,附图标记说明如下:

100:微处理器             102:指令高速缓存

104:指令提取器           106:指令转译器

108:暂存器档案           112:地址产生器

114:载入单元             116:执行阶段

118:储存单元                 122:回写单元

124:写入缓冲器               126:读取缓冲器

128:总线接口单元(BIU)        132:微程序代码ROM

134:SSE单元                  136:随机数产生器(RNG)单元

138:处理器总线               142、144:数据总线

146:中断单元                 148:中断信号

152:中断向量

202:自我测试单元             204:CPUID暂存器

206:随机位产生器0            208:随机位产生器1

211:计数器0                  212:机器特定暂存器(MSR)

213:计数器1                  214:多工器

215:第二解多工器             216:白化器

217:第三解多工器             218:移位暂存器

219:第四多工器               221:递增信号

222:连续数目测试(CNT)单元

223:清除信号                 224:串过滤装置

225:比较器

226:控制与状态暂存器(CSR)

227:full1信号                228:第二多工器

229:full0信号                231:power_cntrl信号

232:解多工器                 234:可用字节计数

236:第三多工器               238:暂存器R5

242:缓冲器0                  244:控制逻辑

246:缓冲器1                  248:重置信号

252:产生器选择信号           254:原始位信号

256:过滤失败信号             258:max_cnt信号

262:过滤致能信号             264:fill_select信号

266:store_select信号         268:xstore信号

272:xload信号                274:TSPO标志暂存器

278:数据总线                 282:字节产生信号

284:CNT致能信号             286:RNG存在信号

288:自我测试失败信号        292:自我测试致能信号

294:CNT失败信号             296:直流偏压信号

298:随机数据字节

302、314:RNG存在位          312:RNG致能位

316:自我测试致能位          318:自我测试失败位

322:直流偏压位              324:原始位位

332、362:可用字节计数字段

334:串过滤装置致能位        336:产生器选择位

338:串过滤装置失败位        342:CNT致能位

344:CNT失败位               346:串过滤装置max_cnt字段

352:SSE暂存器               364:随机数据字节字段

372:XMM0                    374:XMM5

376:XMM3

402-404:微处理器执行将值载入XMM0暂存器的指令的运作流程

502:系统存储器              504:16个字节数据

602-612:微处理器执行XLOAD指令的运作流程

702:可用字节计数            704:随机数据字节

802-824:微处理器执行XSTORE指令的运作流程

902-952:微处理器进行关于随机数产生的多工运作范例的动作流程

1002:比较逻辑               1004:或门

1006:选择逻辑               1008:与门

1012A:第一加法器            1012B:第二加法器

1014A:第一多工器            1014B:第二多工器

1016A:第一计数器            1016B:第二计数器

1022A:num_leading_ones信号

1022B:num_leading_zeros信号

1024A:ones_cnt信号          1024B:zeros_cnt信号

1026A:new_ones_cnt信号      1026B:new_zeros_cnt信号

1028A:num_trailing_ones信号

1028B:num_trailing_zeros信号

1032A、1032B:固定零值          1034A:ones_exceeded信号

1034B:zeros_exceeded信号

1036A:leading_ones信号         1036B:leading_zeros信号

1038A:trailing_ones信号        1038B:trailing_zeros信号

1042A:one_select信号           1042B:zero_select信号

1044:max_cnt_exceeded信号

1046A:第一比较器               1046B:第二比较器

1048A:all_ones信号             1048B:all_zeros信号

1102-1148:串过滤装置的运作流程

1202:EAX暂存器

1302-1334:RNG单元的多重缓冲运作的流程

1702:ECX暂存器1704:ES:EDI

1802:EDX

2002-2044:减少连续位间相关性的操作流程

2202:位选择器

具体实施方式

其它有关本发明的优点及特征都可以在以下结合附图的对具体实施方式的描述中得到进一步的了解。

现请参照图1,其是绘示本发明的微处理器100的方块图。图1的微处理器100为包括多个阶段的管线化微处理器,其中每一阶段负责整个程序指令执行过程的一部份,如下所述。

微处理器100包括一随机数产生器(RNG)单元136。微处理器100所执行的操作系统及应用程序,可能会使用随机数来执行各种功能,如数据加密、物理现象的模拟、统计分析、数值分析或是其它。RNG单元136会产生用于这些功能的随机数。RNG单元136将于下文做更详细地说明。

微处理器100也包括一指令高速缓存102。指令高速缓存102会快取从耦接至微处理器100的系统存储器所提取的程序指令。

微处理器100也包括一指令提取器104,其耦接至指令高速缓存102。指令提取器104会控制从系统存储器及/或指令高速缓存102提取指令的动作。指令提取器104会选取一个值给由微处理器100所维护的指令指针(instruction pointer)。指令指针会指定下个存储器地址,以从该处提取指令。一般来说,指令指针会循序递增,而指到下个指令。然而,流程控制指令(如分支(branch)、跳跃、副常式呼叫及返回)会将指令指针更新为流程控制指令所指定的非循序存储器地址。此外,中断可能驱使指令提取器104将指令指针更新为非循序地址。

微处理器100也包括一中断单元146,其耦接至指令提取器104。中断单元146会接收一中断信号148及一中断向量152。微处理器100的外的元件可能会致能中断信号148,并提供中断向量152,以使微处理器100执行中断服务常式。中断单元146会依据中断向量152,决定中断服务常式的存储器地址,并将中断服务常式的存储器地址送到指令提取器104,以将指令指针更新为中断服务常式地址。中断单元146也会依照微处理器100所执行的特定指令,选择性地除能及致能中断服务。也就是说,若中断被除能(disable,又称为“禁能”),则即使中断线148被致能,指令指针的内容也不会改变,直到中断被致能为止。

微处理器100也包括一指令转译器106,其耦接至指令提取器104、中断单元146及RNG单元136。指令转译器106会转译从指令高速缓存102及/或系统存储器所接收的指令。指令转译器106会转译指令,并依据转译指令的形式采取适当的动作。指令转译器106会转译微处理器100的指令集中所定义的指令。若指令转译器106要转译未定义于微处理器100指令集中的指令,则会产生不合法的指令异常。

在一具体实施例中,微处理器100的指令集实质上近似于英特尔PentiumIII或PentiumIV微处理器的指令集。然而有利的是,本发明的微处理器100包括额外的指令,其是有关于RNG单元136的随机数产生功能。一个额外的指令为XSTORE指令,可储存RNG单元136所产生的随机数。另一额外的指令为XLOAD指令,可从系统存储器将控制值载入RNG单元136中的控制与状态暂存器(control and status register,CSR)226及串流SIMD延伸(Streaming SIMD 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也包括一微程序代码ROM 132,其耦接至指令转译器106。微程序代码ROM 132会储存微程序代码指令,以送到指令转译器106,由微处理器100来执行。微处理器100指令集中的某些指令,是以微程序代码来实作。也就是说,当指令转译器106转译这些指令的其中一个时,指令转译器106会使微程序代码ROM 132内的一微指令常式被执行,藉以执行转译的宏指令。在一具体实施例中,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的CSR 226中。

微处理器100也包括一载入单元114,其耦接至地址产生器112。载入单元114会从系统存储器中载入数据至微处理器100。载入单元114也包括一数据高速缓存,以快取从系统存储器所读取的数据。载入单元114会经由数据总线142,将载入的数据送到微处理器100中的执行单元,如SSE单元134、RNG单元136及包含于执行阶段116中的执行单元。特别是,载入单元114会从系统存储器载入控制值,存到图2的CSR 226中,以执行XLOAD指令。

微处理器100也包括执行阶段116,其经由数据总线142耦接至载入单元114。执行阶段116包括执行单元,如算术逻辑单元,其用以执行算术与逻辑运算,像是加、减、乘、除及布尔运算。在一具体实施例中,执行阶段116包括一用以执行整数运算的整数单元,及一用以执行浮点运算的浮点单元。

微处理器100也包括SSE单元134,其耦接至载入单元114及指令转译器106。SSE单元134包括算术与逻辑单元,用以执行SSE指令,如包含于Pentium III与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。BIU 128是做为微处理器100与一处理器总线138的接口。处理器总线138将微处理器100耦接至系统存储器。BIU 128并执行处理器总线138上的总线作业,以在微处理器100与系统存储器的间传递数据。特别是,BIU 128会执行处理器总线138上的一个或多个总线作业,以将XSTORE指令计数及数据储存至系统存储器。此外,BIU 128会执行处理器总线138上的一个或多个总线作业,以从系统存储器载入XLOAD指令控制值。

微处理器100也包括读取缓冲器126,其耦接至BIU 128及暂存器档案108。对于经由BIU 128从系统存储器所接收的数据,在其等待送到载入单元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,MSR 212将在下文配合图3做更详细地说明。MSR 212也耦接至控制逻辑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,送到MSR 212,以更新图3的RNG存在位314。

RNG存在信号286也会送到一CPUID暂存器204,其包括图3的RNG存在位302,而RNG存在位302亦会经由RNG存在信号286来更新。也就是说,CPUID暂存器204的RNG存在位302为MSR 212的RNG存在位314的副本。在一具体实施例中,应用程序可经由执行IA-32指令集中的CPUID指令来读取CPUID暂存器204。若RNG存在位302为伪,则表示RNG单元136并不存在于微处理器100,且微处理器100不具备随机数产生的特征。有利的是,需要随机数的应用可通过RNG存在位302,来侦测微处理器100中的RNG单元136是否存在,且若RNG单元136不存在,则选择由另一个也许性能较低的来源来取得随机数。

RNG单元136也包括两个耦接至控制逻辑244的随机位产生器,称为随机位产生器0 206及随机位产生器1 208。随机位产生器206及208皆会产生一串随机位,由RNG单元136累积成随机数据的字节。随机位产生器206及208都会接收一电源控制(power_cntrl)信号231,其是用以指定是否关闭随机位产生器206及208的电源。在一具体实施例中,关闭随机位产生器206及208电源的动作包括不送时钟脉冲信号给它们。随机位产生器206及208皆会依据微处理器100的随机电气特性(如热噪声),而产生一连串随机数据位。

随机位产生器0 206会从MSR 212接收一直流偏压信号296。直流偏压信号296是传送图3中MSR 212的直流偏压位322所存的值。直流偏压信号296的值指定一直流偏压电压,以部分地控制随机位产生器0 206中的自发振铃振荡器的工作电压。

以下申请中的美国专利案,申请号为10/046055、10/046054及10/046057,标题分别为“用以产生随机数的装置”、“振荡器偏压变化机制”及“振荡器频率变化机制”(文件编号为CNTR.2113、CNTR.2155及CNTR.2156),其中均对随机位产生器0 206做了详细说明,此处全部予以参考并入。

RNG单元136也包括一具有两输入端的多工器214,其输入端耦接至随机位产生器206及208的输出端。多工器214依据CSR 226所提供的产生器选择信号252,来选择两输入端的其中一个。产生器选择信号252会传送图3中CSR 226的产生器选择位336所储存的值。

RNG单元136也包括一范纽曼白化器216,或称压缩器,其耦接至多工器214的输出端。白化器216是经由从MSR212所接收的原始位信号254,而选择性地被致能/除能。原始位信号254会传送储存于图3中MSR 212的原始位字段324中的值。若原始位信号254为真,则白化器216让多工器214所接收的位直接通过而输出,并不执行白化的功能。白化器216是依据一预定的输入/输出函数,接收来自多工器214的一对位并输出两者中任一个位或都不输出,以明显降低可能存在于随机位产生器206及208的残余偏压。白化器216的输入/输出函数是如下表一所示。

表一

    输入    输出    00    无    01    0    10    1    11    无

RNG单元136也包括一8位的移位暂存器218,其耦接至白化器216。移位暂存器218会暂存从白化器216所接收的随机数据位,将其累积成8位的字节,并输出所累积的随机数据字节。移位暂存器218将一送至控制逻辑244的字节产生信号282设定为真,以表示其已累积并输出一随机数据字节298。

RNG单元136也包括一连续数目测试(CNT)单元222,其耦接至移位暂存器218的输出端。CNT单元222会从移位暂存器218接收随机字节298,并对随机字节298进行一连续随机数产生器测试。CNT单元222是依据从CSR 226所接收的CNT致能信号284,而选择性地被致能/除能。CNT致能信号284会传送储存于图3中CSR 226的CNT致能位342中的值。若连续随机数产生器测试失败,则CNT单元222将一送到CSR 226的CNT失败信号294设定为真,并储存于图3中CSR 226的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中CSR 226的串过滤装置最大计数字段346所指定的值。在一具体实施例中,max_cnt346的默认值为26个位。在一具体实施例中,串过滤装置最大计数字段346的值必须至少为8。若串过滤装置224侦测到一连续的相似位串长度超过max_cnt 258,则串过滤装置224将一过滤失败信号256设为真,此信号是储存于图3中CSR 226的串过滤装置失败位338中。串过滤装置224在下面会配合图10到12做更详细地说明。

RNG单元136也包括一具有两输入端的第二多工器228。其中一输入端是耦接至串过滤装置224的输出端,而另一输入端是耦接至移位暂存器218的输出端。多工器228依据CSR 226所提供的过滤致能信号262,而选择其中一输入端,以传送图3中CSR 226的串过滤装置致能位334所存的值。

RNG单元136也包括一个具有一输入端与两输出端的解多工器232,其输入端是耦接至多工器228的输出。解多工器电路是包括单一数据输入端及多个数据输出端。解多工器也包括一控制输入端。解多工器会依据控制输入端的信号来选择多个数据输出端的其中一个,并将数据输入端所接收的数据送到所选的输出端。此处解多工器232则依据控制逻辑244所提供的填充选择(fill_select)信号264,将输入端所接收的随机数据字节选择性地送到其中一个输出端。

RNG单元136也包括两个数据缓冲器,标示为缓冲器0 242及缓冲器1246,皆耦接至解多工器232的输出端。缓冲器0 242及缓冲器1 246经由XSTORE指令,来累积要储存至系统存储器的随机数据字节。在一具体实施例中,缓冲器0 242及缓冲器1 246各可储存15个字节的随机数据。在一具体实施例中,缓冲器0 242及缓冲器1 246各可储存16个字节的随机数据。

RNG单元136也包括一具有两个输入端的第三多工器236,其输入端是耦接至缓冲器0 242及缓冲器1 246的输出端。多工器236依据控制逻辑244所提供的储存选择(store_select)信号266,选取其输入端的其中一组随机数据字节,以输出至一数据总线278上。

RNG单元136也包括一TSPO标志暂存器274,其耦接至控制逻辑244。TSPO标志暂存器274储存一标志,用以表示操作系统所进行的工作切换是否可能发生。TSPO标志暂存器274的使用在下面会做更详细地说明。

RNG单元136也包括有两输入端的第二解多工器215,连接到控制逻辑244。第二解多工器215的输入端接收由控制逻辑244所产生的一递增信号221。当每次随机数据字节被存入buf0 242或buf1 246,控制逻辑244宣告递增信号221。解多工器215将所接收到的递增信号221提供给根据fil1_select信号264所选择的输出端。

RNG单元136也包括一具有两输入端的第三解多工器217,其耦接至控制逻辑244。解多工器217的输入端是耦接至控制逻辑244,以接收其所产生的清除信号223。每当执行一XSTORE指令时,控制逻辑244会将清除信号223设为真,以使得有效的随机数据字节从缓冲器0 242或缓冲器1 246中移除。解多工器217依据store_select信号266,将其输入端所接收的清除信号223选择性地送到其中一输出端。

RNG单元136也包括两个计数器,标示为计数器0 211及计数器1 213,其耦接至解多工器215及解多工器217。计数器0 211及计数器1 213各具有一递增(或计数)输入端。计数输入端是耦接至解多工器215的输出端。因此,当控制逻辑244将递增信号221设为真时,计数器0 211及计数器1 213中由fill_select信号264所指定的一个会递增。计数器0 211及计数器1 213中也各具有一清除输入端。清除输入端是耦接至解多工器217的输出端。因此,当控制逻辑244将清除信号223设为真时,计数器0 211及计数器1 213中由store_select信号266所指定的一个会被清除为0。

RNG单元136也包括两个比较器225,其耦接至计数器0 211及计数器1 213的输出端。比较器225将计数器0 211及计数器1 213所输出的计数值,与计数器0 211及计数器1 213可储存的字节数目做比较,以判断计数器0211及计数器1 213是否已满,并产生full0信号229及full1信号227,以将比较结果告知控制逻辑244。

RNG单元136也包括一具有两个输入端的第四多工器219,其输入端是耦接至计数器0 211及计数器1 213的输出端。多工器219会依据储存选择(store_select)信号266,选取其输入端的其中一计数值,以输出作为可用字节计数234。可用字节计数234也会送到CSR 226。

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可储存一计数字节,加上缓冲器0 242及缓冲器1 246所能储存的随机数据字节。

在一具体实施例中,RNG单元136包括四个缓冲器,而非两个。每一缓冲器可储存多达八个字节的随机数据。在此实施例中,解多工器215、217及232包含具四个输出端的解多工器;多工器219及236包含具四个输入端的多工器;比较器225包括四个比较器,以产生四个充满输出;而fill_select信号264及store_select信号266包括两个位,用以选择四个计数器及缓冲器的其中一个。

现请参照图3,其是绘示本发明图1微处理器100中,与图1的RNG单元136有关的各种暂存器的方块图。

图3是显示图2中的CPUID暂存器204。CPUID暂存器204包括一RNG存在位302。RNG存在位302为只读的特征标志单元。若RNG存在位302为1,则表示RNG单元136存在,并由微处理器100来致能。若RNG存在位302为0,则RNG单元136并不存在,且XLOAD及XSTORE指令为无效的,而当指令转译器106遇到这些指令时,将产生无效指令异常。此外,读取MSR212中的位,结果是未定义,而尝试写入,则不会产生任何效果。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指令即为无效,而若指令转译器106遇到这些指令时,将产生无效指令异常。此外,读取MSR 212中的位,结果是未定义,而尝试写入,则不会产生任何效果。RNG致能位312的值在重置之后,即变为0。

MSR 212也包括一只读的RNG存在位314。RNG存在位314是表示RNG单元136是否存在于微处理器100中。若RNG存在位314为0,则RNG单元136不能经由设定RNG致能位312来致能,并且,读取MSR 212中的位,结果是未定义,而尝试写入,则不会产生任何效果。此外,若RNG单元136的自我测试失败,则RNG存在位314将被清除,如前文图2部分所述。

MSR 212也包括一只读的统计自我测试致能位316。自我测试致能位316是表示前述图2部分的重置后的自我测试目前是否致能。若自我测试致能位316为0,则在重置之后,不会执行自我测试。若自我测试致能位316为1,则在重置之后,会执行自我测试。在一具体实施例中,在微处理器100的暖重置及电源开启重置之后,会执行自我测试。

MSR 212也包括一只读的统计自我测试失败位318。自我测试失败位318是表示前述图2部分的最近重置后的自我测试是否失败。在一具体实施例中,若自我测试失败位318为1,则RNG单元136无法被致能。

MSR 212也包括可写入的直流偏压位322。在一具体实施例中,直流偏压位322包括三个位。直流偏压位322是用以控制送到随机位产生器0 206的直流偏压,其会影响随机位产生器0 206的运作速度及可能的随机度。在一具体实施例中,若在重置时执行统计自我测试,则自我测试单元202会决定出直流偏压位322的正确值或最佳值,并将其设定为此值。在重置之后,直流偏压位322的值即变为000。

MSR 212也包括可写入的原始位位324。若原始位位324设定为0,则图2的白化器216会执行前文图2部分所述的白化功能,并将白化位传送到移位暂存器218。若原始位位324设定为1,则白化器216不会执行白化功能,而将来自于多工器214的原始位传送到移位暂存器218。在重置之后,原始位位324的值即变为0。

图3也显示图2中的CSR 226。在一具体实施例中,CSR 226为128位的暂存器。CSR 226包括只读的可用字节计数字段332。可用字节计数字段332会指明在store_select信号266所选择的缓冲器0 242或缓冲器1 246中,目前有多少字节的随机数据可经由XSTORE指令来储存。若有需要,可藉软件来读取可用字节计数字段332,以判断目前有多少随机数据字节可经由XSTORE指令来储存。由于RNG单元136会将字节同步地累积至缓冲器0242及缓冲器1 246,在执行XSTORE的时候,可储存的字节的实际数目可能大于先前通过XLOAD所读取的可用字节计数332。在RNG单元136致能之后,可用字节计数字段332的值即变为0。

CSR 226也包括可写入的串过滤装置致能位334。若串过滤装置致能位334为1,则串过滤装置224被致能;否则串过滤装置224被除能。串过滤装置224的运作在下面会配合图10到12,做更详细地说明。在RNG单元136致能之后,串过滤装置致能位334的值即变为0。

CSR 226也包括可写入的产生器选择位336。若产生器选择位336设定为0,则选取随机位产生器0 206,以经由图2的多工器214,提供随机比特流加以累积;否则,会选取随机位产生器1 208。在RNG单元136致能之后,产生器选择位336的值即变为0。

CSR 226也包括串过滤装置失败位338。若串过滤装置失败位338设定为1,是表示串过滤装置224侦测到一连续的相似位串长于串过滤装置max_cnt字段346所指定的值,如前文图2及图10到12部分所述。只有RNG单元136可将串过滤装置失败位338设定为1。然而,软件可经由将0写入其中,清除串过滤装置失败位338。在一具体实施例中,过滤失败位338可经由过滤失败信号256的脉冲设定为1,并且维持于1,直到软件将其清除为止。在RNG单元136致能之后,串过滤装置失败位338的值即变为0。

CSR 226也包括可写入的计数(CNT)致能位342。若CNT致能位342设定为1,则CNT单元222会执行连续的随机数产生器测试,如图2部分所述。在RNG单元136致能之后,CNT致能位342的值即变为0。

CSR 226也包括只读的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。

CSR 226也包括可写入的串过滤装置max_cnt字段346。软件将值写入串过滤装置max_cnt字段346,以指定可容忍的最大数目的可允许连续相似位,如下面图10到12部分所述。在一具体实施例中,串过滤装置max_cnt字段346包括5个位。在一具体实施例中,串过滤装置max_cnt字段346的预设值为26。

在一具体实施例中,MSR 212的各个字段是包含于CSR 226,而不是MSR 212中。因此,MSR 212的值会以CSR 226来做储存及回存,以适用于多工运作,如此处所述,特别是图4到9的部分。

图3也显示图2的RNG R5暂存器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 R5238会遮蔽XMM5 374,如下文所述。

在一具体实施例中,微处理器100包括各种熔丝,在微处理器100的制造过程中,其会暂时或永久地加以设定,以便于重置时,能选取CSR 226及MSR 212中各个位的值,取代前述的重置值。

现请参照图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的类似指令)已被转译。一旦此值已载入XMM0 372,RNG单元136的控制逻辑244会设定TSPO标志274,以表示可能发生工作切换。流程会结束于方块404。

请现请参照图5,其是绘示根据本发明,图1微处理器100于执行XLOAD指令时的运作方块图。XLOAD指令是软件藉以将值载入图2的CSR 226的工具,以指定RNG单元136运作所需的控制值。因为CSR 226不存在于Pentium III或IV中,所以需要Pentium III或IV指令集外的新指令,以载入CSR 226。有利的是,XLOAD指令也会将控制值载入XMM0 372,便于以RNG单元136进行多工操作,如此处所述。

图5显示了指定XMM0 372的XLOAD指令的格式,其为:

       XLOAD XMM0,memaddr

其中memaddr指定了系统存储器502中的一存储器地址。XLOAD指令的运作与MOVAPS指令类似,不过前者除了XMM0 372外,亦会将系统存储器的值载入CSR 226。在一具体实施例中,XLOAD会将16个字节的数据504从memaddr移到CSR 226及XMM0 372,如图所示。在一具体实施例中,XLOAD指令的运算码值为0x0F 0x5A,其后接着x86指令所指定的标准modR/M暂存器及地址格式字节。在另一具体实施例中,XLOAD指令的运算码值则为0x0F 0xA6 0xC0。若XLOAD指令指定SSE暂存器352中的一个,而非XMM0 372,则会载入指定的SSE暂存器352;然而,并不会载入CSR226。

现请参照图6,其是根据本发明,图1的微处理器100执行将值载入图3的XMM0暂存器372的XLOAD指令的运作流程图。流程从方块602开始。

于方块602中,微处理器100将系统存储器502中,XLOAD指令所指定的存储器地址的值,载入图2的CSR 226及图3的XMM0 372,如图5所示。流程继续进行至方块604。

于方块604中,由于累积于缓冲器0 242及缓冲器1 246的随机数据字节并不会随着CSR 226中的控制值而产生,其中这些控制值是正载入CSR226的新工作的所需,所以RNG单元136会回应CSR 226的载入动作,而丢弃缓冲器0 242及缓冲器1 246的内容。流程继续进行至方块606。

于方块606中,由于缓冲器0 242及缓冲器1 246中的随机数据字节在方块604时被丢弃,所以RNG单元136会将计数器0 211及计数器1 213中的可用字节计数清除为0。流程继续进行至方块608。

于方块608中,RNG单元136重新开始累积随机数。也就是说,产生器选择信号252所选取的随机位产生器206或208,在随机位产生器0 206的情况下,会依据直流偏压信号296来产生随机位;白化器216则依据原始位信号254,选择性地白化这些位;CNT单元222根据CNT致能信号284,选择性地执行连续随机数产生器测试;串过滤装置224根据过滤致能信号262及max_cnt信号258,选择性地过滤移位暂存器218所累积的字节;缓冲器0 242及缓冲器1 246依据fill_select信号264,累积随机数据字节;而计数器0 211及计数器1 213则依据fill_select信号264,计算缓冲器0 242及缓冲器1 246中所累积的字节数目。

于方块612中,由于CSR 226已被更新为目前工作所需要的控制值,所以控制逻辑244会清除TSPO标志274。流程会结束于方块612。

现请参照图7,其是根据本发明,图1中的微处理器100于执行XSTORE指令时的运作方块图。XSTORE指令是软件藉以将可用随机数据字节的计数值及本身从R5 238储存至系统存储器的工具。因为RNG R5 238不存在于Pentium III或IV中,所以需要Pentium III或IV指令集外的新指令,以储存RNG R5 238。有利的是,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中的ES:EDI暂存器来指定memaddr,也就是说,指到要储存计数及随机数据字节的起始存储器地址。在一具体实施例中,XSTORE不允许区段重叠。若XSTORE指令指定了SSE暂存器352的其中一个,而非XMM5 374,则结果会呈未定状态。

在一具体实施例中,微处理器100储存于系统存储器的随机数据字节704的数目,是等于也写入系统存储器的可用字节计数702。

在另一具体实施例中,微处理器100储存于系统存储器的随机数据字节704的数目,是等于一个比RNG R5 238中的字节还少的数目。也就是说,若RNG R5 238为16个字节的暂存器,可储存最多达15个随机数据字节364及一个字节的可用字节计数362,则微处理器100会将16个字节存至系统存储器502:15个字节的随机数据存到随机数据字节704的位置,而一个计数字节则存到可用字节计数702的位置。然而,在写入系统存储器502的15个字节中,某些可能不是有效的。在一具体实施例中,写入存储器的字节的数目皆为2的次方。只有前N个字节是有效的,其中N为可用字节计数702。

在此具体实施例中,RNG单元136会清除XSTORE运算所指涉的缓冲器(也就是说,图2的缓冲器0 242或缓冲器1 246)。经由清除缓冲器,微处理器100可避免各个工作看到彼此的随机数据所产生的问题,而提升安全性。例如,假设第一工作执行第一XSTORE运算,将15个字节的随机数据从缓冲器0 242储存到系统存储器,并执行第二XSTORE运算,将15个字节的随机数据从缓冲器1 246储存到系统存储器;然后操作系统切换到第二工作,其会在RNG单元136将任何随机数据字节累积到缓冲器0 242之前,立即执行XSTORE运算。若在第一XSTORE运算后,RNG单元136未清除缓冲器0 242,则第一工作所接收到的随机数据也会储存到第二工作的存储器位置,如此会使第二工作看到第一工作的随机数据。

在一具体实施例中,XSTORE指令指定了要存至系统存储器的最大数目的随机数据字节。在此具体实施例中,该最大数目是指定于暂存器档案108的其中一个一般用途暂存器中,如ECX。在此具体实施例中,若store_select信号266所选取的缓冲器0 242或缓冲器1 246中的可用字节多于ECX中所指定的最大数目,则微处理器100只会储存ECX中所指定的最大数目的字节;否则,XSTORE指令会储存可用数目的有效字节。在前述任一种情况下,XSTORE指令皆会将存至系统存储器502的数据字节位置704的有效随机数据字节的数量,储存到可用字节计数位置702。

在一具体实施例中,XSTORE指令指定了要存至系统存储器的所需数目的随机数据字节。在此具体实施例中,该所需数目是指定于暂存器档案108的其中一个一般用途暂存器中,如ECX。在此具体实施例中,XSTORE指令是加上一x86 REP前置码(prefix)。在此具体实施例中,REP XSTORE指令并非需连续执行的。也就是说,因为所需的随机字节的数目可能会很大,所以REP XSTORE是可中断的。然而,由于所储存的随机数据字节数目是不可变的((也就是说,软件知道将要存至存储器的随机数据字节的数目),所以指令不必连续执行。

现请参照图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所表示的,所以CSR 226可能不具有目前执行XSTORE指令的工作所需的正确控制值。因此,XSTORE指令必须以正确的控制值来更新CSR 226。正确值是储存于XMM0 372中,此因当工作初始时,该正确控制值是经由执行XLOAD而被载入XMM0 372及CSR 226中,而后当操作系统切回至目前工作时,正确控制值也被回存至XMM0 372。流程会继续进行方块808。

在方块808中,因为累积于缓冲器0 242及缓冲器1 246的随机数据字节,不会随着CSR中新工作所需的新控制值而产生,其中这些新控制值是于方块806中被复制到CSR226中,所以RNG单元136会回应CSR 226的载入,而丢弃缓冲器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或计数器1213。流程会继续进行方块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,而丢弃缓冲器0 242及缓冲器1 246的内容、清除计数器0211及计数器1 213、重新开始随机数的产生与累积以及清除TSPO标志274。流程会继续进行方块908。

在方块908中,工作A执行XSTORE指令,以储存依据方块904载入至CSR 226的控制值A所产生的随机数据。流程会继续进行方块912。

在方块912中,为了执行前一方块的XSTORE,RNG单元136会连续地将于方块906重新开始后所累积的计数值及数据,储存至系统存储器,如图7及图8所示。流程会继续进行方块914。

在方块914中,操作系统会执行从工作A到工作B的工作切换。其中,操作系统会将XMM0 372的值(其包含控制值A)储存至系统存储器,以保留工作A的状态。然而,操作系统不知道CSR 226的情况,所以操作系统不会将CSR 226储存至系统存储器以保留其状态。流程会继续进行方块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,而丢弃缓冲器0 242及缓冲器1 246的内容、清除计数器0211及计数器1 213、重新开始随机数的产生与累积以及清除TSPO标志274。流程会继续进行方块924。

在方块924中,工作B执行XSTORE指令,以储存依据方块918载入至CSR 226的控制值B所产生的随机数据。流程会继续进行方块924。

在方块926中,为了执行前一方块的XSTORE,RNG单元136会连续地将于方块922重新开始后所累积的计数值及数据,储存至系统存储器,如图7及图8所示。流程会继续进行方块928。

在方块928中,操作系统会执行从工作B到工作A的工作切换。其中,操作系统会将XMM0 372的值(其包含控制值B)储存至系统存储器,以保留工作B的状态。然而,操作系统不知道CSR 226的情况,所以操作系统不会将CSR 226储存至系统存储器以保留其状态。此外,操作系统会回存工作A的状态,其包括将先前在方块914所保留的值A,从系统存储器载入到XMM0372。流程会继续进行方块932。

在方块932中,根据图4的步骤404,RNG单元136会回应在方块928的XMM0 372的载入,而设定TSPO标志274。流程会继续进行方块934。

在方块934中,工作A执行XSTORE指令,以储存依据方块904载入至CSR 226的控制值A所产生的随机数据。然而,在方块918,CSR 226中的值A会被覆写。因此,目前累积于缓冲器0 242及缓冲器1 246的随机数据字节并非依据值A产生,而是依据值B而产生。流程会继续进行方块936。

在方块936中,RNG单元136依图8的方块804,判断TSPO标志274已设定,于是会依据图8的方块806,将XMM0 372的内容复制到CSR 226,藉以将值A回存至CSR226。此外,由于CSR226已被回存,所以根据方块806,RNG单元136会清除TSPO标志274。流程会继续进行方块938。

在方块938中,根据图8的方块808、812以及814,RNG单元136会回应方块936中复制到CSR 226的动作,而丢弃缓冲器0 242及缓冲器1 246的内容、清除计数器0 211与计数器1 213以及重新开始随机数的产生及累积。流程会继续进行方块942。

在方块942中,为执行方块934的XSTORE,RNG单元136会连续地将于先前的方块重新开始后所累积的计数值及数据,储存至系统存储器,如图7及图8所示。在此情况下,由于在先前方块中,已清除计数器0 211及计数器1 213,并丢弃缓冲器0 242及缓冲器1 246的内容,所以计数值为0,且未有有效随机数据字节储存到系统存储器中。流程会继续进行方块944。

在方块944中,工作A执行XSTORE指令,以储存依据方块904载入至CSR 226的控制值A所产生的随机数据,其中CSR 226在方块936,已回存为值A。流程会继续进行方块946。

在方块946中,为执行先前方块的XSTORE,RNG单元136会连续地将于方块938重新开始后所累积的计数值及数据,储存至系统存储器,如图7及图8所示。流程会继续进行方块948。

在方块948中,工作A执行XSTORE指令,以储存依据方块904载入至CSR 226的控制值A所产生的随机数据,其中CSR 226在方块936,已回存为值A。流程会继续进行方块952。

在方块952中,为执行先前方块的XSTORE,RNG单元136会将于方块938重新开始后所累积的计数值及数据,扣掉方块944中由前次XSTORE所储存的字节,再将结果连续地储存至系统存储器,如图7及图8所示。流程则结束于方块952。

现在参照图10,其是绘示根据本发明,图1的微处理器100中,图2的RNG单元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,若随机数据字节298包含尾端的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,若随机数据字节298包含尾端的0位,则此信号为真。

串过滤装置224也包括第二计数器1016B,以储存连续0位的现时计数。在一具体实施例中,计数器1016B包括一6位的暂存器。计数器1016B的输出为zeros_cnt信号1024B。

串过滤装置224也包括第二加法器1012B,其将num_leading_zeros信号1022与zeros_cnt信号1024B相加,以产生new_zeros_cnt信号1026B。

串过滤装置224也包括四输入端的第二多工器1014B。多工器1014B在其输入端接收zeros_cnt信号1024B、new_zeros_cnt信号1026B、num_trailing_zero1s信号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也包括两输入端的或门(OR 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 &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当输入  }else if(increment_zeros){   zero_select=2;∥选择new_zeros_cnt当输入  }else if(load_zeros){<!-- SIPO <DP n="34"> --><dp n="d34"/>  zero_select=1;∥选择num_trailing_zeros当输入  }else if(clear_zeros){   zero_select=0;∥选择hard_coded 0当输入  }  if(retain_counts){  one_select=3;∥选择ones_cnt当输入  }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 相加,以产生1026B。流程会继续进行判断方块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被载入缓冲器0 242或缓冲器1 246,即使移位暂存器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,并且于one_select信号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信号1038A,以判断随机数据字节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所选择的缓冲器0 242或缓冲器1 246中,并将递增信号221设为真,以递增由fill_select信号264所选择的计数器0 211或计数器1 213。流程接着返回方块1104。

现在参照图12,其是绘示根据本发明的另一具体实施例,图1微处理器100执行XSTORE指令的运作方块图。图12的XSTORE指令是类似于图7的XSTORE指令,不过在此具体实施例中,有效随机数据字节的计数值会被载入暂存器档案108的其中一个一般用途暂存器中,如EAX 1202暂存器,而不会储存至系统存储器。有利的是,与图7的XSTORE指令类似,图12的XSTORE指令会连续地将计数值载入EAX,并将随机数据字节储存至存储器,以促进与RNG单元136的多工运作。也就是说,图12的XSTORE指令也是不可中断的。

现在参照图13,其是绘示根据本发明,图2的RNG单元136的多重缓冲(multi-buffering)运作的流程图。流程是从方块1302开始。

在方块1302中,重置信号248被设为真。流程会继续进行方块1304。

在方块1304中,图2的控制逻辑244将fill_select信号264及storev_select信号266初始化为0,并回应方块1302的重置动作而清除计数器0 211及计数器1 213。流程会继续进行判断方块1306。

在判断方块1306中,控制逻辑244检查xstore信号268,以判断是否已执行XSTORE指令。若是,流程会继续进行判断方块1308。否则,流程会继续进行判断方块1322。

在判断方块1308中,控制逻辑244判断由产生器选择信号252所选择的随机位产生器0 206或随机位产生器1 208的电源是否已关闭。若是,流程会继续进行方块1312。否则,流程会继续进行方块1314。

在方块1312中,控制逻辑244经由power_cntrl信号231开启所选择的随机位产生器的电源。流程会继续进行方块1314。

在方块1314中,根据图8的方块816及如图7所示,微处理器100将由store_select信号266所选择的计数器0 211或计数器1 213的值,以及由store_select信号266所选择的缓冲器0 242或缓冲器1 246中的有效数据字节,连续地储存至系统存储器。流程会继续进行方块1316。

在方块1316中,控制逻辑244将清除信号223设为真,以清除由store_select信号266所选择的计数器0 211或计数器1 213。流程会继续进行方块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所选择的缓冲器0 242或缓冲器1 246中,并且递增由fill_select信号264所选择的计数器0 211或计数器1 213。流程会继续进行判断方块1326。

在判断方块1326中,控制逻辑244检查由fill_select信号264所指定的full0信号229或full1信号227,以判断由fill_select信号264所选择的缓冲器0 242或缓冲器1 246是否已满。若是,流程会继续进行方块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所选择的缓冲器0 242或缓冲器1 246是否已满(也就是说,判断所有的缓冲器是否已满)。若是,流程会继续进行方块1334。否则,流程会返回方块1306。

在方块1334中,由于所有的缓冲器已满,控制逻辑244就经由power_cntrl信号231,关闭随机位产生器0 206及随机位产生器1 208的电源。流程会返回判断方块1306。

现在参照图14,其是绘示根据本发明的另一具体实施例,图1的微处理器100执行图3的XLOAD指令的运作流程图。图14的流程图与图6的流程图相同,并且标号相同的方块是一样的,除了图14包括额外的判断方块1403。流程会从方块602进行到判断方块1403。在判断方块1403中,图2的控制逻辑244判断CSR 226的相关位是否已因方块602中CSR 226的载入而改变。若是,流程会继续进行如图6的方块604。否则,流程会继续进行方块612,如图所示。此实施例的优点是,不必丢弃已累积的随机字节及重新开始随机字节的累积。也就是说,若CSR 226的载入对于会影响RNG单元136的随机数产生功能的值未做任何改变,则由于随机字节是通过使用所要的控制值而产生,所以不需丢弃已累积的随机字节及重新开始随机字节的累积。在一具体实施例中,相关的CSR 226位为串过滤装置致能位334、产生器选择位336、CNT致能位342以及串过滤装置max_cnt 346。

现在参照图15,其是绘示根据本发明的另一具体实施例图1的微处理器100执行图3的XSTORE指令的运作流程图。图15的流程图与图8的流程图相同,并且标号相同的方块是一样的,除了图15包括额外的判断方块1507。流程会从方块806进行到判断方块1507。在判断方块1507中,图2的控制逻辑244判断CSR 226的相关位是否已因方块806中复制至CSR 226的动作而改变。若是,流程会继续进行如图8的方块808。否则,流程会继续进行方块816,如图所示。此实施例的优点是,不必丢弃已累积的随机字节及重新开始随机字节的累积。也就是说,若复制至CSR 226的动作对于会影响RNG单元136的随机数产生功能的值未做任何改变,则由于随机字节是通过使用所要的控制值而产生,所以不需丢弃已累积的随机字节及重新开始随机字节的累积。在一具体实施例中,相关的CSR 226位为串过滤装置致能位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指令会连续地将随机数据字节写入该使用者可见暂存器,并将计数值载入EAX 1202,以促进与RNG单元136的多工运作。也就是,图16的XSTORE指令也是不可中断的。

现在参照图17,其是绘示根据本发明的另一具体实施例,图1的微处理器100执行XSTORE指令的运作方块图。图17的XSTORE指令类似于图12的XSTORE指令,然而在图17的实施例中,XSTORE指令包括一x86架构的REP前置码。经由REP XSTORE指令,要存至系统存储器的随机数据字节的数目,会被指定为暂存器档案108的ECX暂存器1702的输入参数,如图所示。软件在执行REP XSTORE指令前,会将要存至系统存储器的随机数据字节的理想计数值载入ECX 1702中。

在一具体实施例中,在将随机数据字节存至系统存储器的储存动作间,REP XSTORE指令是可中断的。存储器地址于初始时,是指定于暂存器档案108的一般用途暂存器中。在图17的例子中,存储器地址是指定于暂存器档案108的ES:EDI 1704中,如图所示。每当有一或更多个随机数据字节被写入系统存储器时,ES:EDI 1702即更新为系统存储器中,下个用以储存随机数据字节的位置。此外,每当有一或更多个随机数据字节储存至系统存储器时,ECX 1702即更新,以反映尚待储存储存的随机字节数目。例如,假设REP XSTORE指令于ECX 1702中指定一字节计数值28及0x12345678的存储器地址。假设在缓冲器0 242及缓冲器1 246两者之一中,RNG单元136有8个可用的字节,且当累积更多的随机数据字节时,将8个字节写入系统存储器。当8个字节被写至存储器时,ECX 1702会更新为20,以表示还有20个随机数据字节必须写入系统存储器。此外,地址会被更新为系统存储器中,下个将要写入大量随机数据字节的位置0x12345680。中断可能会发生在这个时候,而软件会检查更新的值。当中断已执行且控制权回归至REPXSTORE指令时,REP XSTORE指令将使用ECX 1702及ES:EDI 1704中的更新值回复执行。此外,完成REP XSTORE指令时,图2的CSR 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的(指数因子)幂次来当作参考。被EDX 1802暂存器所指定指数因子是如图18XSTORE指令的一个输入参数。EDX 1802为暂存器档案108中一个使用者可见的通用暂存器。

在一实施例中,暂存在R5 238的随机数据位组长度为8位或64位,因此在EDX 1802被指定的指数因子容许值可为0,1,2,3,而可能的N值就为1,2,4,8。因此,在如图18的XSTORE指令实施例中,被存到系统存储器的有效随机数据位组长度就为8/N,也就是8,4,2,1。在另一实施例中,在EDX 1802被指定的因子指数容许值为1,2,3,而可能的N值就为1,2,4,8。在XSTORE指令执行完成后,决定系统存储器502的有效随机数据位组长度以及指令状态同时被放到EAX 1202。

如图18的XSTORE指令也包括有根据前图所述的其它XSTORE指令实施例特征。举例来说,如图18的XSTORE指令可以将每第N个累积且被选择的位储存到在微处理器中的一暂存器,而不是如根据图16的具体实施例所述储存到存储器;或是有效位计数值可储存到存储器,而不是如根据图7的具体实施例所述储存到EAX暂存器;或是一REP前置码可被包括在如图17所述的具体实施例中。

请参阅图19,图19根据本发明,当如图18的XSTORE指令时执行的一操作实例。一个在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。

本发明的优点是,如图18的XSTORE指令减低了RNG单元136产生的连续位间的关连性,其中,RNG单元136是由使用者致能且指定储存在EDX 1802的指数因子,该指数因子用以选择在R5 238的每N个位,指数因子与N的关系可表示为:N=2^(指数因子)。

请参阅图20,图20为根据本发明的一具体实施例,是为如图1的RNG单元136减少连续位间相关性的操作流程图。在图20的具体实施例中,用来执行减低连续位间相关性功能的装置包括有如图1微处理器100的多个元件,如档案暂存器108、地址产生器112、载入单元114、执行单元116(包括ALU 162)、RNG单元136、储存单元118、回写单元122、写入缓冲器124及总线接口单元128。储存在如图1所示微码存储器132的微码指令,根据如图21所示的程序行表(program listing)控制微处理器100的元件。图20的流程图描述普通如图21所示的程序行表的微码指令。流程开始于方块2002。

在方块2002中,如图2所示的RNG单元136经由随机位产生器206或208,多工器214及白化器216产生一连串的随机数据位,并且经由如图2及前图所述的移位暂存器218、串过滤装置224、多工器228、解多工器232、缓冲器0 242及缓冲器1 246两数据缓冲器、多工器236、R5 238及控制逻辑244将位累积成字节。流程下一步到判断方块2004。

在判断方块2004中,微处理器100经由从图3的CSR 226来的可利用位计数值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-指数因子)。流程在方块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将EAX 1202左移一个位,以清出一个EAX空间来给从R5 238得到原始数据所选定及累积的下一个位。流程下一步到方块2032。

在方块2032中,微处理器100经由从temp1取出中最后一个位(也就是除了最后一个位外,全部舍弃)并且将该最后一个位加入EAX 1202中来达成选定并累积下一个第N位。流程下一步到方块2034。

在方块2034中,微处理器100将temp1右移N个位,因此将下一个被选定的N位放入temp1的位置,经由将temp1右移N个位,将前次在方块2032中被选定及累积的位被舍弃。流程下一步到方块2036。

在方块2036中,微处理器100将循环计数值递减1。流程下一步到方块2038。

在方块2038中,微处理器100判断循环计数值是否已到达0。若为是,流程到方块2042,否则,流程到方块2028。

在方块2042中,微处理器100将EAX 1202储存到系统存储器502。EAX1202包括有从R5 238所选定并累积的每第N个位。在一实施例中,EAX1202的全部内容被存入系统存储器502,即使在EAX 1202的一些位也许不包含有效随机数据字节。然而在2008方块中,每一次完成XSTORE指令。有效随机数据字节被存入系统存储器502的长度会反应在EAX 1202。因此,致能程序以决定有效随机数据字节被存入系统存储器502的长度。举例来说,假如EAX 1202为2,则四个字节只有两个字节被存入到系统存储器502中,并且有效随机数据字节的长度会根据EAX1202的状态设定成2。

在方块2044,既然N是2、4或8,及所有(8/N)个位在方块2042中会被存入系统存储器502中,微处理器100将有效随机数据字节的长度设定成8除以N。流程到方块2008。

请参阅图21,图21是为根据本发明使如图1的处理器100减少连续位间相关性的一微码指令列表。下面的讨论将有助于了解微码列表。

这个微码列表包括有被称为跳跃指令(jump instruction)的分支指令(branch instruction),如je.32,je1.32、循环指令(loop instruction),如loopn.32、返回指令(return instruction)。所有跟在分支指令之后的指令位置都被称为一延迟时槽(delay slot),所有在延迟时槽的指令均会执行而不考虑该分支是否已被选取。如此,如果该分支尚未被选取,则在延迟时槽的指令及其下一个指令将会被执行。如果该分支已被选取,在延迟时槽的指令及在分支目标地址的指令下一个将会被执行。

微码指令使用八个在暂存器档案108中32位的通用暂存器,在列表中被表示成r0到r7。在一实施例中,r0到r7不是使用者可视的暂存器。被存在r0的值在所有时间都是0。在一实施例中,由微码指令指定的算术及逻辑操作如及、加、移位指令主要由图1中的ALU 162所执行。

除了分支指令,这三个操作数指令的格式为:

<opcode><目的><来源一><来源二>

由第8行指令dmtid r4,r5所跟随的在第7行指令mfxd.64 XMM5使如图2的64位R5 238的内容被复制到两个32位的暂存器r4,r5。根据第1行dmtidr2,r3指令,微码的部分分支到get_random_data包括在分支之后延迟时槽的一mfxd.64指令(也就是CSR 226)。因此,结合两个指令使64位CSR 226的内容被复制到两个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对应到DB 144的位长度,且2302-n一般表示为输出连接到DB 144[n]的多工器2303。多工器2302-0的输出连接到DB 144[0],也就是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输入接收中间数据总线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熵值增加及对应的最小随机数据位产生器率如下:

    EDX/N    Shannon熵    (bits/byte)    数据率    (Mega bits/second)    0/1    7.98    4    1/2    7.995    2    2/4    7.999    1    3/8    7.99982    0.5

虽然本发明的目标、特征和优点已经被详述,其它的一些实施例也应包括在本发明范围内。举例来说,在一些实施例中,指数因子是以2为底数,本发明当然也可以适用在其它的基数值。此外,虽然在一些实施例中的因子是用来计算2的幂次的方式存在暂存器中,但因子也可以其它方式指定。例如说当该值被除在一暂存器中,因子可以被该值直接指定。

总之,以上所述仅为本发明的较佳实施例而已,当不能以之限定本发明所实施的范围。大凡依本发明权利要求所作的均等变化与修饰,皆应仍属于本发明专利涵盖的范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号