摘 要: 介绍了基于SoPC平台,利用Nios II软核处理器和μClinux操作系统实现的具备网络点播功能的音频系统,详细说明了其硬件电路的构建和应用软件的设计,并结合DE2-70开发平台加以验证。得到的系统能够播放本地音频文件,同时具有实时的网络点播功能。
关键词: 网络点播;音频;SoPC;Nios II;μClinux
传统的音频设备主要是基于单片机实现的音频编码和解码,由于单片机资源限制,且资源定制的灵活性较差,对设备的升级和功能扩展造成了一定困难。随着互联网技术的快速发展,网络化已经成为音频设备重要功能之一,网络点播功能的实现不但可以提高系统的实时性和便捷性,同时对于增强系统的竞争力也大有益处。
本文基于SoPC平台,开发了具有网络点播功能的音频系统,介绍了开发的主要流程和其中的关键技术,对嵌入式网络设备的开发具有一定的帮助作用。
1 基于SoPC平台的开发流程
随着SoPC技术日趋成熟,SoPC应用领域越来越广。相比之下,基于SoPC平台的Nios II-μClinux开发具有更加明显的优势。Nios II软核处理器是Altera公司推出的一款模块化、硬件可编程的嵌入式处理器,具有非常强大的硬件定制功能,通过定制Altera和第三方公司的IP核以及系统所需其他外设,可以迅速构建出系统所需的硬件平台,这样的硬件平台能够获得完全符合系统需求的硬件资源,同时对于降低系统的开发周期也是十分有利的[1]。加之μClinux系统的移植,使得整个系统的性能更加优越,μClinux是一种非常优秀的嵌入式操作系统,虽然体积小,却继承了Linux操作系统稳定、可移植性强、网络功能强大等诸多优点,此外μClinux还拥有丰富的硬件驱动资源,通过对驱动程序的修改和移植,使得顶层应用的开发变得更为轻松[2]。
开发基于SoPC的Nios II-μClinux的嵌入式系统,需要使用Altera的SoPC开发工具SoPC Builder和Quartus II两款软件,它们分别完成系统定制工作和硬件电路的构建。系统的软件设计则需要借助运行Linux操作系统的计算机,完成交叉编译以生成μClinux系统和顶层应用程序,然后移植到开发板上。开发板将作为系统定制、硬件设计和软件设计的检验平台,从而指导系统定制、硬件和软件设计的修改和完善[3]。其开发流程可以分为4个阶段:系统定制、硬件设计、软件设计、系统综合,其具体开发流程如图1所示。
系统定制和软件设计阶段相对复杂,包含了本设计的核心思想以及相关问题的解决方案,下文对此给予重点介绍。
2 系统定制
该阶段的主要任务是定制硬件系统,本设计选取友晶公司(Terasic)推出的一款嵌入式开发平台(DE2-70),通过调用相应IP核迅速构建出符合系统需求的硬件平台,如图2所示。
其中Audio模块采用友晶公司的配套IP核。该IP核提供了Verilog HDL的硬件描述和相应的HAL驱动程序,实现了Codec时钟匹配、FIFO、时序控制以及数据传输控制。由于采用硬件描述语言实现,该IP具有很强的灵活性和高效性。
DM9000A是一款高速以太网接口芯片,集成了10/100 M自适应收发器,通过调用DM9000A的IP核,使其挂载到Avalon总线上,该模块是实现网络点播功能的核心硬件资源。
本地音频的播放是以SD卡、U盘等移动存储介质作为音频文件的载体,SD Card socket有两种工作模式:SD模式和SPI模式。本设计采用SPI模式,该模式下通过四线方式就可以完成所有的数据交换,大大简化了硬件电路设计,USB形式的其他移动存储介质调用了ISP13632的IP核,将音频文件拷贝到移动存储介质,挂载到μClinux嵌入式系统,就能完成本地音频文件的读取与解码。
3 硬件设计
该阶段主要任务是完成硬件设计工作,其中顶层文件的编写采用Verilog HDL代码形式,借鉴DE2-70官方的DE2_70_TOP.v文件来编写本设计的Verilog顶层文件,其中SD卡对应代码必须确保准确,否则可能导致SD卡的永久性毁坏,正确的Verilog代码如下:
.MISO_to_the_mmc_spi (oSD_DAT),
.MOSI_from_the_mmc_spi (SD_CMD),
.SCLK_from_the_mmc_spi (SD_CLK),
.SS_n_from_the_mmc_spi (SD_DAT3),
而后进行引脚分配与时序分析,进而编译生成硬件。这一阶段关键工作是对时序分析和编译过程中的错误进行准确的分析判断,以便在SoPC Builder中调整已定制系统,确保生成的硬件符合设计要求。
4 软件设计
该阶段的工作量相对较大,是本设计最为重要的环节。
4.1 建立交叉编译环境
(1)通过虚拟机安装Ubuntu10.10(可以选择其他Linux系统)。
(2)从Altera官方FTP上下载μClinux开发包和交叉编译器,解压到指定文件夹。
(3)修改Linux系统环境变量,实现Nios II交叉编译环境的支持。
4.2 μClinux移植
在Linux环境下针对SoPC Builder生成的ptf文件对μClinux进行配置,这样做的目的是保证μClinux编译的结果能够成功运行到DE2-70开发板上。通过make emenuconfig命令对内核进行必要的配置,编译生成zImage镜像文件,编译过程中将随之生成一个名为nios2.h的文件,该文件描述的内容与系统定制阶段SoPC Builde中的硬件描述完全一致,同时验证了ptf文件对μClinux的配置已经成功,将硬件sof文件和镜像zImage文件下载到开发板,检验μClinux能否成功移植。图3为成功移植后,调试终端显示的结果。
4.3 驱动程序移植
通过make menuconfig命令进行内核配置,将网卡(DM9000A)、SD卡(SPI模式)、USB(ISP1362)的驱动程序编译进内核,选择支持的文件系统(本设计使用DOS FAT文件系统),其中网卡驱动(dm9000.c)要进行必要的修改,否则无法获取MAC地址,在dm9000_probe函数中添加两处语句:
(1)在函数体的开头添加:
static char net_mac_addr[]=
{0x00,0xe0,0x3d,0xf4,0xdd,0xf7}; // MAC地址设置
(2)添加:
for(i=0;i<6;i++)
{
ndev->dev_addr[i]=net_mac_addr[i];
}
4.4 应用程序移植
为了使系统能够播放本地和网络音频文件,选用mpg123播放器进行移植。mpg123是一个快速的MPEG 播放器和解码器,支持 MPEG 1.0/2.0/2.5 layers 1,2 and 3,具有高质量和低CPU占用率的优点,更为关键的是可以轻松地移植到μClinux平台[4]。为了使mpg123在开发板上正常工作,需要修改dummy.c文件以便将数据写入AUDIO模块:
static int write_dummy(audio_output_t *ao,
unsigned char *buf,int len)
{
unsigned short int i=0,Tmp1=0;
for(i = 0; i < len; i+=2)
{
if (!readw(0x09605180)
//0x09605180是AUDIO模块的基地址
{
writew(Tmp1, 0x09605180);
}
}
return len;
}
4.5 编译、连接、调试
该过程将对定制的μClinux进行编译、连接、调试,对出现的错误进行逐一分析、排查、纠正,最终生成zImage镜像文件。
5 系统综合
建立Shoutcast server服务,经路由器使得开发板与计算机工作在同一局域网内,将系统的sof文件和zImage文件下载到开发板,运行Nios II-terminal调试终端,执行mpg123-@http://192.168.1.1:8000命令,通过耳机就可以听到网络服务器上的音频文件,本地播放需将移动存储介质通过mnt命令挂载到系统上,进入所在文件夹,直接执行mpg123 *.mp3就能够欣赏到本地的音频文件。
本设计基于SoPC平台,综合了Nios II软核处理器和μClinux嵌入式操作系统的优势,实现的系统具有本地音频播放和网络音频点播功能。该设计具有开发周期短,硬件设计可升级,软件系统可维护,网络功能强大等诸多优点,对于设备的系统化、网络化具有一定的帮助。
参考文献
[1] 潘松,黄继业,曾毓,等.SoPC技术实用教程[M].北京:清华大学出版社,2005.
[2] 周立功.SoPC嵌入式系统基础教程[M].北京:航空航天大学出版社,2006.
[3] 冯新宇,蒋洪波,祁红岩.基于Nios Ⅱ的音频播放器设计与驱动开发[J].现代电子技术,2010(4):97-101.
[4] Lu Zongqing,Zhang Xiong,Sun Chuiliang.An embedded system with μClinux based on FPGA[C].Nanjing:2008 IEEE Pacific-Asia Workshop on Computational Intelligence and Industrial Application,2008.