SoC微控制器的总线设计
图2: NS9750原理框图
为对总线资源进行更精确的控制,这种循环仲裁方案提供两个附加层次的可编程性能:分配给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入口。
第四个寄存器用于存储哪个总线主控有数据在等待向AHB传输,而第五个寄存器则是程序设计者用来为每个总线请求和准许槽位(分配给特定总线主控)分配权重值。
使用循环仲裁
在前面例子中,当基于特定仲裁再分配调度方案的LCD请求额外的总线访问时,程序设计者可根据LCD必须处理的数据流的性质来指定分配给LCD的优先级。如果程序设计者认为需要分配10个槽位给LCD控制器,剩余的6个槽位会按最初仲裁方案分配给其它总线主控。这样LCD控制器可获得十倍于正常情况下可得到的带宽,以及十倍于其它主控的带宽来处理这种特定情形下的负载。
当通过以太网连接传送数据、同时LCD屏幕进行刷新的时候,这种特性十分重要。LCD需要实时、准确地进行刷新,且不会被以太网请求中断。
在典型的AMBA总线架构中,如果LCD对总线提出请求,不论有怎样的刷新需求,它都不得不等待直到以太网主控将总线释放出来。采用新的循环可编程仲裁方案,程序设计者可降低以太网传输的优先级,使数据以更低但可接受的速率传输,确保LCD得以适当地刷新而不至于使屏幕出现空白。
如果为保证活动画面显示对LCD延时和带宽要求极高,则以太网协议需求还可进一步降低传输速率。但停止数据流传输是不可以的。实际上,如果LCD主控控制了该总线并且只有当刷新工作完成后才将总线释放,则有可能停止数据流的传输。
在外围总线中增加突发模式DMA
在基于AMBA的设计中,外围总线的传统设计方法是假定基于ARM内核的嵌入式器件用于低端性能应用。但现在的器件经常需要在不切断低带宽外围电路访问总线资源的情况下,运行一种或多种高带宽应用。在具有较多外围电路的设计中,这种情况特别容易出问题。例如NS9750或NS9360,它们支持USB、I2C,具有四个多功能串行模块(可选用UART或SPI,同步模式下的速率可达11Mbps)、50个单独的可编程GPIO引脚、一个IEEE1284外围端口以及16个通用定时器或计数器(每个都有自己的I/O引脚)。
在传统的APB实现方案中,采用FIFO就足以应付通信外设(如UART)的低速率传输,FIFO可以在处理器必须介入并访问APB之前将数个字节传送到接口。但在本文所描述的许多高端嵌入式应用中,一个或多个这样的外围电路可能需要高带宽传输,要求能通过APB/AHB桥快速访问主要的高性能总线。
图3:NS9xxx的总线架构
评论