Hook 函数和 Callback 机制
Hook 函数可以理解为一段在特定地点处理特定事件的程序,各种各样预先设定好的钩子函数被挂载在 UVM 中。这些钩子函数可以加工处理事件,也可以不做任何事情,但是它们在验证平台的执行过程中总是会被调用到。寄存器模型的基类提供了多种钩子函数(
pre_write
、post_write
、pre_read
、post_read
等),这些函数会在寄存器操作的不同阶段被调用。如果验证人员不去赋给这些函数具体的任务和操作,那么它们不会处理任何事情。也就是说这些钩子函数在特定的时间和地点被调入到程序中且一定会被执行,但是执行内容由验证人员来填补。
Callback 机制是继承自 C 语言的概念,是指将某个函数的指针作为参数传递给另外一个函数,当这个指针被用来调用其所属的原函数时,就称其为回调函数。这种机制可以将调用者和被调用这分离,使得代码更为灵活。与钩子函数不同的是,回调函数并不会随着系统函数的执行而自动被执行。知乎上有一个回答:
Callback 是一种异步调用的实现,打个比方,你希望让你的异地的同事帮助你完成某项工作,为了保证你们业务衔接流畅,你留了你的电话让他有进展和你联系(即Callback函数),那么随着事情的推进,你的同事会不断的打电话跟进让你知道那边的情况,这就是一种异步回调;Callback 本意就是你传递一个函数给对方,当对方的工作有进展的时候就调用这个函数通知你。
Hook 则是一种 API 拦截手段,就比如一个公司有两个部门,他们平时会各指派一个业务对接人(API接口)去沟通彼此工作;但是某天因为业务调整,他们之间有一些事务需要外包出去,外包的事项是由你临时代为沟通,两边的对接人都不知道具体详情;为了避免混乱,此时你被作为一个中间人介入,切断原来两个部门之间的联系,他们的联络人都先和你沟通,由你决定哪些事情需要外包,哪些事情需要转达到另一个部门,这时候你就是一个Hook函数,拦截了原有的调用,并重新决定下一步的做什么,如果要继续原有流程也需要你代为转达。Hook的特点就是不改变原有双边的逻辑的情况下,在API接口上插入一个拦截调用的Hook函数,从而截取调用数据、甚至可以改变程序行为。
该APB-UART模块的UVM验证环境通过多个组件共同完成,验证平台架构包括多个Agent、Scoreboard、寄存器模型以及测试用例,具体细节如下:
1. 验证环境的组件
验证平台的主要组件如下:
- Apb_Agent:负责与APB总线通信,包括Apb_Driver和Apb_Monitor两个子模块。Apb_Driver用来驱动数据,Apb_Monitor用来监控APB总线并收集相关数据 。
- Uart_Agent:负责与UART接口通信,包含Uart_Driver和Uart_Monitor等子模块,分别驱动和监控UART信号 。
- Modem_Agent:负责Modem信号的处理和监控 。
- Scoreboard:包括Rx_Scoreboard、Tx_Scoreboard、Modem_Scoreboard等,负责数据的比对与检查,确保数据传输的正确性 。
- 寄存器模型:带有警告机制的寄存器模型用于监控寄存器状态,并根据条件发出警告 。
2. 测试用例
- 随机激励生成:多个测试用例通过随机激励来覆盖APB和UART模块的功能点。通过不断调整约束条件,使得覆盖率达到100% 。
- 功能测试计划:包括数据发送、接收、波特率配置、FIFO功能等,通过不同的Scoreboard进行数据比对和功能检查。具体的测试项目和检查项如下表所示 :
测试项目 | 检查 | 覆盖 |
寄存器相关检测 | Test result | N.A. |
基本数据发送功能检测 | Tx_Scoreboard | Cover Group |
基本数据接收功能检测 | Rx_Scoreboard | Cover Group |
硬件流控功能检测 | Modem_Scoreboard | Cover Group |
波特率配置功能检测 | Div_Checker | Cover Group |
接收数据错误场景检测 | Test Result | Cover Group |
FIFO相关功能检测 | Test Result | Cover Group |
全双工功能检测 | Rx/Tx_Scoreboard | Cover Group |
低功耗模式检测 | Test Result | Cover Group |
3. 验证覆盖率
- 代码覆盖率和功能覆盖率通过覆盖率组(Cover Group)来实现,涵盖了APB和UART协议相关的场景,包括错误场景、特殊信号处理场景等 。
4. 复用与移植性
该验证平台的组件具有高度的复用性,UART协议相关的组件可以直接通过配置重用,且整个验证平台也具有较好的移植性 。
通过以上的详细架构设计,该APB-UART模块的UVM验证环境具备了高度的灵活性和全面的功能覆盖,能够有效地验证模块的所有功能点。
记分板的实现