基于FPGA的共享总线开关网络实现多CPU共享内存
现代小卫星,通常指80年代以后发展起来的小卫星。它建立在微电子技术,计算机(包括软件)、微型光学和机械、轻型复合材料及高精机械加工的基础上,是航天高技术发展的产物。虽然现代小卫星的体积和重量很小,成本和风险都很低,但由于选用了高新技术,整个小卫星的容量和性能,即小卫星的功能密度是很高的。而且小卫星组成星座可拓宽全新的应用领域,能满足通讯、遥感、对地观测、科学技术试验及军事等各方面的需求。因此,现代小卫星已作为大卫星的必要补充在上述领域显示出特有的优势,引起了世界各国,包括许多发展中国家和尚无卫星研制能力的中小国家的普遍重视。
然而,近地空间和大气环境影响着空间系统的规模、质量、复杂性、可应用的高科技技术和成本,强烈地影响空间系统的运行性能和工作寿命。一些空间环境的相互影响也限制了空间系统技术潜力的发挥,使部件或分系统工作不正常,甚至损坏。等离子环境,特别是处于对地静止轨道的等离子环境,能使装在卫星外表面的设备和部件不均匀带电,这些表面电荷产生的电压可能超过击穿电压,从而导致静电放电,足以毁坏电子元器件。许多高能空间辐射甚至深入到绝缘器件内部,在绝缘电缆和线路板中产生静电放电。这种体电荷能干扰分系统信号或中断电子器件的正常工作。辐射带中的俘获粒子、太阳耀斑质子和银河宇宙射线能在微电子器件中诱发单粒子翻转事件。这种高能辐射的总剂量效应降低了微电子器件、太阳电池阵和敏感器件的性能。因此,为保证整个系统的正常运转和寿命,很多地方都必须选用宇航级的器件和进行冗余设计。
单就星载计算机而言,到目前为止,高集成密度、高性能的CPU和内存还没有相应的宇航级器件,在星上用的最多的还是8086和1750A等核加固的、抗辐射的、低带宽、低MIPS的CPU,靠单片CPU很难满足现代和未来小卫星星上自主管理、自主定规、对地观测图象的压缩和传输、硬件功能软件化等诸多要求;而且单片CPU一旦损坏,将导致整个卫星失效,又由于其价格极其昂贵,采用冗余的方案势必大大提高小卫星的成本。而在采用多CPU并行处理技术后,不仅可以满足星上计算机数据处理能力的要求,而且增加了整个系统的可靠性。一到两片CPU的损坏不致引起整个卫星的失效,至多在系统重配置后损失一些性能,甚至可以在保证一定可靠性的前提下,考虑采用军用级的、价格相对便宜,密度和性能都较高的CPU。
围绕小卫星体积小、重量轻和价格低廉的特点,一个多CPU共享内存的系统(CPU仍然采用有相应宇航级器件的8086)将是比较合适的选择。同时为了提高共享内存的数据通信带宽,使其不成为整个系统的瓶颈,本文提出了一个用ASIC设计一个共享总线开关网络(简称SBSN,下同),组合成Omega网络的方案,以消除对某一组内存的总线竞争,实现多CPU对共享分组存储系统的低位交叉并行访问。
1 SBSN实现的Omega网络
SBSN是一个2×2的开关,可以级联使用以实现个CPU和个内存组的连接,这样的连接共有N级,从输入到输出依次编为0~N-1,通过对二进制目的内存组的编码来控制数据路径:从高位开始的第I位为0时,第I级的2×2开关的输入端与上输出端连接,否则输入端与下输出端连接(参见图1)。
从理论上说,采用SBSN,N(=,k为正整数)个CPU一次访问通过只能占10。16%,所有其它的置换将引起阻塞。但尽管如此,N个CPU的Omega网络实现非阻塞连接最多需要通过的次数为,从总体上讲,Omega网络的采用能增加内存总线的带宽,大大提高总线数据的吞吐能力。
2 SBSN的设计与实现
作为共享总线开关网络,SBSN主要是解决总线之间的共享竞争与冲突死锁,将来自多个CPU的内存读写信号分配到相应的内存模块组。其内部结构框图如图2所示。
为了描述CPU间的共享与竞争,我们把CPU对内存组的访问分为HOLD,READY,RUN这三种关系。当一个CPU进入总线读写之后,SBSN在总线周期的前两个时钟将CPU发送到总线上的数据进行锁存:如果数据通路已被占用,当前CPU就会进入HOLD状态,直到数据通路释放。也就是说,如果有两个或两个以上的CPU要求同时对同一内存组进行访问的话,则只能有一个CPU获得访问权,其它的必须等待该CPU总线读写周期的结束,在此之后,处于 HOLD状态的优先级最高的CPU才会被释放;如果通路畅通,SBSN经过一个短暂的READY状态后,在输出端口仿真出CPU总线周期前两个时钟的时序信号,向下一级传递。在理想情况下,8个CPU可以同时对内存进行访问,即8个CPU都处在RUN状态。
因为系统在运行过程中,总是由CPU主动向内存发出读或写的请求,并不存在一个环状闭合的数据通路,所以不会有冲突死锁的情况出现。
SBSN可以支持高位交叉和低位交叉这两种对存储系统的访问方式:对20位地址总线来说,如果采取低位交叉寻址方式,那么系统目标模块的编码由地址总线的 A2,A1给出,A0和BHE信号用来对低8位和高8位寻址;如果采取高位交叉寻址方式,那么系统目标模块的编码由地址总线的高四位决定,具体采用哪两位,则取决于内存的编址。低位交叉主要用于对共享内存的并行访问,高位交叉则主要用于一CPU对另一CPU的局部内存(双口)进行访问。
采用硬件描述语言(HDL)的输入方法进行SBSN的设计,虽然有可能会牺牲一些FPGA资源,但方便了在不同厂家的FPGA上进行逻辑综合和实现的过程。因为宇航级的FPGA在XILINX和ACTEL都有生产,但两者实现的机理不同:XILINX的FPGA是SRAM型的,因此使用时还必须配备相应的SROM以实现对FPGA片子的加电下载,但它可以进行多次刷新和修改,便于在设计阶段进行调试;ACTEL的宇航级FPGA采用的熔断丝技术,只能一次编程下传,实际应用时不需任何辅助器件,但缺点是设计的每一次修改都必须换用新的FPGA片子。对于原理样机阶段而言,主要着眼于功能和时序的实现,因此本文采用XILINX公司的商业级FPGA(XCS20-4PQ208C)进行设计与调试。XCS20-4PQ208C属于SPARTAN系列,是 XILINX公司新近推出的产品。与4000系列相比,SPARTAN中去掉了许多不常用的资源,在价格上可以便宜很多,对于SBSN来讲,最重要的是满足其多达140个用户的I/O,因此采用XCS20-4PQ208C是融合了性能、容量和价格的一个综合选择。
对于其它将来可能在星上采用的高性能CPU,例如80386,由于其32位地址总线和32位数据总线是分开的,做在同一块FPGA内部将会面临I/O数不足的问题。因此必须将地址总线、数据总线、控制总线分在两块相互耦合的片子上实现,但其实现原理与SBSN是完全相同的。
SBSN是我们在提高星上计算机处理能力方面一个有益的尝试。如果能以一个相对简单、便宜而又高可靠性的系统,达到3~4倍的加速比因子,那么,对小卫星事业来说,将是一件很有意义的事情。
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)