TileLink Edge

本文深入解析TileLink协议中的Edge部分,重点讨论如何处理突发模式传输。内容涵盖log2Ceil计算、总线数据宽度、地址计算以及如何使用独热码替代除法操作。通过示例解释了如何确定突发传输所需的beat数量以及如何计算当前beat的地址。
摘要由CSDN通过智能技术生成

本文总结tilelink 里edge的函数,为了更好的理解代码

  def addr_hi(x: UInt): UInt = x >> log2Ceil(manager.beatBytes)
  def addr_lo(x: UInt): UInt =
    if (manager.beatBytes == 1) UInt(0) else x(log2Ceil(manager.beatBytes)-1, 0)

  def addr_hi(x: TLAddrChannel): UInt = addr_hi(address(x))
  def addr_lo(x: TLAddrChannel): UInt = addr_lo(address(x))

其中log2Ceil是取对数向上取整,比如log2Ceil(5)=3,manager.beatBytes是总线data位宽,必须是2的幂指数
比如当data位宽为32的时候,beatsBytes=4 x这里是bundleA.address,address>>log2(4),意思就是取到一个beats传输的高位地址,比如1000~1100为一个8Bytes的beat所需要的地址,addr_hi就取到了1.
addr_lo是低位地址。

def numBeats(x: TLChannel): UInt = {
    x match {
      case _: TLBundleE => UInt(1)
      case bundle: TLDataChannel => {
        val hasData = this.hasData(bundle)
        val size = this.size(bundle)
        val cutoff = log2Ceil(manager.beatBytes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值