DMA验证经验总结(一)
前言:在Chip中,我们经常会插入一些Debug module,例如DSB(Data Send Back);在通信系统中,用于把A-Die的数据回传到D-Die。但是需要回传的数据会有很多路,因此我们的DSB会有很多Channel。因此这类模块会有如下的信号组合:
sw_trg[192:0];
req[192:0];
work[192:0];
idle[192:0];
那么这些信号之间的逻辑关系是什么呢?
- 首先是SW trigger,通过下寄存器指示需要回传哪一路数据
- 收到SW Trigger信息后,req信号拉高,同T idle信号拉低等DAM回ack之后,req拉低,work信号拉高
- 等数据传完之后,work信号拉低,idle信号拉高
那么我们怎样验证这一组(193Channel的话,就有193组)信号的逻辑是否正确呢?
- 第一种方法就是拉Design内部的信号做Assertion,但是 这种方法有个缺陷,如果这跟信号连回到Register的时候,顺序接错了,我们是发现不了的。
- 第二,这个模块是给SW Debug使用的,所以SW肯定是通过bus(APB)来读取这些信号的状态的,因此,我们还需要通过RAL Model去读这些信号的状态,以保证States的正确性
一、实现方法
1.1、通过bus读Register中的States
- 将系列寄存器的name用数组存储,方便循环算法的实现
string sw_trg_hp_reg_q[$] = {"DSB_HP_IMM_TR