数字 10 笔记_UVM验证平台整体结构

时间:2024-05-19 22:26:04

参考《UVM实战》-张强

自己总结的一些简单笔记

 

 

系统架构框图

数字 10 笔记_UVM验证平台整体结构

这是1种测试用例的框图,每一种测试用例,都会生成这么一个架构。

下面是,结构中的组件分别需要做些什么事情。

transaction

  1. 声明、定义数据包格式,是需要测试的数据包,常用random函数去随机化数据用以测试
  2. field_automation注册,注册后才可以使用uvm中的print、compare等常用函数

driver

  1. 与DUT建立连接,使用uvm_config_db#机制
  2. 向sequencer请求sequence,并在发送完成后,返回一个done给sequencer。
  3. 将transaction转化成interface数据,进行发送

monitor

  1. 与DUT建立连接,使用uvm_config_db#机制
  2. 与model和scoreboard建立通信(TLM机制),实现接收transaction功能用`uvm_blocking_get_port#( my transaction),实现发送transaction功能用 `uvm_analysis_port#(my transaction)
  3. 将transaction转化成interface数据,进行接收

sequencer

  1. 调度sequence和driver,确保它们正常进行transaction的产生和发送。

agent

  1. 实例化driver、monitor、sequencer
  2. 连接drv和sequencer,drv.seq_item_port.connect(sqr.seq_item_export);
  3. 在TLM机制中准备好monitor的ap(发送)口,准备好发送数据给scoreboard或者reference model,实现接收transaction功能用`uvm_blocking_get_port#( my transaction),实现发送transaction功能用 `uvm_analysis_port#(my transaction)
  4. UVM_ACTIVE机制,用来产生i_agt和o_agt这些可以自定义配置的agent

reference model

  1. 接收i_agt发送过来的transaction,发送transaction给scoreboard,实现接收transaction功能用`uvm_blocking_get_port#( my transaction),实现发送transaction功能用 `uvm_analysis_port#(my transaction)
  2. 建立与DUT同样功能的模型,让transaction包进入模型进行工作,然后将输出发送给scoreboard

scoreboard

  1. 在TLM机制中准备好接收monitor和model的数据port,实现接收transaction功能用`uvm_blocking_get_port#( my transaction),实现发送transaction功能用 `uvm_analysis_port#(my transaction)
  2. 并行接收数据,然后进行compare、report等操作,

environment

  1. 实例化agent、model、scoreboard
  2. 创建TLM中所需要用的fifo,在我的框图中是三个
  3. 连接mdl和scoreboard,中间插入一个fifo,同理连接mdl和i_agt,o_agt和scoreboard。

 

base_test

  1. 实例化envrionment
  2. 打印最终验证结果

sequence(case)

  1. `uvm_do(transaction),产生随机化数据的数据包transaction
  2. raise_objection ,drop_objection,uvm的objection机制,用以启动和结束整个平台
  3. 使用default_sequence机制,实例化seq,连接seq(sequence)和sqr(sequencer)

 

数字 10 笔记_UVM验证平台整体结构