为了适应大规模的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的带宽。
全部0条评论
快来发表一下你的评论吧 !