基于SOPC技术的嵌入式以太网网络终端
扫描二维码
随时随地手机看文章
1 引言
近年来随着网络的快速发展,以太网因其宽带、扩展性强、组网灵活而成为应用最广泛的数据接入网络。以太网的网络终端设备是网络的重要组成部分,是网络与网外互访信息的协议界面和工作平台。嵌入式以太网网络终端设备采用嵌入式处理器技术,使用嵌入式操作系统,内嵌网络接口和网络通信协,可直接接入以太网。由于嵌入式网络终端设备具有成本低、体积小、高可靠、微功耗、环境适应能力强等诸多优势,在通信和工业控制等领域正得到日益广泛的应用。本文主要介绍用SOPC技术构建嵌入式以太网网络终端的设计和实践。基于SOPC技术的嵌入式以太网网络终端能够为多种联网应用提供基本的工作平台。
与当前较为流行的嵌入式处理器如基于ARM内核的处理器、系列处理器等不同,SOPC技术的是把处理器作为“内核”嵌入到芯片中,在可编程芯片上实现系统功能。可嵌入的处理器内核有两种:硬核或软核。其中软核因为成本低、可重构性强、功能灵活、适用的芯片范围广等特点更适合于应用在中小批量生产的差异化产品中。
采用硬件技术处理信号,又可以通过软件反复编程使用,能兼顾速度和灵活性,实时性能可以精确预测和仿真。FPGA芯片的一个显著优势是具有强大的硬件并行处理能力,这种能力不受处理器架构的限制而只取决于芯片的物理资源。随着深亚微米半导体技术的进步,目前FPGA单片所含的逻辑门和片上存储器的容量发展很快,百万门级的可编程逻辑芯片已成为寻常产品。因此在一般算法复杂度的多路信号处理(通常语音通信和工业控制均可归入该范围)中,FPGA比DSP更能胜任工作,而且并行处理的路数越多,这个优势越突出。是公司开发的一种软核处理器。应用SOPC技术把配置进FPGA芯片后,网络终端备不再需要外部处理器,用单一FPGA芯片就可以实现以前需要FPGA+CPU才能完成的功能。
2 网络终端的总体设计
基于SOPC技术的嵌入式以太网网络终端的硬件和固件部分由带软核CPU的FPGA芯片、外部数据存储器FlashRAM和、带AD和DA变换电路的模拟信号处理模块、串行、以太网网络模块及接口、JTAG等组成,见图1。此外还有及配置电路等,从略。
图1 网络终端电路模块示意图
在图1中,FPGA芯片选用公司的Cyclone系列芯片,该芯片采用0.13μm的全铜1.5V 工艺制作,具有5980个逻辑单元(LE),92160个RAM比特,两个数字锁相环(PLL),240引脚封装。
程序存储器选用AMD公司的FlashRAM芯片,存储容量2MByte,擦写次数可达100万次。数据存储器选用公司的芯片MT48LC4M32B2,存储容量16MByte,访问速度5.5ns。使用较大容量的数据存储器主要是为今后试验运行各种不同的嵌入式操作系统预留空间。
以太网接口芯片采用。该芯片是 公司生产的一种局域网信号处理芯片,内部集成了片上RAM,其模拟前端包括了曼切斯特编解码器、时钟恢复电路、10BASE-T收发器和及一个AUI口。的MAC(媒体访问控制)引擎负责以太网数据帧的发送和接收,检测和处理冲突,生成和检测帧引导头(Preamble),自动生成和校验CRC(循环冗余校验)码。芯片在网络物理层符合IEEE802.3以太网标准,支持全双工操作。
A/D和D/A变换器采用ADI公司的芯片。具有一个16bit的AD转换通道和一个16bit的D/A转换通道,A/D和D/A转换通道的增益可分别在38dB和21dB范围内编程控制,每一个通道都在声音频带范围内提供70dB的信噪比。采样频率为8kHz~64kHz,可编程控制,采样字长为16位。选用是因为该芯片不但可应用于一般模拟信号的A/D和D/A变换,而且能够满足语音信号的前端处理要求,便于今后试验功能。
JTAG接口用于从PC机向FPGA芯片下载配置文件以及调试系统,串口用于连接PC机进行系统的软件调试及在联网应用中传送信息到外部设备。
终端的软件部分主要由嵌入式操作系统μC/OSⅡ、网络协议LWIP及应用软件组成。嵌入式操作系统是一种实时的、支持嵌入式应用的操作系统,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议等。与PC操作系统相比较,嵌入式操作系统在系统的实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。
当前各种主要的嵌入式操作系统(如、VxWorks、μC-、μC/OSII等)均在不同程度上支持多种类型的外围硬件设备和多种通信协议,可以有较多的手段实现外围硬件的驱动。完备的操作系统支持很多通信协议,采用操作系统后,可直接调用这些协议实现通信,避免过多的底层编程耗费时间精力,减少出错。
在本网络终端中选择μC/OSⅡ作为嵌入式操作系统。μC/OSⅡ是一个相对成熟而且是免费的嵌入式操作系统,适合小型控制系统,具有执行效率高、占用空间小、实时性能优良等特点。其缺点是对于文件系统及网络的复杂应用等方面的支持逊于商业性的嵌入式操作系统。
在网络通信软件方面,选择了LWIP来实现TCP/IP通信。LWIP是瑞士计算机科学院的Adam Dunkels等学者开发的源代码开放的免费TCP/IP协议栈。LWIP既可运行于操作系统上,也可以独立运行。LWIP可以提供类似于Berkeley 套接字的应用程序接口,使用它编写出来的代码兼容性很好,只要稍微修改就可以移植到别的常用操作系统上。因为μC/OSⅡ操作系统没有自带的TCP/IP协议栈,本网络终端把lwIP移植到μC/OSⅡ操作系统上,使其成为操作系统的网络模块,这样网络通信就可以置于μC/OSⅡ的控制之下。
3 SOPC的开发流程
使用软核处理器开发系统有其独特的开发流程。本文所述工作以采用美国公司的软核处理器Nios CPU为例来进行开发,使用的工具主要是Altera公司的设计软件。这些软件工具包括QuartusⅡ、SOuilder、GNUProToolkit等。
QuartusⅡ是Altera公司的FPGA设计软件,具有设计输入、、仿真、延时分析、编译、下载文件以及配置器件等功能。SOPC Builder用于在QuartusⅡ设计平台上进行系统模块的逻辑设计。用SOPC Builder可以进行系统模块硬件设计和底层软件生成。进行硬件模块设计时,SOPC Builder提供图形化配置界面,备有一些常用外设的IP模块,如、FlashRAM、、 、Intervaltimer、ParallelI/O等。这些已开发好并已经引入到SOPC Builder环境中的功能模块被称为部件,打开SOPC Builder的图形界面时可以在左边看到这些功能部件。用户还可以用“to ”加入自己的外设设计文件,或直接加外设接口。可以采用的外设设计文件是用或Verilog HDL等描述语言写的.vhd或.v文件、由MAX+plusII生成的EDIF文件、或用QuartusⅡ输入的电原理图。SOPC Builder可以进行系统配置以及生成,系统配置除了对外设设置外还包括启动程序、中断向量表、系统启动地址等的设置。应用软件的设计在Cygwin环境中使用GNUPro工具包进行,该工具包含有编译、下载软件、以及常用文件的操作命令等,熟悉Cygwin和的开发者很容易使用。SOPC开发的整个流程如图2所示。
图2 SOPC开发流程
进行系统设计时,先在QuartusⅡ中新建一个工程,然后按图2流程进行设计。图中,第一步是确定CPU,设置CPU是16位还是32位、要不要加硬件乘法指令等,这一步在“Configure Processor”中进行。第二步是选择外围设备比如、SDRAM、FlashRAM、以及通用I/O等,加入用户电路模块到系统中也是在这一步。
第三步是生成,即生成用HDL语言描述的硬件组件以及用于软件开发的SDK。至此的三步都在SOPC Builder中进行。接下来分为硬件设计和软件设计两路。在硬件设计方面,按图2左边所示流程进行片上系统设计、添加用户电路,包括电路联线、芯片选型、管脚设置等,通过系统后编译生成.sof文件,并可根据需要对系统硬件进行功能模拟和时序仿真分析。在软件设计方面,按图2右边所示流程进行软件设计、编译、链接,这一步的工作环境主要为SOPC Builder的软件开发环境,也被称为Cygnus。编译软件代码用nios-build,简写为nb,用srec-flash来产生从FlashRAM启动的代码,下载软件到系统中用nios-run,简写为nr。软硬件的设计流程在最后又汇总在一起,将设计好的电路配置文件.sof通过JTAG下载到Altera FPGA中进行调试。
4 嵌入式网络终端的设计要点
4.1 Nios处理器的
本网络终端使用32位处理器,通过QuartusII设计平台上的SOPC Builder软件把Nios软核处理器配置到FPGA芯片中。Nios软核能够按照需求配置成16位或者32位的处理器,指令位数是16位。一般来说,16位处理器做成的系统反应要比32位的快,但32位处理器可管理的资源要比16位多。数据总线、地址总线、寄存器以及算术逻辑单元的位数可根据需要配置成16或32位。寄存器个数也是可以配置的。
Nios CPU的体系结构有1个通用寄存器组,10个控制寄存器,1个程序寄存器,1个K寄存器。在32位Nios CPU中每个通用寄存器的位宽为32。通用寄存器组中寄存器的数目可以根据需要设置成128、256或512个。某一时刻,Nios可以直接访问(不改变CWP)的通用寄存器共有32个,称为寄存器窗口。组中寄存器的个数被称为窗口的长度,又被称为寄存器窗口的大小,值为32。寄存器窗口有四部分,处于最底端的8个寄存器被称为全局寄存器,分别是%r0~%r7,也称为%g0~%g7;全局寄存器不随寄存器窗口位置的改变而改变,CPU对其随时可以存取。剩下的24个寄存器通过当前寄存器窗口来存取。最上端的8个被称为输入寄存器,紧接着输入寄存器之后的被称为局部寄存器,在局部寄存器和全局寄存器之间的8个寄存器为输出寄存器。
4.2 FPGA片上系统
片上系统包括CPU以及和CPU紧密相连的总线系统和外围硬件等。通过SOPC Builder可以选择和设置片上系统模块的部件,分配和修改系统对各部件的地址以及中断号。
SOPC Builder为Nios设计了一种特别的总线———Avalon总线。Avalon是一种简单的总线结构,规定了主部件和从部件之间的接口以及部件间通信的时序。Avalon总线由有源逻辑单元构成,用于代替传统板子上的金属线。SOPC Builder根据系统配置生成Avalon总线的.vhd文件,最后由QuartusⅡ根据.vhd文件成片上总线结构。本网络终端片上系统的设置情况可以见图3,该图是SOPC Builder软件的部件设置界面。可以直接在该界面把起始地址和中断号修改成合适的值。
图3 系统地址和中断号分配情况
除了设置具体的部件外,还需要再设置系统的启动地址、中断向量表、程序内存、数据内存、主串口以及辅助串口,见图4。这些设置和软件目标文件的链接过程紧密相关。SOPC Builder将根据这些设置来生成cpu-sdk目录中子目录lib、inc的相关文件。
图4 系统启动地址、程序内存、数据内存等设置情况
4.3 网络接口控制
设置以太网接口芯片工作于I/O模式。通过对芯片各寄存器的操作可设置网络终端的功能和读取状态信息。CS8900A的主要寄存器有:
LineCTL:决定CS8900A的基本配置和物理接口,设置初始值为00D3H,选择物理接口为10BASE-T。
RxCTL:控制CS8900A接收特定数据报,设置RxTCL的初始值为0D05H,接收网络上的广播或目标地址同本地物理地址相同的正确数据报。
RxCFG:控制CS8900A接收到特定数据报后会引发接收中断,RxCFG可设置为0103H,收到正确数据报时产生接收中断。
BusCTL:控制芯片的I/O接口操作,设置初始值为8017H,打开CS8900A的中断总控制位。
ISQ:中断状态寄存器,内部映射接收状态寄存器和发送中断寄存器内容。
Port0:发送和接收数据时,CPU通过Port0传输数据。
TxCMD:发送控制寄存器,如果写入数据00C0H,那么网卡芯片在全部数据写入后开始发送数据。
TxLength:发送数据长度寄存器,发送数据时,首先写入发送数据长度,然后将数据通过Port0写入芯片。
系统上电时,首先对CS8900A进行初始化,写寄存器LineCTL、RxCTL、RxCFG、BusCTL。发送数据时, 写控制寄存器TxCMD,并将发送数据长度写入TxLength,然后将数据依次写入Port0口,数据就可以发送出去了。接收到数据时CS8900A将触发中断,在其中断处理程序中可以接收数据并处理。
4.4 AD/DA电路
网络终端能够采集数字信号和模拟信号,数字信号可直接送入FPGA处理,模拟信号则需通过AD73311L芯片转换为数字信号后送入FPGA处理。AD73311L工作时先进行初始化,设定采样率、输入输出增益等,再让其工作在数据传输模式下就可正常工作。
AD73311L的数据采用串行方式与FPGA芯片通信,可以减少芯片间的连线。在FPGA内部,要做串行/并行和并行/串行的变换。为了使AD73311L受CPU的控制,在SOPC Builder中通过使用“to ”功能添加了专门用于AD73311L的组件ad/da,并设置相应的管脚与外电路相连。
4.5 软件组成
和Nios CPU配套的软件开发工具可在cygwin中使用。cygwin是RedHat公司开发的运行于windows平台下的仿linux环境。因此为Nios编写程序并编译链接的过程和通用linux下面的过程很类似。
软件组成从逻辑上可以分为5部分,其中启动程序Germ Monitor自成一部分,由Altera公司提供。其余4部分由设计者组织并编写修改.基于SOPC技术的结构如图5所示。
图5 软件包结构图
由源代码得到最终可运行文件的过程由一种特殊的文本文件Makefile控制。Makefile文件用于指导源程序文件到目标文件的编译过程以及目标文件链接成可执行文件的过程,因此可以看成是整个软件程序的管理文件。Makefile文件采用文本文件格式,配合Make程序创建最终的应用程序。Makefile文件定义了目标文件(target)和依靠文件之间的依赖关系,以及由依靠文件产生目标文件应该执行的命令。
整个软件包共有4个Makefile文件。μC/OSⅡ操作系统的Makefile文件位于目录librtos32中,负责编译操作系统代码,最终产生操作系统支持库文件librtos32.a。网络通信协议lwIP部分的Makefile文件位于src目录,负责编译网络支持部分代码,最终生成库文件liblwip.a。网络终端应用软件的Makefile文件位于顶层目录UCOSII-lwip中,它将指导编译器生成库文件liblwipapp.a。主Makefile文件也位于顶层目录中,用于生成最终下载到电路板的可执行程序。
4.6 系统的启动
网络终端采用的启动程序为Nios开发工具包中自带的监控程序Germ Monitor,略做修改。它的代码短小,是一个小型的shell程序,配置在FPGA的片上ROM内,可以在操作系统运行之前启动系统。在配置硬件的时候,设置Nios的启动地址为片上ROM的地址,系统上电复位时将从该地址运行。也可以采用别的启动方式,比如可以直接从Flash RAM驱动。对硬件的初始化检测、硬件外围设备工作状态的设定都可以在启动程序中进行。执行初始化之后,Germ Monitor把放置在Flash RAM中的应用程序加载到SDRAM中,然后跳转到应用程序,即可按设计要求运行以太网网络终端的各项功能。
5 结语
经过以上设计,调试除错后,嵌入式以太网终端就能够正常工作了。把两块这样的终端电路板用网线连接到局域网上,分别设定其IP地址,运行应用软件即可实现多种功能。把PC机的串口和网络终端的串口互连,能够从PC机监视终端的工作状态。
经试验,在这两个终端间成功地实现了语音通信和Telnet数据通信。限于篇幅,这方面的将另文介绍。
以上的研究试验表明,采用SOPC技术,能够为设计嵌入式以太网网络终端设备提供一种高效、灵活、低成本的解决方法,SOPC技术的多项特点使其成为嵌入式系统的一种富有竞争力的。