描述任务调度验证的策略

解读

国内SoC规模动辄上百个时钟域、千级中断源,任务调度子系统(RTOS调度器、DSP任务队列、AI加速器命令分发等)一旦出错,整机死锁或性能雪崩,流片后无法ECO。面试官问“策略”,不是让你罗列UVM语法,而是考察三样:

  1. 能否把“调度”拆成可量化、可覆盖的功能点;
  2. 能否在RTL早期就给出低成本的验证闭环;
  3. 是否熟悉国产IP(如平头哥CK、玄铁RISC-V)与国产工艺(SMIC 14/28 nm)的时钟/功耗/温度corner。
    回答必须体现“场景-指标-方法-签核”四段式,并给出可落地的覆盖率目标(国内一线厂商内部entry criteria:代码行覆盖率≥95,FSM状态≥98,断言覆盖率≥90,功能覆盖率必须拆到“调度类”粒度)。

知识点

  1. 调度语义:静态优先级、动态轮转、最早截止期优先(EDF)、信用量(Credit-based)、完全公平(CFS)。
  2. 关键边界:零任务、满任务、优先级翻转、同优先级任务数=2ⁿ-1、时间片=1 cycle、跨时钟域握手机制。
  3. 验证指标:调度延迟(从事件触发到任务第一条指令进入流水线)、抖动(连续1000次调度方差)、抢占延迟、最坏响应时间(WCET)。
  4. 国产签核要求:
    • 形式验证:调度器仲裁算法必须做induction proof,深度≥128;
    • 功耗验证:SMIC 14 nm下,调度器100 MHz空转功耗≤0.8 mW,动态功耗门控切换覆盖率100 %;
    • 温度corner:-40 ℃/0.72 V与125 ℃/0.88 V双极验证,调度延迟变化≤5 %。
  5. 验证复用:用国产“验证云”平台(如摩尔精英MooreVIP)跑回归,每晚千核并发,TTR(turn-around-time)≤2 h。

答案

我采用“分层场景-量化指标-多引擎协同-签核闭环”四步策略,确保调度器在SMIC 14 nm工艺、0.8 V/125 ℃下仍满足WCET≤32 cycle的规格。

  1. 场景分解
    把调度行为抽象为6类原子操作:任务创建、就绪、仲裁、上下文切换、挂起、删除。每类再拆正交维度:任务数(0/1/典型64/满256)、优先级分布(均匀、指数、全同)、时间片(1/4/典型/最大)、中断嵌套深度(0/1/8)。用SV约束随机产生10 k合法场景,再用“错误场景库”注入非法组合(优先级翻转链长度>16、任务句柄重复释放等)。

  2. 量化指标与checker

    • 功能正确性:在每条仲裁决策点,用SVA检查“最高优先级就绪任务ID==仲裁输出ID”,断言覆盖率≥90。
    • 实时性:在RTL内嵌时间戳计数器,调度延迟=(仲裁完成cycle-事件触发cycle),用功能覆盖点covergroup_delay采样,要求bin 0~32 cycle占比≥99 %,bin >32 cycle为非法仓。
    • 公平性:同优先级任务连续获得CPU次数差≤2,用scoreboard统计每任务执行ticks,差值超限即报错。
    • 功耗:借助UPF 3.0,定义调度器电源域,用VCS-NLP在典型场景跑100 ms,提取SAIF回注PTPX,确认动态功耗门控切换覆盖率100 %,空转功耗≤0.8 mW。
  3. 多引擎协同

    • 早期:用Formal(Synopsys VC-Formal)对仲裁算法做induction proof,深度128,证明“无饥饿”“无死锁”,2 h内收敛。
    • 中期:UVM-SV搭建双时钟域VIP,CPU域@800 MHz、外设域@200 MHz,跑10 k随机用例,代码行覆盖率≥95,FSM状态≥98。
    • 后期:FPGA原型(Xilinx VU19P)跑Linux+stress-ng,满载256任务、中断风暴10 kHz,连续72 h无挂死;同时用JTAG+trace32回读调度延迟,与RTL黄金值偏差≤1 cycle,确保模型一致性。
  4. 签核闭环
    把上述指标写进内部“调度器签核检查表”,只有全部达标才允许转后端。最终交付三件套:

    • 验证计划书(含场景、覆盖率、corner定义);
    • nightly regression报告(连续7天零失败);
    • 形式验证+FPGA原型双签字邮件。
      该策略已在公司上一代AI SoC落地,流片一次成功,硅后调度延迟实测29 cycle,与验证预测误差<5 %。

拓展思考

  1. 异构扩展:若调度器需支持RISC-V+DSP+AI-NPU三级异构,验证策略如何复用?提示:把“任务”抽象为统一描述符(task-token),仲裁模型换成加权轮询(WRR),用SystemC-TLM做性能建模,提前3周发现NPU命令队列 starvation。
  2. 安全车规:ISO 26262 ASIL-D要求调度器单点故障度量≥99 %,需在策略里插入故障注入(时钟毛刺、RAM奇偶错),用Safety Mechanism Checker验证双核锁步恢复时间≤10 ms。
  3. Chiplet场景:若调度器跨两个14 nm die,通过国产GLink 25 Gbps接口通信,验证策略必须加入die-to-die latency 8 ns±1 ns的抖动模型,用硬件加速器(HAPS-100)跑全芯片3D NoC流量,确保调度决策不受链路retry影响。