一种基于UVM 架构的1553B 接口仿真验证方法
吴迪飞
中国电子科技集团第38 研究所 安徽合肥 230031
一、引言
上世纪 70 年代初,为适应军用飞机的航空电子系统复杂化的需求,解决由于不同制造商生产的航空电子设备因数据接口和协议不通用造成的系统集成困难、成本高昂和兼容性差等问题,美国国防部制定了 1553B 总线(MIL-STD-1553B)协议,它是一种命令 / 响应式、时分多路串行总线协议。它的出现极大地促进了航空电子系统的集成化、模块化发展,并因其卓越的可靠性成为军用和航空航天领域数十年来的事实标准,应用范围后来还扩展到了航天器、舰船和地面车辆系统。
同时,随着数字 IC 领域的不断扩大, UVM(U V rific on Methodology, 通用验证方法学)为接口验证提供了一个高度结构化、可重用、自动化且 为核心的强大框架。它通过标准化的组件、灵活的激励生成、事务级的监测检查、先进的 了验证效率、完备和可维护性。本文首次将 UVM 架构用于 1553B 的接口仿真验证 解决了传统 证方法存在的因 1553b 数据结构复杂,无法快速生成测试用例和对测试用例进行批量注入的问题 同时实现了验证平台的模块化架构,提升了可重用性,进一步加速了验证过程。
二、模型架构与基本流程
1553B 总线网络由终端或子系统、总线传输介质组成。子系统为从多路数据总线上接收数据传输服务的装置或功能单元。终端是数据总线和子系统的接口电子组件。从功能上说终端可以是总线控制器(Bus Controller,简称 BC)、远程终端(Remote Terminal,简称 RT )或总线监控器(Bus Monitor,简称 BM);从物理结构上说,终端可以是独立组件,也可以包含在子系统中。其中,总线控制器用于向总线发送数据,远程终端用于从总线接收数据,而监视器用于显示整个操作过程。
本文提出了一种基于 UVM 架构的 1553B 接口仿真验证平台和方法。在 UVM 架构下,该测试环境 env 由一个包含了 BC 和 RT 的总线功能模型 BFM(Bus Functioal Model)所对应的代理 agent、一个监视器 Monitor、一个功能覆盖率收集器 function coverage、一个比较器 checker 和测试用例集 tests 组成,如图 1 所示。
图1 1553B 接口仿真验证平台架构图

其中在 BFM 中,BC 由实现总线控制器功能性的自身主体逻辑部分、存储所有 BC 配置信息的 config 模块、暂存所有被送往 BFM 的总线指令的 cmd fifo 模块、在驱动下一条字节格式前暂存当前结果的 exe_fifo、用于实现波特率生成器的 clk_gen_baud 以及用于存储当前所有统计结果的 stats 组成,如图 2 所示。而 RT 则同样由实现远程终端功能性的自身主体逻辑部分、实现波特率生成器的 clk_gen_baud、存储所有 RT 配置信息的 config模块、用于存储当前所有统计结果的stats 以及存储所有接收数据的got_fifo 组成,如图3 所示。
图2 总线控制器架构组成图 图3 监视器架构组成图

BC 的发射总线与 RT 的接收总线相连 收总线与 RT 的发射总线相连接,并作为子线分别与1553B 的数据主线相连,BFM 的测试激励通过 cmd_fifo 将测试激励传输至 BC 并发送至数据 测试结果并存储至 got_fifo 中。比较器 Checker 同时收集存储在 e 比较分析。监视器 Monitor 全部或部分监视总线的通讯过程,对通 行收集。BFM 和 Monitor 的数据流如图4 所示。
图 4 BFM 和 Monitor 的数据流图

利用本验证平台对待测设计进行验证的基本流程包括:
(1)初始化配置验证平台:利用BFM 获取验证平台初始化配置的各项参数;
(2)BFM 根据参数生成测试激励,并将产生的测试激励通过 1553B 数据总线将测试激励传输从 BC 传至RT :BFM 根据参数生成指令集,其中指令集根 (members)、方法(Methods)、字段定义(Fields Defines)和子类(Sub Ty 目的地址的赋值,从测试用例集中选取对应的测试用例并将该用例作为测试激励。使用 BC 的 c d fifo 模块向 RT 的 got fifo 模块发送总线空闲信号;在 RT 的got fifo 模块接收到该信号后,将测试激励的数据包通过1553B 总线传进行接收,并在传输结束时,stats 模块更新所有的统计计数器。
(3)BFM 获取基于当前输入的测试激励产生的测试结果,并根据测试结果进行验证分析:在 BFM 检测到有效的帧同步信号时,通过1553b 数据总线接收基于输入的测试激励的测试结果;在检测到1553B 总线为空闲状态时,BFM 将当前测试结果转发到接收总线的got_fifo 缓冲区中,同时stats 模块更新所有的统计计数器。
(4)监视器 Monitor 对1553B 总线传输和接收的数据进行监测:监视器记录总线上的协议违规和字符消息,在 transaction 事务包结束时,将所有详 器日志文件, 通过 Monitor 发送至覆盖率收集器function coverage 中。Checker 的作用类似于 UVM 中的 s orebo rd,通过 analysis 分别收集 BC 和 RT 的事务包数据进行比对,完成平台自动化校验的最后一步。
三、具体配置方案
下面将具体阐述本 1553B 接口仿真方法的验证流程。首先,需要分别将 BC 和 RT 与 1553B 总线端口进行连接,BFM 与 1553B 连接的信号一般包括数据时钟信号、复位信号、接收数据总线和发送数据总线。复位信号在需要时置高,不需要时置 0。在端口信号连接完成后需要实例化整个验证平台的测试环境 env 并使用如下create 函数创建包括 BC 和 RT 的实例并在 env 中进行实例化:
bc_o = sdvt_m1553_bfm::type_id::create("MIL STD 1553 BC",this);rt0_o = sdvt_m1553_bfm::type_id::create("MIL STD 1553 RT 0",this);rt1_o = sdvt_m1553_bfm::type_id::create(“MIL STD 1553 RT 1”,this);其中,BC 和 RT 的代理 agent 默认为禁用状态,需要通过置位变更为使能状态,包括使能 BC 的发送和 RT
的接收代理,禁用 BC 的接收器和 RT 的发送器代理。在 UVM 流中,为防止从序列库中随机运行序列,需要同时通过置零来禁用BC 和RT 的定序器sequencer 代理。代码如下所示:
uvm_config_db#(int)::set(this, " MIL STD 1553 BC.BC.SEQUENCER.run_phase", "count", 0);
uvm_config_db#(int)::set(this, " MIL STD 1553 RT 0.RT .SEQUENCER.run_phase", "count", 0);
uvm_config_db#(int)::set(this,“ MIL STD 1553 RT 1.RT .SEQUENCER.run_phase”,“count”, 0);
在实例化及代理设置完成后,需要对BFM 进行初始化。以BC 为例,初始化通过构建如下的new 函数进行,当 new 结构体被调用时,需要通过 1553B 接口,同时,为了处理来自 BFM 的消息,用户需要在结构体中传递对象(BFM)的名称。代码中第一个参数是实例字符串,BFM 将在打印消息时使用它。第二个参数是虚拟接口端口,第三个参数表示远程终端模式控制。
sdvt_m1553_bfm bc_o;
initial begin
bc_o = new ("MIL STD 1553 BC ",p_bus_controller_ports,\`SDVT_M1553_BUS_CONTROLLER);
// Do the configuration // fork the BFM
end
在设置完成后需要进行参数传递,使用 set_config 方法配置源地址,配置值通过 get_config 方法获取。UVM的相关配置须在elaboration_phase 阶段结束时和run_phase 阶段之前完成。其中配置方式包括了静态方式和动态方式两种配置方式。静态方式用于在elaboration phase 的结束阶段,对接口和协议的类型进行配置;动态方式用于在run phase 的阶段中对其余变量进行配置,所有的参数和变量都已事先进行定义。
在参数配置中,下列参数需要设定为最小值:1、配置波特率;2 配置消息间间隙、传输间延迟、字间延迟、相应延迟、响应延迟超时、检测位使能、RT 地址、从远程终端到远程终端监视器的使能位 RT_RT_M、exe fifo深度和 got fifo 深度。
在配置完 BFM 后,执行启动内部所有进程的 start_sim 方法,启动 BFM 和内部其他核心逻辑。在串行输入引脚检测到有效的 START 条件后,BFM 开始收集所有位,在有效位置检测到有效停止位时,BFM 将数据推送到got fifo,然后更新所有统计计数器。
为了实现测试激励的自动生成,在本实施例中,利用BFM 根据参数生成测试激励,具体包括:
(1)BFM 根据参数生成指令集;使用指令集传输测试数据,一旦BFM 在exe_fifo 中获得一个有效字符,它就会自动开始发送该字符,在传输结束时,更新所有统计计数器。
(2)BFM 根据指令集完成数据传输源地址和目的地址的赋值,并从测试用例集中选取对应的测试用例并将选取的测试用例作为测试激励。
具体地,在 BFM 的发送操作中,可以在全局函数中使用 run_test添加测试用例进行选取;在批量选取测试用例时,可将写好的测试用例加载在相应的列表中,由于全部测试用例继承自同一个类 base_test,而base_test 继承于 UVM 测试用例库 (uv _test),所以可以根据测试用例名称完成自动查找并加载;在 Makefile 文件中添加通过+UVM_TESTNAME =来选择实际仿真时调用执行的测试用例。
在本实施例中,将产生的测试激励通过BFM 的总线接口模块分别传输至BC 和 RT,具体包括:
(1)利用 BC 的 gen_mil_std_cmd 通过 cmd_fifo 向 BC 发送总线空闲信号;在接收总线空闲信号后,BFM 的BC 将测试激励的数据包通过1553B 总线接口传输至RT ;
(2)在传输结束时,stats 更新所有的统计计数器,以对发射和接收链路的上请求信号、应答信号、发送和接收的数据包帧数以及误码率等关键数据进行统计。
具体地,在测试用例加载完成后,执行 start_sim 方法使 BFM 发送等待标志位信号并发送数据包;当 start_sim 被执行时,传输状态机从 exe_fifo 中传输数据。其中,传输状态机的 is_done 状态被用于确定 BC 是否完成了 cmd_fifo 的处理过程。
需要知道的是,本实施例中的测试激励的数据包含了用于对时钟信号的使能和最小周期参数进行设定的相关用例,需要从仿真器命令行进行时间定义来启用,通过时间刻度的使用能够精确控制序列发生器中各测试用例的执行时间。
在本实施例中,利用BFM 获取基于输入的测试激励进行测试的测试结果,具体包括:
(1)在 BFM 检测到有效帧信号触发时,利用RT 接收基于输入的测试激励进行测试的测试结果
(2)在 BFM 检测到 1553B 总线为空闲状态时,BFM 的 BC 将待测设计基于输入的测试激励进行测试的测试结果转发到 RT 的数据缓冲区 got_fifo 中,同时 stats 模块更新所有的统 计数器。在检测到 1553B 总线非空闲状态时,BFM 通过接收总线和发射总线进行数据交互,同时在传输完成前,状态信息中的统计计数器各项参数保持不变。
功能覆盖率收集器指针在测试环境的每个代理中使用函数进行了分配,对 BC 和 RT 的函数的定义需要按如下格式在 elaboration_phase 阶段结束时进行:
function automatic void sdvt_m1553_env::end_of_elaboration (
input uvm_phase phase this.rt0_o.set_fcov_class(fcov_o); this.rt1_o.set_fcov_class(fcov_o); this.bc_o.set_fcov_class(fcov_o); endfunction
四、结论与展望
在各项参数设定完毕后,我们模拟由 BC 开始向 RT 发起一个接收指令,RT 在给定的响应时间范围内发回一个状态字并执行消息的发送的总线通信过程。从 tests 中分别选取命令帧和数据帧作为测试用例进行发送,其中命令帧包含了由参数提前设定好的消息类型、消息长度、RT 地址、消息子地址以及消息间隔等信息,数据帧包括了接收命令字,数据字和状态字。图 5 可以看到,初始化完成信号拉高后,在数据帧的发送过程中,cmd_fifo 和 got_fifo 能按照源地址和目的地址正确完成数据的传送,帧字节数自动累加,在接收到最后一个状态字后,状态机能正常跳变,RT 在给定的响应时间范围内发回一个状态字并执行消息的接收 / 发送过程。BC 通过验收 RT 回答的状态字来检验传输是否成功并做后续的操作,直到完成全部数据帧的接收 / 发送。针对 UVM的功能覆盖率,本验证平台提供了较为直接准确的方式。如图 6 所示,验证平台对实例化的 BFM 和 Monitor 输入和输出信号区间进行了采集,其功能覆盖率达到了100%。
图 5 1553B 总线仿真波形图 图6 功能覆盖率统计图

本文基于航天电子中 1553B 接口模块的验证需求,以 UVM 为基本架构,借助 SystemVerilog 语言特性和UVM 提供的相关内建功能,通过对验证平台的参数进行灵活设置,即可自由调用验证平台的验证组件对1553B接口进行验证,减少人工编制测试环境的工作量,缩短测试平台的搭建时间,具有较好的易维护性,且提高了测试数据的灵活度和可重用性,最后,通过设计不同类型的测试用例,高效地进行了100%的功能覆盖率测试,实现了全面验证。
作者简介:吴迪飞(1989-),男,市人,硕士,工程师,研究方向为FPGA 开发技术。