文章目录
一,RM中spi transaction发到FIFO,数据为0情况
在项目中遇到了使用SPI VIP的transaction 时,无法将monitor 收到的数据处理后,发送给FIFO,spi transaction的data queue一直为空,导致发送不出去的问题。
SVT SPI VIP transaction在制作RM时,不能write到FIFO的情况。
因为RM里的SPI transaction没有cfg,所以每次给了数据都发不出去,需要在RM里把cfg文件加上。从test中set cfg,然后在RM这里get
new一个新的spi transaction ,把get到的cfg,传递到spi_out_tr transaction中。就可以把spi的cfg设置进来。
transaction cfg传递好了之后,通过randmize with的方式,把data送到transaction中。
最后再把这个transaction write 到FIFO就可以发出去了。
二、SPI VIP 每次CS有效数据量大小设置
看SVT SPI transaction.sv,发现数据量大小的约束
所以,只需要添加宏定义,将SVT_SPI_MAX_DATA_TRANSFER设的大一点,就可以实现,一次cs有效发送多个byte
三、两笔cs有效之间的间隔
通过在test中set config db transmit delay来控制
四、任意bit数的spi word发送
在env中的cfg phase里,reconfig data_frame_size
在env_cfg里的set_cfg phase中的 enable_configurable_data_frame_width设置成1
五、spi的interface cfg(SPI特殊于其他VIP)
在env_cfg中把spi的agent cfg例化
在ENV中把interface和spi agent cfg中的interface相连,此处为SPI VIP特殊之处,需要将interface 与agent_cfg.interface连接,我猜测因为SPI可以当slv也可以当作mst 的时钟控制有关
在connect中把spi的interface set到env中
SPI VIP在不复位的情况下切换时钟频率(spr sppr)
需要在case中重新随机env.cfg.spi_agent.cfg
随机之后,使用reconfigure函数将SPI的agent按照新的agent_cfg参数进行重新配置
可以实现SPI VIP频率的切换,spr sppr 从2 6 ,切换到了0 4