基于UVM 的MIPI DSI 系统级可重用验证平台

2022-08-31 07:57周文强
电子与封装 2022年8期
关键词:参考模型数据包像素

周文强

(中科芯集成电路有限公司,江苏无锡 214072)

1 引言

移动产业处理器高速显示串行接口(MIPI DSI)是移动产业处理器接口联盟提出的一种应用于显示技术的高速串行接口[1-3],支持显示像素接口(DPI)、显示总线接口(DBI)标准以及显示指令集(DCS)标准等[4-5],具有高速和低功耗2 种工作模式。相对于传统的红绿蓝(RGB)接口,其具有高速、低功耗、抗干扰性强等特点。MIPI DSI 具有1 条时钟通道和最多4 条数据通道,每条数据通道的最高传输速率可达2.5 Gbit/s,4 条数据通道理论上最高可达10 Gbit/s。MIPI DSI 被广泛应用于汽车、手机、多媒体以及各类可穿戴设备。为了保证产品的正确性和可靠性,芯片设计的验证工作必须充分,目前在系统级芯片(SoC)的研发阶段,验证占据的时间已达到70%左右[6],严重影响了芯片的研发进程,因此采用快速并有效的系统级验证方法显得至关重要。通用验证方法学(UVM)因其有效结合了可重复利用、随机化约束、测试激励随机生成、覆盖率驱动验证等特点[7-9],能够大大缩短验证时间,近年来被广泛使用。然而,业界在使用UVM 时,大部分只针对模块级,不能很好地模拟整体芯片的实际工作状态,从而遗漏设计上的错误。因此,本文针对MIPI DSI 提出了一种基于UVM 可重用的MIPI DSI 系统级验证方法,并设计了基于UVM 可重用的系统级验证平台。

2 基于UVM 的MIPI DSI 系统级可重用验证平台

本文提出的基于UVM 的MIPI DSI 系统级可重用验证平台的总体结构如图1 所示。在该平台中,本文设计了符合MIPI DSI 1.2 版本标准[4]的可重复利用的参考模型、符合适配MIPI DSI 物理层接口(D-PHY)1.2 版本标准[10]的从物理接口,用于连接电路上的主物理接口;并设计了接收模型(RX model),用于将传输的数据接收后存储下来,以便通过记分板与参考模型的输出数据进行实时在线比较。开发的测试激励通过测试序列传递给各个序列器,然后通过各个驱动器发送到SoC,随后经过总线配置给各个模块的寄存器,使系统中的各个模块一起工作。例如将测试激励配置给DDR4 存储器、显示处理器(DPU)、MIPI DSI 控制器、主物理接口等模块,随后DPU 从DDR4 存储器中读取像素数据,并依次发送给MIPI DSI 控制器、主物理接口和验证平台中的从物理接口、接收模型,同时DPU 将数据和控制信号发送给参考模型,最终记分板对期望值和实际值进行实时在线比较,一旦数据包不匹配,仿真立即停止,并报告详细的错误信息。

图1 MIPI DSI 系统级可重用UVM 验证平台

3 MIPI DSI 参考模型的设计

因为MIPI DSI 控制器支持MIPI DSI 1.2 版本标准,所以本设计的参考模型也以MIPI DSI 1.2 版本为准,并采用SystemVerilog 硬件描述语言设计该参考模型,模拟DSI 支持的所有功能。

3.1 状态机运转过程

3.1.1 第1 步

复位后参考模型处于空闲状态,复位消除后等待垂直同步信号(表示一帧数据的开始)的到来,之后模型处于垂直同步有效(VSA)状态,一幅图像的垂直同步区域如图2 所示。

图2 一幅图像的垂直同步区域

为了遵循重复利用的原则,在设计代码时把“插入垂直同步时的行数”的功能封装为一个任务,以便重复利用,其部分代码如下:

task inset_vsync_line;

begin

……

command_head = `VSYNC_START;//

VSYNC_START =‘h01,根据MIPI DSI 1.2

版本标准,该值必须为1,代表垂直同步开始

数据包

data_ID= {virtual_channel_ID_sample,

command_head};//根据MIPI DSI 1.2 版本标

准,data_ID 的bit[7:6]为虚通道ID,bit[5:0]为

数据类型

insert_vsa_line();//增加一行vsa line

end

endtask

其中command_head 表示数据包的类型,根据MIPI DSI 1.2 版本标准,该值为2’b01,代表垂直同步开始数据包。data_ID 为8 bit 数据包包头,表示数据包的类型,数据包包头格式如图3 所示。

图3 数据包包头格式

3.1.2 第2~4 步

后面的步骤是VSA、VBP、VACTIVE、VFP 区域分别一行一行增加数据,因代码较长,不再分别详细描述,参考模型的主体状态机如图4 所示。

图4 参考模型的主体状态机

3.2 数据包建模

MIPI DSI 1.2 版本标准规定的数据短包和长包格式见图3,根据该格式对其进行建模:

expect_data[expect_pointer]=data_ID;

expect_pointer=expect_pointer+1;

expect_data[expect_pointer]=data[7:0];

expect_pointer=expect_pointer+1;

expect_data[expect_pointer]=data[15:8];

expect_pointer=expect_pointer+1;

expect_data[expect_pointer]=

ecc_cal ({word_cont [15:8], word_cont [7:0],data_ID});

expect_pointer=expect_pointer+1;

代码中ecc_cal 函数的功能是根据输入的数据来计算出相应的ECC,上述为短包建模的代码。长包建模类似,但还需要增加各个数据字节和校验(通过一个循环冗余码校验算法计算得到)。

4 从物理接口模型的设计

从物理接口连接电路上的主物理接口,因为MIPI DSI 控制器和主物理接口支持1 条时钟通道和最多4条数据通道(数据通道数目可通过寄存器配置调节),所以本设计的UVM 系统级可重用验证平台中的从物理接口模型在设计时也支持1 条时钟通道和最多4 条数据通道。

因为MIPI DSI 控制器和主物理接口只有“数据通道0”在低功耗模式下支持双向通信,其余数据通道在高速或低功耗模式下都只能单向通信,所以设计的从物理接口中的各条数据通道支持高速模式下的数据接收(HS-RX)、低功耗模式下的数据接收(LP-RX)和数据的发送(LP-TX),从物理接口数据通道结构如图5 所示。从物理接口中设计的时钟通道由一个状态机控制,其各个状态跳转关系如图6 所示。

图5 从物理接口数据通道结构

图6 时钟通道的状态机跳转关系

5 接收模型和记分板的设计

接收模型连接从物理接口,主要用于接收译码主机发送的像素数据包和命令包,并将数据存储在自身的数据存储器中。设计的UVM 系统级可重用验证平台中的接收模型支持最多4 条数据通道相关信号的处理,同时实现了HS-RX、LP-RX 和LP-TX,其结构如图7 所示。数据的接收、译码、校验过程通过图8 所示的状态机控制。

图7 接收模型结构

图8 接收模型中数据接收、译码、校验状态机

最终记分板会将接收模型中存储的数据和参考模型输出的数据进行实时在线比较,一旦数据与理论值不一致,仿真立即停止,并报告详细的错误信息,记分板结构如图9 所示。

图9 记分板结构

6 测试用例的构建

为了能重复利用测试代码,测试用例构建时采用层次化的方式,并在UVM 类的层次中将共用的代码封装成各个任务,以便重复利用,测试用例中类的继承关系如图10 所示。

图10 测试用例中类的继承关系

最终,测试序列发送给虚拟序列器中相应的序列器,然后通过对应的驱动器发送给SoC,对DDR4 存储器、DPU、MIPI DSI 控制器、D-PHY 等模块进行配置,随后DPU 从DDR4 中读取像素数据,并将数据依次传递给MIPI DSI 控制器、主物理接口、从物理接口和接收模型等验证组件。同时DPU 输出的控制信号和数据会传递给参考模型,最后记分板将实时在线比较实际值和期望值,一旦有任何错误,立即停止仿真。设计的UVM 系统级可重用验证平台总体UVM 类的层次结构如图11 所示。

图11 MIPI DSI 系统级可重用验证平台类层次结构

7 仿真验证

7.1 测试激励

在MIPI DSI 系统级可重用UVM 验证平台中编写各个功能的测试用例,以分辨率640×480,像素格式RGB30 (即RGB10-10-10,其他格式如RGB888、RGB565、RGB666 等也支持)为例,配置分辨率相关参数:VSA 为2 行;VBP 为25 行;VACTIVE 为480 行;VFP 为2 行;HSA 为96 行;HBP 为40 行;水平有效(HACTIVE)为640 行;HFP 为8 行;刷新频率为60 Hz;像素时钟频率为25.2 MHz。同时MIPI DSI 主、从物理接口均采用4 条数据通道和1 条时钟通道的工作模式,工作速率为2.5 Gbit/s。该测试用例首先对整个系统进行复位、配置时钟等初始化操作,然后对DDR4存储器系统进行初始化,通过后门方式将像素数据导入DDR4 存储器,接着依次配置MIPI DSI 控制器、MIPI DSI 主物理接口以及DPU,随后DPU 从DDR4存储器中读取数据并发送给MIPI DSI 子系统、从物理接口模型、接收模型以及参考模型,最终记分板对实际值和期望值进行实时在线比较,一旦数据不同,仿真立即停止,并报告详细的错误信息。

由于设计的MIPI DSI 系统级可重用UVM 验证平台是基于UVM 的,因此可重复利用性强,平台中在设计各个任务、函数以及组件时(如参考模型、记分板、接收模型等)就充分考虑了可重复利用性和便于移植的因素,因此在其他类似的项目中,可完全重复利用该平台中的所有代码,大大缩短了开发测试激励以及验证的时间。同时,该平台是系统级的,能让电路上的大部分模块共同工作起来,而不是单一地让一个模块工作,更加接近实际芯片的工作状态,能及时发现电路上的错误。例如,之前在项目中发现DPU 输出的vsync 信号宽度在时序上并不是严格的行数宽度,而是略微短小,这就需要对MIPI DSI 控制器进行设计调整,这在单独的模块级验证中是很难发现的;另外,还发现过MIPI DSI 控制器外接的SRAM 的使能信号在代码集成时没有取反就连接的错误,这都需要在系统级验证时才能发现。

7.2 仿真波形与实时比较

采用Synopsys VCS 仿真工具对平台进行仿真,DPU 输出信号和MIPI DSI 控制器输入信号如图12所示。DP550*是DPU 的输出信号,dpi*为MIPI DSI控制器的输入信号。

图12 DPU 输出信号和MIPI DSI 控制器输入信号

从图 12 可以看出, 垂直同步信号DP550_0_VSYNC1 的有效宽度期间(高电平有效)占据2 行,即2 个水平同步信号DP550_0_HSYNC1 所在的宽度(高电平有效),这与上述测试用例中设置的VSA 参数一致。另外,在DP550_0_VSYNC1 下降沿和DP550_0_DATAEN1 第一个上升沿之间有25 个DP550_0_HSYNC1 有效宽度,这也与测试用例设置的VBP 参数一致。随后就是RGB 像素数据的传递。

注意在RGB30 格式下,MIPI DSI 控制器接口数据信号 dpipixdata 与 DPU 的接口数据信号DP550_0_PXLDATAR1、DP550_0_PXLDATAG1、DP550_0_PXLDATAB1 之间的译码关系如下(即DPU的上述各R、G、B 分量均取高10 位,然后组合后赋值给dpipixdata):

dpipixdata[29:0]=

{DP550_0_PXLDATAR1[11:2],DP550_0_

PXLDATAG1[11:2],DP550_0_PXLDATAB1[11:2]};其他RGB 格式的情况(如RGB888、RGB565、RGB666)译码关系会有相应的变化,这里不再赘述,像素时钟和像素数据传递的波形如图13 所示。从图中Verdi 工具右上角可知,像素时钟频率为25.170MHz,与上述测试用例设置的25.2 MHz 基本一致。dpipixdata 的数据值和DPU 输出的R、G、B 分量截取后的组合值一致。 DP550_0_PXLDATAR1、DP550_0_PXLDATAG1、DP550_0_PXLDATAB1 分别为0x70、0xc0、0x121,dpipixdata 的结果为0x1c0c048,这与波形上dpipixdata 的数值一致。

图13 像素时钟和数据

MIPI DSI 主物理接口接收的输入数据(pin*)和接收模型接收的输入数据(rx*)如图14 所示,从图中可知两者传递的数据前后保持一致。

图14 MIPI DSI 主物理接口输入数据、接收模型输入数据

上述实验结果表明,测试用例通过本文设计的系统级验证平台已经配置了DPU、MIPI DSI 控制器、MIPI DSI 主物理接口、DDR4 存储器等模块,并使得系统工作起来,其正确性可以通过参考模型和记分板实时在线比较进行验证。

垂直同步开始包、水平同步开始包以及像素数据包的仿真实时比较如图15 所示。从图中可知,实时输出打印的实际值与期望值保持一致。按照MIPI DSI 1.2 版本标准,垂直同步开始包的包头为0x01,对应的ECC 值为0x7;水平同步开始包的包头为0x21,对应的ECC 值为0x12,仿真结果符合标准协议。

从图15 可知参考模型实时输出每一笔事务的期望值,而MIPI DSI 电路则实时输出实际数据到接收模型,然后记分板实时比较期望值和实际值,能够实时验证其正确性。按照MIPI DSI 1.2 版本标准,像素数据的包头为0x0d,从图15 中的像素数据包打印信息可知,仿真结果符合标准协议。

图15 垂直同步包、水平同步包及像素数据包实时比较

7.3 验证覆盖率

在设计的系统级可重用UVM 验证平台中,开发测试MIPI DSI 所有功能的测试激励,然后进行仿真并收集覆盖率。除项目中冗余的信号和代码外,覆盖率达到100%。因此,该系统级可重用UVM 验证平台能够从系统级上对DSI 进行有效的验证,而其他验证平台与之相比存在以下问题:在单模块验证平台中不能多模块共同运行,无法仿真整体芯片的工作状态;而其他不是基于UVM 的系统级验证平台则有可重复利用性低、可扩展性差、更换项目需要重新搭建平台的缺点,同时在调试时不能做到实时在线比较每一笔传输,可能需要等仿真全部完成后只比较最终数据正确与否,中间步骤没法检验,甚至还需要借助查看波形进行调试,比较繁琐。本研究设计的UVM 系统级可重用验证平台能够弥补上述各种缺陷。

8 结论

为了缩短芯片研发中验证环节的时间,解决模块级UVM 验证不能真实模拟SoC 整体工作状态的问题,提高验证平台的随机性、可重复利用性,本文针对MIPI DSI 提出了一种基于UVM 的系统级可重用的验证方法,并设计了相应的验证平台,在该平台中设计了可重复利用的各个验证组件和测试激励,从系统级上利用UVM 验证方法学对其仿真验证,多模块共同运行,更加接近真实的SoC 工作状态。同时,平台中的组件、任务、函数等遵循可重复利用的原则进行设计,在今后的项目中只需稍加修改或无需修改即可重复利用,开发的测试激励只需调用不同的任务和函数即可完成功能测试,大大缩短了开发验证代码所需的时间。另外,该平台具有实时在线比较的特点,在数据不匹配时能及时停止仿真并打印详细的错误信息,便于快速定位错误,减少调试时间。实验结果表明,设计的UVM 系统级可重用验证平台能够有效验证MIPI DSI,除一些冗余的信号和代码外,验证覆盖率达到100%。

猜你喜欢
参考模型数据包像素
像素前线之“幻影”2000
二维隐蔽时间信道构建的研究*
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
“像素”仙人掌
C#串口高效可靠的接收方案设计
适应性学习支持系统参考模型研究现状及发展趋势
基于环境的军事信息系统需求参考模型
适应性学习系统的参考模型对比研究
语义网络P2P参考模型的查询过程构建
高像素不是全部