引言
多节点系统,在目前的很多电子系统应用场合都可以看到。这种多节点系统由于具有结构可扩展性、功能配置的灵活性以及便于查找故障节点等良好的可维护性得到了越来越广泛的应用。通常,多节点系统各个节点的主要硬件构成有很大的相似性。特别是近年来, FPGA 这个强大的平台让多节点系统各个节点的硬件构成拥有了更广泛的通用性。尤其是随着 IP 核技术的推广,再加上一些功能强大的 CPU 核的出现,如 Xilinx 公司提供的 PicoBlaze 和 MicroBlaze 等,使得目前的许多系统的主要功能都可以由大容量的 FPGA 实现,而无需再使用比较昂贵的高性能微处理器。
对于节点系统,这将大大降低系统成本。对于由大容量 FPGA 构成的多节点系统,系统的升级是一个费时费力的工作。此时,FPGA 的远程升级能力就显得尤为重要。对于包含 arm、DSP、PowerPC 等高性能嵌入式微处理器的多节点系统,使用这些嵌入式微处理器,采用 SELECTMAP 对 FPGA 进行加载并实现远程升级,无需增加过多的外部器件,是非常经济和高效的。但对于核心器件就是大容量 FPGA 的系统,如果由 FPGA 本身来接收升级数据并写入存储配置数据的非易失性存储器,一旦升级失败,将无法再次升级,从而限制了它在许多需要高可靠性要求或者维护人员不便于到达的场合的应用;而如果单纯为了实现系统的远程升级而加入价格昂贵的嵌入式微处理器,又会较大地增加系统成本和复杂性。针对这种情况,笔者设计了利用 ATmega64 单片机和 RS485 总线,加上接入以太网的主控计算机构成的远程升级系统,解决了上述问题。
1 系统设计
1.1 系统结构设计
远程升级系统主要由一台接入以太网的主控计算机、半双工 RS485 总线以及各个子节点构成,组成结构如图 1 所示。主控计算机通过以太网从外部获取整个系统各个节点的升级数据,然后通过 RS485 总线向各个子节点发送其对应的升级数据,完成多节点系统的升级。RS485 总线采用一主多从的半双工方式,主控计算机为总线的主控制器,只能由它向各个节点发起通信连接,其余子节点只能响应主控计算机的控制命令。
1.2 节点升级原理
各个节点通过 RS485 总线与主控计算机相连,在无升级数据时,总线可以用来传输主控计算机对各个节点的查询和控制命令。主控计算机与各个节点的通信协议可以采用具有查询控制帧、应答帧和数据帧 3 种帧类型的协议。只有主控计算机可以发送查询控制帧,查询或设定各个节点的远程升级状态或工况信息。子节点接收主控计算机的命令和数据,发送应答帧,并完成自身的升级。
2 子节点的硬件设计
2.1 子节点硬件结构框图
如图 2 所示,以一个由 Xilinx 公司的 XC3S4000 大容量 FPGA 构成的系统为例,远程升级系统子节点的硬件电路主要包括: ATmega64 单片机,用于存储大容量 FPGA 配置数据的 Flash,以及接入 RS485 总线的半双工总线收发器。ATmega64 单片机用于实现对大容量 FPGA XC3S4000 的加载,以及从 RS485 总线接收 FPGA 的升级数据并写入拥有 2 MB 存储空间的 Flash 存储器 SST36VF1601C 中。RS485TTL 电平变换电路采用 RS485 收发器 SP485R。
2.2 子节点硬件设计说明
在子节点的硬件设计中,ATmega64 单片机是实现整个升级功能的关键。ATmega64 是基于增强的 AVR RISC 结构的低功耗 8 位 CMOS 微控制器。由于其先进的指令集以及单时钟周期指令执行时间,ATmega64 的数据吞吐率高达 1 MIPS/MHz,从而可以缓解系统在功耗和处理速度之间的矛盾。AVR 内核具有丰富的指令集和 32 个通用工作寄存器,并且所有的寄存器都直接与算术逻辑单元(ALU)相连接,使得 1 条指令可以在 1 个时钟周期内同时访问 2 个独立的寄存器。这种结构大大提高了代码效率,并且具有比普通的 CISC 微控制器最高至 10 倍的数据吞吐率。ATmega64 有如下特点:
① 64 KB 的系统内可编程 Flash(具有同时读写的能力,即 RWW),2 KB 的 EEPROM,4 KB 的 SRAM,32 个通用工作寄存器;
② 53 个通用 I/O 口线;
③ 实时计数器(RTC);
④ 4 个具有比较模式与 PWM 的灵活的定时器 / 计数器(T/C),具有片内振荡器的可编程看门狗定时器;
⑤ 2 个 USART,面向字节的双线串行接口(TWI),1 个 SPI 串行端口;
⑥ 8 路 10 位具有可选差分输入级可编程增益的 ADC;
⑦ 与 IEEE 1149.1 标准兼容的,可用于访问片上调试系统及编程的 JTAG 接口。
ATmega64 是以 Atmel 高密度非易失性存储器技术生产的。片内 ISP Flash 允许程序存储器通过 ISP 串行接口(或者通用编程器)进行编程,也可以通过运行于 AVR 内核之中的引导程序进行编程。通过将 8 位 RISC CPU 与系统内可编程的 Flash 集成在一个芯片内,ATmega64 成为一个功能强大的单片机,为许多嵌入式控制应用提供了灵活而低成本的解决方案。
利用 ATmega64 单片机实现对大容量 FPGA 的远程升级,涉及的主要技术问题有三点:一是如何将 ATmega64 单片机接入 RS485 总线;二是在接收到升级数据后和加载 FPGA 时,如何利用 ATmega64 单片机对大容量的 Flash 存储器进行读写操作;三是 ATmega64 单片机实现 FPGA 的 SELECTMAP 加载。
2.2.1 RS485 接口电路设计
如表 1 所列, RS485 总线标准具有控制方便、价格低廉以及高噪声抑制、相对高的传输速率、传输距离远和宽共模范围等优点。在过去的 20 年时间里,建议性标准 RS485 作为一种多点差分数据传输的电气规范,被应用在许多不同的领域作为数据传输链路。
表 1 TIA/EIA485 串行通信标准的性能
子节点的 ATmega64 单片机通过 Sipex 公司设计生产的高性能 RS485 收发器接入 RS485 总线。
SP485R 是一款与流行的标准 RS485 芯片完全兼容,而且包含更高的 ESD 保护和高接收器输入阻抗等性能的 RS485 收发器。接收器输入高阻抗可以使 400 个收发器接到同一条传输线上,又不会引起 RS485 驱动器信号的衰减。该收发器的特点如下:
① 允许超过 400 个收发器接到同一条传输线上;
② 接收器输入高阻抗(标准值 RIN=150 kΩ);
③ 半双工配置与工业标准引脚一致;
④ 共模输入电压范围为 -7~+12 V;
⑤ 低功耗(250 mW);
⑥ 独立驱动器和接收器使能引脚。
其典型应用电路如图 3 所示。
ATmega64 单片机的标准串行口通过 RXD 直接连接 SP485R 芯片的 RO 引脚,通过 TXD 直接连接 SP485R 芯片的 DI 引脚。由单片机输出的 R/D 信号直接控制 SP485R 芯片的发送器 / 接收器使能:R/D 信号为 1,SP485R 芯片的发送器有效,接收器禁止,此时单片机可以向 RS485 总线发送数据字节;R/D 信号为 0,SP485R 芯片的发送器禁止,接收器有效,单片机可以接收来自 RS485 总线的数据字节。上拉电阻 R1、下拉电阻 R2 用于保证未连接总线时的 SP485R 芯片处于空闲状态,以提高每个 RS485 节点的工作可靠性。6.8 V 的 TVS 管 V1、V2、V3 用来保护 RS485 总线,避免 RS485 总线受外界干扰时产生的高压损坏 RS485 收发器。
2.2.2 ATmega64 存储空间的扩展
ATmega64 的寻址空间为 64 KB,利用 ATmega64 自身的寻址系统,只能访问 0x0000~0xFFFF 的地址空间。显然,这对于存储和加载大容量 FPGA 的配置数据是远远不够的。以 Xilinx 公司的 Spartan3 系列 FPGA 为例,其配置数据所需的存储空间如表 2 所列。
表 2 Spartan3 系列 FPGA 配置文件大小
以 XC3S4000 型 FPGA 为例,它的配置文件所需的存储空间约为 1.35 MB,已远远超出了 ATmega64 单片机的寻址空间。因此,为了能够利用 ATmega64 单片机来实现对 FPGA 配置数据的读写,必须对其寻址空间进行扩展。扩展的硬件连接框图如图 2 中的单片机与 Flash 的连接部分所示。
本设计中是使用通用 I/O 来扩展 ATmega64 单片机的寻址空间的。ATmega64 单片机的总寻址空间为 64 KB,但片内 4 KB 的 SRAM 及各种寄存器占用了前面的部分寻址空间,故其片外存储器寻址空间是 0x1100~0xFFFF。因此将 Flash 的低 15 位地址直接接到 ATmega64 单片机的低 15 位地址总线上,其余 6 位高位地址用单片机的通用 I/O 进行选择。寻址时单片机的专用地址口只输出 0x8000~0xFFFF 的地址数据,与通用 I/O 输出的地址组合后给出 Flash 的读写地址。
通过以上对 ATmega64 单片机寻址空间的扩展方法,可以实现 ATmega64 单片机对合适的 Flash 存储器的寻址操作,从而解决了大容量 FPGA 配置数据的存储和读取问题。
2.2.3 用 ATmega64 实现 FPGA 的 SELECTMAP 加载
Xilinx 公司的 Spartan3 系列 FPGA 加载方式分为 5 种: Master Serial、Slave Serial、Master Parallel、Slave Parallel、JTAG。
按照 FPGA 是否控制加载过程,加载方式可分为 Master 方式和 Slave 方式;按照加载数据时的数据位宽,可分为 Serial 方式和 Parallel 方式。用于加载的引脚主要有: PROG_B,CCLK,RDWR_B,DONE,INIT_B,CS_B,BUSY,D[0~7],M[0~2],HSWAP 和 JTAG 接口(TDI、 TMS、TCK、TDO)。加载过程大体分为 3 个步骤:配置的建立、配置数据的加载和加载完成。
SELECTMAP 即 Slave Parallel 方式,是由外部控制器控制 FPGA 的加载过程,并以 8 位数据的形式向 FPGA 写入加载数据的加载方法。图 2 中 FPGA 与 ATmega64 的连接部分为 ATmega64 单片机采用 SELECTMAP 方式对 FPGA 进行加载的硬件连接框图,具体实现过程如下:
ATmega64 通过将 FPGA 的 PROG_B、CS_B 和 RDWR_B 引脚置低来开启加载过程,FPGA 在 PROG_B 置低后开始清除内部配置 RAM,并将 INIT_B 脚置低。PROG_B 重新置 1 后,在 INIT_B 由低变高的上升沿,FPGA 采样 M[0~2]引脚获取配置方式信息。 ATmega64 监视 FPGA 的 INIT_B 脚,当 INIT_B 脚由低变高时,说明 FPGA 已经完成了内部配置 RAM 的清除工作,并准备好接收配置数据。在 ATmega64 给出的 CCLK 配置时钟的上升沿,配置数据 D[0~7]写入配置 RAM。当 FPGA 接收完所有的配置数据后,DONE 引脚被 FPGA 置为高电平。ATmega64 可以通过监视 DONE 引脚来判断 FPGA 是否加载完成。对于 Spartan3 系列的 FPGA,如果配置 FPGA 的 CCLK 的频率高于 50 MHz,则外部控制器还需要监视 FPGA 的 BUSY 引脚。当 BUSY 脚为高时,说明 FPGA 还未完成上一个配置数据的处理,此时外部控制器需要继续保持上一个配置数据在 D[0~7]引脚,直至 BUSY 引脚回到低电平。对于本设计的应用,ATmega64 给出的配置时钟频率远低于 50 MHz,不必考虑 BUSY 引脚的控制作用。
3 软件设计
3.1 主控计算机的软件设计
主控制计算机的软件运行状态应该分为两种:一是平时的查询控制状态,用来查询和控制系统中各个节点的工作状态;二是系统的升级状态,用来执行对各个子节点的升级控制。如图 4 所示,这两种状态是可以相互转换的。
软件的查询控制状态,是由系统所要实现的主要功能决定的,不属于本文所讨论的范畴。在系统的升级状态,主控计算机先要通过以太网获得系统各个节点的远程升级数据,待全部升级数据接收完成后,向系统的一个节点发送升级指令。节点响应并建立起通信连接后,将该节点的升级数据全部发送到该节点。接下来,主控计算机判断上一个节点是否为最后一个需要升级的节点,如果不是,则继续进行下一个节点升级数据的传输。系统所有的节点升级完成后,等待外部输入的控制命令。例如,让整个系统重新启动,加载新的数据;或暂时不重新启动而返回查询控制状态。软件流程如图 5 所示。
3.2 子节点的软件设计
对于子节点的软件设计,与主控计算机一样,也分为平时的查询控制状态和系统升级状态,并且它们之间也能够与主控计算机一起相互转换;但 ATmega64 单片机还要承担对 FPGA 的加载任务。开机运行后,ATmega64 单片机先加载子节点 FPGA,使子节点能够正常工作。子节点正常工作后,监视 RS485 总线并判断有无对本节点的通信。当主控计算机要求与本节点建立通信连接时,发送反馈信息,与其建立通信连接。子节点根据主控计算机发送的命令,进入查询控制模式或者远程升级模式。进入远程升级模式后,子节点接收主控计算机发来的远程升级数据,升级数据经过校验后写入 Flash。升级完成后继续等待主控计算机的命令,重新启动或继续运行。其具体的软件设计流程如图 6 所示。
结语
FPGA 既继承了 ASIC 的大规模、高集成度、高可靠性的优点,又克服了普通 ASIC 周期长、投资大、灵活性差的缺点,逐步成为许多系统实现的理想选择。特别是随着 FPGA 容量和性能的提升,加上其独特的硬件升级能力,其应用范围越来越广。本文所提出的对大容量 FPGA 构成的多节点系统的远程升级方法,系统构成简单、技术成熟,而且具有明显的成本优势。
评论
查看更多