MDIO master VIP 图解 (ArrayBox的妙用)

本文介绍了MDIO Master VIP中ArrayBox的关键作用,特别是在实现阻塞式读取操作时。通过示例说明了readword函数如何更新RdDataPtr,以及为何使用mailbox存储transaction而不是直接使用ArrayBox。还探讨了使用semaphore和不同类型的mailbox实现阻塞等待的替代方案。
摘要由CSDN通过智能技术生成

如图:

 

1. readword 每调用一次,最后都会update RdDataPtr,使其自增1.

2. 关联数组RdDataArrayBox, Index 是 RdDataPtr, Value 是各个mailbox。 mailbox中放入的是各个transaction。 为何不直接将RdDataArrayBox的值设为各个transaction呢? 这是个关键所在!不防考虑一下这种情况,在调用了readword后立即调用getword函数。 runloop还没有来得及把transaction放入到对应的mailbox中,而getword却要立即返回,当然应该阻塞住getword的返回runloop直到拿到了transaction并放入对应的mailbox中。 回想起来也只有mailbox才能实现这个功能。

3. 所以当我们设计的master要将返回的数据保存以待查用并需要实现阻塞时,通常需要一个ArrayBox来通过put和get实现阻塞。 

4. 等待mailbox中排在自己前面的transaction全部处理完毕,这个过程可以用semaphore 加以实现

  /
  /*- mdioDone(): Wait until all transactions in the input mailbox
  //  are finished.*/
  /
  task mdioDone();
    this.tr               = new();
    this.tr.TrType        = MDIO_m_busTrans::WAIT;
    super.trInBox.put(this.tr);
    t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值