使用DPI-C与固件协同仿真的LPDDR5内存子系统驱动验证方法与流程

摘要: 本发明涉及计算机,具体而言,涉及一种使用dpi-c与固件协同仿真的lpddr5内存子系统驱动验证方法。背景技术:1、lpddr5(lowpowerdoubled...
使用DPI-C与固件协同仿真的LPDDR5内存子系统驱动验证方法与流程

本发明涉及计算机,具体而言,涉及一种使用 dpi-c 与固件协同仿真的lpddr5 内存子系统驱动验证方法。

背景技术:

1、lpddr5(low power double data rate 5)是目前主流的移动端及嵌入式低功耗dram标准,其内存子系统由memory controller(mc)、ddr phy(如synopsys dwc lpddr5phy)及dram颗粒三部分构成。lpddr5支持 800mbps~6400mbps多种数据速率,支持单/双rank、是否开启inline/link ecc等配置。

2、lpddr5内存子系统的初始化流程极为复杂,主要包含以下关键环节:

3、1.mc寄存器配置:需配置主控配置、功耗控制、dram时序集、dfi时序、地址映射、ecc配置等多个mc寄存器,寄存器值需与ddr实际工作速率、ecc模式、rank数量等配置精确匹配;

4、2.phy csr编程:需通过apb接口向phy内部csr(control and status register)写入数百个配置值,包括zq校准参数、ac时钟门控、dbyte pptctlstatic、dfifreqxlat频率映射表等。synopsys提供phyinit 固件(firmware)用于自动计算这些csr值;

5、3.pmu训练固件加载与执行:lpddr5 phy内部包含pmu微控制器,需将训练固件(imem 指令内存和dmem数据内存)加载至phy内部sram,然后释放pmu使固件执行训练算法,包括ca training、write leveling等;

6、与本发明相关的现有技术一:

7、现有技术一的技术方案:

8、现有技术一为 “sv task独立配置”方案,这是目前lpddr5子系统rtl仿真中最常用的验证方法。

9、在该方案中,systemverilog testbench中编写独立的apb task完成mc和phy的寄存器配置。这些sv task直接在initial块中顺序调用,完成mc寄存器写入、phy csr编程、dfi握手等初始化流程。对lpddr5的读写验证激励在初始化完成后开始执行。

10、现有技术一的缺点:

11、1.驱动验证与硅片bring up割裂:sv task编写的初始化序列仅用于仿真验证,芯片bring up需另行编写c驱动代码,两套代码独立维护,bring up阶段c驱动首次运行时可能暴露大量与rtl的交互问题,延长芯片上市周期;

12、2.两套初始化代码一致性难以保证:sv task和c驱动是两份独立代码,极易出现配置偏差(如某个mc寄存器在sv侧写了但c侧漏写,或写入值不同)。当rtl仿真通过但c驱动在真实芯片上工作失败时,无法快速确定是驱动bug还是rtl问题;

13、3.提取sv task过程繁琐:没有phyinit firmware集成时, 默认仿真行为是先将phy csr等配置值打印到文本文件中,需人工将该文本文件内容转换为sv task,然后tb去调用task,此过程耗时且易出错,出错时debug也比较繁琐。

技术实现思路

1、本发明提供一种使用 dpi-c 与固件协同仿真的 lpddr5 内存子系统驱动验证方法,用以解决上述现有技术存在的技术问题。

2、为达到上述目的,本发明提供了一种使用 dpi-c 与固件协同仿真的 lpddr5 内存子系统驱动验证方法,其包括以下步骤:

3、s1:搭建带 dpi-c 双向桥接的 lpddr5 仿真验证环境,所述仿真验证环境包含dut、lpddr5 vip model、scoreboard、sv 测试平台;在 sv 测试平台内通过 dpi-c export机制声明三组 apb 读写任务,分别对应 mc、phy、top 三域寄存器访问;c 驱动侧对不同地址域配置不同地址偏移量,通过 dpi-c 接口与 sv 侧 apb 任务完成地址解析,构建 mc-phy-top 三域统一 apb 配置框架;

4、s2:整理 lpddr5 产品级完整 c 驱动源码至指定文件列表,所述 c 驱动源码包含 mc 配置程序、phyinit 固件、pmu 训练固件;采用 vcs 编译器将全部 c 驱动源码编译为共享库,并与 sv 测试平台链接;改写 phyinit 固件内部 io 读写回调逻辑,将固件计算得到的 phy csr 配置值通过 dpi-c 接口直接下发至 dut,取消配置文本导出、人工转换 sv task 的中间流程;其中,phyinit 固件中 phy 寄存器读写统一封装为__raw_writel_phy、__raw_readl_phy 底层交互函数,所有寄存器读写操作均经由 dpi-c 桥接访问 rtl;

5、s3:调用 c 驱动顶层 ddr_init 函数,按照真实芯片 bring up 标准时序完成全流程初始化仿真控制,执行顺序为 mc 寄存器完整配置→mc 复位释放通知→phy csr 参数自动计算与写入→pmu 训练固件加载至 phy 内部 sram、执行 ca 训练与 writeleveling→dfi 频率切换握手→退出自刷新模式,进入 lpddr5 正常读写工作状态;

6、s4:在初始化完成后,基于 lpddr5 vip model 生成读写激励,scoreboard 自动完成 axi 接口读写数据比对,完成 lpddr5 内存子系统驱动全流程仿真验证;仿真验证无异常的 c 驱动代码无需修改,直接移植用于硅片 bring up 阶段。

7、在本发明的一实施例中,可选地,所述三组 apb 读写任务分别适配 mc 主控寄存器域、phy 寄存器域、top自定义寄存器域,其中,phy 寄存器域包括 csr 寄存器域、pmu 微控制器指令/数据 sram 寄存器域,不同地址域通过 c 侧预设偏移量区分,sv 侧 apb 任务统一完成物理地址译码与总线读写操作。

8、在本发明的一实施例中,可选地,所述 phyinit 固件用于自动计算 zq 校准、ac时钟门控、dbyte pptctlstatic、dfifreqxlat 频率映射表全部 phy csr 配置参数,计算结果经 dpi-c 直接写入 dut phy,省去文本导出、人工转换 sv 激励脚本步骤。

9、在本发明的一实施例中,可选地,所述 pmu 训练固件包含 ca 训练算法、writeleveling 时序校准算法,在 ddr_init 函数执行流程中自动加载至 phy 内部 imem 指令内存、dmem 数据内存后释放 pmu 使能,自动完成 phy 时序训练仿真。

10、在本发明的一实施例中,可选地,所述 scoreboard 实时抓取 axi 总线下发写入数据与内存读出数据,自动完成数据一致性比对,输出驱动初始化、数据读写过程中的寄存器配置错误、时序交互异常日志。

11、在本发明的一实施例中,可选地,所述 c 驱动代码与硅片 bring up 阶段采用完全同一套初始化逻辑、同一组寄存器配置参数,仿真验证通过后零修改直接移植至真实芯片调试,消除 sv 仿真激励与量产驱动两套代码配置不一致缺陷。

12、在本发明的一实施例中,可选地,步骤 s1 中 dpi-c 双向桥接支持 c 驱动主动发起寄存器读写、sv 测试平台向 c 驱动反馈 rtl 状态信号双向数据交互。

13、在本发明的一实施例中,可选地,替代实现方式为采用 uvm dpi-c 代理类封装 c驱动调用接口,依托 uvm config 机制传递寄存器配置参数,底层仍复用 dpi-c 双向桥接完成 sv 与 c 固件协同交互。

14、本发明具有以下有益技术效果:

15、1.驱动验证效率大幅提升:产品级c驱动在rtl仿真中即可完成首次验证,提前发现驱动bug和mc/phy交互问题,无需等待芯片回片。传统流程中bring up阶段才发现的驱动问题(如mc寄存器配置遗漏、mr寄存器配置错误等),现在可在仿真阶段提前定位和修复;

16、2.加速芯片bring up进程:仿真验证通过的c驱动代码可直接用于芯片bring up,零修改移植。消除了传统流程中“sv task验证→c driver重新编写→芯片上调试验证”的重复工作,显著缩短bring up周期;

17、3. 消除仿真与硅片验证偏差:仿真环境和真实芯片使用同一份c驱动代码和phy初始化序列,从根本上消除两套代码不一致导致的"仿真通过但芯片失败"问题。phyinitfirmware中的读写回调函数改写为dpi-c桥接后,firmware计算的csr值直接写入rtl phy而非输出到文本文件,消除了文本转为sv task的人工转换误差。