1. AXI STREAM 协议
1.1 基本协议
关于TUSER:
TUSER的确定原则
TUSER 在多master 和 slave 之间存在位宽匹配的问题。
TUSER的确认原则: 根据master 和 slave 的比较,取比较小的那一个。
TREADY 是否使用,对于master 和 slave 都是也是可选的
1.2 应用场景
99% 的应用场景都是固定发流,也不会交织。TKEEP一般在最后一拍拉低。
1.3 问题
2. VIP的基本结构
3. 开发过程记录:
(1)细节: interface注意要引用clocking block 里面的,否则出现不定态
(2) 代码debug - 一个package 作用域的问题
现象: 如果红框里这句不加,编译会 报以下错误
分析:package 作用域是当前这一层次,package 里面又包了package的,引用不了。
PS: include 路径需要给正确,用相对路径
(3)vip_lib 版本要和仿真器版本一致,否则会报以下fatal
(4)顶层集成端口连线问题:
不同于VIP,自定义的interface 没有区分master/slave 的子interface, 统一定义成了logic型。
连接时使用force 的方式连接,注意要放在initial块里,否则报错。
(5)
4. cadence VIP 使用
(1) 可以使用VIP中内置的callback 读取driver 或者monitor 中的transaction
使用:
(2)packet vs transfer
(3)interface 实现
Cadence 在interface中根据使用场景 activeMaster, passiveMaster, activeSlave, passiveSlave
例化了 四个子interface.
PS: axi 也是这样的; Synopsys 也是如此实现
(4) VIP monitor port的使用:
在自己的环境中可以设置analysis port,通过write_ 函数将transaction get 出来。
实践上,line97 setCallback 必须设置,否则以下红框monitor的连接并不生效。
Cadence的VIP中大量使用各种各样的callback, 具体的用法还没完全研究明白。
Q: 按照其说明文档说的,应该有一种方式直接使用封装好的函数将transaction 取出来(如4(1)中截图)。
A:setCallback之后,通过触发相应Event-EndedCbEvent的方式来get transaction.