基于DPI-C接口的UVM验证平台设计与实现介绍

3 验证架构

本文设计UVM平台如图8所示。

基于DPI-C接口的UVM验证平台设计与实现介绍

v 组件搭建描述:

(1)interface:声明接口。

(2)transaction(数据包):继承于uvm_sequence_item,利用随机化和相关约束约束产生随机数据,创建两个transaction对象,transaction_in在DUT输入端输入,transaction_out在DUT输出与参考模型的输出相比较。

(3)sequence类:继承于uvm_sequence,加入objection机制来控制验证平台的关闭,利用repeat( )来控制执行的次数。

(4)sequencer:继承于uvm_sequencer,连接driver,实现数据的发送。

(5)driver类:继承于uvm_driver,与sequencer连接,用来请求数据。

(6)monitor类:继承于uvm_monitor,创建monitor_before和monitor_after,前者用来收集driver发送的数据,后者用来监测DUT的输出,分别在monitor_after和monitor_before中设置covergroup用来收集功能覆盖率。

(7)agent类:继承于uvm_agent,创建i_agent和o_agent,前者用来封装driver和monitor_before,后者用来封装monitor_after,声明并例化sequencer、driver、monitor,利用端口将它们连接起来。

(8)reference_model:继承于uvm_component,将外部C_Model通过DPI调入,并将数据存储,用来与monitor监测到的DUT的输出做比较。

设计FM0编码的C_Model。模型输入包括了m参数、data,输出编码后数据及编码后的数据长度。首先需要将数据读入模型,根据数据电平编码。编码算法主要设置一个变量data_tmp,在编码开始时设置为1,如果是编码-0,则输出码元~data_tmp和data_tmp,data_tmp值保持不变。如果是编码-1,则输出码元~data_tmp和~data_tmp,data_tmp值取反。通过不断更新data_tmp值来实现数据的编码输出,编码完成后添加结束标识符。

设计Miller副载波调制编码的C_Model,模型输入包括了m参数、data,结合副载波调制类型和数据类型,将编码后的数据及长度输出,另外,由于Miller前同步码最后一位码元电平为低,因此其初始data_tmp应为0,结合m的值进行编码,编码完成后添加结束标识符。

(9)Scoreboard类:继承于uvm_scoreboard,将monitor_after检测到的输出与reference_model得到的输出做比较。

(10)env类:继承于uvm_env,声明并例化agent,reference_model,scoreboard,利用端口将它们连接起来。

(11)Test类:继承于uvm_test,声明并例化env,设置default_sequence来启动sequence。