Chinaunix首页 | 论坛 | 博客
  • 博客访问: 78825
  • 博文数量: 94
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 1110
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-07 11:18
文章分类
文章存档

2011年(94)

我的朋友
最近访客

分类:

2011-05-24 10:47:04


摘要:本文阐述了Altera公司最新推出的嵌进式处理器软核NiosII及其应用系统的开发过程,并结合汽车行驶记录仪的设计给出了一个基于NiosII嵌进式处理器的应用实例。文章对现代数字系统设计中的IP复用方法进行了具体的先容。
关键字:嵌进式处理器;软核;可编程片上系统;IP复用;汽车行驶记录仪

引言:

嵌进式处理器是嵌进式系统的核心,有硬核和软核之分。其中,嵌进式处理器软核以其更大的使用灵活性,更低廉的本钱,受到了研发职员和市场的广泛欢迎。Altera公司最新推出的嵌进式处理器软核Nios II更是软核处理器中的先进代表,它已经快速的渗透到教学、科研以及生产等各个方面,积极的推动着嵌进式技术、SOPC(可编程片上系统)的发展。

1 Nios II 简介

二十世纪九十年代末,可编程逻辑器件(PLD)的复杂度已经能够在单个可编程器件内实现整个系统,可编程片上系统(SOPC)已成为现实。Altera将可编程器件的上风拓展到嵌进处理器的开发设计中,推出了成功的产品。

2000年,Altera发布了Nios处理器,这是Altera Excalibur嵌进处理器计划中的第一个产品,是第一款用于可编程逻辑器件的可配置软核处理器。

2004年6月,Altera公司在第一代Nios取得巨大成功的基础上,又推出了更加强大的Nios II嵌进式处理器。它采用32位的RISC指令集,32位数据通道,5级流水线技术,可在一个时钟周期内完成一条指令的处理。与Nios相比,Nios II处理器拥有更高的性能和更小的FPGA占用率,并且提供了强大的软件集成开发环境Nios II IDE,所有软件开发任务包括编辑、编译、调试程序和下载都可以在该环境下完成。

Altera公司将Nios II处理器以IP( Intellectual Property知识产权)核的方式提供给设计者,有快速型(Nios II/f)、经济型(Nios II/e)和标准型(Nios II/f)三种处理器内核,每种内核都对应不同的性能范围和资源本钱。设计者可以根据实际的情况来选择和配置处理器内核,轻松的创建一款“完美”的处理器。

2 Nios II系统的开发流程

Nios II系统的开发主要可以分为两大步:搭建硬件平台和针对目标平台编写应用软件程序。

Altera公司设计的开发工具SOPC Builder,将所有和处理器子系统相关的底层具体资料集中到这个工具中,让用户完全置身于直观的图形界面下添加和配置所需的处理器和功能部件,并自动完成包含定义存储器映射、中断控制和总线控制在内的系统配置工作,使得开发工作简单化,设计者能够更加着眼于系统的功能而无须拘泥于过多的细节。

集成于SOPC Builder中的Nios II IDE,采用尽大部分设计者非常熟悉的标准GNU环境,能够让设计者在其中完成所有的软件开发任务。

搭建硬件平台所需的工作如下:

(1) 硬件开发的主要工作是构建Nios II系统模块。在SOPC Builder中选取合适的CPU、存储器以及外围器件(如片内存储器、PIO、UART和片外存储器接口),并通过参数的设计定制它们的功能。

部件选择完成后,使用Quartus II软件选取具体的Altera可编程器件系列,并对SOPC Builder天生的HDL设计文件进行布局布线,天生Nios II系统模块;

(2) 将天生的Nios II系统模块加进到Quartus II工程下的顶层设计文件,为Nios II系统模块的I/O端口分配管脚或者连接FPGA内部逻辑。I/O管脚分配后,进行编译,系统天生配置文件;

(3) 使用Quartus II编程器和Altera下载电缆,下载配置文件到开发板。当硬件设计校验完成后,可以将配置文件下载到开发板上的非易失存储器里。

下载完硬件配置文件后,软件开发者就可以把此开发板作为软件开发的初期硬件平台对软件功能进行开发验证。

软件开发流程回纳如下:

(1) 在用SOPC Builder进行硬件设计的同时,就可以开始编写独立于器件的C/C++软件,比如算法或控制程序,并可以使用现成的软件库和开放的操纵系统内核来加快开发进程。

(2) 在NIOS II IDE中建立新的软件工程,这时,IDE会针对目标硬件平台自动天生一个定制HAL系统库,这个库能为程序和底层硬件的通讯提供接口驱动程序。

(3) 使用NIOS II IDE对软件工程进行编译、调试,运行。[1]

3 Nios II 在汽车行驶记录仪中的应用

汽车行驶记录仪是对车辆行驶速度、时间、里程以及有关车辆行驶的其它状态信息进行记录、存储并可通过接口实

最挀挀?叿??葾???刀??????蝧?罎?乵?匀???絣螏?????摖??膗??匀????萀????蝒?汎椀渀甀砀?愀爀挀栀?愀爀洀?搀攀昀?挀漀渀昀椀最猀?挀猀戀?????溋?溑絿??蒈并???伀一???开?????一????爀漀漀琀??搀攀瘀?渀昀猀?爀眀?渀昀猀爀漀漀琀?? ? ? ????栀漀洀攀?戀甀猀礀戀漀砀?椀瀀?? ? ? ???洀攀洀?????挀漀渀猀漀氀攀?琀琀礀 ?挀漀渀猀漀氀攀?琀琀礀匀 ????  ??盿??爠漀漀琀??搀攀瘀?渀昀猀??驣??蝙???ㄠ ? ? ????栀漀洀攀?戀甀猀礀戀漀砀??蝦?????W???葧?倀 ?豗?啶?湏?? ? ? ??????葧?倀 ?????豺???葧?????祬蝲腳????祧??????  ?????遗?汸椀渀甀砀?愀爀挀栀?愀爀洀?琀漀漀氀猀??啶?葎浶愀挀栀?琀礀瀀攀猀蜀?????匀????萀轶驛?豎?桧???匀????萀?桧????????瑎灥??U葎???????葓???詏荢?????桴葖剶??塛桛?????浵愀欀攀?洀攀渀甀挀漀渀昀椀最紀?漏???溑婿P魎?璌??艫?????儰?佾?貋蝔?????禐???倀????倀??齢????蝐?穎?洀愀最攀??????絎わ?????蚈??????蕎????????鉎???膗??蝎??????倀???????愀氀椀最渀?氀攀昀琀??????蜀???????????倀?????敝?蝟????屒??倀????倀??蝧???甀猀礀戀漀砀?睝????敝?蝟???????溑???甀猀礀戀漀砀??????戀椀渀ā?猀戀椀渀ā?甀猀爀??啶?盿???虔?????葵絶????甀猀礀戀漀砀瘀??魣?筎啶?獶葑絶?艎?泿漀最椀渀ā朰攀琀琀礀ā瀰愀猀猀眀搀????膗?呵椀渀礀氀漀最椀渀漀??????氀椀戀?啶葟??鍠蝞?????氀椀戀挀????搀攀瘀?啶??????葵??艙???S膗?湨卣?獒?肋??蒋??????ぎ??獒???攀琀挀?啶????溑蝿?豎偔?啶??艫???溑?儰??溑???膗袉璉祛驲鑛????鑶葞??豒?????倀????倀????蟿???葾?絣??倀????倀???絞蝙???葾?啶?葾????膗??啶?屒?????葟蝶?????絣わ?椀渀甀砀蔀??罎????葵?絣???剧愀洀搀椀猀欀ā???匀?ā丰?匀?盿?乎?匀?仿攀琀眀漀爀欀??椀氀攀?匀礀猀琀攀洀??兦?蝾????菿葛?????????????蝥??????O???蝧罥?乵?匀萀?絣?????蝨??????W??????????魣兏?煾?????????????亏?匀???絣?蝨??????倀???????愀氀椀最渀?氀攀昀琀????????煙???????????倀???椀渀甀砀蔀???ど?匀????

用这种方法后,普通文件被映射到内存地址空间,进程可以象访问普通文件一样访问内存,这样做的一个好处是可以进步效率。做视频截取的两个主要函数是:

n ioctl(vd-fd, VIDIOCMCAPTURE, (vd-mmap)) 若调用成功,开始一副图象的截取。是否截取完毕留给VIDIOCSYNC来判定。

n ioctl(vd-fd, VIDIOCSYNC, frame) 若调用成功,表明一帧截取已完成。可以开始做下一次截取

对于网络发送部分,主要是linux下的socket编程,调用的主要函数有:创建套接字函数socket、端口绑定函数bind、监听函数listen、等到连接函数accept、数据接收函数read、数据发送函数write等。这些函数的具体定义和用法具体可以查阅相关资料 。需要说明的是为了能够正确发送一帧数据,要把定义的帧的结构体设置为单字节对齐,具体方法是在结构体的定义后面加上_attribute_((packed))。

多线程编程部分用到的主要函数有:互斥量初始化函数pthread_mutex_init、互斥量锁定函数pthread_mutex_lock、互斥量解锁函数pthread_mutex_unlock、互斥量注销函数pthread_ mutex _destroy、线程创建函数pthread _ create、线程同步函数pthread_join。此外,程序中为了能更好的实现两个进程的同步,还需要用到信号量机制的一些内容。受篇幅所限,这些函数的具体定义和用法请参考相关资料 。
3.2 客户机端软件系统设计
客户端是建立在一台PC机上,用Visual C++ 6.0设计一个基于MFC的界面作为接收端。在接收端主要完成从网络缓冲区内读取数据,并保存成文件的形式,文件以接收到数据的时间为名。图2为图象采集时间间隔为1秒时程序执行的结果。图象大小为320 象素。需要说明的是:服务器端发送的数据采用了单字节对齐,对应的在客户端接收的时候也要采用单字节对齐。在WINDOWS下实现内存单字节对齐的方法是在定义的帧结构体前面加上#pragma pack (1),并在其定义之后加上#pragma pack ()。

图2 客户端程序执行结果(1秒种采集一次图象)

4 结束语

本文提出了一套基于S3C2410平台和linux系统的嵌进式图象采集、传输系统的具体实现,并给出了实验结果。实验结果证实:系统很好的完成了图象采集和传输。得到的图象清楚。服务器可以稳定运行,不会发生断开或退出的现象。本系统可应用于产业现场的监控,也可以与其他系统如门禁系统相结合获得门开或关时现场的重要图象数据。

参考文献

[1] Alessandro Rubini著 LISOLEG译,linux设备驱动程序开发,中国电力出版社,2002

[2] 乔晓丹张鹏,一个基于Linux操纵系统的嵌进式网关的实现,微计算机信息,2005年第21卷第7-2期

[3] 朱刚 等,Linux网络编程,科学出版社,2000.

[4] 于明俭 等,linux程序设计权威指南 机械产业出版社 2001.

[5]


(

电源设计功率因数校正(PFC)拓扑结构选择

一种估计小电流系统线路对地电容的新方法

无传感器的直流无刷电机控制器ML4425及其应用(1)

阅读(577) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~