解释RLC层分段重组验证的关键点

解读

国内SoC项目里,RLC(Radio Link Control)层通常由自研或外购的RTL模块实现,挂在协议子系统(如5G NR基带或Cat-1 LTE)的AXI-Stream总线上。验证团队拿到的是一份AM/UM/TM三模可配的RTL,要求在3~4周内完成feature sign-off。面试官问“分段重组验证的关键点”,并不是想听教科书定义,而是想看你是否能把“协议要求”翻译成“验证场景”,再落地到SystemVerilog/UVM的test plan、coverage model和checker里。因此,回答必须围绕“如何穷尽分段边界、如何证明重组正确、如何量化sign-off质量”三个维度展开,并给出可直接落地的验证方法。

知识点

  1. 3GPP 38.322/36.322分段重组规则:SN长度、SO字段、LI字段、pollByte/pollPDU触发条件、reassembly窗口与t-Reassembly定时器。
  2. 分段粒度:最小1 Byte,最大RLC SDU Size;需考虑字节对齐与AXI-Stream数据位宽(64b/128b)不匹配时的字节掩码。
  3. 边界场景:首段、尾段、中段、空段、跨字节边界的段、SN回绕、SO回绕、LI=0、LI=0x7FF预留值。
  4. 重组完整性:乱序到达、重复段、丢失段、定时器超时、强制poll重传、STATUS报告触发。
  5. 验证方法:
    • 分层sequence:cfg_seq约束SN、SO、LI随机;error_seq注入丢段、错序、CRC错误。
    • 参考模型:Python golden与RTL零延迟lock-step,支持字节级diff。
    • 断言:reassembly_window_error、sn_wrap_assert、so_overflow_assert。
    • 功能覆盖率:covergroup li_dist、so_align、sn_wrap、reassembly_timer_expire。
    • 性能覆盖率:单SDU最大分段数、最大并行SDU数、带宽利用率。
  6. 国内流片checklist:必须提供“分段-重组-一致性”100%覆盖报告,以及“丢段-重传-性能”回归0缺陷记录,否则后端不放行。

答案

RLC层分段重组验证的核心是“在字节级、定时器级、窗口级三个维度穷尽边界,并用量化coverage证明重组结果与协议一致”。具体分五步:

  1. 场景拆解
    把3GPP规则拆成可随机约束的feature:SN(01023)、SO(065535)、LI(0~2047)、段类型(首/中/尾/单)。在UVM sequence里用rand bit[15:0] so, rand bit[11:0] li, rand segment_type_e seg_type覆盖所有合法组合,并用constraint legal_li { li <= payload_size; }屏蔽非法值。

  2. 边界用例
    单列一个boundary_test目录,跑以下7类用例:

    • 单字节段:SDU长度=1,LI=1,SO=0;
    • 最大段:SDU=9000 Byte,单段LI=9000;
    • SN回绕:SN=1023→0;
    • SO回绕:SO=65535→0;
    • 跨时钟域:AXI-Stream 64b,段长度=3 Byte,验证字节掩码;
    • 零长度段:LI=0,验证RTL丢弃;
    • 定时器超时:t-Reassembly=35 ms,在35 ms±1 tick处丢段,检查是否触发STATUS。
      每类用例跑1000次,要求RTL与golden byte-diff 0错误。
  3. 参考模型与checker
    用SystemVerilog DPI-C调Python golden,golden内部维护一个reassembly_buffer[sn][so]二维关联数组,收到段即填充,遇到尾段立即返回完整SDU。UVM scoreboard把RTL输出的SDU与golden做md5比对,不一致立即停仿并dump波形。同时用SVA检查reassembly_window不超过2048 Byte,断言失败即触发uvm_error

  4. 覆盖率收敛
    定义三类covergroup:

    • cg_segment:li(64仓)、so_align(2仓对齐/非对齐)、seg_type(4仓);
    • cg_sn_wrap:cross sn, sn_wrap;
    • cg_timer:cross t_reassembly, discard_event。
      使用UCIS合并 nightly regression,目标≥99.5% coverage,剩余hole需写directed test填补,并在验证报告里用中文注释原因。
  5. sign-off标准
    按国内主流后端要求,必须提交:

    • 分段-重组一致性仿真0 fail,24 h回归无新错误;
    • 代码覆盖率line≥95%、fsm≥98%、toggle≥90%;
    • 功能覆盖率hole≤5个,且每个hole都附“风险等级+不触发原因”;
    • 断言覆盖率100%,无空断言;
    • 性能指标:在200 MHz时钟、64b总线条件下,满载9000 Byte SDU分段重组延时<2 µs,带宽利用率>92%。
      满足以上五点,验证经理签字,RLC模块方可进入后端。

拓展思考

如果面试继续追问“如何验证低功耗场景下的分段重组”,可以补充:

  1. 电源域切换:RLC所在子系统分PD_AON与PD_MAIN,用UPF 3.0定义power state,在分段过程中发pwr_switch_seq,检查reassembly_buffer retention无corruption。
  2. 时钟门控:在segment间隔插入clk_gating,用SVA检查reassembly_timer计数暂停,唤醒后正确恢复。
  3. 动态电压:配合EMIR分析,在0.72 V低电压跑分段-重组,用timing derate +10%跑仿真,确保无setup违例导致数据错误。
    把低功耗、跨电压、 retention三件事也放进验证plan,就能让面试官确信你不仅懂协议,还懂国内流片“低功耗sign-off”的硬性门槛。