1.2 寄存器读写
这里 主要讨论 AXI的寄存器读写 。 由 sequence来完成数据的随机化操作 , 然后写到 register model 中, 通过 adapter 来完成 总线和寄存器的转换, 最后传送到 VIP 中,输出以 axi_vif 的形式传送给DUT的 AXI 接口。
寄存器读写操作:
在sequence的body函数里面不能做太多复杂动作,在body函数中完成transaction的ramdonmize化。复位寄存器。一定要复位DUT输入寄存器,防止出现xxx现象; 将随机化的值传给refer-c,等待refer-c运行完毕,生成TV。
寄存器写操作: 将TV的寄存器输入部分在VIF时钟的驱动下,读出,如果是写AXI 寄存器 ,通过上图,通过register model 写来完成寄存器的写操作; 如果是写普通寄存器,通过写VIF 的输入寄存器来给DUT传入值。
寄存器的读操作: 在WAIT DUT输出有效的寄存器值后,在VIF时钟的驱动下, 如果是读AXI寄存器,通过上图,通过register model来完成寄存器的读操作;如果是读普通寄存器,则通过读VIF的输出寄存器接口来完成读操作; 最后完成与refer-c的输出值的对比。
数据的读写操作:
数据写操作: 将TV的数据输入部分在VIF时钟的驱动下,在driver的mainphase 中通过生成的控制信号,读出,并传送给VIF的数据输入接口,最终传送给DUT的数据输入接口。
数据读操作: 在 scorboard 组件中,在VIF时钟的驱动下,通过VIF数据输出接口读出DUT输出数据;读出refer-c的输出数据,完成cross check.