您好,欢迎访问三七文档
《基于FPGA嵌入式软件开发》综合设计报告书设计题目:uC/OS-II在SOPC中应用设计组姓名成绩组长陈志智(200611701304)组员张楚民(200611701230)组员陈国正(200611701302)组员洪卓轩(200611701310)组员廖威(200611701316)组员林森阳(200611701319)提交时间:2008年6月25日一、设计要求:以NIOSII软核处理器为核心的嵌入式系统的硬件配置、硬件设计、硬件仿真,IDE环境的软件设计,软件调试等步骤进行嵌入式系统开发,利用uC/OS-II操作系统实现调用LCD、七段数码管和LED显示不同的内容。二、工作进度要求周期序号周期划分周期名称周期的主要活动1第1~3天需求分析对整个系统进行需求分析3第4~5天概要设计据需求对系统硬件,软件进行概要设计4第6~8天详细设计据需求对系统硬件,软件进行详细设计4第9~12天编码实现依据设计进行编码实现5第13~14天软件测试与维护对软件进行测试三、组员分工设计者完成具体工作(组长)陈志智综合移植操作系统资料,对操作系统进行移植林森阳,洪卓轩对该设计进行需求分析,完成需求分析文档洪卓轩,廖威对该设计进行概要设计,完成概要设计文档张楚民,陈志智对该设计进行详细设计,完成uc/osii操作系统的移植到DE2板上陈国正,张楚民在uc/osii的基础上进行编码陈志智,陈国正对该设计的最终实现进行测试四、提交设计报告时间:2009年6月25日五、答辩时间:2009年6月25日题目:uC/OS-II在SOPC中应用一、功能描述二、硬件结构分析和设计三、软件结构分析和设计四、问题总结五、总结功能描述1.1uC/OS-II描述嵌入式实时操作系统uC/OS-II是一个非常优秀的实时操作系统RTOS(RealTimeOperatingSystem),其性能已得到广泛认可。uC/OS-II的特点有:公开的源代码、可移植、可裁剪、可固化、抢占式内核。而且uC/OS-II为一个可裁剪的操作系统,可以很方便地根据个人的需求来实现某些功能。μC/OS-II是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。uC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务。1.2NiosIIIDE描述NiosIIIDE提供设计者一个充足的niosII开发平台。niosIIIDE包含MicroC/OS-II实时操作系统,为设计者提供快速地搭建基于niosII处理器的MicroC/OS-II应用程序的能力。设计者能够在NisoII上实现软核代码的编写。1.3uC/OS-II在SOPC中功能描述设计是基于可添加的SOPC硬件环境,通过配置SOPC内的IP核,在DE2板上实现调用LCD、流水灯和LED显示不同的内容。在SOPC中,需要添加LED,LCD,译码管,系统时间time,flish,sdram等IP核,建立起uC/OS-II能在DE2板上运行的硬件环境,使用NiosIIIDE来嵌入uC/OS-II,通过编写代码来实现uC/OS-II在SOPC的基础上LED,LCD,和译码管这3个任务的调度。硬件结构分析和设计一.硬件结构分析1.Altera公司推出的Nios软核CPU是一种可配置的通用精简指令集计算RISC(ReducedInstructionSetComputing)嵌入式处理器。它可以与各种外设相结合,构成一个定制的可编程片上系统SOPC(SystemonProgramableChip)。uC/OS-II是一个开放源码的RTOS。2.Altera公司把uC/OS-II像外设驱动一样作为一个软件模块集成到了NisoIIIDE,本开发设计就是在NisoIIID环境下,不需要修改其原文件对uC/OS-II的配置,通过调用NisoIIIDE所提供的HellouC/OS模板来完成本实验的要求。3.通过SOPCBuilder实现基于NiosII系统的uC/OS-II所需配置、生成以及NiosII系统相关的控制和软件调试平台的生成。快速地搭建起uC/OS-II运行所需要的硬件环境。4.通过使用SOPC技术搭建起的硬件环境,能够运行uC/OS-II系统,并在DE2板上控制LED,七段数码管和LCDNisoIICPUPIOTimeLCD控制器LED控制器数码管控制器SDRAMFlishLEDLCD数码管复位键SW0二.硬件结构设计1.uC/OS-II在SOPC中应用的硬件设计是在SOPCBuilder中进行设计的。主要添加的IP有CPU,SDRAM,Flish,Tri_state_bridge,Pio,Seg7_lut_8,jtag_uart,time.CPU选用NisoII/s型内核,resetvector(重置向量)设置为:cif_flish;exceptionvector(异常向量)设置为:sdram.SDRAM的数据总线宽度设置为16bit,其余设置不变。Flish的地址宽度AddressWidth设置为22bit,数据宽度DataWidth设置为8bitTime为系统时间,也是必须的外设,period设定为20ms,Tri_state_bridge三态桥,是Avalon交换结构与片外外设相连的桥梁,全设置为默认状态。Pio命名为:Led_pio,作为流水灯Led的输出信号,数据宽度设为8bit,而类型设定为只输出:Outputportonly.LCD设置按照默认设置,命名为:lcd_display。Seg7_lut_8设置为默认,命名为:seven_seg_pio。整个Nios2的sopc硬件配置如下图所示:CycloneIIinclk0frequency:50.000MHzOperationMode:NormalClkRatioPh(dg)DC(%)c01/10.0050.00c21/10.0050.00inclk0c0c2lockedpllinst72.在Quartus上设计一个分频器Pll用于处理系统频率,获取硬件工作所需要的频率。Pll将产生一个时钟脉冲和一个复位检测信号。设计所得的整个工程顶层模块如下图所示:图中niso主模块中有LCD,LED和数码管输出端口,通过对其进行引脚分配,能实现对外部设备的LED,LCD和数码管的控制。软件结构分析和设计1.软件结构分析NisoIIIDE所提供的HellouC/OS模板不需要重写设备驱动程序,通过使用该模板可通过uC/OSII调度任务,uC/OS-II采用的是可剥夺型实时多任务内核,可剥夺型的实时内核在任何时候都运行就绪了的最高优先级的任务。本次设计就是通过使用任务管理程序实现多任务程序调度,使之能实现LCD,七段数码管和LED的计数功能。uC/OS-II提供了任务管理的各种函数调用,任务用户函数必须是个无限循环,因为程序执行流是由操作系统内核来改变的,主动把CPU的使用权让让给有需要的任务.本实验总共有三个任务,优先级分别设为11,12,13(注,ucos中的优先级顺序是小的高,大的低)voidtask1(void*pdata):实现LED的计数,主要算法如下:for(i=0;i2600;++i){if(count==0xff){count=0;}while(j100000)j++;count++;/*LogictomaketheLEDscountfromright-to-left,LSBontheright.*/IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,((count*0x0802LU&0x22110LU)|(count*0x8020LU&0x88440LU))*0x10101LU16);}voidtask2(void*pdata):实现LCD的计数,主要算法如下:lcd=LCD_OPEN();if(lcd!=NULL){lcd_init(lcd);}wait_time=0;for(i=0;i1400;++i){wait_time=i/10;LCD_PRINTF(lcd,%c%s%ds\n,ESC,ESC_COL2_INDENT5,wait_time+1);while(j10000)j++;}LCD_CLOSE(lcd);OSTimeDlyHMSM(0,0,13,0);voidtask3(void*pdata):实现七段管的计数,主要算法如下;staticalt_u8segments[16]={0x81,0xCF,0x92,0x86,0xCC,0xA4,0xA0,0x8F,0x80,0x84,/*0-9*/0x88,0xE0,0xF2,0xC2,0xB0,0xB8};/*a-f*/for(i=0;i400;++i){if(count==0xff){count=0;}j=0;while(j100000)j++;count++;unsignedintdata=segments[count&15]|(segments[(count4)&15]8);IOWR_ALTERA_AVALON_PIO_DATA(SEVEN_SEG_PIO_BASE,data);}OSTimeDlyHMSM(0,0,13,0);问题总结5.1开发所出注意问题以及解决方法1)在开发过程中,采用哪种中断机制的问题。uc/osii本身有中断机制,而niosii也有中断机制。当NiosII处理器采用自动初始化时,应用程序的运行环境和所有的服务系统都被初始化并准备运行。如用alt_irq_init(ALT_IRQ_BASE)函数初始化中断控制器。niosii的另一种启动方式:用户自定义初始化alt_main()函数则提供了一个独立式的编程环境,能够让用户完全控制系统的初始化。用这种方式可以实现自行定义的中断方式。显然niosii提供的中断机制比较容易实现,而采用uc/osii系统的中断机制,则涉及处理器环境切换等更底层的问题。另一方面,虽然niosii中断机制支持中断嵌套,但由于时间以及水平有限等问题,没有去做更深入的研究,中断嵌套暂未实现。2)ISR函数限制isr本身运行于中断背景,因此不能在isr中调用因为等待中断而被挂起的函数。在实验的过程发现:很多的HALapi不能在ISR中实现。所以一开始想用一个按钮(作为中断触发条件)来控制LCD的单独计数,发现不知何从去实现这部分功能,主要受限于isr中函数的限制。3)架构不合理学习软件工程的时候知道,一个良好的项目应该分层次。就基于DE2板的开发项目而言,应该分为硬件层、驱动层以及应用程序层。在我们这个项目中,没有严格的按照这样的层次,初略的分为软件层和硬件层。应用程序层和驱动层是没有真正意义上的分出来。这是我们以后努力的方向。总结本次设计是在SOPC所配置的硬件环境下实现uC/OS-II任务调度的功能。通过使用uC/OS-II操作系统实现调用LCD、七段数码管和LED显示计数功能,从而实现了任务之间的调度。本次设计是将要显示的这三个功能分别封装成3个任务,分别为任务一(task1):LED灯计数功能(task2);任务二:LCD液晶屏计数功能(task3);任务三(task3):七段数码管计数功能。操作系统根据这三个任务的优先级高低来调用任务来完成任务的内容,当优先级高的任务完成后,就会进入等待状态,同时释放资源,使系统能够调用优先级较低的任务,直到较高优先级的等待延时结束,系统会立刻调用高优先级的任务进行运行。设计所要的uC/OS-II操作系统不需要移植,只需通过Niso-II调用里面的工程模版就可以了,因为Altera公司已经将该系统集成到Niso软件中,我们就是在这个基础上,通过调用uC/OS-II操作系统内的函数来处理任务间的调用以及任务间的切换。通过本次设计,是我们对SOPC的应用以及开发的流程有了更进一步的认识,通过SOPC来配置开发所需要的硬件环境,通过配置的方法从而不用考虑外设资源,通过使用Niso软件来编写软核代码,能使开发的难度减低。在开发
本文标题:FPGA_报告书
链接地址:https://www.777doc.com/doc-2872663 .html