CN1310131C - 随机数产生器及产生方法及具有随机位产生器的微处理器 - Google Patents

随机数产生器及产生方法及具有随机位产生器的微处理器 Download PDF

Info

Publication number
CN1310131C
CN1310131C CNB2003101014605A CN200310101460A CN1310131C CN 1310131 C CN1310131 C CN 1310131C CN B2003101014605 A CNB2003101014605 A CN B2003101014605A CN 200310101460 A CN200310101460 A CN 200310101460A CN 1310131 C CN1310131 C CN 1310131C
Authority
CN
China
Prior art keywords
random
instruction
microprocessor
square
signal
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
CNB2003101014605A
Other languages
English (en)
Other versions
CN1514346A (zh
Inventor
G·葛兰·亨利
詹姆斯·R·朗勃格
泰瑞·派克斯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
INTELLIGENCE FIRST CO
Original Assignee
INTELLIGENCE FIRST CO
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US10/365,601 external-priority patent/US7174355B2/en
Application filed by INTELLIGENCE FIRST CO filed Critical INTELLIGENCE FIRST CO
Publication of CN1514346A publication Critical patent/CN1514346A/zh
Application granted granted Critical
Publication of CN1310131C publication Critical patent/CN1310131C/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/58Random or pseudo-random number generators

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Microcomputers (AREA)
  • Storage Device Security (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

本发明涉及一种随机数产生器及产生方法及具有随机位产生器的微处理器,特别是提供了一种具有多个随机位产生器的微处理器。该多个随机位产生器的每一个皆产生一比特流。其中一比特流被选取,以累积成随机字节,供应用程序使用。哪一个随机位产生器的比特流被选取,决定于储存于微处理器的一控制寄存器中的一选择值。此选择值可由微处理器所执行的指令进行程序化。本发明可使微处理器内的硬件式随机数产生器更加能够产生可被接受的随机数。

Description

随机数产生器及产生方法及具有随机位产生器的微处理器
技术领域
本发明有关于随机数产生(random number generation)的领域,特别是有关于微处理器内的多个可选择的随机位产生器以及产生随机数的方法。
背景技术
就历史来看,许多计算机应用软件需要提供随机数。例如,物理现象的蒙地卡罗仿真,如大规模的天气仿真,就需要提供随机数,以仿真物理现象。需要使用随机数的其它例子为赌场游戏及线上赌博,以仿真洗牌,掷骰子等;彩券号码的产生;统计分析数据的产生,如心理学的测验;以及计算机游戏。
在这些型式的应用中,所需的随机度,以及对产生随机数的性能要求是不同的。许多应用软件,如计算机游戏,对于随机度的要求是不高的。心理学测验上的应用,对随机度有着更严格的要求,但性能需求则相当低。然而,大规模的运用蒙地卡罗的仿真会有非常高的性能需求,且需要良好的随机数统计特性,虽然不可预测性并非特别重要。其它的应用,如线上赌博,则对于随机度及不可预测性皆有非常严格的要求。
虽然上述这些应用仍然是重要的,但是在计算机安全领域,则对高品质随机数有最大的需求。最近,个人计算机网络及互联网交易的爆炸性成长,对于各种安全机制的需求已明显地增加。
对所有涉及计算机安全的主要构成要素而言,高品质的随机数皆为必要。这些要素包含机密性、身分确认以及数据完整性。
数据加密为提供机密性的主要机制。有许多种不同的加密算法,如对称式加密、公共钥匙及一次性密码本,但是这些算法都具有一关键特性,即加密/解密钥匙不能被简单地预测出来。一个加密系统的密码强度基本上即是其所用钥匙的强度,亦即预测、猜想或计算解密钥匙的难度。最好的钥匙为够长的真随机数,而在所有严格要求安全的应用中,随机数产生器为产生密码钥匙的基础。
许多对密码算法成功的攻击,已非专注于加密算法,而是专注于产生随机数的来源。一个为人熟知的例子是,网景的安全插座层(Secure SocketsLayer,SSL)的早期版本,会从系统时钟脉冲与程序ID表搜集数据,以产生软件式准随机数产生器的起始值。所产生的随机数用来产生一对称钥匙,以加密通联数据。有两个研究生想出了可准确猜测随机数的程序,在一分钟内,就猜出通联钥匙,破坏这个机制。
与解密钥匙类似,用以确认存取信息的使用者身份的密码,其强度实际上就是预测或猜测密码的难度。最好的密码为够长的真随机数。此外,在有使用暗号协议(challenge protocol)的确认协议(authentication protocol)中,关键因素就是使暗号无法由进行确认的一方加以预测。而随机数则用来产生确认身份的暗号。
数字签名及信息摘要是用来确保网络上通讯的完整性。随机数是用于大部分的数字签名算法,以使恶意的一方难于伪造签名。随机数的品质会直接影响到签名的效力。总而言之,良好的安全需要良好的随机数。
数值本身不是随机的。随机度的定义必须不仅包括所产生的数值的特征,而且也包括用以产生数值的产生器的特征。运用软件的随机数产生器是常见的,并且对于许多应用而言已足够。然而,对某些应用来说,软件式产生器是不足的。这些应用需要硬件式产生器,其可产生与通过随机物理程序所产生数值的特征相同的数值。此处重要的特征是,其产生数值所具有的统计分布的无偏差程度,以及不可预测与不可重制的程度。
具有无偏差的统计分布,意谓着所有的值具有相等的发生机率,无论样本大小为何。几乎所有的应用皆要求其随机数具有良好的统计分布,而高品质的软件式随机数产生器通常能满足此需求。只满足无偏差统计分布的需求的产生器称为准随机数产生器。
不可预测性是指在一位序列中,正确猜测下个位的机率应刚好为一半,无论先前所产生的位值为何。某些应用不需要此种不可预测性的特征;然而,对安全应用所使用的随机数而言,则是重要的。若使用软件式产生器,则要有效满足不可预测性的需求,必须隐藏软件算法及其初始值。从安全的观点而言,隐藏算法的做法是非常不保险的。对于使用可预测的隐藏算法随机数产生器的应用软件而言,有不少安全上遭致破坏的例子是为人所熟知的。同时满足前两种需求的产生器称为密码安全准随机数产生器。
产生器若为不可重制的,则两个具有相同起始条件的相同产生器,必须产生不同的输出。软件算法不能满足此需求。只有基于随机物理程序的硬件式产生器能产生满足安全所需的严格不可重制性的数值。满足所有三个需求的产生器称为真随机数产生器。
软件算法用来产生计算机应用所需的大部分随机数。这些称为准随机数产生器,这是因为这些产生器不能满足不可预测性及不可重制性的需求。而且,有些也不能满足无偏差统计分布的需求。
通常,软件式产生器以一初始值或种子(seed)开始运作,该初始值有时由使用者所提供。产生器以该初始值执行算术运算,以产生第一随机结果,其作为产生第二结果的种子,依此类推。软件式产生器必然是循环式的,最终其会重复相同的输出序列。猜测到种子就等于能预测整个所产生的数值序列。其不可重制性只与算法及初始种子的机密程度一样,而这可能是安全上的应用并不想要的特性。而且,软件算法是可重制的,因为以相同输入开始,其会产生相同的结果。最后,软件算法不必然会产生输出数据大小的范围内的每个可能的值,这可能无法完全满足无偏差统计分布的需求。
有一种随机数产生器,软件式产生器与纯硬件式产生器混合而成,称为熵产生器(entropy generator)。熵为不可预测性的另一种说法。产生器所产生的数值愈不可预测,产生器所具有的熵就愈多。熵产生器会将软件算法应用于由物理现象所产生的种子。例如,常用的PC加密程序会记录几秒钟的鼠标移动及键盘敲击的特性,以获得其所需的种子。这些动作不见得会产生不理想的熵数,且通常需要使用者某种程度的涉入。对多数的熵产生器而言,最不理想的特征就是要花很多时间才能达到足够的熵。
所以很明显的,焗产生器无法在前述一些应用上被利用,包括安全应用上。这些应用要求只能由随机物理程序所产生真正的随机随机数。随机物理程序可以是通过半导体二极管或电阻的热噪声、自由执行振荡器(free-running ocsillator)所产生的频率不稳定性、或是半导体电容在一段特殊的时间周期内的充电量。这几种随机数源已用于一些商业用途的加入式(add-in)随机数产生器装置,如PCI卡及串行总线装置。这些装置在商业上的使用并不广泛,明显是因为它们不是相当慢就是相当贵。
一种可提供便宜、高性能的硬件式随机数产生器的解决方案,将其并入微处理器内。随机数产生器可利用前述的随机物理程序产生随机数,并且成本相当低廉,因为其可并入既有的半导体晶粒中。
利用如前述随机物理程序所设计的硬件式随机数产生器,是不像数字逻辑那般精确的。例如,若随机数产生器位于微处理器内,则所产生随机数的随机度,可能会随着随机位产生电路与微处理器集成电路晶粒上的其它电路的相对位置而改变,或是因其它不可预期的环境条件而改变。
因此,所需要的是一种微处理器及其方法,以使微处理器内的硬件式随机数产生器更能产生可被接受的随机数数据。
发明内容
本发明提出了一种装置,用以在微处理器的两个或多个随机位产生器中选取其一,以累积成随机数。因此,为了达成上述的目的,本发明的一项特征是,提供一种随机数产生器。此随机数产生器包括多个随机位产生器,其具有多个各别的输出端,以提供多个各别的随机比特流。随机数产生器亦包括一多工器,耦接至该多个输出端,依据一控制输入端选取该多个随机比特流其中之一。随机数产生器亦包括一控制寄存器,耦接至该多工器,用以储存一选择值。此选择值用以产生一信号至该控制输入端,以选取该多个随机比特流的该其中之一。
本发明的另一项特征是提出一种产生随机数的方法。此方法包括产生第一与第二随机比特流,选取此第一与第二随机比特流其中之一,以及将所选取的随机比特流累积为随机数据字节。
本发明的另一项特征是提出一种微处理器。此微处理器包括多个随机位产生器,以产生多个各别的随机位串。此微处理器亦包括一可编程寄存器,耦接至该多个随机位产生器,可储存一值,用以选取该多个各别随机位串其中之一,累积为随机数。此微处理器亦包括一指令转译器,耦接至该可编程寄存器,用以转译一指令,供微处理器执行。该指令是将该值编写入可编程寄存器。
本发明的技术方案是这样实现的:
一种随机数产生器,其特征在于包含:
多个随机位产生器,具有多个各别的输出端,以提供多个各别的随机比特流;
一多工器,耦接至该多个输出端,依据一控制输入端选取该多个随机比特流其中之一;以及
一控制寄存器,耦接至该多工器,用以储存一选择值,其中该选择值用以产生一信号至该控制输入端,以选取该多个随机比特流的其中之一。
其中,该随机数产生器包含于一微处理器中。
其中,该控制寄存器经由该微处理器所执行的一指令进行程序化。
其中还包含:至少一个缓冲器,耦接至该多工器,用以将该选取的随机比特流累积为随机数据字节。
其中,该微处理器组态为执行一指令,以提供累积于该至少一个缓冲器的该随机数据字节。
其中,该微处理器配合一操作系统工作切换,将该选择值储存至/回复自一耦接至该微处理器的存储器。
其中还包含:多个电源控制信号,耦接至各别的该多个随机位产生器,用以选择性地关闭该多个随机位产生器中的其各别随机比特流未被该控制输入信号所选取的一个或多个随机位产生器。
本发明还提供了一种产生随机数的方法,其特征在于包含:
产生第一与第二随机比特流;
选取该第一与第二随机比特流其中之一;以及
将所选取的随机比特流累积为随机数据字节。
其中还包含:编写一选择值至一寄存器,以用于选取该第一与第二随机比特流的该其中之一。
其中还包含:配合该编写该选择值至该寄存器的动作,丢弃该累积的随机数据字节。
其中还包含:配合该编写动作,于该丢弃动作后,重新开始该累积动作。
其中还包含:将该累积的随机数据字节储存到耦接至一微处理器的一存储器。
其中还包含:执行一指令,其中该储存动作配合该指令而执行。
其中还包含:将该累积的随机数据字节载入该微处理器的一使用者可见的寄存器。
其中还包含:执行一指令,其中该载入动作配合该指令而执行。
本发明还提供了一种微处理器,其特征在于包含:
多个随机位产生器,用以产生多个各别的随机位串;
一可编程寄存器,耦接至该多个随机位产生器,可储存一值,用于选取该多个各别随机位串其中之一,累积为随机数;以及
一指令转译器,耦接至该可编程寄存器,用以转译一指令,供该微处理器执行,该指令将该值编写入该可编程寄存器。
其中,该多个随机位产生器至少其中的一个依据该微处理器的随机电气特性产生该各别的随机位串。
其中,该微处理器的该随机电气特性包含横跨一电阻的热噪声。
其中,该可编程寄存器更组态为储存一值,用以控制该多个随机位元产生器之一中的一个或多个自由执行环式振荡器(free-running ringocsillator)的一操作电压。
其中,该多个随机位产生器实质分散于一半导体晶粒上的不同位置,其中该微处理器整合于该半导体晶粒上。
其中,该多个随机位产生器采用不同的产生该多个各别随机位串的方法。
本发明的优点之一是可使微处理器内的随机数产生器更能产生可被接受的随机数,因为多个不同随机位产生器产生不可接受的随机特性的机率,是低于一个随机位产生器产生不可接受的随机特性的机率。
附图说明
图1为本发明的微处理器的方块图。
图2本发明图1的微处理器中RNG单元的方块图。
图3为本发明图1的微处理器中,与图1的RNG单元有关的各种寄存器的方块图。
图4为根据本发明的图1的微处理器执行将值载入图3的XMM0寄存器的指令的运作流程图。
图5为根据本发明的图1的微处理器于执行XLOAD指令时的运作方块图。
图6为根据本发明的图1的微处理器执行XLOAD指令的运作流程图。
图7为根据本发明的图1的微处理器于执行XSTORE指令时的运作方块图。
图8为根据本发明的图1的微处理器执行XSTORE指令的运作流程图。
图9A、9B为根据本发明的图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的位选择器的详细方块图。
图24显示依据本发明,图1的微处理器执行重置的自我测试的动作流程图。
图25显示依据本发明,图1的微处理器执行图2的RNG单元的相关指令的动作流程图。
其中,附图标记说明如下:
100:微处理器
102:指令高速缓存
104:指令提取器
106:指令转译器
108:寄存器档案
112:地址产生器
114:载入单元
116:执行阶段
118:储存单元
122:回写单元
124:写入缓冲器
126:读取缓冲器
128:总线接口单元(BIU)
132:微程序代码ROM
134:SSE单元
136:随机数产生器(RNG)单元
138:处理器总线
142,278:数据总线
144:数据总线
146:中断单元
148:中断信号
152:中断向量
202:自我测试单元
204:CPUID寄存器
206,208:随机位产生器
211,213:计数器
212:机器特定寄存器(MSR)
214、219、228、236:多工器
215、217、232:解多工器
216:白化器
218:移位寄存器
221:增加信号
222:连续数目测试(CNT)单元
223:清除信号
224:串过滤装置
225:比较器
226:控制与状态寄存器(CSR)
227:充满1信号
229:充满0信号
231:power_cntrl信号
234,702:可用字节计数
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标志
266:xstore信号
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:XMM3
376:XMM5
502:系统存储器
504:16字节的数据
704:系统存储器502中的位置
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:0的硬式编码值
1034A:ones_exceed信号
1034B:zeros_exceed信号
1036A:leading_ones信号
1036B:leading_zeros信号
1038A:trailing_ones信号
1038B:trailing_zeros信号
1042A:one_select信号
1042B:zero_select信号
1044:max_cnt_exceed信号
1046A:比较器
1046B:比较器
1048A:all_ones信号
1048B:all_zeros信号
1202:EAX
1702:ECX
1704:ES:EDI
具体实施方式
下面结合附图对其它有关本发明的优点及特征作进一步说明。
现请参照图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,决定中断服务程序的存储器地址,并将中断服务程序(Interrupt Service Routine)的存储器地址送到指令提取器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也包括一微程序代码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做更详细地说明。MSR212也耦接至控制逻辑244。自我测试单元202会将自我测试失败信号288送到控制逻辑244。若自我测试单元202被自我测试致能信号292所致能,则自我测试单元202会执行各种RNG单元136的自我测试。若自我测试失败,自我测试单元202会产生真值的自我测试失败信号288,并送至MSR 212。在一具体实施例中,自我测试单元202会执行随机数产生器统计测试,如联邦信息处理标准(FIPS)刊物第140-2期的第35-36页所定义的,此处予以参考并入。
在一具体实施例中,自我测试单元202在使用者的要求下执行自我测试。在一具体实施例中,在微处理器100重置后,自我测试单元202会执行自我测试。若自我测试失败,不论是使用者所要求的或重置后所做的,自我测试单元202都会产生真值的自我测试失败信号288,其反映于图3中MSR 212的自我测试失败位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通过从MSR 212所接收的原始位信号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_cnt 346的默认值为26个位。在一具体实施例中,串过滤装置最大计数字段346的值必须至少为8。若串过滤装置224侦测到一连续的相似位串长度超过max_cnt258,则串过滤装置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提供给根据fill_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及计数器1213的输出端。比较器225将计数器0 211及计数器1 213所输出的计数值,与计数器0 211及计数器1 213可储存的字节数目做比较,以判断计数器0 211及计数器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遇到这些指令时,将产生无效指令异常。此外,读取MSR 212中的位,结果是未定义,而尝试写入,则不会产生任何效果。RNG存在位302为MSR 212的RNG存在位314的副本。
图3亦显示图2中的MSR 212。MSR 212包括一RNG致能位312。RNG致能位312是可写入的。将RNG致能位312写入1会使RNG单元136致能。将RNG致能位312写入0则使RNG单元136禁能。若RNG致能位312为0,则XLOAD及XSTORE指令即为无效,而若指令转译器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会将字节同步地累积至缓冲器0 242及缓冲器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 R5 238会遮蔽XMM5 374,如下文所述。
在一具体实施例中,微处理器100包括各种熔丝,在微处理器100的制造过程中,其会暂时或永久地加以设定,以便于重置时,能选取CSR 226及MSR 212中各个位的值来取代前述的重置值。
现请参照图4,其为根据本发明的图1的微处理器100执行将值载入图3XMM0寄存器372的指令的运作流程图。载入XMM0 372的指令由微处理器100执行,其从系统存储器值载入XXMM0寄存器372中,如MOVAPS指令。MOVAPS指令将来自系统存储器的数据搬移到指定的XMM寄存器,反之亦然,这部分叙述于IA-32英特尔架构软件开发者手册第二册:指令集参考(2001年)的第3-443页到第3-444页,其在此予以参考并入。其它从系统存储器载入XMM0372的指令,则如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的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指令所指定的标准mod R/M寄存器及地址格式字节。在另一具体实施例中,XLOAD指令的运算码值则为0x0F0xA6 0xC0。若XLOAD指令指定SSE寄存器352中的一个,而非XMM0 372,则会载入指定的SSE寄存器352;然而,并不会载入CSR 226。
现请参照图6,其为根据本发明的图1的微处理器100执行将值载入图3XMM0寄存器372的XLOAD指令的运作流程图。流程从方块602开始。
于方块602中,微处理器100将系统存储器502中,XLOAD指令所指定的存储器地址的值,载入图2的CSR 226及图3的XMM0 372,如图5所示。流程继续进行至方块604。
于方块604中,由于累积于缓冲器0 242及缓冲器1 246的随机数据字节并不会随着CSR 226中的控制值而产生,其中这些控制值正载入CSR 226的新工作的所需,所以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,累积随机数据字节;而计数器0211及计数器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不存在于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中的ES:EDI寄存器来指定memaddr,亦即,指到要储存计数及随机数据字节的起始存储器地址。在一具体实施例中,XSTORE不允许区段重叠。若XSTORE指令指定了SSE寄存器352的其中一个,而非XMM5374,则结果会呈未定状态。
在一具体实施例中,微处理器100储存于系统存储器的随机数据字节704的数目,等于也写入系统存储器的可用字节计数702。
在另一具体实施例中,微处理器100储存于系统存储器的随机数据字节704的数目,等于一个比RNG R5 238中的字节还少的数目。亦即,若RNG R5238为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的内容复制到CSR 226,并且会清除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中被复制到CSR 226中,所以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或计数器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的状态(即CSR 226)。流程从方块902开始。
在方块902中,会发生重置,这会使控制逻辑244清除TSPO标志274。流程会继续进行方块904。
在方块904中,操作系统会启动工作A,并且工作A的初始码会执行XLOAD至XMM0 372的指令,以所要的控制值(表示为值A)来初始化CSR 226及XMM0372。流程会继续进行方块906。
在方块906中,根据图6的方块604、606、608以及612,RNG单元136会响应XLOAD,而丢弃缓冲器0 242及缓冲器1 246的内容、清除计数器0 211及计数器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)来初始化CSR 226及XMM0372。流程会继续进行方块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,从系统存储器载入到XMM0 372。流程会继续进行方块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回存至CSR 226。此外,由于CSR 226已被回存,所以根据方块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信号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也包括两输入端的或门(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 & 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当输入
				
				<dp n="d34"/>
  }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当输入

  }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被载入缓冲器0 242或缓冲器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,并且于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所选择的缓冲器0242或缓冲器1246中,并将递增信号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及store_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_ctrl信号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即更新为系统存储器中,下个用以储存随机数据字节的位置。此外,每当有一或更多个随机数据字节储存至系统存储器时,ECX1702即更新,以反映尚待储存储存的随机字节数目。例如,假设REP XSTORE指令于ECX 1702中指定一字节计数值28及0x12345678的存储器地址。假设在缓冲器0 242及缓冲器1 246两者之一中,RNG单元136有8个可用的字节,且当累积更多的随机数据字节时,将8个字节写入系统存储器。当8个字节被写至存储器时,ECX 1702会更新为20,以表示还有20个随机数据字节必须写入系统存储器。此外,地址会被更新为系统存储器中,下个将要写入大量随机数据字节的位置0x12345680。中断可能会发生在这个时候,而软件会检查更新的值。当中断已执行且控制权回归至REP XSTORE指令时,REPXSTORE指令将使用ECX 1702及ES:EDI 1704中的更新值回复执行。此外,完成REP XSTORE指令时,图2的CSR 226的现时值会被复制到寄存器档案108的EAX寄存器1202中。
请参阅图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,其为根据本发明,当如图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,其为根据本发明的一具体实施例,如图1的RNG单元136减少连续位间相关性的操作流程图。在图20的具体实施例中,用来执行减低连续位间相关性功能的装置包括有如图1微处理器100的多个元件,如档案寄存器108、地址产生器112、载入单元114、ALU 162、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、缓冲器0 242及缓冲器1 246两数据缓冲器、多工器236、R5 238及控制逻辑244将位元累积成字节。流程下一步到判断方块2004。
在判断方块2004中,微处理器100通过从图3CSR 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左移一个位以清出一个EEAX空间来给从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的长度。举例来说,假如EAX1202为2,则四个字节只有两个字节被存入到系统存储器502中,并且有效随机数据字节的长度会根据EAX1202的状态设定成2。
在方块2044,既然N是2、4或8,及所有(8/N)个位在方块2042中会被存入系统存储器502中,微处理器100将有效随机数据字节的长度设定成8除以N。流程到方块2008。
请参阅图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。
除了分枝指令,这三个操作数指令的格式为:
<opcode><目的><来源一><来源二>
由第8行指令dmtid r4,r5所跟随的在第7行指令mfxd.64XMM5使如图2的64位R5 238的内容被复制到两个32位的寄存器r4,r5。根据第1行dmtidr2,r3指令,微码的部分分枝到get_random_data包括在分枝的后延迟时槽的一mfxd.64指令(也就是CSR 226)。因此,结合两个指令使64位元CSR 226的内容被复制到两个32位的寄存器r2,r3。
请参阅图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,其为根据本发明,如图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的输出连接到DB 144[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/NShannon熵
(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
图24显示依据本发明的图1的微处理器100执行重置的自我测试的动作流程图。流程开始于判断方块2402。
于判断方块2402中,图2的RNG单元136通过检查重置信号248,判断是否发生重置事件。重置可能是开机重置,亦即当微处理器100启动时,或可能是热启动(warm reset),亦即于微处理器100激活一段时间后所执行的重置,如在微处理器100上执行的程序所进行的重置,或是包含微处理器100的系统的重置。若一重置事件发生,流程即进行至判断方块2404。否则,流程返回判断方块2402,以等待重置事件发生。
于判断方块2404中,RNG单元136通过检查自我测试致能信号292,以判断自我测试是否被致能。在一实施例中,图3MSR 212的自我测试致能位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通过检查MSR 212中的自我测试失败位318,以判断自我测试是否失败。若自我测试失败,则流程进行至方块2412。否则,流程进行至方块2414。
于方块2414中,RNG单元136将MSR 212的RNG存在位314设定为1。流程接着返回方块2402,以等待另一重置事件发生。
于方块2414中,RNG单元136将MSR 212的RNG存在位314清除为0。流程接着返回方块2402,以等待另一重置事件发生。
图25显示依据本发明,图1的微处理器100执行RNG单元136的相关指令的动作流程图。流程开始于方块2502。
于方块2502中,图1的指令转译器106转译从图1指令提取单元104所接收的一x86指令。流程接着进行至判断方块2504。
于判断方块2504中,微处理器100判断于方块2502所转译的指令是否为x86 CPUID指令。特别是,微处理器100会判断所转译的指令是否为要求Centaur延伸功能信息的CPUID指令。在一实施例中,Centaur延伸功能信息由一CPUID指令所要求,其中该CPUID指令具有图1的寄存器档案108的图12x86 EAX寄存器1202的一输入值0xC0000000。若方块2502所转译的指令为要求Centaur延伸功能信息的x86 CPUID指令,则流程接着进行至判断方块2506。否则,流程进行至判断方块2514。
于判断方块2506中,微处理器100判断图3的MSR 212的RNG存在位314是否被设定为1。RNG存在位314的值可依据如图24所述的自我测试来决定。若RNG存在位元314为1,则流程接着进行至方块2512。否则,流程进行至方块2508。
于方块2508中,CPUID指令通过将Centaur延伸功能信息载入EAX寄存器1202而执行完成。尤其,EAX寄存器1202的位28被清除为0,以显示RNG单元136被禁能。在另一实施例中,CPUID指令通过将Centaur延伸功能信息载入图1的寄存器档案108的图18的EDX寄存器1802而执行完成。尤其,EDX寄存器1802的位2被清除为0,以显示RNG单元136被禁能。流程结束于方块2508。
于方块2512中,CPUID指令通过将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会判断所转译的指令是否为指定图2MSR 212的RDMSR指令。在一实施例中,MSR 212由一RDMSR指令所指定,其中该RDMSR指令具有图1的寄存器档案108的图17的x86 ECX寄存器1702的一输入值0x110B。若方块2502所转译的指令为指定MSR 212的x86RDMSR指令,则流程接着进行至判断方块2516。否则,流程进行至判断方块2524。
于判断方块2516中,微处理器100判断RNG存在位314是否被设定为1。若RNG存在位元314为1,则流程接着进行至方块2522。否则,流程进行至方块2518。
于方块2518中,微处理器100产生一个一般保护(GP)的错误,此因有一指定MSR 212的RDMSR指令执行于RNG单元136被禁能时。流程结束于方块2518。
于方块2522中,RDMSR指令通过将MSR 212的内容载入相连接的EAX 1202与EDX 1802寄存器,而执行完成。流程结束于方块2522。
于判断方块2524中,微处理器100判断于方块2502所转译的指令是否为x86 WRMSR指令。特别是,微处理器100会判断所转译的指令是否为指定图2MSR 212的WRMSR指令。在一实施例中,MSR 212由一WRMSR指令所指定,其中该WRMSR指令具有x86 ECX寄存器1702的一输入值0x110B。若方块2502所转译的指令为指定MSR 212的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寄存器的内容存入MSR 212,而执行完成。流程结束于方块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。
虽然本发明及其目的、特征与优点已详细叙述,其它实施例亦可包含在本发明的范围内。例如,虽然本发明是以包含两个随机位产生器的实施例进行说明,但是本发明仍可适用于两个以上的随机位产生器的情形。而且,虽然所叙述的随机位产生器是实作于微处理器中,在多个随机位产生器之间作选择的概念仍可实施于一非微处理器的集成电路中。
总之,以上所述仅为本发明的较佳实施例而已,当不能以之限定本发明所实施的范围。凡依本发明的具体实施例所作的均等变化与修饰,皆应仍属于本发明权利要求书的保护范围内。

Claims (21)

1.一种随机数产生器,其特征在于包含:多个随机位产生器,具有多个各别的输出端,以提供多个各别的随机比特流;一多工器,耦接至该多个输出端,依据一控制输入端选取该多个随机比特流其中之一;以及一控制寄存器,耦接至该多工器,用以储存一选择值,其中该选择值用以产生一信号至该控制输入端,以选取该多个随机比特流的其中之一。
2.如权利要求1所述的随机数产生器,其特征在于,该随机数产生器包含于一微处理器中。
3.如权利要求2所述的随机数产生器,其特征在于,该控制寄存器经由该微处理器所执行的一指令进行程序化。
4.如权利要求3所述的随机数产生器,其特征在于还包含:
至少一个缓冲器,耦接至一第三多工器,用以将该选取的随机比特流累积为随机数据字节。
5.如权利要求4所述的随机数产生器,其特征在于,微处理器组态为执行一指令,以提供累积于该至少一个缓冲器的该随机数据字节。
6.如权利要求2所述的随机数产生器,其特征在于,该微处理器配合一操作系统工作切换,将该选择值储存至/回复自一耦接至该微处理器的存储器。
7.如权利要求1所述的随机数产生器,其特征在于还包含:
多个电源控制信号,耦接至各别的该多个随机位产生器,用以选择性地关闭该多个随机位产生器中的其各别随机比特流未被该控制输入信号所选取的一个或多个随机位产生器。
8.一种产生随机数的方法,其特征在于包含:
产生第一与第二随机比特流;
选取该第一与第二随机比特流其中之一;以及
将所选取的随机比特流累积为随机数据字节。
9.如权利要求8所述的方法,其特征在于还包含:
编写一选择值至一寄存器,以用于选取该第一与第二随机比特流的其中之一。
10.如权利要求9所述的方法,其特征在于还包含:
配合该编写该选择值至该寄存器的动作,丢弃该累积的随机数据字节。
11.如权利要求10所述的方法,其特征在于还包含:
配合该编写动作,于该丢弃动作后,重新开始该累积动作。
12.如权利要求8所述的方法,其特征在于还包含:
将该累积的随机数据字节储存到耦接至一微处理器的一存储器。
13.如权利要求12所述的方法,其特征在于还包含:
执行一指令,其中该储存动作配合该指令而执行。
14.如权利要求8所述的方法,其特征在于还包含:
将该累积的随机数据字节载入该微处理器的一使用者可见寄存器。
15.如权利要求14所述的方法,其特征在于还包含:
执行一指令,其中该载入动作配合该指令而执行。
16.一种微处理器,其特征在于包含:
多个随机位产生器,用以产生多个各别的随机位串;
一可编程寄存器,耦接至该多个随机位产生器,可储存一值,用于选取该多个各别随机位串其中之一,累积为随机数;以及
一指令转译器,耦接至该可编程寄存器,用以转译一指令,供该微处理器执行,该指令将该值编写入该可编程寄存器。
17.如权利要求16所述的微处理器,其特征在于,该多个随机位产生器至少其中的一个依据该微处理器的随机电气特性产生该各别的随机位串。
18.如权利要求17所述的微处理器,其特征在于,该微处理器的该随机电气特性包含横跨一电阻的热噪声。
19.如权利要求16所述的微处理器,其特征在于,该可编程寄存器更组态为储存一值,用以控制该多个随机位元产生器之一中的一个或多个自由执行环式振荡器的一操作电压。
20.如权利要求16所述的微处理器,其特征在于,该多个随机位产生器实质分散于一半导体晶粒上的不同位置,其中该微处理器整合于该半导体晶粒上。
21.如权利要求16所述的微处理器,其特征在于,该多个随机位产生器采用不同的产生该多个各别随机位串的方法。
CNB2003101014605A 2003-02-11 2003-10-20 随机数产生器及产生方法及具有随机位产生器的微处理器 Expired - Lifetime CN1310131C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/365,601 US7174355B2 (en) 2002-11-20 2003-02-11 Random number generator with selectable dual random bit string engines
US10/365,601 2003-02-11

Publications (2)

Publication Number Publication Date
CN1514346A CN1514346A (zh) 2004-07-21
CN1310131C true CN1310131C (zh) 2007-04-11

Family

ID=32736395

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2003101014605A Expired - Lifetime CN1310131C (zh) 2003-02-11 2003-10-20 随机数产生器及产生方法及具有随机位产生器的微处理器

Country Status (4)

Country Link
EP (1) EP1450250B1 (zh)
CN (1) CN1310131C (zh)
DE (1) DE60307780T2 (zh)
TW (1) TWI240200B (zh)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101996065B (zh) * 2009-08-26 2015-08-05 索尼株式会社 随机数发生器和随机数生成方法
US9778912B2 (en) * 2011-05-27 2017-10-03 Cassy Holdings Llc Stochastic processing of an information stream by a processing architecture generated by operation of non-deterministic data used to select data processing modules
TWI462009B (zh) * 2011-11-25 2014-11-21 Univ Kaohsiung Medical 亂數產生方法
US9047152B2 (en) * 2013-01-16 2015-06-02 Skymedi Corporation Delay device, method, and random number generator using the same
JP6058245B2 (ja) * 2015-01-15 2017-01-11 三菱電機株式会社 乱数拡大装置、乱数拡大方法及び乱数拡大プログラム
US10331410B2 (en) * 2016-11-09 2019-06-25 Google Llc Hardened random number generator with ring oscillator collapse time random truncation
CN109656514B (zh) 2017-10-11 2023-08-15 华邦电子股份有限公司 随机数产生系统及其随机数产生方法
TWI634479B (zh) * 2017-10-11 2018-09-01 華邦電子股份有限公司 隨機數產生系統及其隨機數產生方法
TWI634480B (zh) * 2017-10-17 2018-09-01 華邦電子股份有限公司 隨機數產生系統及其隨機數產生方法
CN109670343B (zh) * 2017-10-17 2023-01-03 华邦电子股份有限公司 随机数产生系统及其随机数产生方法
US11709656B2 (en) 2018-07-13 2023-07-25 Ememory Technology Inc. Short channel effect based random bit generator
CN112230885B (zh) * 2019-07-15 2024-05-03 瑞昱半导体股份有限公司 真随机数产生器与真随机数产生方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4375620A (en) * 1980-12-15 1983-03-01 The United States Of America As Represented By The Secretary Of The Navy Pseudo-atmospheric noise generator with control of temporal characteristics
US4513386A (en) * 1982-11-18 1985-04-23 Ncr Corporation Random binary bit signal generator
CN1240318A (zh) * 1998-03-04 2000-01-05 朗迅科技公司 产生伪随机数的方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3706941A (en) * 1970-10-28 1972-12-19 Atomic Energy Commission Random number generator
EP0172405B1 (en) * 1984-07-26 1989-04-12 Miles Inc. Circuitry for a portable test strip reading instrument
US5956289A (en) * 1997-06-17 1999-09-21 Micron Technology, Inc. Clock signal from an adjustable oscillator for an integrated circuit

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4375620A (en) * 1980-12-15 1983-03-01 The United States Of America As Represented By The Secretary Of The Navy Pseudo-atmospheric noise generator with control of temporal characteristics
US4513386A (en) * 1982-11-18 1985-04-23 Ncr Corporation Random binary bit signal generator
CN1240318A (zh) * 1998-03-04 2000-01-05 朗迅科技公司 产生伪随机数的方法

Also Published As

Publication number Publication date
TW200415507A (en) 2004-08-16
DE60307780T2 (de) 2007-08-23
CN1514346A (zh) 2004-07-21
DE60307780D1 (de) 2006-10-05
EP1450250A3 (en) 2004-12-29
TWI240200B (en) 2005-09-21
EP1450250B1 (en) 2006-08-23
EP1450250A2 (en) 2004-08-25

Similar Documents

Publication Publication Date Title
CN1236380C (zh) 具随机数产生器及用于存储随机数数据的指令的微处理器
CN1308811C (zh) 具连续多重缓冲功能的随机数产生器及产生随机数据方法
CN1288550C (zh) 随机数产生器的位串过滤装置与方法
CN1261871C (zh) 具有支持多任务运算的随机数产生器的微处理器及方法
CN1514345A (zh) 用以减低在随机数产生器中连续位相关性的装置与方法
CN1287270C (zh) 重启动翻译的指令
CN1310131C (zh) 随机数产生器及产生方法及具有随机位产生器的微处理器
CN1244051C (zh) 对于处理数据的装置和方法
CN1860441A (zh) 用于可重新配置环境中的高效高性能数据操作元件
CN1484787A (zh) 处理器流水线中的硬件指令翻译
CN100338568C (zh) 开发片上系统用的开发环境的生成方法
CN1265280C (zh) 扩展整数的计算域的范围
CN1286117C (zh) 半导体存储装置
CN1186718C (zh) 微控制器指令集
CN101040306A (zh) 伪随机数生成装置
CN1469241A (zh) 处理器、程序变换装置和变换方法以及计算机程序
CN1688966A (zh) 包括对准或者广播指令的多媒体协处理器控制机制
CN1584824A (zh) 一种基于cisc结构的微处理器构架及指令实现方式
CN1605058A (zh) 关于嵌入式字段可编程门阵列核心的接口结构
CN1761185A (zh) 乱序执行的数据流aes加密电路结构
CN1282071C (zh) 数据处理装置、数据处理方法和程序
CN101044450A (zh) 处理器
CN1269052C (zh) 支持缩小代码长度的常量还原型处理器
CN1991798A (zh) 半导体存储装置
CN1516001A (zh) 一种新型risc流水线微控制器构架及其操作方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CX01 Expiry of patent term

Granted publication date: 20070411

CX01 Expiry of patent term