1)通用IO口PIO1只是当作输出口使用,用于控制连接/断开服务器电源的两个继电器、表示服务器状态的双色发光二极管(红绿两种颜色)和用于显示时间间隔(用于决定多长时间检测服务器的状态)等级的一位八段数码管。LED1、LED2分别用于指示两台服务器的工作状态,绿色表示对应服务器正在工作;红色表示对应服务器停止工作;红色闪烁表示对应服务器发生故障,此时蜂鸣器会发出报警声音。上图中没有画出相应的驱动电路[7]。PIO1共占16位,高八位用于控制八段数码管;0~3位用于控制两个双色发光二极管;4~5位用于控制两个继电器;6位用于控制蜂鸣器。
2)通用IO口PIO2只是当作输入口使用,用于接受仲裁器上的控制按键。仲裁器上的SWA、SWB及SWL分别表示开启A服务器、开启B服务器及设置时间间隔等级的按键。SWA和SWB是开关型按键,即:按一下开,再按一下就关。SWL按键从0~9循环改变时间间隔的等级,并在八段数码管上显示等级。
3)IDE接口控制器是自定义用户逻辑,用于访问与仲裁器连接的IDE硬盘。
4)Timer1定时器用于控制各台服务器的工作时间以及定时查询服务器的工作状态的,该定时器采用中断方式工作。
5)Flash控制器,这里指的是CFI(Common Flash Inte
6)SDRAM控制器,用于连接片外64MB同步动态随机访问存储器,以便于为程序提供运行环境。
7)UART0和UART1通过电平转换芯片(MAX3232)转换成RS-232电平以便与服务器通过串口通信。
8)WD Timer定时器,在这里作为看门狗定时器使用,以便提高仲裁器的可靠性,在仲裁器中运行的程序出现故障时,它给系统提供复位信号。
该系统是使用Quartus II进行硬件设计的,用其中的SOPC Builder工具[4]进行Avalon架构设计,图3是仲裁器的Avalon架构的设计最终界面。由于篇幅有限,此处仅提供UART0、UART1和IDE硬盘相关的部分原理图,如图4所示。
图3 SOPC Builder设计界面
图4 部分原理图
4.2 软件设计思想
以上主要介绍了硬件部分的设计思想,下面简单描述一下软件开发的相关思想。该仲裁器的软件开发使用Nios IDE[6](Nios集成开发环境),主要包括如下模块:
1)状态获取模块:该模块被Timer1定时器中断例程定期调用,主要用于获取服务器的当前状态,其设计流程如图5所示:
图5 状态获取模块流程
2)显示模块:用于输出用户关心的信息,如根据服务器的状态用不同颜色点亮双色发光二极管、显示当前时间间隔等级以及控制蜂鸣器报警。
3)通讯模块:主要用于与服务器进行通讯,以便给服务器发送命令以及获得工作服务器的同步信息并把同步信息写入硬盘中。
4)按键处理模块:用于处理用户按键,根据不同的按键进行不同的控制,如:开/关继电器以及设置时间间隔等级。
5)硬盘访问模块:用于提供对硬盘进行读写操作的函数,以便需要操作硬盘的模块调用。
6)读写Flash的模块:用于读取/修改仲裁器的相关参数,如:各服务器运行时间,检测服务器状态的时间间隔等。
5 结 论
本文提出的软硬件设计思想经实践证明是可行的,并且在实际的系统中工作良好。该思想可以进一步推广到多机容错系统中。在多机系统中,我们在定制好各台机器的工作计划后,就可以利用本文提到的给每台服务器一个计划运行时间这一思想来解决实际问题。另外,使用Nios软核处理器,可以定制很多的UART口,这一点就远远优于需要扩展串口电路的普通单片机,从而在硬件设计和软件设计上大大降低了难度。
本文作者创新点:1) 采用SOC(系统级芯片)设计出温备份高速仲裁器。2) 将同步信息放到了仲裁器中。这样,所有同步信息就不依赖于工作设备(如PC机),所以即使工作设备出现故障也无妨,这样就大大提高了系统的可靠性。3) 能够对工作设备进行计划定制,传统的温备份仲裁器没有这一功能。