Skip to content

Latest commit

 

History

History
151 lines (99 loc) · 12.2 KB

join_cn.md

File metadata and controls

151 lines (99 loc) · 12.2 KB

如何参与本活动

参与本验证活动,取得名次能够获得丰厚大奖,报名问卷

流程介绍

参与验证的流程如下图所示:

(0)在线报名

参加本活动的队伍队员数没有限制,可以是一个也可以是多个。最终奖金按队伍积分发放给队长,且在活动开放期间,队名和队长的名称会被群内公开。

(1)资格认证

为了对参赛队伍进行能力评估,本活动提供了数个具有已知bug的DUT让参加队伍进行验证测试,能发现其中的80%以上的bug并能进行原因分析的队伍才能获得获得参加资格。其中发现的bug数,也会变成对应的队伍积分。

(2)Fork仓库

Fork本仓库,然后在本地进行环境搭建,参与测试任务。

(3)领取任务

任务在本仓库Issue中进行描述,队长以Issue的方式在Issue下方进行报名。管理员会进行统计,然后群内发布公告。

(4)分解测试点与编写验证方案

测试点分解和验证方案是芯片验证过程中的重要步骤,直接影响验证结果。在本阶段,需要通过PR提交对应报告,组织方会对报告进行评审和打分。

(5)编写测试用例

测试用例编写,具体格式可以参考tests目录中的模板。测试用例需要覆盖到对应的测试点。

(6)编写测试代码&测试发现bug

测试过程中,发现bug后,需要对bug进行分析。

(7)通过Issue和PR汇报bug获得积分

可以通过PR随时进行bug提交,但是一天组织方只对一个队伍进行一次bug审查。组织方根据bug类型,等级发放对应积分。

(8)编写测试报告

参考模板 NutShell Cache 进行编写。

(9)PPT在线答辩

编写PPT在线进行对整个验证任务的答辩。答辩根据给队伍的完成情况集中组织。

基础任务

任务1. uFTB & TFB

源代码地址: FauFTB.sv 功能描述文档:uFTB分支预测器 参考功能点文档:uFTB功能列表

源代码地址: FTB.sv 功能描述文档:FTB 分支预测器 参考功能点文档:FTB 功能列表

  1. 完成对 uFTB 子预测器的代码及文档阅读,了解 uFTB 的工作原理及模块功能。明确 uFTB 使用的 FTB 项缓存的结构。
  2. 根据给出的参考功能点,完善 uFTB 需要验证的功能点,并针对这些功能点分解出具体的测试点。同时解释每个测试点对验证功能点的意义。
  3. 依据分解出的测试点,完成对 uFTB 的测试用例编写。测试用例需要覆盖到所有的测试点。同时,需要对测试用例进行详细的说明,包括测试用例的目的、输入、输出、预期结果及原理等。
  4. 完成对 uFTB 的测试用例的代码编写,建议完成参考模型的编写。确保测试用例能够通过验证环境的运行。在编码的过程中,需要保证代码的质量,包括代码的可读性、可维护性、可扩展性等。
  5. 完成对 uFTB 的测试用例的运行,生成测试报告。测试报告需要包括测试用例的运行结果、代码行覆盖率、功能覆盖率等信息。测试报告需要保存在 tests/report 目录中,可通过浏览器打开 tests/report/uFTB-yourId.html 查看本次测试报告内容。
  6. 最终提交前,需要对测试报告进行检查,确保测试报告符合提交PR的基本要求。

任务2. TageSC

源代码地址: TageSC.sv 功能描述文档:TAGE-SC 分支预测器 参考功能点文档:TAGE-SC 功能列表

  1. 完成对 TageSC 子预测器的代码及文档阅读,了解 Tage 及 SC 单个模块的工作原理及功能,再了解 TageSC 整体模块的功能。明确使用的 Tage 表项及 SC 表项的结构,以及分支折叠历史的工作原理。
  2. 根据给出的参考功能点,完善 Tage、SC、TageSC 需要验证的功能点,并针对这些功能点分解出具体的测试点。同时解释每个测试点对验证功能点的意义。
  3. 依据分解出的测试点,完成对 TageSC 的测试用例编写。测试用例需要覆盖到所有的测试点。同时,需要对测试用例进行详细的说明,包括测试用例的目的、输入、输出、预期结果及原理等。
  4. 完成对 TageSC 的测试用例的代码编写,要求完成参考模型的编写。确保测试用例能够通过验证环境的运行。在编码的过程中,需要保证代码的质量,包括代码的可读性、可维护性、可扩展性等。
  5. 完成对 TageSC 的测试用例的运行,生成测试报告。测试报告需要包括测试用例的运行结果、代码行覆盖率、功能覆盖率等信息。测试报告需要保存在 tests/report 目录中,可通过浏览器打开 tests/report/TageSC-yourId.html 查看本次测试报告内容。
  6. 最终提交前,需要对测试报告进行检查,确保测试报告符合提交PR的基本要求。

任务3. ITTAGE

源代码地址: ITTAGE.sv 功能描述文档:ITTAGE 分支预测器 参考功能点文档:ITTAGE 功能列表

  1. 完成对 ITTAGE 子预测器的代码及文档阅读,了解 ITTAGE 的工作原理及模块功能。明确 ITTAGE 使用的 Tage 表项的结构,了解 ITTAGE 的预测器结构。同时了解分支折叠历史的工作原理。
  2. 根据给出的参考功能点,完善 ITTAGE 需要验证的功能点,并针对这些功能点分解出具体的测试点。同时解释每个测试点对验证功能点的意义。
  3. 依据分解出的测试点,完成对 ITTAGE 的测试用例编写。测试用例需要覆盖到所有的测试点。同时,需要对测试用例进行详细的说明,包括测试用例的目的、输入、输出、预期结果及原理等。
  4. 完成对 ITTAGE 的测试用例的代码编写,要求完成参考模型的编写。确保测试用例能够通过验证环境的运行。在编码的过程中,需要保证代码的质量,包括代码的可读性、可维护性、可扩展性等。
  5. 完成对 ITTAGE 的测试用例的运行,生成测试报告。测试报告需要包括测试用例的运行结果、代码行覆盖率、功能覆盖率等信息。测试报告需要保存在 tests/report 目录中,可通过浏览器打开 tests/report/ITTAGE-yourId.html 查看本次测试报告内容。
  6. 最终提交前,需要对测试报告进行检查,确保测试报告符合提交PR的基本要求。

任务4. RAS

源代码地址: RAS.sv 功能描述文档:RAS 分支预测器 参考功能点文档:RAS 功能列表

  1. 完成对 RAS 子预测器的代码及文档阅读,了解 RAS 的工作原理及模块功能。了解程序运行时栈帧的工作原理,再明确 RAS 的 RAS 栈的工作原理。最明确 RAS 的预测器如何为 call 和 ret 指令提供预测。
  2. 根据给出的参考功能点,完善 RAS 需要验证的功能点,并针对这些功能点分解出具体的测试点。同时解释每个测试点对验证功能点的意义。
  3. 依据分解出的测试点,完成对 RAS 的测试用例编写。测试用例需要覆盖到所有的测试点。同时,需要对测试用例进行详细的说明,包括测试用例的目的、输入、输出、预期结果及原理等。
  4. 完成对 RAS 的测试用例的代码编写,要求完成参考模型的编写。确保测试用例能够通过验证环境的运行。在编码的过程中,需要保证代码的质量,包括代码的可读性、可维护性、可扩展性等。
  5. 完成对 RAS 的测试用例的运行,生成测试报告。测试报告需要包括测试用例的运行结果、代码行覆盖率、功能覆盖率等信息。测试报告需要保存在 tests/report 目录中,可通过浏览器打开 tests/report/RAS-yourId.html 查看本次测试报告内容。
  6. 最终提交前,需要对测试报告进行检查,确保测试报告符合提交PR的基本要求。

任务5. BPU Top

源代码地址: Predictor.sv & Composer.sv 功能描述文档:BPU 顶层模块 参考功能点文档:BPU Top 功能列表

  1. 完成对 BPU Top 子预测器的代码及文档阅读,了解 BPU Top 的工作原理及模块功能。了解 BPU Top 的预测器结构,明确 BPU Top 的预测器如何为不同类型的分支提供预测。同时了解 BPU Top 如何与外界的 FTQ 模块进行交互。
  2. 根据给出的参考功能点,完善 BPU Top 需要验证的功能点,并针对这些功能点分解出具体的测试点。同时解释每个测试点对验证功能点的意义。
  3. 依据分解出的测试点,完成对 BPU Top 的测试用例编写。测试用例需要覆盖到所有的测试点。同时,需要对测试用例进行详细的说明,包括测试用例的目的、输入、输出、预期结果及原理等。
  4. 完成对 BPU Top 的测试用例的代码编写,要求完成参考模型,以及FTQ模拟验证环境的编写。确保测试用例能够通过验证环境的运行。在编码的过程中,需要保证代码的质量,包括代码的可读性、可维护性、可扩展性等。
  5. 完成对 BPU Top 的测试用例的运行,生成测试报告。测试报告需要包括测试用例的运行结果、代码行覆盖率、功能覆盖率等信息。测试报告需要保存在 tests/report 目录中,可通过浏览器打开 tests/report/BPU-Top-yourId.html 查看本次测试报告内容。
  6. 最终提交前,需要对测试报告进行检查,确保测试报告符合提交PR的基本要求。

里程碑

  1. 完成功能点及测试点分解:经过1.的阅读工作完成学习后,进行2.。与我们进行沟通确认完成2.后才可以开始后面的工作。
  2. 完成测试用例沟通:完成3.后,与我们进行沟通确认完成3.的行为符合预期及原理正确后才可以开始后面的工作。
  3. 完成测试报告:经过4.5.的过程,会生成一个测试报告。当经过不断迭代,报告最终满足PR提交基本要求后,同时我们审核通过,即认为验证任务完成。在完成迭代的过程中,如果遇到bug需要和我们进行沟通,我们会给予相应的积分。同时如果有值得提问的问题,可以在讨论群中进行讨论。

PR提交基本要求

覆盖率要求:

  1. 代码行覆盖率需要大于 95% ,并解释未覆盖到的代码原因。
  2. 功能覆盖率必要达到 100%
  3. 覆盖率有验证环境运行得到,不可对报告和生成逻辑进行修改

文档要求:

  1. 对功能点进行合理的测试点分解。功能点可以自行增加,但不能对原始功能点进行删除。
  2. 设计的测试用例必要覆盖所有测试点和功能点
  3. 请按模板进行编写测试文档
  4. 领取多个验证任务后,其验证报告需要分开写

积分获取方式:

  1. 合理的测点分解、合理的验证方案、规范的验证文档
  2. 验出bug并分析出bug原因,按bug确认等级获取积分
  3. 修复本项目中文档,代码中出现的错误,按错误等级获取积分
  4. 提交最终验证报告,按报告质量,覆盖率获得积分
  5. 最终汇报得分