IC验证 AHB-RAM 项目(一)——项目理解
目录
- 概念理解
- AHB-RAM
- VIP
- 项目基本框架
- class 创建三要素
- component 类编写要点
- 参数类
- phase 机制
概念理解
AHB-RAM
AHB-RAM 就是一个通过 AHB 总线接口来访问的内存模块。简单理解:这是一个带有 AHB“插头”的 RAM,能方便地挂在 SoC 的总线上,让 CPU 或 DMA 等主控通过 AHB 协议来读写这块内存。
- AHB 是 ARM 的 AMBA 总线协议,主要用于不同模块之间的高速数据传输
- RAM 是内存(随机存取存储器)
VIP
- UVC 是基于 UVM 方法学封装的验证组件
- VIP(验证 IP)可以理解为复用性强的,可商业化的 UVC
- 验证 slave 模块的话需要编写 master 验证文件,验证 master 模块的话需要编写 slave 验证文件
项目基本框架
- pkg.sv
package 是核心组织单元,将验证组件文件 include 在一个包中 - transaction.sv
sequence item 类,定义与 DUT 的交互数据 - configuration.sv
uvm_object 类,集中化管理所有可配置参数 - driver.sv
uvm_driver 类,将 sequencer 传送的 sequence item 进行转换,以驱动 DUT 完成激励 - monitor.sv
uvm_monitor 类,监测 DUT 信号,并将其转换为 sequence item - sequencer.sv
uvm_sequencer 类,将 sequence 生成的 sequence item 依据仲裁动态调度给 driver
class 创建三要素
- 继承:extends 父类,父类可以为 uvm_component、uvm_object、uvm_sequence_item 等等
- 注册:即利用工厂机制注册该类,仅有两种注册类型,uvm_object_utils(该类类名) 注册非层次化的对象,uvm_component_utils(该类类名) 注册层次化的组件
- 创建:添加 new 函数
- object 类的 new 函数固定为一个参数(string name)
- component 类的 new 函数固定为两个输入参数(string name, uvm_component parent),其中 parent 指该类的父类,一般 =null 即可
class ahb_transaction extends uvm_sequence_item;'uvm_object_utils_begin(ahb_transaction)'uvm_object_utils_endfunction new(string name = "ahb_transaction");super.new(name);endfunction
endclass
class ahb_driver extends uvm_driver;'uvm_component_utils(ahb_driver)function new(string name = "ahb_driver", uvm_component parent = null);super.new(name, parent);endfunction
endclass
component 类编写要点
class ahb_driver #(type REQ = ahb_transaction, type RSP = REQ) extends uvm_driver #(REQ, RSP);'uvm_component_utils(ahb_driver)function new(string name = "ahb_driver", uvm_component parent = null);super.new(name, parent);endfunctionfunction void build_phase(uvm_phase phase);super.build_phase(phase);endfunctionfunction void connect_phase(uvm_phase phase);super.connect_phase(phase);endfunctiontask run_phase(uvm_phase phase);super.run_phase(phase);endtask
endclass
参数类
class uvm_driver #(type REQ = uvm_sequence_item, // 默认请求事务类型type RSP = REQ // 默认响应事务类型(通常与REQ相同)
) extends uvm_component;
上述代码的意思是,uvm_driver 默认的事务类型是 uvm_sequence_item,比如调用 get_next_item() 函数时返回的即是 uvm_sequence_item
class ahb_driver extends uvm_driver #(ahb_transaction);
上述声明时使用参数类,代表自动适配 get_next_item() 等方法返回类型为ahb_transaction
如果有新的类继承该类(ahb_driver),无法再参数化 uvm_driver 类,即
class ahb_master_driver extends ahb_driver;
为了更好地让子类继承,使用如下进行代码
class ahb_driver #(type REQ = ahb_transaction, type RSP = REQ) extends uvm_driver #(REQ, RSP);
class ahb_master_driver extends uvm_driver #(ahb_master_transaction);
phase 机制
phase 机制是 component 的专属机制,是验证环境的核心调度系统,包含以下九个过程,常用的三个为 build_phase、connect_phase、run_phase