随机数产生器的位串过滤装置与方法

文档序号:6379763阅读:194来源:国知局
专利名称:随机数产生器的位串过滤装置与方法
技术领域
本发明涉及随机数产生领域,特别是涉及硬件随机数产生器及其位串过滤方法。
背景技术
就历史来看,许多计算机应用软件需要提供随机数。例如,物理现象的蒙地卡罗模拟,如大规模的天气模拟,就需要提供随机数,以模拟物理现象。需要使用随机数的其它例子为娱乐游戏及在线娱乐游戏,以模拟洗牌,掷骰子等;彩券号码的产生;统计分析资料的产生,如心理学的测验;以及计算机游戏。
在这些形式的应用中,所需的随机度,以及对产生随机数的效能要求是不同的。许多应用软件,如计算机游戏,对于随机度的要求是不高的。心理学测验上的应用,对随机度有着更严格的要求,但效能需求则相当低。然而,大规模的运用蒙地卡罗的模拟会有非常高的效能需求,且需要良好的随机数统计特性,虽然不可预测性并非特别重要。其它的应用,如在线娱乐游戏,则对于随机度及不可预测性都有非常严格的要求。
虽然上述这些应用仍然是重要的,但是在计算机安全领域,则对高品质随机数有最大的需求。最近,个人计算机网络及互联网交易的爆炸性成长,对于各种安全机制的需求,已明显地增加。
对所有计算机安全的主要构成要素而言,高品质的随机数都是必要的。这些要素包含机密性、身份确认以及数据完整性。
数据加密为提供机密性的主要机制。有许多种不同的加密算法,如对称式加密、公有密钥及一次性密码本,但是这些算法都具有一关键特性,即加密/解密密钥不能被简单地预测出来。一个加密系统的密码强度基本上即是其所用密钥的强度,即预测、猜想或计算解密密钥的难度多高。最好的密钥为够长的真随机数,而在所有严格要求安全的应用中,随机数产生器为产生密码密钥的基础。
许多对密码算法成功的攻击,已非专注于加密算法,而是专注于产生随机数的来源。一个为人熟知的例子是,网景的安全套接层(Secure SocketsLayer,SSL)的早期版本,会从系统时脉与程序ID表搜集数据,以产生软件伪随机数产生器的起始值。所产生的随机数用来产生一对称密钥,以加密对话数据。有二个研究生想出了可准确猜测随机数的程序,在一分钟内,就猜出对话密钥,破坏这个机制。
与解密密钥类似,用以确认存取信息的使用者身份的密码,其强度实际上就是预测或猜测密码的难度有多高。最好的密码为够长的真随机数。此外,在有使用挑战协议(challenge protocol)的验证协议(authentication protocol)中,关键因素就是使挑战无法由进行确认的一方加以预测。而随机数则是用来产生确认身份的挑战。
数字签名及信息摘要是用来确保网络上通讯的完整性。随机数是用于大部分的数字签名算法,以使恶意的一方难于伪造签名。随机数的品质会直接影响到签名的效力。总而言之,良好的安全需要良好的随机数。
数值本身不是随机的。随机度的定义必须不仅包括所产生的数值的特征,而且也包括用以产生数值的产生器的特征。运用软件的随机数产生器是常见的,并且对于许多应用而言已足够。然而,对某些应用来说,软件产生器是不够的。这些应用需要硬件产生器,其可产生与由随机物理程序所产生数值的特征相同的数值。此处,重要的特征是,其产生数值所具有的统计分布的无偏差程度,以及不可预测与不可重制的程度。
具有无偏差的统计分布,是意谓所有的值具有相等的发生机率,无论样本大小为何。几乎所有的应用都要求其随机数具有良好的统计分布,而高品质的软件随机数产生器通常能满足此需求。只满足无偏差统计分布的需求的产生器称为伪随机数产生器。
不可预测性是指在一位序列中,正确猜测下个位的机率应刚好为一半,无论先前所产生的位值为何。某些应用不需要此种不可预测性的特征;然而,对安全应用所使用的随机数而言,则是要紧的。若使用软件产生器,则要有效满足不可预测性的需求,必须隐藏软件算法及其初始值。从安全的观点而言,隐藏算法的做法是非常不保险的。对于使用可预测的隐藏算法随机数产生器的应用软件而言,有不少安全上遭致破坏的例子是为人所熟知的。同时满足前二种需求的产生器称为密码安全伪随机数产生器。
产生器若为不可重制的,则二个具有相同起始条件的相同产生器,必须产生不同的输出。软件算法不能满足此需求。只有基于随机物理程序的硬件式产生器,能产生满足安全所需的严格不可重制性的数值。满足所有三个需求的产生器称为真随机数产生器。
软件算法是用来产生计算机应用所需的大部分随机数。这些称为伪随机数产生器,这是因为这些产生器不能满足不可预测性及不可重制性的需求。再者,有些也不能满足无偏差统计分布的需求。
通常,软件产生器以一初始值或籽数(seed)开始工作,该初始值有时是由使用者所提供。产生器以该初始值执行算术运算,以产生第一随机结果,其作为产生第二结果的籽数,依此类推。软件产生器必然是循环式的,最终其会重复相同的输出序列。猜测籽数就等于能预测整个所产生的数值序列。其不可重制性只与算法及初始籽数的机密程度一样,而这可能是安全上的应用并不想要的特性。再者,软件算法是可重制的,因为以相同输入开始,其会产生相同的结果。最后,软件算法不必然会产生输出数据大小的范围内的每个可能的值,这可能无法完全满足无偏差统计分布的需求。
有一种随机数产生器,是软件产生器与纯硬件产生器混合而成,称为熵产生器(entropy generator)。熵为不可预测性的另一种说法。产生器所产生的数值愈不可预测,产生器所具有的熵就愈多。熵产生器会将软件算法应用于由物理现象所产生的籽数。例如,常用的PC加密程序会记录几秒钟的鼠标移动及键盘敲击的特性,以获得其所需的籽数。这些动作不见得会产生不理想的熵数,且通常需要使用者某种程度的涉入。对多数的熵产生器而言,最不理想的特征就是要花很多时间,才能达到足够的熵。
从前文可清楚得知,某些应用,包括安全上的应用,需要由随机物理程序才能产生的随机数,如横跨半导体二极管或电阻器的热噪声、自发振荡器的频率不稳定度或是在特定的时间周期内,半导体电容器的充电量。一种提供低廉、高效能硬件随机数产生器的解决方案是,将其纳入微处理器内。因此,随机数产生器可使用如上述的随机物理程序,且其成本相当低廉,因为其将纳入原已存在的半导体晶体中。
某些使用随机数的应用不能接受长串的连续0或1位。例如,联邦信息处理标准(Federal Information Processing Standards,FIPS)刊物第140-2期就在其关于随机数产生器的统计测试集中,加入一长位连续值测试。若随机数产生器产生超过26个连续的0或1,则无法通过长位连续值测试。不过,即使是真随机数产生器,由于一串26个连续相似位仍可能发生,若经过足够长的一段时间,真随机数产生器还是无法通过测试。
大部分的统计测试(如FIPS 140-2的长位连续值测试)是针对伪随机数产生器。伪随机数产生器会将软件中长串的连续相似位过滤出来。然而如以上所讨论的,对某些应用而言,不能使用伪随机数产生器,而需要硬件随机数产生器。因此,我们所需要的是一种装置及方法,可确保硬件随机数产生器不会输出长于某些长度的连续0或1位串。

发明内容
本发明提出硬件随机数产生器中的过滤装置,其用来当作过滤器,以防止随机数产生器输出长于指定长度的连续的0或1。因此,为了达到上述的目的,本发明的一项特征是,在随机数产生器中提供一种装置。此装置包括第一及第二计数器,其分别存储一0位计数及一1位计数。0位计数及1位计数分别表示在随机数产生器所产生的一连串随机字节中,目前所检测到的连续0及1位的数目。此装置也包括第一及第二加法器,连接至第一及第二计数器,用以产生第一及第二总和。第一总和为0位计数加上随机数产生器所产生的下个随机字节中前导0的数目的总和。第二总和为1位计数加上下个随机字节中前导1的数目的总和。此装置也包括第一及第二比较器,分别连接至第一及第二加法器,以分别将第一及第二总和与一计数值N做比较。每一比较器会产生一个别信号,以指出个别总和是否大于N。
另一方面,本发明的一项特征是,提出一种微处理器。此微处理器包括一随机位产生器,用以产生一连串随机位。此微处理器也包括一移位寄存器,连接至随机位产生器,用以从该连串随机位中,组成一连串随机字节。此微处理器也包括一过滤装置,连接至移位寄存器,用以检测并过滤出该连串随机字节中的一字节。此字节包含其开头的一具有相同位值的第一连续位串,其连同该连串随机字节中,紧接于此字节前的一或更多个字节中的一具有该相同位值的第二连续位串,以组成一均具有该相同位值的第三连续位串,而其长度超过一预定值。
另一方面,本发明的一项特征是,提出一种避免随机数产生器产生一串N个连续相似位的方法。此方法包括(1)从一串随机位中,组成一字节,(2)将存于第一计数器中的第一计数加上该随机字节的前导0的数量,以产生第一总和,并将存于第二计数器中的第二计数加上该随机字节的前导1的数量,以产生第二总和。此方法还包括(3)判断第一及第二总和中的任意一个是否超过N,(4)若第一及第二总和中的任意一个超过N,则会丢弃该随机字节,以及(5)若第一及第二总和均未超过N,则会累加该随机字节。此方法也包括(6)重复步骤(1)到(5)。
本发明的优点之一是,其可使硬件随机数产生器能产生真随机数,即包括长串连续0或1的随机数,且还能将随机数据字节送至不能接受此种位串的应用软件。有利的是,本发明是以硬件而非软件来执行过滤动作,由此使硬件随机数产生器能以快的速率,来产生随机数据,而不会因软件过滤装置的效能限制而减慢。
在参考本说明书的其余部份及附图后,本发明的其它特征及优点将更为明显易知。


图1是本发明微处理器的方框图;图2是本发明图1的微处理器中RNG单元的方框图;图3是本发明图1微处理器中,与图1RNG单元有关的各种寄存器的方框图;图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指令的运行方框图。
其中,附图标记说明如下100微处理器 102指令高速缓存104指令提取器 106指令转译器108寄存器文件 112地址产生器114加载单元 116执行阶段118储存单元 122回写单元124写入缓冲器 126读取缓冲器128总线接口单元(BIU)132微码ROM134SSE单元 136随机数产生器(RNG)单元138处理器总线 142,144数据总线146中断单元 148中断信号152中断向量202自测试单元 204CPUID寄存器206随机位产生器0208随机位产生器1211计数器0 212机器特定寄存器(MSR)213计数器1 214多路复用器215第二多路分用器 216白化器
217第三多路分用器 218移位寄存器219第四多路复用器 221递增信号222连续数目测试(CNT)单元223清除信号 224串过滤装置225比较器 226控制与状态寄存器(CSR)227full1信号228第二多路复用器229full0信号231power_cntrl信号232多路分用器 234可用字节计数236第三多路复用器 238寄存器R5242缓冲器0 244控制逻辑246缓冲器1 248重置信号252产生器选择信号 254原始位信号256过滤失败信号 258max_cnt信号262过滤使能信号 264fill_select信号266store_select信号 268xstore信号272xload信号274TSPO标志寄存器278数据总线 282字节产生信号284CNT使能信号 286RNG存在信号288自测试失败信号 292自测试使能信号294CNT失败信号 296直流偏压信号298随机数据字节302,314RNG存在位 312RNG使能位316自测试使能位 318自测试失败位322直流偏压位 324原始位332,362可用字节计数字段334串过滤装置使能位 336产生器选择位338串过滤装置失败位 342CNT使能位344CNT失败位346串过滤装置max_cnt字段352SSE寄存器364随机数据字节字段372XMM0 374XMM5
376XMM3402-404微处理器执行将值加载XMM0寄存器的指令的运行流程502系统内存 50416个字节数据602-612微处理器执行XLOAD指令的运行流程702可用字节计数 704随机数据字节802-824微处理器执行XSTORE指令的运行流程902-952微处理器进行关于随机数产生的多任务运行范例的动作流程1002比较逻辑 1004或门1006选择逻辑 1008与门1012A第一加法器 1012B第二加法器1014A第一多路复用器 1014B第二多路复用器1016A第一计数器 1016B第二计数器1022Anum_leading_ones信号1022Bnuw_leading_zeros信号1024Aones_cnt信号1024Bzeros_cnt信号1026Anew_ones_cnt信号 1026Bnew_zeros_cnt信号1028Anum_trailing_ones信号1028Bnum_trailing_zeros信号1032A,1032B固定零值 1034Aones_exceeded信号1034Bzeros_exceeded信号1036Aleading_ones信号 1036Bleading_zeros信号1038Atrailing_ones信号1038Btrailing_zeros信号1042Aone_select信号 1042Bzero_select信号1044max_cnt_exceeded信号1046A第一比较器 1046B第二比较器1048Aall_ones信号 1048Ball_zeros信号1102-1148串过滤装置的工作流程1202EAX寄存器1302-1334RNG单元的多重缓冲运行的流程1702ECX寄存器 1704ESEDI
具体实施例方式
现请参照图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所执行的特定指令,选择性地禁止及使能中断服务。即,若中断被禁止,则即使中断信号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及单指令多数据流扩展(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中的使用者可见寄存器包括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,送到MSR212,以更新图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,标题分别为“用以产生随机数的装置”、“振荡器偏压变化机制”及“振荡器频率变化机制”,其中均对随机位产生器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的输入/输出函数如下表一所示。

表一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中CSR226的串过滤装置失败位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。每当一随机数据字节存入缓冲器0 242或缓冲器1 246时,控制逻辑244会将递增信号221设为真。多路分用器215依据fill_select信号264,将其输入端所接收的递增信号221选择性地送到其中一输出端。
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中,与图1RNG单元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会将字节同步地累积至缓冲器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。由于XMM0372是操作系统在进行工作切换时,被存储至内存及从内存回存的寄存器,所以当工作切换发生时,操作系统会执行如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不存在于PentiumIII或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指令的运算码值则为0x0F 0xA6 0xC0。若XLOAD指令指定SSE寄存器352中的一个,而非XMM0 372,则会加载指定的SSE寄存器352;然而,并不会加载CSR 226。
现请参照图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及计数器1213中的可用字节计数清除为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不存在于PentiumIII或IV中,所以需要Pentium III或IV指令集外的新指令,以存储RNG R5238。有利的是,XSTORE指令会以整体不可分割的方式,将计数值及数据字节写入内存,便于以RNG单元136进行多任务操作,如此处所述。即,XSTORE指令是不可中断的。因此,当某工作执行XSTORE指令时,另一工作不可中断XSTORE指令来修改要藉由XSTORE指令,写入系统内存的可用字节计数或随机数据字节。因此,藉由整体不可分割的方式写入数据及计数值,XSTORE指令提供了数量可变的随机数据字节,本质上有利地便于多任务的进行。
图7是显示XSTORE指令的格式,其为XSTORE memaddr,XMM5Memaddr会指定系统内存502中的内存地址。XSTORE指令的运行与MOVAPS指令类似,除了所指定的XMM寄存器不会存储至系统内存;取而代之的是,若指定了XMM5 374,则R5 238会被存至系统内存。即,R5 238会遮蔽XMM5 374。XSTORE会将图3的可用有效随机数据字节362的计数值,从R5 238移到系统内存502中memaddr的位置702,如图所示。此外,XSTORE将计数值362所指定的有效随机字节的数据364,移到系统内存502中紧邻可用字节计数702的位置704,如图所示。
在一具体实施例中,XSTORE指令的运算码值为0x0F 0x5B,其后接着x86指令所指定的标准mod R/M寄存器及地址格式字节。在另一具体实施例中,XSTORE指令的运算码值为0x0F 0xA7 0xC0。在一具体实施例中,XSTORE指令要求寄存器文件108中的ESEDI寄存器来指定memaddr,即,指到要存储计数及随机数据字节的起始内存地址。在一具体实施例中,XSTORE不允许区段重迭。若XSTORE指令指定了SSE寄存器352的其中一个,而非XMM5 374,则结果会呈未定状态。
在一具体实施例中,微处理器100存储在系统内存的随机数据字节704的数目,是等于也写入系统内存的可用字节计数702。
在另一具体实施例中,微处理器100存储在系统内存的随机数据字节704的数目,是等于一个比RNG R5 238中的字节还少的数目。即,若RNG R5 238为16个字节的寄存器,可存储多达15个随机数据字节364及一个字节的可用字节计数362,则微处理器100会将16个字节存至系统内存50215个字节的随机数据存到随机数据字节704的位置,而一个计数字节则存到可用字节计数702的位置。然而,在写入系统内存502的15个字节中,某些可能不是有效的。在一具体实施例中,写入内存的字节的数目都为2的次方。只有前N个字节是有效的,其中N为可用字节计数702。
在此具体实施例中,RNG单元136会清除XSTORE运算所指涉的缓冲器(即,图2的缓冲器0 242或缓冲器1 246)。藉由清除缓冲器,微处理器100可避免各个工作看到彼此的随机数据所产生的问题,而提高安全性。例如,假设第一工作执行第一XSTORE运算,将15个字节的随机数据从缓冲器0242存储到系统内存,并执行第二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指令并非需连续执行的。即,因为所需的随机字节的数目可能会很大,所以REPXSTORE是可中断的。然而,由于所存储的随机数据字节的数目是不可变的(即,软件知道将要存至内存的随机数据字节的数目),所以指令不必连续执行。
现请参照图8,其是根据本发明,图1的微处理器100执行来自于图3XMM5寄存器的XSTORE指令的运行流程图。流程从方框802开始。
在方框802中,对于图1的指令转译器106通知XSTORE指令已转译,中断单元146会响应以将中断禁止。流程继续进行判断方框804。
在判断方框804中,图2的控制逻辑244会检查TSPO标志274,以判断标志是否设定。若设定,则流程会继续进行方框806。否则,流程会继续进行方框816。
在方框806中,RNG单元136会将XMM0 372的内容复制到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的状态(即CSR226)。流程从方框902开始。
在方框902中,会发生重置,这会使控制逻辑244清除TSPO标志274。流程会继续进行方框904。
在方框904中,操作系统会启动工作A,并且工作A的初始码会执行XLOAD至XMM0 372的指令,以所要的控制值(表示为值A)来初始化CSR226及XMM0 372。流程会继续进行方框906。
在方框906中,根据图6的方框604、606、608以及612,RNG单元136会响应XLOAD,而丢弃缓冲器0242及缓冲器1246的内容、清除计数器0211及计数器1213、重新开始随机数的产生与累积以及清除TSPO标志274。流程会继续进行方框908。
在方框908中,工作A执行XSTORE指令,以存储依据方框904加载至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重新开始后所累积的计数值及数据,存储至系统内存,如图及图所示。流程会继续进行方框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也会产生all_ones信号1048A,若随机数据字节298包含均为1的位,则此信号为真。
比较逻辑1002也会产生leading_ones信号1036A,若随机数据字节包含前导的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。
<pre listing-type="program-listing"><![CDATA[retain_counts=max_cnt_exceeded &amp; filter enableincrement_zeros=all_zeros &amp; (!retain_counts);load_zeros=trailing_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=trailing_ones &amp;(!retain_counts)&amp;(!increment_ones);clear_ones=(!retain_counts)&amp;(!increment_ones)&amp;(!load_ones);if(retain_counts){ zero_select=3;//select zeros_cnt input}else if(increment_zeros){ zero_select=2;//select new_zeros_cnt input}else if(load_zeros){ zero_select=1;//select num_trailing_zeros input}else if(clear_zeros){ zero_select=0;//select hard-coded 0 input}if(retain_counts){ one select=3;//select ones_cnt input}else if(increment_ones){ one_select=2;//select new_ones_cnt input}else if(load_ones){ one_select=1;//select num_trailing_ones input}else if(clear_ones){ one_select=0;//select hard-coded 0 input}]]></pre>现在参照图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,即,在方框1116中,将过滤失败信号设为真。流程会继续进行方框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,并且于信号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的多任务运行,且所存的有效随机数据字节的数量,显示于EAX中存储的可用字节计数。也就是,图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所选择的缓冲器0242或缓冲器1246是否已满。若是,流程会继续进行方框1328。否则,流程会返回方框1306。
在方框1328中,控制逻辑244更新fill_select信号264。在RNG单元136包含二个缓冲器的实施例中,更新fill_select信号264的动作包括切换fill_select信号264。在RNG单元136包括二个以上缓冲器的实施例中,fill_select信号264包括多于1个的位,并且更新fill_select信号264的动作包括递增fill_select信号264,以及当递增超过缓冲器的数目时,会回归为0。流程会继续进行判断方框1332。
在判断方框1332中,控制逻辑244检查由方框1328更新的fill_select信号264所指定的full0信号229或full1信号227,以判断由fill_select信号264所选择的缓冲器0 242或缓冲器1 246是否已满(即,判断所有的缓冲器是否已满)。若是,流程会继续进行方框1334。否则,流程会返回方框1306。
在方框1334中,由于所有的缓冲器已满,控制逻辑244就藉由power_cntrl信号231,关闭随机位产生器0206及随机位产生器1208的电源。流程会返回判断方框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,以写入有效随机数据字节,XSTORE xmm3,xmm5,如图所示。有利的是,与图12的XSTORE指令类似,图16的XSTORE指令会连续地将随机数据字节写入该使用者可见寄存器,并将计数值加载EAX 1202,以促进与RNG单元136的多任务运行,且所存的有效随机数据字节的数量,显示于EAX中存储的可用字节计数。也就是,图16的XSTORE指令也是不可中断的。
现在参照图17,其是根据本发明的另一具体实施例,图1微处理器100执行XSTORE指令的运行方框图。图17的XSTORE指令类似于图12的XSTORE指令,然而在图17的实施例中,XSTORE指令包括一x86架构的REP前置码。藉由REP XSTORE指令,要存至系统内存的随机数据字节的数目,会被指定为寄存器文件108的ECX寄存器1702的输入参数,如图所示。软件在执行REP XSTORE指令前,会将要存至系统内存的随机数据字节的理想计数值载入ECX 1702中。
在一具体实施例中,在将随机数据字节存至系统内存的存储动作间,REPXSTORE指令是可中断的。内存地址在初始时,是指定于寄存器文件108的一般用途寄存器中。在图17的例子中,内存地址是指定于寄存器文件108的ESEDI 1704中,如图所示。每当有一或更多个随机数据字节被写入系统内存时,ESEDI 1702即更新为系统内存中,下个用以存储随机数据字节的位置。此外,每当有一或更多个随机数据字节存储至系统内存时,ECX 1702即更新,以反映尚待存储的随机字节数目。例如,假设REP XSTORE指令于ECX 1702中指定一字节计数值28及0x12345678的内存地址。假设在缓冲器0 242及缓冲器1 246两者之一中,RNG单元136有8个可用的字节,且当累积更多的随机数据字节时,将8个字节写入系统内存。当8个字节被写至内存时,ECX 1702会更新为20,以表示还有20个随机数据字节必须写入系统内存。此外,地址会被更新为系统内存中,下个将要写入大量随机数据字节的位置0x12345680。中断可能会发生在这个时候,而软件会检查更新的值。当中断已执行且控制权回归至REP XSTORE指令时,REP XSTORE指令将使用ECX 1702及ESEDI 1704中的更新值回复执行。此外,完成REPXSTORE指令时,图2 CSR 226的现时值会被复制到寄存器文件108的EAX寄存器1202中。
虽然本发明及其目的、特征与优点已详细叙述,其它实施例也可包含在本发明的范围内。例如,虽然本发明是以字节为单位过滤随机数据的方式加以叙述,本发明仍可适用于以较大或较小的量为单位来累积较大或较小数量的位及过滤随机数据的情形。例如,以16位为单位,累积并检查新的16位,以判断这新的16位是否超过最大计数值,若超过,即可丢弃此16位。类似的操作可执行于以4位为单位的情形。
权利要求
1.一种用于一随机数产生器中的装置,其特征在于,包括第一及第二计数器,配置为分别存储一0位计数及一1位计数,以分别表示在该随机数产生器所产生的一连串随机字节中,目前所检测到的连续0及1位的数目;第一及第二加法器,连接至该第一及第二计数器,用以产生第一及第二总和,其中该第一总和为该0位计数加上该随机数产生器所产生的下个随机字节中前导0的数目的总和,该第二总和为该1位计数加上该下个随机字节中前导1的数目的总和;以及第一及第二比较器,分别连接至该第一及第二加法器,配置为分别将该第一及第二总和与一计数值N做比较,且每一比较器会产生一个别信号,以指出该个别总和是否大于该N。
2.如权利要求1所述的装置,其特征在于其中前导0位是包含一字节开头的连续0位。
3.如权利要求1所述的装置,其特征在于,还包括一缓冲器,连接至该第一及第二比较器,用以存储多个随机数据字节,其中若这些个别信号均未指出该个别总和大于N,则该装置将该下个随机字节写入该缓冲器,其中若这些个别信号中的任意一个指出该个别总和大于N,则该装置丢弃该下个随机字节。
4.如权利要求3所述的装置,其特征在于,还包括一可编程(programmable)控制位,连接至该缓冲器,其中若这些个别信号中的任意一个指出该个别总和大于N,则只有当该控制位被编程为使能该装置丢弃该下个随机字节时,该装置才丢弃该下个随机字节。
5.如权利要求第4项所述的装置,其特征在于,还包括一字节计数器,连接至该第一及第二比较器,用以存储该缓冲器所存的有效随机数据字节的一计数值,其中若这些个别信号均未指出该个别总和大于N,则该装置递增该字节计数器。
6.如权利要求1所述的装置,其特征在于,还包括一逻辑,用以接收该随机数产生器所产生的该下个随机字节,若该下个随机字节均为0且这些个别信号均未指出该个别总和大于N,则该逻辑以该第一总和更新该第一计数器。
7.如权利要求6所述的装置,其特征在于其中若该下个随机字节的尾端0数量不为0且这些个别信号均未指出该个别总和大于N,则该逻辑以该下个随机字节的尾端0数量更新该第一计数器。
8.如权利要求7所述的装置,其特征在于其中若该尾端0数量为0且这些个别信号均未指出该个别总和大于N,则该逻辑将该第一计数器更新为0。
9.如权利要求8所述的装置,其特征在于其中若该下个随机字节均为1且这些个别信号均未指出该个别总和大于N,则该逻辑以该第二总和更新该第二计数器。
10.如权利要求9所述的装置,其特征在于其中若该下个随机字节的尾端1数量不为0且这些个别信号均未指出该个别总和大于N,则该逻辑以该下个随机字节的尾端1数量更新该第二计数器。
11.如权利要求6所述的装置,其特征在于其中若这些个别信号中的任意一个指出该个别总和大于N,则该逻辑设定一状态位。
12.如权利要求1所述的装置,其特征在于其中该随机数产生器是包含于一微处理器中。
13.如权利要求12所述的装置,其特征在于其中该微处理器包括可编程控制位,用以指定该N。
14.一种微处理器,其特征在于,包括一随机位产生器,配置为产生一连串随机位;一移位寄存器,连接至该随机位产生器,用以从该连串随机位中,组成一连串随机字节;以及一过滤装置,连接至该移位寄存器,用以检测并过滤出该连串随机字节中的一字节,该字节包含其开头的一具有相同位值的第一连续位串,连同该连串随机字节中,紧接于该字节前的一或更多个字节中的一具有该相同位值的第二连续位串,以组成一均具有该相同位值的第三连续位串,且该第三连续位串的长度超过一预定值。
15.如权利要求14所述的微处理器,其特征在于,还包括一存储组件,连接至该过滤装置,用以存储该预定值。
16.如权利要求14所述的微处理器,其特征在于,还包括一缓冲器,连接至该过滤装置,用以存储至少一部份的该连串随机字节,其中该字节是从该部份的该连串随机字节中过滤出来。
17.如权利要求16所述的微处理器,其特征在于其中该微处理器是配置为将该缓冲器所存的该部份的该连串随机字节存储至连接至该微处理器的一内存。
18.如权利要求14所述的微处理器,其特征在于,还包括一控制寄存器,连接至该过滤装置,用于存储一使能位,可选择性地使能该过滤装置,以从该连串随机字节中,过滤出该字节。
19.一种避免一随机数产生器产生一串N个连续相似位的方法,其特征在于,包括(1)从一串随机位中,组成一随机字节;(2)将存于一第一计数器中的一第一计数加上该随机字节的前导0的数量,以产生一第一总和,并将存于一第二计数器中的一第二计数加上该随机字节的前导1的数量,以产生一第二总和;(3)判断该第一及第二总和中的任意一个是否超过N;(4)若该第一及第二总和中的任意一个超过N,则丢弃该随机字节;(5)若该第一及第二总和均未超过N,则累加该随机字节;以及(6)重复步骤(1)到(5)。
20.如权利要求19所述的方法,其特征在于,还包括判断该随机字节是否均为0。
21.如权利要求20所述的方法,其特征在于,还包括若该随机字节均为0且该第一及第二总和均未超过N,则以该第一总和更新该第一计数器。
22.如权利要求21所述的方法,其特征在于,还包括判断该随机字节的尾端0数量是否不为0。
23.如权利要求第22项所述的方法,其特征在于,还包括若该尾端0数量不为0且该第一及第二总和均未超过N,则以该尾端0数量更新该第一计数器。
24.如权利要求23所述的方法,其特征在于,还包括若该尾端0数量为0且该随机字节不均为0且该第一及第二总和均未超过N,则将该第一计数器更新为0。
25.如权利要求24所述的方法,其特征在于,还包括判断该随机字节是否均为1。
26.如权利要求25所述的方法,其特征在于,还包括若该随机字节均为1且该第一及第二总和均未超过N,则以该第二总和更新该第二计数器。
27.如权利要求26所述的方法,其特征在于,还包括判断该随机字节的尾端1数量是否不为0。
28.如权利要求27所述的方法,其特征在于,还包括若该尾端1数量不为0且该第一及第二总和均未超过N,则以该尾端1数量更新该第二计数器。
29.如权利要求28所述的方法,其特征在于,还包括若该尾端1数量为0且该随机字节不均为1且该第一及第二总和均未超过N,则将该第二计数器更新为0。
30.如权利要求19所述的方法,其特征在于,还包括若该第一及第二总和中的任意一个超过N,则将一控制信号设为真,以指出该第一及第二总和中的一个超过N。
31.如权利要求19所述的方法,其特征在于其中若该第一及第二计数器均未超过N,则该累加动作包括将该随机字节存储于一缓冲器中。
32.如权利要求31所述的方法,其特征在于,还包括在将该随机字节存储于该缓冲器之后,递增一字节计数。
33.如权利要求19所述的方法,其特征在于,还包括将N编程于该随机数产生器的一寄存器中。
全文摘要
本发明公开了一种硬件随机数产生器中的过滤装置,用以防止随机数产生器(RNG)输出长于指定长度的0或1连续位串。在此装置中,该最大长度是可编程的。此装置包括计数器,可记录RNG所产生的一连串字节中,连续0位的现时计数。加法器则计算现时0位计数与所产生的下个字节中前导零数目的总和。若总和超过最大长度,则过滤装置会舍弃此字节,而不会将其累加。否则,若此字节均为0,则以此总和更新计数器;若此字节包含尾端0,则以尾端0的数目更新计数器;若非以上情形,则清除计数器。此装置对连续1位也执行相同动作。本发明还公开了一种避免一随机数产生器产生一串N个连续相似位的方法。
文档编号G06F1/02GK1503123SQ03158189
公开日2004年6月9日 申请日期2003年9月16日 优先权日2002年11月21日
发明者G·葛兰·亨利, 泰瑞·派克斯, G 葛兰 亨利, 派克斯 申请人:智慧第一公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1