接下来看看每个组件。
• 首先是distributor,一个SoC只有一个。
•它的组件只能与distributor通信。所以,可以看出,distributor是GIC-600中的核心,其作用是收集所有的中断,并转发给相应的目标core。
图3 GIC-600 distributor和SPI collator
对于core来说,可以通过上图中的ACE-Lite slave接口访问GIC-600中除去GITS_TRANSLATER的所有寄存器。由于为了实现LPI,GIC-600的distributor要维护几张表,且这些表格保存在内存中,所以需要一个master接口去访存。在上图中,对应的是ACE-Lite master总线接口。Distributor还包含三组AXI4-Stream接口,分别用于redistributor,ITS和其它distributor(比如多路服务器)的通信。
SPI collator对外的接口比较简单,输入SPIs,是来自外设的中断线。在GIC-600中,SPI数目是32的整数倍,目前最多支持960。输出SPI_r,是经过时钟同步的SPI信号,如果需要,可以送给发出SPI的外设。
Wake request模块是配合SoC功耗管理用的,如果需要实现core的idle状态管理,或者powergating,在distributor把中断发给目标core之前必须唤醒该core。所以唤醒信号是每个core一个。
简单介绍完distributor,需要再讲讲AXI4-Stream总线。
图4 AMBA演进
在AXI4-Stream中,去掉了地址项,允许无限制的数据突发传输规模。正如spec中所说,这个总线是用于master和slave之间交换数据用的。接口信号比较简单,如下图:
图5 AXI4-Stream接口信号列表
大部分信号和AXI类似,ACLK和ARESETn信号,不必多说。TREADY和TVALID是mater和salve的握手信号,slave可以通过TREADY反压master的数据传送。
需要注意的是TDEST和TID,TDEST提供数据流的路由信息,也就是说一个master可以接几个slave设备。TID提供数据流的标识,意味着master可以给slave交叉发送不同数据流。
如果两个设备要实现双向传输,就需要互为master和slave。拿GIC-600来说,一个SoC中只有一个distributor,同时可以有若干redistributor,但是redistributor只与distributor通信,且需要双向传输。也就是说distributor能看到多个redistributor,而一个redistributor只能看到distributor。
Distributor可以通过TDEST把数据路由给相对应的redistributor,并且通过redistributor发过来的TID以区分不同的redistributor。
TDATA数据流包含三种类型:data、position、null。data是数据;position作为占位符使用,可以用来表征data的相对位置,null不包含任何有用的信息。
数据流的结构可以有很多种,比如可以只传数据;也可以将数据和null或position混合传输。
全部0条评论
快来发表一下你的评论吧 !