作者;王晓雁,黄孜理,汪一鸣
摘要: 随着EDA技术的发展和可编程逻辑器件性能的不断提高,可编程片上系统技术为系统设计提供了一种简单、灵活、高效的途径,而Nios II嵌入式处理器是ALTEra公司新近开发的可编程片上系统解决方案。本文简单介绍了基于Nios II的可编程片上系统的系统设计,并以Flash数据烧写为实例,讨论了在应用过程中遇到的一些问题和解决方案。
关键词: 可编程片上系统;嵌入式处理器;Flash烧写;同步动态随机存储器
引言
随着微电子技术的飞速发展,集成电路设计和工艺技术水平有了很大的提高,从而使得由许多IC组成的电子系统集成在一个单片硅片上已成为可能,构成所谓的片上系统(System On Chip, SOC)。对于一些仅为小批量应用或处于开发阶段的SOC,若马上投入生产,风险较大,SOPC(System On a Programmable Chip)技术的出现为此提供了有效的解决方案。SOPC是以大规模FPGA为物理载体进行的系统芯片的设计,是基于FPGA解决方案的SOC,简单易行而且成本低廉。
构成SOPC的方案有多种途径,其中将IP软核嵌入FPGA的SOPC系统被广泛使用,目前最具有代表性的软核嵌入式处理器是ALTEra的Nios和Nios II核。Nios嵌入式CPU是一种专门为SOPC设计应用而优化的CPU软核,Nios II是继之推出的第二代Nios嵌入式处理器,处理性能更高。
随着现代设计越来越复杂化,FPGA中片内存储器的资源早已不能满足用户的需要,往往需要使用外部存储器来解决问题。其中,Flash烧写就提供了一个有效手段。一般地,烧写Flash最常用的方法是用编程器把程序或数据写入Flash,但如果要把Flash存储器和芯片(比如FPGA芯片)连接起来使用,那么就需要用硬件来做成一个接口模块,而现在很多FPGA开发板本身就带有Flash存储器,这就为FPGA芯片和Flash通信提供了方便,而且Nios II IDE为此提供了一个方便的Flash编程方法,任何连接到FPGA的兼容通用闪存接口(CFI)的Flash器件都可以通过Nios II IDE闪存编程器(Flash Programmer)来烧录。
虽然Nios II IDE闪存编程器(Flash Programmer)为FPGA开发板提供了一种Flash烧写方法,但是使用它更多地是为了将程序烧入Flash,避免每次上电时需要下载程序的麻烦。
如果仅仅想把大量数据写入Flash存储器,作为系统的输入信息使用,则可以采用一种更为简单、方便的方法。本文提出的即是一种基于SOPC开发的Flash数据烧写方法。它利用SOPC开发过程,把Flash作为普通的外设来对待,待数据写入Flash后,SOPC系统所占的资源就可以释放,所以它为Flash数据烧写提供了一种简单、方便并且能够节省FPGA资源的有效方法。
1 基于Nios II的SOPC开发
与传统嵌入式系统设计不同,Nios系统的开发分硬件开发和软件开发两个流程。硬件开发过程主要由用户定制系统硬件,软件开发在Nios II IDE中完成,Nios II使用Nios II IDE集成开发环境来完成整个软件工程的编辑、编译、调试和下载。图1所示的是基于Nios II的SOPC系统开发流程。
设计规划
将硬件程序下
载至开发板上
将软件程序下
载至开发板上
SOPC系统实现
硬件设计
定义Nios II处理器系统(SOPC Builder)
(SOPC Builder)
分配引脚、编译硬件
(Quartus II)
生成系统模块
(SOPC Builder)
软件设计
根据硬件系统生成HAL(Nios II IDE)
编写应用程序
(Nios II IDE)
编译、连接、调试
(Nios II IDE)
图1 基于Nios II的SOPC系统开发流程
Nios II的硬件设计是为了定制合适的CPU和外设,利用SOPC Builder的图形用户界面,可以快速方便地定义和连接复杂的系统。系统定义过程中,可对CPU和各外设模块的特性、大小及在系统中地址分配等进行设定。接着让SOPC Builder帮助Nios II开发者生成SOPC系统,实际上,它是用生成的.ptf文件来描述Nios II处理器系统。同时,也生成了用于Quartus II编译的HDL文件。在完成上述操作之后,使用Quatus II软件对Nios II系统上的各种I/O口进行引脚分配,并且进行硬件编译。在编译的过程中,Quatrus II从HDL源文件综合生成一个适合目标器件的网表。最后,将生成的配置文件下载到开发板上。
Nios II IDE(Nios II 集成开发环境)为Nios II的软件开发提供了一个平台,利用它可以向生成的SOPC系统写入程序。在进行软件开发时,会涉及到与硬件设备的通信问题。HAL(硬件抽象层)系统库工程包括所有和硬件处理器相关的接口,它是在Nios II IDE中建立一个新的工程时,由IDE根据SOPC系统自动生成的。用户在Nios II IDE环境中编写软件程序,实际是基于HAL系统库的应用程序,通过HAL系统库,与硬件设备联系起来。程序编辑完之后,使用Nios II IDE的编译器、调试器对软件工程进行编译、调试。一切顺利通过之后,就可以将软件下载到开发板上,并可以在硬件上运行。
[8]电大学习网.免费论文网[EB/OL]. /d/file/p/2024/0424/fontbr />
2 开发实例
2.1 Flash烧写
这里以Flash数据烧写为例,详细讨论基于Nios II的SOPC开发,本实例是针对一次性向Flash写入大量数据的设计方案,首先是设计规划,即软、硬件的划分问题,之后就分硬件开发和软件开发两部分分别讨论。
2.2 硬件开发
本设计使用的开发板是Cyclone EP1C6Q240C8。采用的FPGA芯片是Cyclone系列的EP1C6。开发板上还附有8Mbyte的SDRAM(Synchronous Dynamic Random Access Memory)和2Mbyte的Flash存储器。图2就是最终的系统工程文件。它的开发过程如下。
由于Nios II开发时采用默认的系统时钟50MHz,即图2中SOPC系统时钟clk,而核心板上的晶振是25MHz,所以需要添加一个锁相环(PLL)模块,将频率提升到50MHz再供给系统。
图2 系统工程文件
首先定义Nios II处理器系统,它是为Flash数据烧写特别定制的,所以使用了最精简的系统组件。它们分别是:
(1)CPU核,这里选择了经济型的Nios II,因为它占用最少的逻辑单元;
(2)On-Chip Memory,为系统添加内存储器,使用FPGA内部RAM资源,速度快,但存储容量较小,这里定义了4KB的RAM;
(3)JTAG UART,它主要用于在线调试,在调试中,只要配置了CPU、On-Chip Memory和JTAG UART就可以完成一个最小系统;
(4)Avalon三态总线桥(Avalon Tri-State Bridge),Avalon Tri-State Bridge也可以称作是外部RAM总线,在Nios II开发板上,要实现Nios II系统和FPGA片外存储器通信,就需要Avalon三态总线桥;
(5)SDRAM控制器,SDRAM能够提供更大的存储容量,解决片内RAM不够用的情况,它通过Avalon三态总线桥接入Nios II系统中;
(6)加入Flash接口,它的加入类似PC机接入了硬盘,用于存放程序和数据,并且具有非易失性,这里用它来存放要写入的数据。
其次,在自动分配基地址和中断后,进行SOPC系统地址的分配。这里由于软件程序较长,Reset address就设置为SDRAM。接着利用SOPC Builder就可以生成SOPC系统,并且生成用于综合的硬件描述语言(HDL)。
硬件设计的最终目的是为软件开发提供一个平台,所以最后还是要通过对工程文件的编译来获得配置文件,通过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)的操作时序都可能不同,所以在定制系统组件时要根据所选用的芯片,对它们的时序做出正确的设置,否则将使Nios II不能工作或者工作不稳定。
2.3 软件开发
通常来说,往往是因为数据量很大才需要把数据写入Flash中,这些数据很可能是以特殊方式保存下来的,比如在Matlab环境中经过数据处理被保存在数据文件(.mat)中。本设计的软件开发就是实现向Flash写入数据,而这个过程是在Nios II IDE的C/C++编程环境下完成的,如何在该环境中引用那些被保存的数据成为了一个关键问题。这里提出的一个解决方法是:运用文件这个概念。
该方法的主要思路是:首先在MATLAB中编写程序把需要保存的数据保存在某个文件中,如data.h;关于保存数据的文件的路径,建议使用绝对路径,并且将它存放在软件工程文件夹下;然后在C/C++环境中,添加头文件#include
其次,由于在开发过程中是把Flash当作普通外设来对待的,需通过访问Flash的方法来向Flash写数据,因为本设计是针对一次性向Flash写入大量数据,并且无需保存Flash中原来的数据,因此不会涉及到Flash的跨块擦除问题,故采用简单访问Flash的方法。使用Flash的操作函数时,需包含头文件“sys/alt_flash.h”。
编辑完程序后,如果直接编译,会出现存储容量不够的问题,可以通过以下办法解决。在系统库属性中做一些编译前设置。程序是默认存储在On-Chip Memory中的,这里需要改为SDRAM。可以选中“Reduced device driver”和“Small C Library”, 去掉“Clean exit”选择,这样可以使程序变小。
Nios II程序编译(Build)通过,就可以下载至已配置好硬件信息的开发板上,但往往会出现运行(Run)不起来的问题,原因有很多种,比较典型的有以下几种可能:使用了SDRAM却没有合理分配时钟;管脚分配出现问题;SDRAM、Flash的时序设置不正确。应仔细检查,排除这些问题。成功运行后,说明已把数据写入了Flash,如想要进一步确认,可以采用对Flash的读操作来进行验证。
3 结论
Nios II是一个性价比较强大的嵌入式处理器软核,结合SOPC技术,可以有效地实现系统功能。它实际上是一个软硬件复合的系统。与普通的嵌入式系统开发相比,具有更多的优势。
在介绍了基于NiosII的SOPC系统的一般开发流程之后,本文以Flash数据烧写为例,详细地说明了软硬件开发过程中需要注意的问题。特别是在软件设计过程中,运用了文件的概念来引用保存在Matlab数据文件(.mat)中的数据。另外,针对一次性向Flash写入大量数据这个问题,使用了简单访问Flash的方法,既简单又保证了正确性。在硬件开发中,从节省资源的角度考虑,只为该系统定制了所需的系统组件。总的来说,这为Flash数据烧写提供了一个简单有效的手段。
参考文献
[1] Altera Corporation. Nios II Software Development [EB/OL]. http://www.altera.com.cn/literature/lit-nio2.jsp .
[2] Altera Corporation. The HAL System Library [EB/OL].http://www.altera.com.cn/literature/lit-nio2.jsp .
[3] 任爱锋,初秀琴,常存,孙肖子. 基于FPGA的嵌入式系统设计[M]. 西安:西安电子科技大学出版社,2004. 197-198.
[4] 潘松,黄继业,曾毓. SOPC技术实用教程[M]. 北京:清华大学出版社,2005. 200-210.
[8]电大学习网.免费论文网[EB/OL]. /d/file/p/2024/0424/fontbr />
相关文章:
企业工资管理系统(下)04-26
网络环境下的图书发行模式研究04-26
数字化时代的韩国出版产业特色04-26
多媒体技术在地理信息系统中的应用研究04-26
JAVA 类文件保护分析与研究04-26
企业工资管理系统(上)04-26
库存管理系统(下)04-26
库存管理系统(上)04-26