|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
摘要∶远程控制FPGA是卫星执行地面指令和转发地面数据的核心部分,且该FPGA使用的帧协议较为复杂,帧传输数据协议数据格式变化多样;为了对远程控制FPGA进行充分的验证,以提高FPGA软件的可靠性,避免存在设计隐患,提出了一种使用目前较先进的通用验证方法学UVM建立了一体化闭环仿真验证平台用来测试远程控制FPGA;仿真结果表面,该验证平台具有带约束收敛的测试向量随机生成和自动检查输出结果正确性功能,能够进行功能覆盖率检测,并有效提高远程控制FPGA 验证的效率和质量,较好地满足了验证需求。- }+ Q& B0 Z9 k
+ X6 y5 v* h. q0 ^. O6 e2 @. r% R0 J随着信息量的飞速爆炸,FPGA(Field Programmable Gate Array,现场可编程门阵列)作为提升电子产品速度性能的重要手段,其应用层面越来越广泛面,复杂程度日益提高,FPGA软件的质量和鲁棒性也越来越受到大家的重视,FPGA验证尤其是功能仿真变得尤为重要。特别是航空航天产品,基于FPGA的应用系统在运行过程中因异常情况发生导致FPGA功能错误,使得下行到地面的数据错误或者丢失,甚至导致单次试验任务失败,需要对系统重新上电复位。如果在地面测试或者仿真验证过程中,针对各种正常和异常的测试场景进行全面测试,则会提前发现软件缺陷,从而降低故障的发生概率。
7 Y' U, B6 W* Z% r2 E* J随着FPGA设计功能繁杂度增加,其门数和复杂度也日益增加,验证难度越来越大,验证充分性和验证效率的提升是验证的致命瓶颈,也是验证设计的主攻方向。传统定向仿真验证方法由于存在抽象层次低、效率低、验证不充分、验证平台重用性差的缺点,难以满足验证的需求。面向对象的验证方法学的产生,能够很好解决传统验证方法的上述痛点,可解决大规模FPGA的验证平台重用性问题,有效的提升验证效率和验证完备性。
w, I+ ?5 @8 |5 O. C- G' V基于SV(System Verilog)的验证方法学从VMM发展到OVM,最后进阶到成为整个电子行业统一验证标准通用验证方法学UVM(Universal Verification Methodolo-gy)。该方法学由于采用了较佳的验证框架实现覆盖率驱动的验证,并配有受约束的随机验证方法,可有效实现可重用仿真验证环境,大大缩短了验证时间,提高验证效率。$ _4 V9 ?$ G6 o4 x# ]$ r
本文以航天某卫星型号远程控制FPGA为验证对象,采用UVM验证方法学搭建一体化闭环仿真验证平台,采用动态数组方法实现了三级激励数据包的嵌套,验证远程控制FPGA功能的正确性。
" N+ h# @. Z; f8 d9 `6 d/ p& W1 r* x( E+ i1 E1 J0 H
1、UVM简介
8 F5 `9 S9 \- G6 l1.1 UVM验证方法学概述
2 d- @' E) j( L* T4 Y3 Q6 G; X) VUVM有一套System Verilog的语法和语义定义的具备面向对象编程的类库,使用者通过使用这些类库创建包括驱动器、监视器和记分板等可重用组件,从而提高验证效率和质量。此外,这些类库还包括各种任务和函数,能够完成驱动器的驱动与被测件(DUT-device Under Test)通信功能,以及实现监视器的监测 DUT输入输出接口功能等。最后,UVM还可通过phase、factory等高级机制和寄存器模型等功能,实现了验证平台的高安全性和可重用性。+ _4 k6 i/ d U8 R3 p
- A! W* J3 F* V6 X$ W5 W, Q1.2 UVM验证平台的组成4 k8 C2 a6 [6 m& i3 c: v( R0 [) T
图1是一个典型的UVM验证平台结构示意图,由1个验证环境env组成,1个env包括2个代理器Agent∶In_Agent和Out_Agent,参考模型(reference model)和记分板(Scoreboard)。In_Agent负责驱动和监测总线,Out _Agent负责监测DUT的响应。在In_Agent中,Sequen-cer负责产生随机测试队列传送给驱动器driver。$ [6 i1 o9 k* v; s2 ~; ~4 D
+ w9 R9 K( }$ O0 @图1中,in_Agent 包含3个组件 Sequencer、driver 和Monitor,其主要功能是在序列发生器 Sequencer 调度下产生根据传输协议生成的队列,再由根据约定时序由驱动其Driver驱动到DUT输入端口上。同时,监视器Mo-nitor将产生的队列发送至参考模型reference modelFl21。参考模型通常根据需求模拟被测件的行为,产生期望结果并压到期望堆栈中。out_Agent的MonitoRFl用于监测DUT 输出,并将实测结果发送至记分板 Scoreboard。Scoreboard 在收到实测结果后,自动提取来自参考模型的数据堆栈中的期望结果和实测数据进行比较,自动化比对结果。8 b. E4 \9 w) O
1)序列产生器(Sequencer)
- o6 d* A: i) d. |% V8 {主要自动产生受约束的随机化激励数据。/ Y, T- G4 M+ H% O$ M1 _$ a5 j
2)驱动器(driver)∶
1 S3 Z/ l7 a. z! f主要负责向Sequencer请求队列,将队列根据特定的传输协议和接口时序转化为输入信号发送到DUT的输入端口。. j% c( K8 [# {0 o9 |, y' x
3)监控器(Monitor)∶5 L* \3 ]0 L2 n, o' `5 V
负责从驱动器 driver 输出采集数据,传送到参考模型并转换成期望队列发送给记分板(Scoreboard),从而完成功能数据结果的比对和覆盖率信息的收集。: U. }+ y* C: W4 O+ x
4)代理器(Agent)
, l* a; l# L4 v% o( Q5 [通常用于发送端,可封装序列产生器(Sequencer)、驱动器(Driver)、监视器(Monitor)。5 I" p) Y, I" N: h3 `' G# ^/ k
5)参考模型(reference model)∶
/ p) _! _/ N6 r! ureference model用于完成和DUT相同的功能。refer-ence model的输出发送给 Scoreboard,用于和DUT的输出相比较。
6 }/ `1 M9 L8 W' |: F6)记分板(Scoreboard)∶4 B( b+ H, o& m4 l- ^$ S8 V
比较 reference model和Monitor采集到的DUT输出信号,并给出比较结果。2 v- ?" ]4 \( N) v
7)验证环境(env)6 e# O( f! n, A5 F6 I7 N1 }
UVM验证环境,使用UVM机制将代理器(Agent)、参考模型(reference model)和记分板(Scoreboard)配置在一起。5 m4 e1 m! c$ l/ s6 c( n3 `
8)测试用例(test case)* N1 A* o8 b/ Y% `3 z; i
test case用于例化env,不同的test case用于对DUT 的不同功能进行验证。6 s1 W7 t% e; C2 R2 |
! f8 |# G- e* W
1.3 UVM的各种机制
; V* ~9 S9 m+ @UVM是基于System Verilog语言开发的一套开源类库,包括了一系列标准类,如 uvm_sequence、uvm_driv-er、uvm_monitor、uvm_sequencer、uvm_agent、uvm_env等,通过对这些基本类进行继承和重载,结合TLM标准接口和各种机制,可构造多层次可重用的高效验证平台。+ x! v0 M4 W5 v
1)factory机制∶1 o1 C7 B: H: T6 ?9 m( N0 H, X
factory 机制是UVM非常重要的一个机制,采用UVM 中的宏注册实现factory机制。当某个类经过注册并且实例化后,其main_phase会自动调用。使用factory机制可以在不改变原代码的基础上,调用UVM内部封装的大量功能,实现验证平台组件的重用,提高整个验证平台的重用性。- F. F4 x G% e. A! x
2)phase机制∶( ?0 I) X/ g2 I; u4 P
UVM通过phase机制实现了验证流程的细分,在不同的phase中实现相应的任务,或者在不同的phase之间进行跳转,可以更加容易地控制验证的进程,使得验证平台中各组件按照各自的需求自动阶段性执行。" o( j N6 @! j
按照是否需要消耗仿真时间,phase可以分成两大类∶function phase 和 task phase,function phase 包括 build_phase、connect_phase等,不会消耗仿真时间task phase 包括run_phase和main_phase等,通过任务实现,需要消耗仿真时间。整个验证平台按照 phase 的执行顺序,执行完一个状态,自动跳转到下一个状态。build_phase完成UVM中各个类成员的实例化工作,connect_phase将UVM中各个功能组件实例化对象进行连接,run_phase 则运行整个验证平台,按照事务生成器顺序驱动整个平台运行。0 Q" F' B: r# G- b
" B+ H- b4 B$ M8 b3 b" S
- G; N5 ]) `7 y' Z: k
7 Q. M. Q* g" _* N b( |0 Z) l" ~ |
|