基于功能覆盖率的处理器运算部件测试(编辑修改稿)内容摘要:

如果两个值同样接近原值,那么根据 IEEE754 标准,系统应该选择最后一个有效数字为“ 0”的那个值作为舍入结果。 (round toward +∞ ):结果被舍入成最接近原值而又大于或等于原值的可表示数。 (round toward ∞ ):结果被舍入成最接近原值而又小于或等于原值的可表示数。 (round toward 0):结果被舍入成最接近原值 而又绝对值又小于或等于原值的可表示数。 在各种浮点数运算、操作过程中,当出现某些情况时,系统必须通过特定的方式通知用户, IEEE754 用“异常( exception)”来表示这些情况。 IEEE754定义了五中异常: 上溢 (Overflow) 下溢 (Underflow) 由运算的结果所导致 不精确 (Inexact) 无效运算 (Invalid operation) 由参与运算 的操作数所导致 除以零 (Division by zero) 微电子学专业毕业论文 10 (1) 非法操作例外 V 当存在非法情况的两个操作数存在于一个可执行的操作中时,则发出 V例外。 在浮点除法部件中具体包括: 两个零相除: (+0)/(0)、 (+0)/(+0)、 (0)/(+0) 、 (0)/(0) 两个无穷数相除: (+∞ )/(∞ )、 (+∞ )/(+∞ )、 (∞ )/(+∞ )、 (∞ )/(∞ ) 对 SNAN 的所有操作 (2)不精确例外 以下任一种情况发生时产生不精确例外: 舍入后结果上溢; 舍入后结果非精确; 舍入后结果 下溢,而且下溢例外和非精确例外的 enable 位都不被设置,而 FS比特被设置。 (3)浮点上溢、下溢例外 在舍入的幅度超过了目标格式的最大有限值时,输出结果会产生上溢异常,此时该输出结果由舍入方式决定。 最近偶舍入上溢的结果设置为∞;目标格式的幅度最大有限值被设置为零舍入上溢的结果;负无穷舍入正上溢则设置为目标格式的最大有限值,负上溢设置为负无穷;正无穷舍入设置负上溢为目标格式的最大有限值,设置正上溢为正无穷。 (4)除以零例外 当除数为零(包括“ +0”和“ 0”)而被除数是有限值时,发生该例外。 在浮点除法部 件中具体如: +=+∞ ∞ +∞ 微电子学专业毕业论文 11 基于功能覆盖率测试方法学的简单介绍 功能覆盖率简单地说是一个比例数据,指芯片中已验证过的功能占该芯片全部功能的百分比 【 8】。 只有当芯片中所有的功能都被验证为正确时才能保证流片的成功,验证工作的目标就是尽量使功能覆盖率达到100%。 想要提高验证工作的效率,就必须在尽可能短的时间内,尽可能多地提高功能覆盖率。 功能覆盖率似乎是一个较新的概念,但事实上,传统的验证过程也使用了功能覆盖率的概 念。 为了验证一个设计,项目组长必须编写验证需求文档(或类似的文档),以确定需要验证的测试案例。 这份文档最后被归纳为一张表格,表格中的一栏填写的是所有测试案例的名称,另一栏是这些测试案例的完成情况。 验证工程师的任务就是要在投片( tapeout)之前把这些的测试案例一个个地完成。 实际上,这样一张表格就是一个功能覆盖率模型。 传统的验证过程由于缺少自动地统计当前功能覆盖率的机制,大大地限制了它的能力,只能说它使用了初级的功能覆盖率模型。 为了适应当前的芯片的规模和复杂度,我们需要一种新的针对功能覆盖率的验证过程, 在这个新的验证过程中,对当前功能覆盖率进行自动统计的机制是必不可少的。 微电子学专业毕业论文 12 图 231 针对功能覆盖率的验证过程 在 如图 231 这个新的验证过程中,与传统的验证过程不同的地方在于:它实现了一个能够自动统计功能覆盖率的模型。 通过该模型,可以方便地得到当前的功能覆盖率,并根据它调整验证策略,以尽快地达到 100%功能覆盖率 【 9】。 功能覆盖中最常见的是需求覆盖,其含义是通过设计一定的测试用例,要求每个需求点都被测试到。 其公式是需求覆盖 = (被验证到的需求数量) /(总的需求数量) 功能覆盖率是通过仿真器统计 功能覆盖点的覆盖情况得到的。 它要求验证工程师首先根据 spec 定义功能覆盖点,覆盖点的定义这里不在细说。 功能覆盖率验证过程。 首先说一下功能点。 从系统设计的角度来看,功能点就是设计的某一个具体功能。 在不同的抽象层次上,功能点的含义有较大的区别。 在较高的抽象层次上,功能点可以是系统的某一项功微电子学专业毕业论文 13 能;而在较低的抽象层次上,功能点可以仅仅是设计中的某个信号的改变 (例如:微处理器内部某个通用寄存器值的改变 )。 从设计验证的角度来看,功能点就是我们为了证明设计的正确性,而构造的一个个能正确执行的测试用例。 因而功能点的含义包含 两个方面:一是测试用例,二是正确性。 图 232 功能 点的含义 图 232说明了功能点的含义。 我们把不同的测试用例定义为纵向功能线,正确性检查的条件定义为横向功能线。 功能点就是纵向功能线和横向功能线的交点。 如 果我们能找到完备的测试用例,并且能证明设计执行每个测试用例都是正确的,我们就可以确认我们的设计是正确的。 当然这是功能验证的理想情况,设计验证要做的就是如何找出完备的测试用例和如何定义充要的正确性条件。 根据前面对功能点的说明,验证的过程可以分为两步:一是构造能够体现设计功能的测试用例;二是定义 设计的正确性条件。 定义好测试用例和正确性条件以后,我们就可以搭建验证平台 (Testbench),对设计进行仿真了。 仿真的结果是不是达到了我们预期的目标了呢 ?这就需要通微电子学专业毕业论文 14 过某种手段来分析。 功能覆盖率就是用来分析仿真结果的一种手段。 功能覆盖率包含两方面的内容:一是测试用例的覆盖率,二是正确性条件的覆盖率。 在仿真完成后,感兴趣的测试条件是不是都被构造出来了 ?定义的正确性条件是不是都得到满足 ?这些都可以通过功能覆盖率体现出来。 功能覆盖率在这种策略中的作用就是指出哪些功能点已经覆盖到,哪些还没有覆盖到,从而对构造新的 测试用例作出指导。 从分析覆盖率到生成新的测试用例,这个过程可以由人手工完成,也可以由验证环境自动完成:前者节省机器的仿真时间,后者节省人的编码的时间。 微电子学专业毕业论文 15 第 3 章 微处理器功能部件参考模型( Cmodle)的测试 微处理器 refercence modleCmodle的简单介绍 Cmodle 是个 reference modle,即参照模型。 即用 C 语言(高级语言)写的一个微处理器的模型 【 10】 ,由于 C 语言是高级语言,具有以下特点: 1. 简洁紧凑、灵活方便 2. 运算 符丰富 3. 数据结构丰富 4. C 是结构式语言 5. C 语法限制不太严格、程序设计自由度大 6. C 语言允许直接访问物理地址,可以直接对硬件进行操作 7. C 语言程序生成代码质量高,程序执行效率高 8. C 语言适用范围大,可移植性好 调试 Cmodle 的目的就是保证其正确性,由于 Cmodle 的正确性和可信度都远远高于 RTL 代码。 因此,用这个模型做 RTL 的比对模型,会减少 RTL 调试时的困难。 Cmodle 功能部件的基本功能测试 Cmodle功能部件的基本功能测试对象为 MIPS指令 集中的每条指令在 Cmodle 中都是单独用一个函数实现的,然后将这些指令打包成一些有特定功能的模块,这些不同功能的模块就组合成了整个 ALU 部件,Cmodle 功能部件的基本功能测试的测试对象就是针对每条指令的这个微电子学专业毕业论文 16 函数来测试的。 Cmodle 功能部件的基本功能测试过程先从 *.c 文件中取出要测试指令模块,根据指令需求写 C语言测试激励和输出语句。 然后用 gcc 编译工具在测试平台上采用相关命令将测试激励编译生成 *.txt 的可执行文件,输入测试激励,再运行此文件,进行相关测试。 最后,将得到测试指令模块的测试结果与预 期的结果进行对比,来验证模块功能的完备性 【 11】。 Cmodle 功能部件的基本功能测试结果用位运算模块 NOR 指令为例具体分析。 图 321 提取测试指令模块 图 322 修改代码 图 323 测试结果 该测试过程可分为六步: 第一步,如图 321 所示,从 *.c 文件中取出要测试指令模块。 微电子学专业毕业论文 17 第二步,如图 322 所示,根据指令需求修改 C语言代码,编写测试激励和输出语句。 第三步,用 gcc 编译工具在测试平台上采用相关命令将测试激励编译生成 *.txt 的可执行文件,输入测试激励,再运行此文件。 第四步,如图 323 所示,赋值分别为 212990 和 2109128。 测。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。