您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于nios的flash数据烧写
大连民族学院《SOPC技术及应用》大作业题目基于NIOSⅡ的flash的数据烧写学院:信息与通信工程学院专业:通信工程班级:通信104学生姓名:陈凤媛学号:2010026403完成时间:2013年7月3日摘要:随着EDA技术的发展和可编程逻辑器件性能的不断提高,可编程片上系统技术为系统设计提供了一种简单、灵活、高效的途径,而NiosII嵌入式处理器是Altera公司新近开发的可编程片上系统解决方案。本文简单介绍了基于NiosII的可编程片上系统的系统设计,并以Flash数据烧写为实例,讨论了在应用过程中遇到的一些问题和解决方案。关键词:可编程片上系统;嵌入式处理器;Flash烧写;同步动态随机存储器一引言随着微电子技术的飞速发展,集成电路设计和工艺技术水平有了很大的提高,从而使得由许多IC组成的电子系统集成在一个单片硅片上已成为可能,构成所谓的片上系统(SystemOnChip,SOC)。对于一些仅为小批量应用或处于开发阶段的SOC,若马上投入生产,风险较大,SOPC(SystemOnaProgrammableChip)技术的出现为此提供了有效的解决方案。SOPC是以大规模FPGA为物理载体进行的系统芯片的设计,是基于FPGA解决方案的SOC,简单易行而且成本低廉。构成SOPC的方案有多种途径,其中将IP软核嵌入FPGA的SOPC系统被广泛使用,目前最具有代表性的软核嵌入式处理器是Altera的Nios和NiosII核。Nios嵌入式CPU是一种专门为SOPC设计应用而优化的CPU软核,NiosII是继之推出的第二代Nios嵌入式处理器,处理性能更高。随着现代设计越来越复杂化,FPGA中片内存储器的资源早已不能满足用户的需要,往往需要使用外部存储器来解决问题。其中,Flash烧写就提供了一个有效手段。一般地,烧写Flash最常用的方法是用编程器把程序或数据写入Flash,但如果要把Flash存储器和芯片(比如FPGA芯片)连接起来使用,那么就需要用硬件来做成一个接口模块,而现在很多FPGA开发板本身就带有Flash存储器,这就为FPGA芯片和Flash通信提供了方便,而且NiosIIIDE为此提供了一个方便的Flash编程方法,任何连接到FPGA的兼容通用闪存接口(CFI)的Flash器件都可以通过NiosIIIDE闪存编程器(FlashProgrammer)来烧录。虽然NiosIIIDE闪存编程器(FlashProgrammer)为FPGA开发板提供了一种Flash烧写方法,但是使用它更多地是为了将程序烧入Flash,避免每次上电时需要下载程序的麻烦。如果仅仅想把大量数据写入Flash存储器,作为系统的输入信息使用,则可以采用一种更为简单、方便的方法。本文提出的即是一种基于SOPC开发的Flash数据烧写方法。它利用SOPC开发过程,把Flash作为普通的外设来对待,待数据写入Flash后,SOPC系统所占的资源就可以释放,所以它为Flash数据烧写提供了一种简单、方便并且能够节省FPGA资源的有效方法。1基于NiosII的SOPC开发与传统嵌入式系统设计不同,Nios系统的开发分硬件开发和软件开发两个流程。硬件开发过程主要由用户定制系统硬件,软件开发在NiosIIIDE中完成,NiosII使用NiosIIIDE集成开发环境来完成整个软件工程的编辑、编译、调试和下载。图1所示的是基于NiosII的SOPC系统开发流程。图1基于NiosII的SOPC系统开发流程NiosII的硬件设计是为了定制合适的CPU和外设,利用SOPCBuilder的图形用户界面,可以快速方便地定义和连接复杂的系统。系统定义过程中,可对CPU和各外设模块的特性、大小及在系统中地址分配等进行设定。接着让SOPCBuilder帮助NiosII开发者生成SOPC系统,实际上,它是用生成的.ptf文件来描述NiosII处理器系统。同时,也生成了用于QuartusII编译的HDL文件。在完成上述操作之后,使用QuatusII软件对NiosII系统上的各种I/O口进行引脚分配,并且进行硬件编译。在编译的过程中,QuatrusII从HDL源文件综合生一个适合目标器件的网表。最后,将生成的配置文件下载到开发板上。NiosIIIDE(NiosII集成开发环境)为NiosII的软件开发提供了一个平台,利用它可以向生成的SOPC系统写入程序。在进行软件开发时,会涉及到与硬件设备的通信问题。HAL(硬件抽象层)系统库工程包括所有和硬件处理器相关的接口,它是在NiosIIIDE中建立一个新的工程时,由IDE根据SOPC系统自动生成的。用户在NiosIIIDE环境中编写软件程序,实际是基于HAL系统库的应用程序,通过HAL系统库,与硬件设备联系起来。程序编辑完之后,使用NiosIIIDE的编译器、调试器对软件工程进行编译、调试。一切顺利通过之后,就可以将软件下载。二开发实例2.1Flash烧写这里以Flash数据烧写为例,详细讨论基于NiosII的SOPC开发,本实例是针对一次性向Flash写入大量数据的设计方案,首先是设计规划,即软、硬件的划分问题,之后就分硬件开发和软件开发两部分分别讨论。2.2硬件开发本设计使用的开发板是CycloneEP1C6Q240C8。采用的FPGA芯片是Cyclone系列的EP1C6。开发板上还附有8Mbyte的SDRAM(SynchronousDynamicRandomAccessMemory)和2Mbyte的Flash存储器。图2就是最终的系统工程文件。它的开发过程如下。由于NiosII开发时采用默认的系统时钟50MHz,即图2中SOPC系统时钟clk,而核心板上的晶振是25MHz,所以需要添加一个锁相环(PLL)模块,将频率提升到50MHz再供给系统。图2系统工程文件首先定义NiosII处理器系统,它是为Flash数据烧写特别定制的,所以使用了最精简的系组件。它们分别是:(1)CPU核,这里选择了经济型的NiosII,因为它占用最少的逻辑单元;(2)On-ChipMemory,为系统添加内存储器,使用FPGA内部RAM资源,速度快,但存储容量较小,这里定义了4KB的RAM;(3)JTAGUART,它主要用于在线调试,在调试中,只要配置了CPU、On-ChipMemory和JTAGUART就可以完成一个最小系统;(4)Avalon三态总线桥(AvalonTri-StateBridge),AvalonTri-StateBridge也可以称作是外部RAM总线,在NiosII开发板上,要实现NiosII系统和FPGA片外存储器通信,就需要Avalon三态总线桥;(5)SDRAM控制器,SDRAM能够提供更大的存储容量,解决片内RAM不够用的情况,它通过Avalon三态总线桥接入NiosII系统中;(6)加入Flash接口,它的加入类似PC机接入了硬盘,用于存放程序和数据,并且具有非易失性,这里用它来存放要写入的数据。其次,在自动分配基地址和中断后,进行SOPC系统地址的分配。这里由于软件程序较长,Resetaddress就设置为SDRAM。接着利用SOPCBuilder就可以生成SOPC系统,并且生成用于综合的硬件描述语言(HDL)。图3系统工程文件硬件设计的最终目的是为软件开发提供一个平台,所以最后还是要通过对工程文件的编译来获得配置文件,通过JTAG口下载配置信息,从而实现在FPGA芯片中建立硬件系统。在此之前,分配引脚的过程是十分重要的,如图2中,除了时钟和复位引脚以外,其余的都是关于SDRAM和Flash的引脚。使用了SDRAM,就需要给它分配时钟,根据SDRAM的芯片HY57V641620HG(L)T-7,时钟应为100MHz,所以利用锁相环倍频至100MHz,供给SDRAM的时钟,即图2中的sd_clk。图2中,sd_addr和sd_data是SDRAM的地址和数据线,它们分别是12位和16位。由于SOPC系统的地址总线为“tri_state_bridge_0_address[20..0]”共21条地址线,而Flash芯片AM29LV160只有20位地址线,所以必须将“tri_state_bridge_0_address[20..0]”的高20位地址线与Flash的20位地址线对齐,同时由于所选用的Flash芯片是16位数据总线,每次读写16位,因此只用到“tri_state_bridge_0_address[20..0]”的高20位地址总线。关于SDRAM、Flash的控制和片选信号也通过其余的引脚表示出来了。除此之外,不同型号的片外存储器(如SDRAM、Flash)的操作时序都可能不同,所以在定制系统组件时要根据所选用的芯片,对它们的时序做出正确的设置,否则将使NiosII不能工作或者工作不稳定。2.3软件开发通常来说,往往是因为数据量很大才需要把数据写入Flash中,这些数据很可能是以特殊方式保存下来的,比如在Matlab环境中经过数据处理被保存在数据文件(.mat)中。本设计的软件开发就是实现向Flash写入数据,而这个过程是在NiosIIIDE的C/C++编程环境下完成的,如何在该环境中引用那些被保存的数据成为了一个关键问题。这里提出的一个解决方法是:运用文件这个概念。该方法的主要思路是:首先在MATLAB中编写程序把需要保存的数据保存在某个文件中,如data.h;关于保存数据的文件的路径,建议使用绝对路径,并且将它存放在软件工程文件夹下;然后在C/C++环境中,添加头文件#include,这样就可以在该环境下直接引用data.h中的数据。其次,由于在开发过程中是把Flash当作普通外设来对待的,需通过访问Flash的方法来向Flash写数据,因为本设计是针对一次性向Flash写入大量数据,并且无需保存Flash中原来的数据,因此不会涉及到Flash的跨块擦除问题,故采用简单访问Flash的方法。使用Flash的操作函数时,需包含头文件“sys/alt_flash.h”。编辑完程序后,如果直接编译,会出现存储容量不够的问题,可以通过以下办法解决。在系统库属性中做一些编译前设置。程序是默认存储在On-ChipMemory中的,这里需要改为SDRAM。可以选中“Reduceddevicedriver”和“SmallCLibrary”,去掉“Cleanexit”选择,这样可以使程序变小。NiosII程序编译(Build)通过,就可以下载至已配置好硬件信息的开发板上,但往往会出现运行(Run)不起来的问题,原因有很多种,比较典型的有以下几种可能:使用了SDRAM却没有合理分配时钟;管脚分配出现问题;SDRAM、Flash的时序设置不正确。应仔细检查,排除这些问题。成功运行后,说明已把数据写入了Flash,如想要进一步确认,可以采用对Flash的读操作来进行验证。三结论NiosII是一个性价比较强大的嵌入式处理器软核,结合SOPC技术,可以有效地实现系统功能。它实际上是一个软硬件复合的系统。与普通的嵌入式系统开发相比,具有更多的优势。在介绍了基于NiosII的SOPC系统的一般开发流程之后,本文以Flash数据烧写为例,详细地说明了软硬件开发过程中需要注意的问题。特别是在软件设计过程中,运用了文件的概念来引用保存在Matlab数据文件(.mat)中的数据。另外,针对一次性向Flash写入大量数据这个问题,使用了简单访问Flash的方法,既简单又保证了正确性。在硬件开发中,从节省资源的角度考虑,只为该系统定制了所需的系统组件。总的来说,这为Flash数据烧写提供了一个简单有效的手段。参考文献[1]AlteraCorporation.NiosIISoftwareDevelopment[EB/OL].[2]AlteraCorporation.TheHALSystemLibrary[EB/OL]
本文标题:基于nios的flash数据烧写
链接地址:https://www.777doc.com/doc-2571085 .html