张燕青 卢 山
(西安电子工程研究所 西安710100)
Intel X86 系列计算机在嵌入式装备中有大量应用,它的用法通常有两种形式:一是直接采用X86 CPU 及其芯片组进行设计、布板;另一种形式是采用嵌入式计算机模块、设计一个载板。前一种方式设计得到的计算机主板优点是结构紧凑、一体化强,缺点是布板成本高、设计周期长。后一种方式是把现成的计算机模块作为一个元件,设计者仅需要设计一个I/O 扩展载板,设计比较容易。再有一点,军事装备研制周期通常需要5 ~10年,定型后装备部队的生产周期通常也为10年左右,而新的Intel X86系列CPU 持续供货周期仅为7 ~8年,装备在生产过程中常常面临元件换型问题,有时甚至在装备刚刚定型,原先选用的CPU 就要停产了。在这种情况下,若采用第一种方法,则需要重新设计印制板;采用第二种方法,由于嵌入式计算机模块在设计时通常遵循标准协议,后续新的模块只要与以前的模块协议标准相同,就可以直接更换模块,不需要重新设计硬件。这种方法带来的好处是显而易见的。可以选用的嵌入式模块的种类多种多样,文献[1]采用的PC104 模块主频偏低,无法完成测控车所需要的大量实时接收任务,文献[2-3]采用的COM 模块功耗较高、外形尺寸较大,本文采用基于COM-E标准的Nano 模块,外形尺寸如一张名片大小,主频可达1.6GHz,模块内还集成了4GB 的固态电子盘,而本身功耗仅5W 左右,非常适合嵌入式应用。
COM-E 标准来源于COM(Computer On Module)标准,主要是增加了PCI-Express 总线的扩展功能。COM 标准是计算机应用领域继PC104 后最为成功的嵌入式模块标准,得到广泛的应用。在PC104 标准中,总线接口仅有ISA 总线和电源信号,其它的键盘、鼠标、显示器等接口都要从模块上引出电缆。COM 标准的最大特点是所有对外接口都汇集到与载板相连的接插件中,因此,基于COM 模块设计的载板可以没有任何电缆。除此之外,COM 标准中包含了PCI总线,丰富了I/O 接口设计。
随着PCI总线向PCI-Express 总线的发展,COM 标准中的PCI总线也更改为PCI-Express 总线,从而形成了新的COM-E 标准。COM-E 标准发布于2005年夏天,由PICMG 研发和维护,它定义了新的模块化电脑的物理尺寸、接口连接及散热接口。COM-E 标准中包含了当今计算机界广泛使用的外设接口,包括USB、SATA、PATA、Ethernet、VGA、LVDS、DVI、HDMI、SDVO、PCI和PCI-Express等,还定义了三种模块尺寸:紧凑型、基本型和扩展型。后来,PICMG 在COM.0 Rev 2.0 版本中推出了第四种类型:迷你型,这就是Nano 模块。
Nano 模块的物理尺寸为84mm×55mm,与一张名片大小相当。它的背面有一个表贴的220 芯连接器,分为A、B 两排,这220 芯中囊括了Nano 模块所有对外接口信号。Nano 模块通常的框图如下(以使用Intel 灵动系列CPU 的Nano 模块为例)。
图1 Nano 模块框图
Nano 模块需要的电源有三种,分别是主电源、Standby 电源和CMOS 电源。这些电源都从模块对外的接插件引入,其中主电源输入占用了21 个电源输入端和27 个回线端,可以给Nano 模块提供高达120W 的电源容量。大部分的Nano 模块不需要Standby 电源供电,但有些型号的Nano 模块要求系统工作前,Standby 电源必须加电。为确保Nano 模块以及后续的模块能正常工作,最后统一给Nano 模块加一个+5V 的电源。Nano 模块主电源的输入范围比较宽,通常为+3 ~+20V,为减少电源供电种类,可以选择和Standby 电源电压相同的+5V。CMOS 电源可以用钮扣电池供电。
给Nano 模块供电最好用印制板线路而不是电源层,因为电源层的波动对Nano 模块上使用的LVDS、PCI-Express 等低电压、高速率的总线干扰较大,使其正常工作受影响。一根印制板铜线通过电流能力的大小与其温度上升值有关,通常用电流流经导线时,在一定时间内使其温度升高不超过10℃或20℃的电流值作为铜线通过的最大电流。导线宽度与电流的关系如下表所示[4]。
现在常用的印制板铜层厚度为1oz,也就是厚度为35μm 左右。Nano 模块功耗为10W(+5V,2A)左右,考虑到军事装备降额设计的要求,我们选用200mil 宽度的印制板铜线给Nano 模块供电。
Nano 模块对外连接器上还有电源开始按钮信号输入端,该信号接地就可以启动Nano 模块加电工作。由于我们研制的设备安装在组合框架里,要求组合加电后Nano 模块就开始工作,无需进行外部控制,因此把信号通过电阻上拉到VCC 上。
对于X86 系统的调试和应用来说,键盘、鼠标接口是必不可少的。虽然Nano 模块由于物理尺寸的限制,本身并不提供键盘、鼠标接口,但我们还是可以通过LPC 总线扩展的方法连接键盘、鼠标。LPC 总线是X86 系统去除ISA 总线后用于扩展低速外设的专用总线,它的特点是总线引脚数少,仅用4根信号就可以实现外设的扩展。选用扩展芯片时要注意Nano 模块的BIOS 系统是否支持,对于BIOS系统支持的芯片,BIOS 会对应用软件模拟原有键盘、鼠标接口的寄存器操作,原来编写的应用软件不用做任何修改就可以正常使用键盘、鼠标。我们选用的扩展芯片时Winbond 公司生产的W83697HF,该芯片可以连接LPC 总线,提供并口、串口、键盘、鼠标的支持。
表1 导线宽度与电流关系
Nano 模块对外连接器上设置了LVDS 视频显示接口,它基于LVDS 串行差分高速总线技术,采用一对时钟信号和多对数据信号,适合在一个独立机箱内直接与液晶显示屏连接。LVDS 视频显示接口的缺点是信号线较多,LVDS 信号本身也容易受到干扰,如果要把视频信号送到机箱外部,还是要转成其它标准的视频接口为好。考虑到多数的加固显示器还是采用VGA 接口,所以有必要设计LVDS 接口到VGA 接口的转换电路。
转换电路的设计方法是先把LVDS 串行信号进行串行到并行的变化,得到R、G、B 各个颜色分量的数据,然后把并行的数据进行DA 转换成模拟量的输出,可以采用的芯片是 SN75LVDS86A 和ADV7127。SN75LVDS86A 具有三路数据转换通道,数据吞吐率可达178.5Mbytes/s,可以完成LVDS 串行信号进行串行到并行的变化,适用于SVGA、XGA和SXGA 标准的视频接口数据传输。ADV7127 具有三路高速DA 变换器,变换率高达330Mbps。这两款芯片串联配合使用,完成从LVDS 到VGA 标准的转换。
Nano 模块对外的总线有两种,一种是LPC,另一种是PCI-Express。LPC 总线的扩展需要BIOS系统支持,一般用于CPU 系统部件的扩展,不用于用户IO 设备的扩展。所以如果Nano 模块需要IO设备的扩展,需要用PCI-Express 来实现。
使用Nano 模块的PCI-Express 接口有两种方式,一种是使用专用总线桥接芯片,例如PLX 公司的PEX8311[5],另一种是采用带PCI-Express 硬核的FPGA 芯片来实现。前一种方式PEX8311 与以前的PCI桥接芯片类似,提供CPU 内存空间到外部空间的映射转换,软件驱动方式与PCI桥接芯片也是兼容的。唯一不同的是PEX8311 与CPU 连接方式是串行的,信号线数量少。这种设计方式下,用户需要用FPGA 芯片设计一个时序状态机,实现用户IO 系统与PEX8311 芯片的连接。后一种方式用IP核的方式把桥接芯片的功能合并到FPGA 中,在一片FPGA 中同时实现了总线桥接和时序状态机,这样就减少了芯片数量,设计更为紧凑。我们选择后一种方式实现PCI-Express 接口的扩展,采用的FPGA 为Xilinx 公司的Spartan6 系列FPGA。
Xilinx 公司的PCI-Express 硬核是基于GTP(吉比特收发器)收发器组件的[6]。每个GTP 收发器组件由发送单元和接收单元组成,可以实现吉比特数据的发送和接收,原理框图如下。
图2 GTP 原理框图
GTP 收发器作为本系统的核心,在整个系统中实现最关键的数据转换功能,提升了系统的稳定性和数据传输的速率。GTP 是集成在Spartan-6 系列FPGA 中的低功耗收发器,具有高度可配置性,与FPGA 上的可编程逻辑资源是紧密结合的。Spartan-6 FPGA GTP 收发器的每一个GTP 收发器均包括独立的发送器和接收器,发送器和接收器均由物理编码子层Physical Coding Sublayer(PCS)和物理媒介适配层Physical Media Attachment(PMA)两个子层组成,其中PCS 子层负责8B/10B 编解码和CRC校验,并集成了负责通道绑定和时钟修正的弹性缓冲8B/10B 编码可以避免数据流中出现连0 连1 的情况,便于时钟的恢复。弹性缓冲可以解决恢复时钟与本地时钟不一致的问题并进行数据速率的匹配,使得通道绑定成为可能。PMA 子层中集成了SERDES 发送和接收缓冲时钟发生器及时钟恢复电路,SERDES 是一个串/并转换器负责FPGA 中本地的32 位并行数据,也可以是16 位或8 位与GTP 收发器接口的串行数据之间的转换,采用串行数据收发可以在高频条件下很好地避免数据间的串扰。时钟发生器和时钟恢复电路用于将时钟与数据绑定发送以及将时钟从接收到的数据流中恢复出来,从而避免了在高速传输条件下时钟与数据分开传输所带来的时钟抖动等问题。
PCIExpress 硬核由下至上分为物理层、数据链路层和事务层。物理层采用片上的高速吉比特收发器GTP 实现高速串行数据的传输,同时要实现数据包的合并和拆分。链路训练和初始化8B/10B 编解码操作数据链路层位于物理层和事务层之间,主要实现链路管理和数据完整性校验等功能。事务层位于最顶层,接收用户逻辑产生的TLP(transaction layer packets)经过调度传到合适的VC(virtual channel)中,同时它也负责向用户逻辑发送接收到的TLP 数据包。事务层是PCI-Express 总线层次结构的最高层,该层次将接收PCI-E 设备核心层的数据请求,并将其转化为PCI-E 总线事务。PCI-E总线使用的这些总线事务在TLP 头中定义,而用户逻辑主要与事务层和配置模块进行交互,一方面读取配置模块的控制和状态参数,用于设置PXIExpress 设备的工作状态,另一方面将DMA 读和写操作转化为向事务层发送存储器读、写请求TLP 和接收事务层的存储器读完成TLP。PCI-Express 硬核原理框图如图3所示。设计时序状态机的主要任务就是根据PCI-Express硬核接口设计与之相适应的控制逻辑。按照系统要求,时序状态机一般包括如下几个部分:接收模块、发送模块、中断申请、DMA 控制模块和数据存储区等。时序状态机框图如下图所示。
图3 PCI-E 硬核原理框图
图4 时序状态机框图
我们研制的系统控制器是地面测控车的重要组成部分,它完成弹道测量数据预处理、系统时序产生、分机工作模式/参数下达、工作状态上报等功能,要求计算能力强、数据吞吐率高。系统控制器以Nano 模块为核心元件,它的供电、键盘/鼠标、显示等接口采用前面所述的方法进行设计,用其自带的PCI-Express 总线扩展I/O 接口。为了提高PCI-Express 总线效率,减少数据收发对Nano 模块的影响,我们采用IDT 公司的双口RAM 器件IDT70V06作为数据交换的接口器件。IDT70V06 共有16KB的RAM,可以分成两个8KB 的区域,分别用于Nano模块发送和接收处理。系统控制器接收到弹道测量数据后,先存放在双口RAM 的接收区域,然后利用IDT70V06 的中断信号线通知Nano 模块,Nano 模块接收到中断信号后,进入中断服务程序,在中断服务程序中启动PCI-Express 的DMA 传输方式,一次性把数据从双口RAM 都读到内存中;Nano 模块对这些数据进行预处理,再打包通过以太网络接口发送给数据处理单元进行弹道滤波和外推。
系统时序的产生由FPGA 来完成。每个脉冲相关处理周期内安排的工作内容都是变化的,需要Nano 模块根据上一个脉冲相关处理周期测量、控制的结果进行设置。Nano 模块在每个相关脉冲处理周期的末尾,对下一个脉冲相关处理周期内的每一个脉冲重复周期应该完成的工作进行编排,启动PCI-Express 的DMA 传输方式,一次性把工作安排内容都写到双口RAM 中,并触发中断,通知FPGA读取。FPGA 读取到工作安排数据后,在下一个脉冲相关处理周期到来时,逐个生成需要的系统时序信号。
Nano 模块具有体积小、功耗低的特点,PCI-Express 总线吞吐率高,且自带4GB 的电子盘,很适合在嵌入式设备中使用。低温试验表明,Nano 模块在-40℃依然可以正常工作。在我们历次试验中,Nano 模块都未出过故障,是一款质量可靠、性能优良的CPU 模块,很适合用于嵌入式计算机板的开发。
[1]雷刚,汪健等.基于PC104 和PCL6025B 的数控切割机控制系统设计[J],制造业自动化,2014,36(3):148-151.
[2]徐宏,方方等.基于ETX 载板测控平台的研制[J],核电子学与探测技术,2013,33(9):1139-1143.
[3]李孟华,栾前进等.基于ETX 模块的机载数据处理模块的设计[J],航空计算技术,2011,41(6):116-118.
[4]高峰鸽,宜健.PCB 电源布线设计[J],无线通信技术,2011,11(4):116-118.
[5]申得玉,张善从.PEX8311 芯片在图像模拟源中的应用[J],计算机技术与发展,2013,23(10):143-150.
[6]Xilinx.UG386 Spartan-6 FPGA GTP Transceivers User Guide[N].2010.