掌桥专利:专业的专利平台
掌桥专利
首页

验证算术逻辑单元的方法及计算设备

文献发布时间:2024-04-18 19:59:31


验证算术逻辑单元的方法及计算设备

技术领域

本发明涉及芯片验证技术领域,具体涉及一种验证算术逻辑单元的方法及计算设备。

背景技术

算术逻辑单元(ALU)作为计算机的核心部件,ALU的输入是要进行操作的数据(称为操作数)以及来自控制单元的指令代码,用来指示进行哪种运算。它的输出即为运算结果。在UVM验证框架下,高效可靠的验证环境已经成为验证迭代进度的关键因素。现有验证过程中,通过随机操作数,再比对运算结果进行判断该ALU的功能是否正常。

现有的验证方法是直接随机输入数据,而真正使用的数据是转换后的浮点数,这样很容易会造成输入的浮点数随机不充分、特定数据很难随机到等问题。而且当ALU的输入数据格式不同时,需要进行不同输入格式的匹配,比对结果的时候也容易造成精度损失,从而导致比对失败,浪费时间定位环境问题,造成验证工作繁杂且不容易收敛。

为此,需要一种技术方案,能够提高算术逻辑单元的验证效率。

发明内容

本申请旨在提供用于验证算术逻辑单元的方法及计算设备,能够减少精度损失,提高验证效率。

根据本申请的一方面,提供一种验证算术逻辑单元的方法,包括:

生成验证环境,根据测试需求继承于验证环境而生成各组测试实例,所述验证环境包括参考模型;

根据所述测试需求,在预定约束的数据范围内以比特位形式随机出预定位的随机比特数;

通过格式转换函数将所述随机比特数转换为所需类型的操作数;

将所述操作数提供至算术逻辑单元;

将所述算术逻辑单元的输出数据存储为比特数;

将所述比特数与所述参考模型运算出的结果进行逐位比对以对算术逻辑单元进行验证。

根据一些实施例,在预定约束的数据范围内以比特位形式随机出预定位的随机比特数,包括:在所述数据范围产生平均分布、指数衰落或钟型分布的随机数。

根据一些实施例,所述随机数的产生通过硬件验证语言systemverilog约束。

根据一些实施例,所述测试实例由测试用例根据具体需求配置调用。

根据一些实施例,在预定约束的数据范围内以比特位形式随机出预定位的随机比特数,包括:通过限制条件、随机边界和/或随机权重来实现随机。

根据一些实施例,前述方法还包括:根据所述算术逻辑单元支持的数据类型预先构造相应的格式转换函数。

根据一些实施例,所述操作数包括整数、浮点数、布尔值、字符串中的一种或多种。

根据一些实施例,通过调整不同比特位的随机概率随机出预定位的随机比特数。

根据一些实施例,所述验证算术逻辑单元利用所述操作数执行双目运算和/或单目运算。

根据本申请的另一方面,提供一种计算设备,包括:

处理器;以及

存储器,存储有计算机程序,当所述计算机程序被所述处理器执行时,使得所述处理器执行如上任一项所述的方法。

根据本申请的另一方面,提供一种非瞬时性计算机可读存储介质,其上存储有计算机可读指令,当所述指令被处理器执行时,使得所述处理器执行如上任一项所述的方法。

根据示例实施例,通过比特形式使输入的操作数随机成另一比特,在达到充分随机的目的同时,可以使得输入的操作数更加接近实际情况,从而降低结果的误差和偏差;所述算术逻辑单元的输出以比特形式进行比对,减少精度的损失,提高验证效率。另外,根据本申请的技术方案,操作数可支持整数、浮点数、布尔值、字符串中的一种或多种,应用上可具有通用性。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本申请。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。

图1示出根据一些实施例的ALU组成框图。

图2示出根据示例实施例的UVM验证环境框图。

图3示出根据示例实施例的验证ALU的方法流程图。

图4示出根据示例性实施例的计算设备的框图。

具体实施方式

现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例;相反,提供这些实施例使得本申请将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。

此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本申请的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本申请的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本申请的各方面。

附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。

附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。

应理解,虽然本文中可能使用术语第一、第二、第三等来描述各种组件,但这些组件不应受这些术语限制。这些术语乃用以区分一组件与另一组件。因此,下文论述的第一组件可称为第二组件而不偏离本申请概念的教示。如本文中所使用,术语“及/或”包括相关联的列出项目中的任一个及一或多者的所有组合。

本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。

本领域技术人员可以理解,附图只是示例实施例的示意图,附图中的模块或流程并不一定是实施本申请所必须的,因此不能用于限制本申请的保护范围。

算术逻辑单元(arithmetic and logic unit)是能实现多组算术运算和逻辑运算的组合逻辑电路,简称ALU。

ALU是中央处理器(CPU)的执行单元,是所有中央处理器的核心组成部分,由"AndGate"(与门)和"Or Gate"(或门)构成的算术逻辑单元,主要功能是进行二位元的算术运算,如加减乘(不包括整数除法)。基本上,在所有现代CPU体系结构中,二进制都以补码的形式来表示。

UVM(Universal Verification Methodology:通用验证方法学)是当前芯片验证中最流行的验证方法学,此申请中的统一验证平台。

UVM是一种使用System Verilog进行功能验证的方法,并提供了使用SystemVerilog代码实现的支持库。UVM指导验证工程从DUT(design under test:待测设计)的功能规范(Specification)出发,制定验证计划,分解测试点,创建测试用例,定义验收(sign-off)方式和标准,实现流程自动化和报告自动化等。在UVM的框架里面,各类环境组件相互独立、各司其职。

在芯片验证仿真中,ALU(算术逻辑单元)是一个重要的部分。目前ALU支持的输入浮点数格式有FP64、FP32、FP16、BF16、int16、int8等等,每一种输入格式对应一种输出格式,在芯片验证仿真中,需要对不同的输入格式进行验证,以确保ALU能够正确地处理各种操作。ALU内部支持双目运算符、单目运算符等。它实现加、减、与、或、异或、非、左移、右移、半字节交换等九种运算,其中前五种是双操作数操作,其余四种是单操作数操作。这些都导致ALU的参数配置多样化。

根据一些实施例,对于加法操作,输入格式可能是两个操作数和一个加法信号。输出格式将是两个操作数的和;对于左移操作,输入格式可能是一个操作数和一个左移信号以及一个表示要移动的位数,输出格式将是左移后的结果。

因此,在验证仿真中,我们需要为每种输入格式提供适当的测试用例,并检查输出格式是否符合预期,这有助于确保ALU的正确性和可靠性。

在验证环境中,数据的随机化只针对整数类型,针对浮点数来说,为了验证的完备性,往往需要实现数据的随机化来构造激励。以IEEE Std 754-1985标准的32bit float浮点类型为例,它被分为3个部分,分别是1Bit符号位S(sign bit)、8Bit指数偏差E(exponentbias)和22Bit小数部分F(fraction)。由于数据组成包含小数位和指数位,如果直接对32bit进行随机化,概率上,也不是均匀分布,使用SystemVerilog提供的随机数函数(平均分布、指数衰落、钟型分布)都不能均匀等概率的完成FP32浮点从(-2^128:2^128)的随机化。

另外,当ALU的输入数据格式不同时,需要进行不同输入格式的匹配,比对结果的时候也容易造成精度损失,从而导致比对失败,浪费时间定位环境问题,造成验证工作繁杂且不容易收敛,导致验证效率降低。

为此,本申请实施例通过比特形式使输入的操作数随机成bit数,在达到充分随机的目的同时,可以使得输入的操作数更加接近实际情况,从而降低结果的误差和偏差。所述算术逻辑单元的输出以比特形式进行比对,减少精度的损失,能够提高算术逻辑单元的验证效率。

下面结合附图对本申请的示例实施例进行说明。

图1示出根据一些实施例的ALU组成框图。

参见图1,算术逻辑单元(ALU)是嵌入在计算机中央处理器(CPU)中的电路板,输入单元通过CPU的处理变为输出单元。更进一步,输入数据通过ALU和CU(Control Unit,控制单元)的处理后变为输出数据。

根据一些实施例,如果CPU是计算机的大脑,那么ALU就是它的计算器。ALU对存储在寄存器中的信息执行算术计算的电路发生的地方,是专门执行算术和逻辑运算的数字电路。

如前所述,ALU的核心是一个数字组合电路,可对整数二进制变量执行算术和按位运算,还包含用于比较值的电路,例如确定寄存器中的值是否相同。

根据一些实施例,输入数据包括两个操作数和一个操作码,以及可能的格式代码。操作码指示ALU在操作过程中使用操作数时要执行哪个操作。例如,两个操作数可以组合或进行逻辑比较。这些数据通过内存和其他电子设备传输到ALU。

所述输入数据到达CPU后,ALU处理这些输入数据,并由CU协调,CU负责程序的流程管理。其基本功能是从内存中读取指令、分析指令,并执行指令。所述CU根据需要使用ALU、内存单元、寄存器和其他CPU组件来获取和解码指令、从存储中读取数据和执行命令。

根据预定的算法进行运算,生成输出数据。

输出数据包括存储在内存寄存器中的结果,其中包含指示操作是否成功的信息。这些数据也可以传输到其他电子设备中,用于进一步的处理或输出到外部设备。

图2示出根据示例实施例的UVM验证环境框图。

参见图2,芯片验证基于UVM验证环境平台,所述芯片验证平台包括验证环境中的各个模块:代理模块(agent,AGT)、参考模型(reference model,RM)、计分板(Scoreboard,SB)和监视模块(Monitor,MON),各模块间通过Fifo(First-In,First-Out)进行数据传输。所述芯片验证平台还包括待测芯片的寄存器传输级(RTL)代码。

根据示例实施例,AGT是一个能够执行特定任务或代表其他实体采取行动的实体,在实现随机操作数的功能方面,AGT可以负责生成随机操作数、执行操作并收集结果。

RM是用于比对数据的模型,用于验证AGT的功能和性能。所述参考模型可以提供预期的结果或行为,并与AGT的实际输出进行比较,以评估AGT的准确性和一致性。

SB用于记录和比较AGT和RM之间结果差异的工具。它可以显示AGT的输出与RM的预期结果之间的差异,以便进行调试和错误定位。

MON用于采集RTL(硬件)运算结果的工具。所述MON可以观察和记录RTL在执行随机操作数时的实际运算结果,并将其送给SB。

整个仿真平台的组件在所述验证环境中建立并进行实例化。根据测试需求继承于验证环境而生成各组测试实例,如dummy_test(),abnormal_test()等。测试用例根据具体需求配置本用例调用的测试实例,验证环境中主要实现了各个组件的连接。此外加入寄存器模型之后,需要建立reg_model跟adapter之间的连接。最后根据scoreboard组件比较的实际与理想数据反馈的信息,控制显示并打印pass或fail关键词进行结果报告。

下面结合UVM验证环境平台对ALU进行验证。

图3示出根据示例实施例的验证ALU的方法流程图。

参见图3,在S301,生成验证环境,根据测试需求继承于验证环境而生成各组测试实例。

根据一些实施例,整个仿真平台的组件在验证环境中构建并进行实例化。根据测试需求继承于验证环境而生成各组测试实例,如dummy_test(),abnormal_test()等。测试用例根据具体需求配置本用例调用的测试实例,验证环境中主要实现了各个组件的连接,最后根据计分板(scoreboard)组件比较的实际与理想数据反馈的信息,控制显示并打印通过或失败的关键词进行结果报告。

根据一些实施例,所述测试实例由测试用例根据具体需求配置调用。

在S303,根据所述测试需求,在预定约束的数据范围内以比特位形式随机出预定位的随机比特数。

根据一些实施例,在所述数据范围产生平均分布、指数衰落或钟型分布的随机数。

根据一些实施例,通过限制条件、和随机边界及和/或随机权重来实现随机。

根据一些实施例,通过调整不同比特位的随机概率随机出预定位的随机比特数。

UVM中的随机是可以加限制条件和/或随机边界和/或随机权重。

根据一些实施例,所述限制条件在UVM中,可以为随机化操作设置限制条件。例如,希望某个操作仅在特定的情况下发生,或者希望限制随机值的范围。可以通过使用randc或randc_with函数来实现,这些函数允许指定一个约束条件,只有满足这个条件的随机值才会被接受。

所述随机边界在UVM中允许随机化操作定义边界。例如,某个值在0到100之间随机,可以通过使用rand或rand_mode函数来实现,通过这些函数实现指定随机值的范围。

所述随机权重在UVM中为随机化操作定义权重,某些结果可能会比其他结果更频繁地出现。这可以通过在randc或randc_with函数中使用加权因子来实现,加权因子越高,相应的结果就越可能出现。

以上都是在UVM中进行随机化操作的常见方式,这些方法都可以在测试时生成更符合实际情况的结果,从而提高验证的准确性和效率。

在S305,通过格式转换函数将所述随机比特数转换为所需类型的操作数。

根据一些实施例,转换函数通过SystemVerilog提供。SystemVerilog是一种用于设计和验证数字电路的硬件描述语言(HDL),它主要用于集成电路和现场可编程门阵列(FPGAs)的设计和验证。SystemVerilog具有丰富的内置函数集,可用于对数据执行各种操作。SystemVerilog中一些常用的函数包括:数学函数:这些函数用于对数据执行基本的数学运算,如加减乘除、求幂、求绝对值等。内置函数:这些函数用于处理常见的数据类型操作,如字符串操作、位操作、数组操作等。时间函数:这些函数用于处理时间相关的操作,如延迟、计时器等。随机函数:这些函数用于生成随机数,用于仿真测试中的随机测试。SystemVerilog还支持用户自定义函数,可以根据具体需求编写自己的函数。

根据一些实施例,所述操作数包括整数、浮点数、布尔值、字符串中的一种或多种。

根据一些实施例,根据所述算术逻辑单元支持的数据类型预先构造相应的格式转换函数。

ALU支持的输入浮点数格式有FP64、FP32、FP16、BF16、int16、int8等等,每一种输入格式对应一种输出格式。根据ALU支持的数据类型构造不同的格式转换函数。例如bit转FP16、bit转FP32、bit转BF16等。

根据示例实施例,若将十进制数转为二进制数,所述格式转换函数用类似于科学计数法的形式表示成:

num=(-1)^s(1+M)2^(E-127)(单精度)

num=(-1)^s(1+M)2^(E-1023)(双精度)

然后将每部分算出的数值按顺序排列。

例如整数3,首先转化成二进制形式11。转化成二进制指数形式1.1*2^x。由此我们可以得知尾数部分是1(将首位1省略掉了),不足23位的后边补0,指数部分是1+127=128,对应二进制10000000。所以存储结构就是010000000100000000000000000000。

根据示例实施例,在UVM验证环境中的AGT模块,将随机好的数据传给格式转换函数,由环境中的AGT组件调用此函数得到结果再输入给ALU。

所述格式转换函数通常用于将一种数据格式转换为另一种数据格式。这种转换可能涉及数据类型、数据结构、数据格式或其他方面的改变。本示例实施例中多为数据类型的转换,在随机数输入给ALU之前,将bit数据用格式转换函数转换成所需的数据类型。

在S307,将所述操作数提供至算术逻辑单元。

操作数(operand)是指在算术或逻辑运算中的数值或数据。在UVM中,操作数通常指的是在验证过程中需要被测试或验证的数据,直接参与运算。换言之,操作数是测试设备(Design Under Test,DUT)的输入数据,来源于验证环境中的变量。

在ALU中,当ALU从A和B两个输入接口上读取操作数,并且从op总线上读取一个操作数时,它将基于该操作数的结果进行运算。当操作完成时,输出done为1。reset_n信号是有效的低电平同步复位。

根据一些实施例,ALU内部仍然以浮点数进行运算和处理,精度不会损失。

在S309,将所述算术逻辑单元的输出数据存储为比特数,从而规避验证时的精度损失。

根据示例实施例,ALU的输出以bit形式进行比对,可以规避精度的损失。

在一个FP32的bit格式的示例中,例如十进制数10,他的单精度浮点数是4120 0000。

先将其对应二进制数写出来01000001 00100000 00000000 00000000(FP32)一共32位。

再将其从右往左数划分为三部分:31位,30到23位,22到0位,其中:

第31位为1位符号位,0表示正数,1表示负数;

30到23位为8位指数位,得到1000 0010,十进制为130;

22到0位为尾数位,得到010 0000 0000 0000 0000 0000,这里直接在前面加“0.”,得到0.010 0000 0000 0000 0000 0000,也就是二进制小数的0.01,得到十进制0.25。

计算公式为:十进制数=(-1)^符号位*(1+尾数位)*2^(指数位-127),把1~3的值代入,(-1^0)*(1+0.25)*2^(130-127)=1*1.25*2^3=10。

最后得到00000000 00000000 00000001 00000000(bits)。

在S311,将所述比特数与所述参考模型运算出的结果进行逐位比对。

根据示例实施例,输出的数据以bit形式存储在验证环境组件SB模块中,并与参考模型RM运算出的结果进行比对。所述参考模型RM里面有浮点数的运算,这个调用c语言的浮点数运算即可完成,用这个作为标准结果和RTL的运算结果进行比对。

根据示例实施例,本申请验证算术逻辑单元的方法可以使输入的操作数以bit形式去随机每一个bit,达到充分的随机;且ALU的输出以bit形式进行比对以对算术逻辑单元进行验证,可以规避精度的损失。

图4示出根据示例性实施例的计算设备的框图。

如图4所示,计算设备30包括处理器12和存储器14。计算设备30还可以包括总线22、网络接口16以及I/O接口18。处理器12、存储器14、网络接口16以及I/O接口18可以通过总线22相互通信。

处理器12可以包括一个或多个通用CPU(Central Processing Unit,处理器)、微处理器、或专用集成电路等,用于执行相关程序指令。根据一些实施例,计算设备30还可包括为处理器12进行加速的高性能显示适配器(GPU)20。

存储器14可以包括易失性存储器形式的机器系统可读介质,例如随机存取存储器(RAM)、只读存储器(ROM)和/或高速缓存存储器。存储器14用于存储包含指令的一个或多个程序以及数据。处理器12可读取存储在存储器14中的指令以执行上述根据本申请实施例的方法。

计算设备30也可以通过网络接口16与一个或者多个网络通信。该网络接口16可以是无线网络接口。

总线22可以为包括地址总线、数据总线、控制总线等。总线22提供了各组件之间交换信息的通路。

需要说明的是,在具体实施过程中,计算设备30还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。

本申请还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述方法的步骤。计算机可读存储介质可以包括但不限于任何类型的盘,包括软盘、光盘、DVD、CD-ROM、微型驱动器以及磁光盘、ROM、RAM、EPROM、EEPROM、DRAM、VRAM、闪速存储器设备、磁卡或光卡、纳米系统(包括分子存储器IC)、网络存储设备、云存储设备,或适合于存储指令和/或数据的任何类型的媒介或设备。

本申请实施例还提供一种计算机程序产品,该计算机程序产品包括存储计算机程序的非瞬时性计算机可读存储介质,该计算机程序可操作来使计算机执行如上述方法实施例中记载的任何一种方法的部分或全部步骤。

本领域的技术人员可以清楚地了解到本申请的技术方案可借助软件和/或硬件来实现。本说明书中的“单元”和“模块”是指能够独立完成或与其他部件配合完成特定功能的软件和/或硬件,其中硬件例如可以是现场可编程门阵列、集成电路等。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些服务接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。

作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

以上具体地展示和描述了本申请的示例性实施例。应可理解的是,本申请不限于这里描述的详细结构、设置方式或实现方法;相反,本申请意图涵盖包含在所附条款的精神和范围内的各种修改和等效设置。

技术分类

06120116523932