深入理解AMBA总线(十六)AXI设计的关键问题(二)

简介: 深入理解AMBA总线(十六)AXI设计的关键问题(二)

1.3、Debugging

大多数的时候,都认为各自是遵循总线协议的,但还是需要一定的能力,来做Debugging,毕竟某些IP会不遵守协议,会出错。

  • 使用counter来监视发起了多少次传输事务(transaction),以Master那边为例,当发出一次outstading请求,相应的counter+1,当收到最后的response,counter-1。这样系统挂死以后,发现某个Master的monitor记录counter不为0,这样就可以快速定位错误;
  • axvalid&axready=1,cnt+1
  • 对于写,当bvalid&bready=1,cnt-1
  • 对于读,当rvalid&rready&rlast,cnt-1
  • 还可以记录transfer数量
  • 还可以记录更多的信息,如axlen、axid、axsize等;
  • 使用timeout机制;

2、Interconnect拓扑结构

假设基于AXI的Master和Slave已经设计好了,如何对它们进行连接呢?当多个Master和Slave进行通信的时候,就需要Interconnect

Interconnect的拓扑结构多种多样,基于AXI的Interconnect一般采用Crossbar,如ARM-NIC400,这里我们也只讲这种方式。

我们看一下基于Crossbar的方式,首先是最简单的点对点方式,这种情况比较少见,比较典型的如ACP接口,Master需要直接访问Slave的cache(此时CPU作为Slave,并且是唯一的Slave),这种情况就可以点对点,而不用走多对多的总线。

image.png

然后是一对多的情况,如下图所示,这种情况也很常见,比如一个CPU要去访问多个Slave外设。

然后是多个Master访问多个Slave,这种情况就需要引入仲裁逻辑了,相对的设计也会更加复杂,此时多个Master共享Interconnect,相应的会影响到带宽。

然后我们看一下下面的例子,左边是完全映射,即Master可以访问所有的Slave。右图则是部分映射,可以看到一个Master只能访问指定的Slave。部分映射可以简化逻辑设计,节约面积,让能跑的主频更高一点。实际上也不需要每个Master都能访问每个Slave。根据自己的需求来就行。

接下来我们看一下如果想设计一个好的互连,需要满足以下的特点:

  • 支持多个Master和多个Slave
  • 扩展灵活,可复用性强
  • 时序好,从Interconnect本身去解决timing violation的问题

3、仲裁和时序收敛问题

接下来我们看一下仲裁相关的问题。仲裁本身是个很复杂的问题,这里只简单介绍。当多个Master需要访问同一个Slave的时候,这个时候就需要选择其中的一个。这里讲两种仲裁机制,Least Recently Granted和Round Robin仲裁机制。

首先看一下Least Recently Granted仲裁:这个和Cache替换中的LRU差不多,我们一开始会分好组,组和组之间是有固定优先级区别的,高优先级的总是会获得仲裁。对于同一个组的而言,我们会让最近没有被授权的Master获得仲裁权,因此我们需要有一个寄存器去记录历史信息,也可以用状态机实现。

然后是Round Robin仲裁机制,这种仲裁机制下所有的Master的优先级都是相同的,采用轮询的方式进行仲裁,相应的也要进行记录历史信息,以决定如何获得仲裁。如下图所示,我们甚至可以用移位寄存器实现,下图是带Weight的Round Robin,可以看到M1占据了2个SLOT。因此使用频率是其它Master的两倍。

我们再看一下时序如何收敛,因为AXI本身采用握手机制,因此实际上非常灵活,晚了一个周期早了一个周期都无所谓,只要满足基本的各通道间依赖关系即可。没有AHB和APB那样的硬性1T Cycle delay的要求。因此我们可以在critical path上插入寄存器,以优化时序。

一般是有三种方式,打断Valid,打断Ready或者都打断。在IC设计中,无论使用的是否是AXI总线,只要用Valid和Ready握手机制来传递数据,都可以使用该方法让时序收敛,不一定是局限于某个总线协议。大家完全可以将其用在模块内部和模块与模块间的流传输。

上面这种机制用在总线上,一般称之为Register Slice。先说说Slice的作用,在SoC中,如果Master和Slave的距离比较远,那么它们之间的bus信号要满足timing就可能有点困难,比如AXI中的 ARADDR、ARVALID这些信号从Master出来,要去很远的Slave,那么中间就要加很多的buffer,这引入的buffer delay就可能导致我们希望的timing不满足。这个时候就需要插入slice,给每个控制信号在中间加一级寄存器,把较长的走线缩短。当然插入的slice依然要保持bus的协议标准。简单来说,一个slice就是下面中间的那个模块。

我们看一下在Register插入的位置,可以如下图所示(其实有很多可以插入的位置)。一般AXI各个通道是分开的,我们在哪个通道加入register slice,相应的就会晚了一拍,实际上晚了一拍完全不影响逻辑功能。

下篇文章给大家讲解提高AXI的一些机制,具体是如何提高Bus性能的。AXI主体内容也快讲完了,后续可能会带来一些简单的AXI Slave和AXI Master的设计实例。

欢迎和我一起学习AMBA总线,完整的专栏在这里:

https://www.zhihu.com/column/c_1663245806869291008

目录
相关文章
|
8月前
|
芯片 SoC
深入理解AMBA总线(零)绪论
深入理解AMBA总线(零)绪论
115 0
|
7月前
|
存储 Go 芯片
单片机外围模块漫谈之四,USB总线基本概念。
单片机外围模块漫谈之四,USB总线基本概念。
|
7月前
|
监控 芯片
单片机外围模块漫谈之三,CAN总线
单片机外围模块漫谈之三,CAN总线
|
8月前
|
缓存 内存技术
深入理解AMBA总线(十六)AXI设计的关键问题(一)
深入理解AMBA总线(十六)AXI设计的关键问题
171 0
|
8月前
|
存储 网络性能优化 vr&ar
深入理解AMBA总线(十七)AXI是如何提高性能的
深入理解AMBA总线(十七)AXI是如何提高性能的
435 1
|
8月前
|
vr&ar 内存技术
深入理解AMBA总线(十八)一个简单的AXI2SRAM设计
深入理解AMBA总线(十八)一个简单的AXI2SRAM设计
214 0
|
8月前
|
SoC
深入理解AMBA总线(七)AHB设计要点和AHB2APB同步桥设计前言
深入理解AMBA总线(七)AHB设计要点和AHB2APB同步桥设计前言
219 0
深入理解AMBA总线(七)AHB设计要点和AHB2APB同步桥设计前言
|
8月前
|
存储 SoC
深入理解AMBA总线(十一)AXI协议导论
深入理解AMBA总线(十一)AXI协议导论
465 0
|
8月前
|
监控 Scala 虚拟化
深入理解AMBA总线(十三)AXI原子访问机制和AXI响应
深入理解AMBA总线(十三)AXI原子访问机制和AXI响应
221 0
|
8月前
|
网络性能优化
深入理解AMBA总线(十九)AXI4新增信号以及AXI4-lite
深入理解AMBA总线(十九)AXI4新增信号以及AXI4-lite
263 0