开始之前,先声明一下,arm系列的全部文章都参考的是公开文档。如果大家有需要,可以去arm的官方网站下载。我手里没有任何非公开的文档。
闲话少说,今天开始扒gic-600。
为了适应大规模的soc设计,gic-600被设计成分布式ip。所谓分布式,gic-600由几种组件构成,每个组件可以跟其它相关模块在物理设计上摆放在一起,并与其拥有共同的电源域;组件之间通过片上网络(network on chip,简称noc)通信,从而达到更好的时序。
gic-600的重要组件包括以下几种:
distributor:gic-600的核心部件,负责与其它组件通信,主要处理spi和lpi
redistributor:与cluster或core交互,主要处理ppi和sgi
its(interrupt translation service):处理基于消息的中断,用于解析lpi
spi collator:顾名思义,收集整理spi
wake request:产生wake\_request给core
在具体介绍每个组件之前,我们有必要先来研究一下这些组件之间是如何连接的。主要有两种方式,第一种是利用片上网络,比如cmn-600这样的ip;第二种是私有的桥接。
图1 利用noc连接gic-600的组件
第一种方法,适合大规模的物理设计,尤其是全局时钟方案复杂的soc。比如有很多的cluster,一般而言,一个redistributor对应一个cluster,这样redistributor可以和cluster一起做布局布线,redistributor和cluster之间的通信可以保持在一个比较高的频率,且timing容易实现。同样,对于有很多pcie控制器的设计,its可以和pcie控制器放在一起,实现lpi。对于spi来说,一般多是给低速的外设准备的,所以spi collator可以和distributor放在一起。
wake request组件的主要作用就是可以产生唤醒信号给core,如果soc设计中没有做关于core功耗方面的设计,这个组件可以不需要;如果有功耗控制的需求,这些唤醒信号要给scp(system control processor)或者相关的模块,再做进一步的设计,具体取决于设计需要了。
图2 利用私有桥接连接gic-600的组件
第二种方法,适合规模较小的,全局时钟方案简单的soc,gic-600的组件不依赖于片上网络(因为没有可用接口,比如nic等)。这种方法的弊端是,组件之间的走线可能会非常长,并且可能需要在别的ip中穿行。好处是,不占用任何noc的带宽。
接下来看看每个组件。首先是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(比如多路服务器)的通信。至于q-channel,不知道大家还记得多少,《soc设计之功耗 -- q channel》,在这里主要是为了做时钟管理。
spi collator对外的接口比较简单,输入spis,是来自外设的中断线。在gic-600中,spi数目是32的整数倍,目前最多支持960。输出spi\_r,是经过时钟同步的spi信号,如果需要,可以送给发出spi的外设。
wake request模块是配合soc功耗管理用的,如果需要实现core的idle状态管理,或者powergating,在distributor把中断发给目标core之前必须唤醒该core。所以唤醒信号是每个core一个。功耗管理取决于具体的设计,可以参考前面的文章,《arm系列 -- pcsa(二)》。
简单介绍完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混合传输。
图6 连续且对齐的数据流
图7 连续不对齐的数据流
图8 byte数据流
ace-lite总线就复杂多了,不是一两篇短文能说清楚的,留在以后吧。
北京通信管理局发布了加快推进5G基础设施建设工作方案
一加7 Pro正式开售1分钟全网销售额轻松破亿元
三大运营商前三季度业绩报告公布:净利1175.04亿元,平均日赚约4.3亿元
存储系统中的硬件物理接口有哪些
智慧排水系统解决方案
扒一扒GIC-600的相关知识
造车新势力企业大盘点,且看谁最终能突围成功?
易燃、易爆场所自控仪表施工中应引起注意的问题
疫情有一定影响 5G芯片供应商看好今年需求
南华期货部署华为新一代全闪存阵列解决方案 以承载综合交易平台运行
TDK-Lambda中国总部项目落户无锡高新区 战略合作签约仪式成功举行
使用高调光比汽车LED驱动器保持抬头
一清智慧城市沙盘已入驻深爱人才馆
华信联创发布波迅第二代Wi-Fi系列产品
浅析人工智能芯片的架构创新
Java 8腰斩!Java 17暴涨2300%!!
带通讯功能的LED驱动芯片XDPL8221的概述
CERNEX CWK系列波导同轴适配器
三星第二代3nm工艺开始试产!
奥迪Q2还没上市,奥迪又曝新车,4.6秒破百油耗仅1.9L