描述
使用AXI4主BFM,我通过通道水平API SEND_READ_ADDRESS和RECEIVE_READ_DATA命令的序列代替功能级别APIcommand READ_BURST。
后一个序列似乎没有减少BFM内部事务计数器。因此,达到了最大事务限制。
我在仿真中遇到以下错误:
MASTER_0:* INFO:达到最大未结交易限额(2)。阻止所有未来交易,直到至少有1个未完成交易完成。
因为我只按顺序执行顺序事务,而不是同时执行。说明在BFM内部有一个计数器。当使用通道级API时,计数器不会减少,因此它达到了极限。这是一个错误吗?
解
这种行为不是一个错误;相反,它是一个限制。
正确预测,BFM内部的计数器不会减少,因为通道级API命令RECEIVE_READ_DATA不会减少pending_transactions_counter 。要使用的正确通道级API命令是RECEIVE_READ_BURST ,因为这会减少pending_transactions_counter 。或者,用户可以在完成与完整事务关联的所有数据传输后手动调用remove_pending_transaction命令。
在RECEIVE_READ_DATA命令中递减计数器的问题是,这会导致先前停止的任何并发事务开始在计数器被取消断言的时钟上发送;但是,正常交易的数据突发当时并未完全完成。
数据传输只是事务的一个子集,因此所有数据传输的总和(即突发)实际上是事务完成。换句话说,如果改变这种情况以使这种情况起作用,那么当需要并行事务时可能会破坏其他特征。
请注意,使用通道级API会增加在通道依赖性级别违反AXI协议的风险。因此,不建议这样做。功能级API已针对Cadence AXI VIP进行了验证。
没有回复内容