这些应用要求SoC能够发出控制信号、采集数据并在网络上实时传输数据。基于不同的网络特性及其带宽要求,现有SoC总线架构的性能将会得到尽可能的提升,例如,高端联网嵌入式应用可能要处理通过以太网连接从照相机传输到打印机的视频数据位流,或从服务器传输到打印机的图像,与此同时还可能根据与扫描、刷新和更新周期有关的确切要求对本地 LCD显示进行更新。使用外部LCD时,LCD控制器必须知道通过该总线传输的具体字节数量、数据发送顺序以及数据在显示器上显示的特定时隙和顺序,同时也很必要将信息不断地馈送给LCD用于更新。
图2: NS9750原理框图。
共享总线的概念并不能满足SoC中的这些要求。在典型的AHB设计中,总线主控是总线上全部的主要资源,也就是说,当总线空闲时,它们可向总线请求完成一个任务所需要的时间。但在基于ARM的SoC中,程序设计者不能直接控制当它们掌管总线时可得到多少总线资源。
共享总线架构用多种方式来区分这些操作的优先次序,包括:菊花链仲裁、集中式并行仲裁、基于自选或冲突监测的分布式仲裁以及带多个总线请求的总线仲裁。但当指定的主控接管总线后,其他操作就会搁置在一边。目前还没有一种机制能够让多个资源同时访问总线,使其既满足应用要求,又不会影响其他重要操作提供确定性及实时性响应的能力。
在AMBA环境中处理这类情况的一种通用方法是使用仲裁通道。如果有六个总线主控,总线便设计成有六个仲裁通道。但是,片上仲裁逻辑根据请求访问该总线的主控数目来分配这些通道,而不是把每个通道指定给某个特定的主控。如果有四个主控请求访问总线,则这六个通道会在这四个主控之间进行分配,确保每个主控有平等的机会访问该总线。
然而,这并不能解决如何分配足够的总线带宽以完成某一特定任务这一基本问题。若其中一个操作需要三个通道,而其它操作总共只需要两个通道,则每一种操作将会分配到相同数量的可用通道空间。其结果是,有的通道没有充分利用 (甚至根本没用到),而有的则超负荷使用,影响SoC在极低延迟内对事件进行确定性响应的能力。
可编程总线带宽控制系统
因此,需要一种可编程的总线带宽分配方案,在某一特定时刻为某一特定的主控分配其所需的总线配置,并将剩余的总线空间分配给其它可能要求访问该总线的主控。由于这种方案可能随时间改变,因此需要一种机制以便按照常规原理重新分配总线资源。
NetSilicon 公司已开发一种新的带宽控制系统来取代采用AMBA架构的带宽控制系统。该系统采用一个16槽位旋转优先级总线仲裁器(见图1),这种仲裁器包含一套可编程伪随机或旋转优先级缓存替换算法。例如,在NetSilicon的 NS9750(见图2)中,AHB上的六个通道不是通过竞争进行分配,而是根据16槽位总线分配方案由六个总线主控分享。通过系统控制模块中的专用寄存器,系统开发者目前可采用三种方法在SoC中分配总线资源。
在最高层次,某特定总线主控每次发出的一个访问请求,都会按请求顺序得到响应,直到这六个主控全被轮询。根据所需带宽,每一个总线主控可分配到一定数目的槽位并独占这些槽位。例如在NS9750中,四个槽位分配给CPU,四个槽位给以太网,四个槽位给BBus桥,三个槽位给LCD,三个槽位给PCI/卡总线,但在系统运行期间系统软件会根据需要重新评估这一分配方案,这可用来确定AHB总线周期的数目。如果在下一个评估周期中情况没有发生变化,则沿用以前的设置,如果情况有变,则协定新的总线主控槽位分配方案。
为对总线资源进行更精确的控制,这种循环仲裁方案提供两个附加层次的可编程性能:分配给ARM CPU的总线带宽大小以及这16个槽位中每个槽位的带宽利用率。
NS9750 的ARM926EJ-S内核作为总线主控时不能控制所有总线资源,缺省情况下它只能控制50%的总线带宽或16个槽位中的8个,这样可确保其它五个总线主控可以一直占有至少50%的总线带宽。不过,在程序设计者直接控制下,它可以按照指令将其部分带宽释放给另一个总线主控,或者,在该总线仲裁周期内或程序设计者认为必要的任何周期中控制另外的槽位。
程序设计者也可为每个槽位选择带宽利用系数——100%、75%、50%或25%。这一选择是通过控制何时以及以怎样的顺序分配每个槽位的访问来实现的,系数为25%,则这个槽位每四个周期只能被轮询一次;系数为50%,则每两个周期轮询一次;75%,则每四个周期轮询三次。
对旋转总线仲裁器进行编程
程序设计者可通过包含在系统控制模块内的几个寄存器定义多种选项。第一个寄存器是16入口总线请求配置寄存器,它的每一个入口代表一个主控和一个准许槽位的总线请求。每一个请求/准许槽位每次只能分配给一个总线主控,但根据总线主控的带宽要求,每个总线主控可同时连接多个请求/准许槽位。当多个通道分配给一个主控时,这些通道应均匀分布在这16个通道当中。
每个请求/准许槽位都有一个两位的带宽压缩字段(BRF),用以确定每个槽位能对系统总线进行仲裁的频率(100%、75%、 50%或25%)。BRC将总线请求信号输出到第二个16入口总线请求寄存器(BRR),默认情况下,BRC中未被分配的槽位将阻止用任何总线请求信号设置相应的BRR入口。