SoPC(SystemonProgrammableChip)是一种特殊的嵌入式系统。首先,它是一种SoC系统,即由一个芯片完成系统的主要逻辑功能;其次,它是可编程的片上系统,即可配置、可裁减、可扩展、可升级,具有硬件系统的可编程性。采用SoPC的设计,具有很大的灵活性。
它可以按照须要订制各个硬件模块,包括处理器、总线、存储器和通讯模块等,这就促使在一个芯片上搭建一个按需订制的SoC系统成为可能。而Linux系统也由于其良好的可裁减、可配置的特征广泛应用于各类嵌入式系统,Linux操作系统提供了许多系统级的应用,比如网路合同的实现、进程调度、内存管理等,同时Linux是一个成熟的开源操作系统,有丰富的应用资源。借助这种资源和强悍的系统功能,用户可以基于嵌入式Linux快速地开发出面向复杂应用的嵌入式系统。为此,结合SoPC和Linux优势,可以挺好地满足嵌入式系统依据需求量体裁衣linux系统应用,除去冗余。本文给出基于Linux的SoPC应用系统的开发方式及一个具体的嵌入式应用开发实例。
1硬件开发环境
1.1开发平台
本文所采用的开发平台是AVNET公司生产的VIRTEX-IIPROFF1152开发板,它使用XILINX公司的Virtex-IIProFPGA芯片XC2VP50-6FF1152C,同时开发板还有2个8MB×32的SDRAM储存器、2个RS232插口、一个以太网插口、1个LCD显示屏、8个LED灯,同时支持SPI-4.2的高速16bitLVDS插口、iSFPGbE光纤插口、SystemACE插口以及一个P160标准的扩充模块[1]。
1.2基于PowerPC的片上系统
XC2VP50-6FF1152C芯片内部富含两个IBMPowerPC405核。PowerPC405是32位的RISC处理器,它采用IP植入构架的方式整合到XILINX公司的Virtex-IIProFPGA元件中。
PowerPC硬核具有许多优点适宜软件的开发设计[2]:具有三个定时器:即可编程的内部定时器、固定的内部定时器和看门狗定时器和灵活的储存管理和用于强化估算功能的加法累加指令。PowerPC的强悍功能可以胜任许多复杂应用系统对处理能力和运算速率的需求。同时,借助四核机制以及操作系统的进程调度可以大幅度地提升处理速率。
通过XILINX公司的EDK开发软件,可以很便捷地在Virtex-IIPro系列芯片上搭建自己须要的硬件系统。处理器方面可以选择硬核IP:PPC405,或则软核IP:Microblaze;总线有OPB和PLB两种总线可供选择;同时,还有丰富的外围IP可以选择;在通讯方面,分别有支持高速和低速的通讯模块。支持高速的IP有:plb_etherne、opb_ethernet、opb_ethernetlite和plb_gemac等,支持低速的IP有:opb_iic、opb_spi、opb_uart16550和opb_uartlite等;在储存控制器方面,可选择的IP有opb_sdram、opb_ddr、opb_emc、opb_sysace、plb_sdram、plb_ddr和plb_emc等模块;其他方面还有支持中断、定时、GPIO、PCI等功能的IP模块。丰富的IP模块,加上可以借助IPIC(IPInterconnect)联接用户订制的IPlinux中tcp/ip协议实现及嵌入式应用,因此用户使用CPU时,不须要再另外使用一个SDRAM控制器芯片,或则另外使用一个以太网的控制芯片,非常便捷。
可编程片上系统由处理器、总线互连和外围设备等组成,典型的基于PowerPC的片上系统的构架如图1所示。
1.3CoreConnect的总线结构[3]
总线互连是片上系统的一项关键技术。本系统采用了CoreConnect的总线结构。该总线结构是IBM公司开发的一种片上通讯的总线互连技术。它的应用促使系统核、外设核、处理器核的复用、连接显得愈发容易。这儿,系统核是针对PLB总线上的功能IP模块的,而外设核是针对OPB总线上的功能模块的。CoreConnect总线互连是由本地逻辑总线PLB(PeripheralLogicBus)、片上外围总线OPB(OnchipPeripheralBus)、一个总线桥、两个裁定器,以及设备控制总线DCR(DeviceControlRegister构成的,其结构如图2所示。
2基于Linux的SoPC系统建立
系统的建立包括,硬件平台的搭建和Linux操作系统的移植。首先进行项目需求剖析,决定实现系统须要的硬件IP核,从而搭建硬件平台。硬件平台打造完成以后,借助EDK软件生成相关的硬件参数文件和设备驱动文件。用户须要借助生成的文件建立Linux内核,同时须要建立适用于内核的根文件系统,最后在建立完成的操作系统的基础上开发所需功能的应用程序插口。其中根文件系统的构造要考虑内核中提供的服务和功能以及应用程序所需的系统命令等。同样所要实现的应用功能又影响着内核服务和功能的选择。根文件系统、应用程序接口以及内核两者是相互影响的。具体的建立流程图如图3所示。
2.1借助EDK搭建硬件系统
借助EDK8.2软件搭建硬件系统,由于基于Linux的操作系统设计中,CPU、RAM和总线是必须的。因为芯片内部的BRAM只有128kb/s,而下载Linux内核的.elf文件一般远小于这个容量,因而须要使用外部的储存单元。本文使用opb_sdram储存控制模块实现此功能。本文使用Uart16550控制模块,能便捷地通过RS232端口观察测试的结果。为满足本文应用的须要,可以使用Uartlite模块实现RS232的COM2端口和外部设备通讯的功能。添加Ethernet_Mac的IP模块,可使用以太网端口将开发板联接到网路上。为了调试的便捷,可以加入GPIO模块。通过GPIO控制LED灯,可显示系统状态。若选择应用程序初始化硬件,当bit数据下载到FPGA系统正常运行时,可以观察到LED灯被照亮。另外,按照设计需求,也可以挂载用户订制的IP,以处理用户的特定的需求。
选择参数时,可以使用默认值linux操作系统怎么样,而储存器参数可以选择容量大一些的。使用的PowerPC405硬核,PPC的工作频度设置为100MHz,参考时钟和系统的总线频度也分别设置为100MHz;使用的BRAM模块IBRAM和DBRAM速度分别设置为64Kb/s。最终订制的SoPC硬件系统如图4所示。
2.2SoPC的Linux系统建立
在SoPC的硬件系统建立完成以后,借助EDK软件生成的板级支持包(BSP)配置编译内核。BSP包含了所选取处理器构架的属性文件以及相关硬件的驱动源文件。将这种文件加入到Linux内核中,之后配置内核选项选择对应的处理器构架、所选硬件的驱动模块以及须要的其他内核模块,然后再对完成配置的内核进行编译,生成Linux的内核image文件。
生成内核image文件以后,还须要生成系统运行所须要的根文件系统。根文件系统中包含了嵌入式Linux系统的所有应用程序、库以及系统配置等相关文件。根文件系统中常用的程序和命令可借助开源软件Busybox构造。构造完成以后linux中tcp/ip协议实现及嵌入式应用,在Busybox生成的目录和文件的基础上再构造根文件系统的目录树,并添加相关设备文件和配置文件以及系统运行时须要的脚本文件,因而产生最终的根文件系统。至此,就可以将文件系统作为映像编译到内核中,也可以通过网路使用NFS文件系统加载根文件系统。
3应用举例
以一个多进程的嵌入式Web服务器用于实现控制远程设备的的开发为例,探讨在基于Linux的SoPC系统上开发应用程序的过程。嵌入式Web服务器的开发包括HTTP合同裁减和具体的应用程序实现。用户可以通过向Web服务器发送CGI恳求的方法使服务器通过并口和外部设备通讯,达到远程控制的目的。