基于FPGA的嵌入式系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 NiosⅡ CPU的体系结构3
1.1 NiosⅡ处理器的结构 (3)
1.2 NiosⅡ处理器的基本组成 (3)
1.3 Debug模块 (3)
1.4 NiosⅡ开发环境简介 (3)
2 IP核4
2.1 SDRAM控制器 (4)
2.2FLASH (5)
3 基于SOPC的温湿度监测系统设计5
3.1 系统总体设计方案 (5)
3.2 SOPC硬件系统设计 (6)
3.3 SOPC软件系统设计 (9)
3.3.1 NiosⅡ软件系统设计 (9)
3.3.2 NiosⅡIDE C/C++Build属性配置 (13)
3.3.3 软件系统的设计流程 (15)
4 实验结果与分析15结论18
SOPC是可编程片上系统,即一种特殊的嵌入式系统。
首先它是片上系统(SOC),由单个芯片完成整个系统的主要逻辑功能;其次,它是可编程系统,具有灵活的设计方式,可裁减、可扩充、可升级,并具备软硬件在系统可编程的功能。
SOPC是基于FPGA解决方案的SOC,与ASIC的SOC解决方案相比,SOPC系统及其开发技术具有更多的特色。
构成SOPC的途径有基于FPGA嵌入IP硬核的系统、基于FPGA嵌入IP软核的系统和基于HardCopy 技术的SOPC系统三种方式。
本文介绍基于FPGA的嵌入IP软核的SOPC系统实现方法,设计了一种基于SOPC的温湿度监测系统。
通过Quartus II 软件里的SOPC builder把Nios II Processor、Avalon总线、UART、SDRAM_controller、Flash Memory、Avalon三态桥等多个IP核集成生成系统所需的SOPC。
传感器扩展板采用Mega8作为主控芯片,用于数据的采集、显示以及和PC的通信。
同时配有由SPI总线控制的数码管,可以显示传感器的测量结果,以及与PC通信过程中的具体情况。
对外采用波特率为115200的串口进行通信,用户可通过串口向该模块发出各种查询命令以查询传感器的状态。
本次设计使用NiosII IDE编写应用程序,发送相应指令,获取温度和湿度的值,同时显示在Console窗口。
关键词:
SOPC技术;FPGA开发板;IP核;温湿度监测;NiosⅡ处理器;Mega8芯片
SOPC is System-On-a-Programmable-Chip, that is a special embedded system: First, it is the system on chip (SOC), which completes the main logic function of the whole system on a single chip; second, it is a programmable system with a flexible design approach which is reducible, scalable, and has the software and hardware in-system programmable functions. SOPC is a kind of special SOC which is based on FPGA solutions and there are more features compared with the SOC and ASIC solutions; three approaches are available to constitute a SOPC: based on embedded hard IP-core FPGA, based on embedded soft IP-core FPGA and based on Hardcopy technology. Each of them has its own characteristics. This article describes the embedded SOPC system based on soft IP core of Altera's FPGA,which is used to design a temperature and humidity monitoring system .Using the SOPC builder of the Quartus II software, we integrate Nios II Processor, Avalon bus, UART, Sdram_controller, Flash Memory, Avalon tristate bridge, and other IP cores to generate the SOPC that the system needs.The sensor expansion board use Mega8 as the main chip for data acquisition, display and PC communication. At the same time, the board has nixietube controlled by the SPI bus, which is used to display the sensor measurements and the specific situation of communication with PC. A user can issue the query command to query the status of the sensor through the115200 serial port of the external communication. This design uses the Nios II IDE to write application,sending the appropriate instructions and obtaining the temperature and humidity values displayed in the Console window.
Keywords:
SOPC technology; the development board of FPGA; IP Core; Temperature and humidity monitoring; NiosⅡprocessor; Mega8 chip
1 NiosⅡ CPU的体系结构
1.1 NiosⅡ处理器的结构
Nios嵌入式处理器系统包括一个或多个Nios CPU、Avalon交换总线和其他组件[7]。
下列组件可以生成基于Nios处理器的嵌入式系统
Nios CPU ,Avalon总线,外围设备和存储器接口,片内调试模块
Nios处理器系统包含带指令和数据高速缓存的Nios CPU,片内调试模块、直接存储器存取(DMA)控制器、常用外围设备(PIO、UART、以太网口和存储器接口等)和并行多控制Avalon交换结构总线。
1.2 NiosⅡ处理器的基本组成
NiosⅡ处理器包括如下功能单元,寄存器文件,ALU ,自定义指令逻辑的接口,异常控制器,指令总线,数据总线,指令高速缓存和数据高速缓存,指令和数据的存储器接JTAG调试模块。
1.3 Debug模块
Altera的合作伙伴FS2和Accelerated Techonlogy提供给Nios嵌入式处理器开发者顶级调试工具。
可配置的Nios CPU可选择包括FS2的片内调试模块(OCI)。
OCI提供包括运行控制、硬件断点,片内跟踪和片外跟踪等电路仿真器。
用户可以使用Altera开发套件中的ByteBlasterⅡ下载电缆或FS2的目标系统分析器连接OCI,在主程序中存取OCI。
1.4 NiosⅡ开发环境简介
Nios嵌入式处理器系统的开发环境包括硬件和软件两部分。
Nios系统设计人员可以使用Nios开发工具创建高性能的可编程片上系统(SOPC)。
有效的Nios嵌入式处理器开发工具允许用户配置一个或多个Nios
CPU,从标准库中添加外围设备,综合处理自定义系统,与Quartus设计软件一起编译系统,用GNUPro软件开发工具进行程序设计、连编和调试。
图1 Nios嵌入式开发流程
2 IP核
Cyclone器件内置多达2个Nios增强型锁相环,可给用户提供高性能的时钟管理能力,如频率合成、可编程移相、片外时钟输出、可编程占空比、失锁检测以及高速差分时钟信号的输入和输出等。
2.1 SDRAM控制器
在以SDRAM作为缓存的系统中,使用可编程器件对其进行控制具有很强的灵活性。
为了使设计具有模块化和可重复使用的优点,设计了一个简化的SDRAM接口电路。
这样就屏蔽掉了SDRAM操作的复杂性,而其它逻辑模块可通过接口电路对SDRAM进行访问。
此外,由于整个SDRAM控制器用VHDL语言编写,只要对其进行简单的修改就可以满足不同的需求,具有
很强的灵活性。
2.2FLASH
平台具有一个32MB的Nor FLASH——AM29LV256ML,位于核心板FPGA芯片的下方。
在SOPC中可使用下图所示的IP核Flash Memory Interface (CFI)。
依照电路图,将地址宽度定义为25。
图2 Flash Memory Interface
3 基于SOPC的温湿度监测系统设计
3.1 系统总体设计方案
基于SOPC的温度湿度监控系统采用的是SOPC和NIOS设计,通过FPGA 实现。
其中UP-FPGA2C35-II中传感器扩展板由多种不同的传感器构成,并有四个外部信号输入接口,可以分别测量温度、湿度、热敏、光敏信号。
采用Mega8作为主控芯片,用于数据的采集、显示以及和PC 的通信。
同时配有由SPI总线控制的二位八段共阳数码管,可以显示传感器的测量结果,以及
与PC通信过程中的具体情况。
对外采用波特率为115200 的串口进行通信,用户可通过串口向该模块发出各种查询命令以查询传感器的状态。
串口通信指令格式传感器扩展板与PC 之间的通信采用一问一答的方式,即PC向电路板发送一条查询指令,电路板则返回相应的消息。
SOPC从工业控制上位机软件的特点出发,按照功能分为多个不同的模块,完成一套适用于仓库温湿度管理系统的上位机应用软件。
设计了软件的功能结构,并编写了相应的程序,使软件具备了仓库的实时监测、消息显示等功能。
本设计的几个主要方面有:界面编程、控件的编程;与FPGA串口通信;温湿度显示,Nios II IDE中的编程;将上面的几部分联合编程。
最后实现对温湿度信息接受并显示。
图3 整个系统的设计流程
3.2 SOPC硬件系统设计
(1)打开Quartus II软件,新建工程“Sensor Board”,然后选择“Tools | SOPC
Builder…”进入SOPC Builder。
注意:若没有工程打开,此选项不可选,所以先建立工程。
在“Create New System”对话框中为这个NiosII 最小系统命名为“nios”,选择“Verilog”硬件描述语言,点击“OK”。
(2) “Device Family”栏选择“Cyclone II”,“clk”栏为“75”MHz。
(3)添加NiosII CPU Core、SDRAM、Flash Memory、Avalon 三态桥、UART 等通用外设如图11所示,UART控制器IP 核的波特率设置为115200 nios 所需组件添加完毕之后,自动分配基地址和中断,分别选择“System | Auto‐Assign Base Adresses”和“System | Auto‐Assign IRQs” 。
图4 硬件配置图
(4)分配复位和异常处理时程序指针入口地址。
双击“cpu”,在弹出的对话框中,在“Reset Vector”栏下拉菜单中选中sdram,“Exception Vector”栏的Memory下拉菜单选中sdram,单击“finish”完成。
(5)点击“Next”,进入ptf 生成页面,点击“Generate”,SOPC Builder 会提示生成系统的进程,系统生成完成的时会提示“SUCCESS:SYSTEM GENERATION COMPLETED”。
单击“EXIT”按钮退出SOPC Builder。
(6)SOPC Builder为这个定制的Nios II系统模块创建了一个符号,在
Quartus II中新建一个“Block Diagram/Schematic File”顶层设计文件“nios.bdf”。
双击空白处,在弹出的“Symbol”对话框中选择刚生成的符号。
图5 添加nios模块
(7)添加时钟信号,选择Tool | MegaWizard Plug‐In Manager,然后选择定制新的模块“Creat a new custom…”项,选择“I/O”下的“ALTPLL”,输入文件名“pll”,设置系统时钟、sdram时钟。
图6 pll核
然后,添加输入和输出管脚。
图7 连接好的顶层模块图
(8)设置FPGA没有用到的管脚的状态,选择Assignments | Device,弹出Settings对话框,单击“Device and Pin Options”弹出该对话框,然后单击Unused Pins,选择“As inputs,tri-stated”。
(9)本实验中用Tcl脚本分配引脚。
选择“Project|Generate Tcl File for Project”,将文件取名为SensorBoard.tcl,单击OK按钮,会打开该文件。
(10)将本工程的文件夹里面“pins for SensorBoard.txt”文本文档打开,选中,全部复制到SensorBoard.tcl文件中set_global_assignment语句后面,然后保存。
选择“Tools|Tcl Scripts..”,在出现的对话框中选中SensorBoard.tcl,点击右侧“RUN”,即可完成管脚分配。
并且编译整个工程。
3.3 SOPC软件系统设计
3.3.1 NiosⅡ软件系统设计
NiosⅡ IDE(NiosⅡ Integrated Development Enviroment/ NiosⅡ集成开发环
境)是一个功能齐全的集成调试器,具有硬件在线调试功能。
通过它可以设置硬件断点观察程序的各种变量,还可以观察寄存器的变化情况。
NiosⅡ IDE为软件开发提供四个主要的功能:
(1) 工程管理器
NiosⅡ IDE提供多个工程管理任务,加快嵌入式应用程序的开发进度。
新工程向导——NiosⅡIDE推出了一个新工程向导,用于自动建立C/C++应用程序工程和系统库工程。
采用新工程向导,能够轻松地在Nios II IDE中创建新工程。
软件工程模板——除了工程创建向导,NiosⅡ IDE还以工程模板的形式提供了软件代码实例,帮助软件工程师尽可能快速地推出可运行的系统。
(2) 编辑器和编译器
Altera NiosⅡIDE提供了一个全功能的源代码编辑器和C/C++编译器
文本编辑器——NiosⅡ IDE文本编辑器是一个成熟的全功能源文件编辑器。
这些功能包括:语法高亮显示C/C++、代码辅助/代码协助完成、全面的搜索工具、文件管理、广泛的在线帮助主题和教程、引入辅助、快速定位自动纠错、内置调试功能。
C/C++编译器——NiosⅡ IDE为GCC编译器提供了一个图形化用户界面,NiosⅡIDE编译环境使设计Altera的NiosⅡ处理器软件更容易,它提供了一个易用的按钮式流程,同时允许开发人员手工设置高级编译选项。
NiosⅡ IDE 编译环境自动地生成一个基于用户特定系统配置(SOPC Builder生成的PTF文件)的makefile。
NiosⅡ IDE中编译/链接设置的任何改变都会自动映射到这个自动生成的makefile中。
这些设置可包括生成存储器初始化文件(MIF)的选
项、闪存内容、仿真器初始化文件(DAT/HEX)以及profile总结文件的相关选项。
(3) 调试器
NiosⅡIDE包含一个强大的、在GNU调试器基础之上的软件调试器-GDB。
该调试器提供了许多基本调试功能,以及一些在低成本处理器开发套件中不会经常用到的高级调试功能。
基本调试功能——NiosⅡIDE调试器包含如下的基本调试功能:运行控制、调用堆栈查看、软件断点、反汇编代码查看、调试信息查看、指令集仿真器。
高级调试——除了上述基本调试功能之外,NiosⅡ IDE调试器还支持以下高级调试功能:硬件断点调试ROM或闪存中的代码、数据触发、指令跟踪。
(4) 闪存编程器
使用NiosⅡ处理器的设计都在单板上采用了闪存,可以用来存储FPGA配置数据和/或NiosⅡ编程数据。
NiosⅡIDE提供了一个方便的闪存编程方法。
任何连接到FPGA的兼容通用闪存接口(CFI)的闪存器件都可以通过NiosⅡIDE闪存编程器来烧写。
除CFI闪存之外,NiosⅡIDE闪存编程器能够对连接到FPGA的任何Altera串行配置器件进行编程。
NiosⅡ IDE支持两种项目:系统库项目和应用项目。
因此对系统属性的的配置也有两种方法:
直接配置:选择目标系统库项目,单机鼠标右键—Properties,在弹出的窗口中选择System Library,直接配置系统库项目。
间接配置:在NiosⅡ IDE中,每个项目都应该与某个系统库项目相关联,
用户可以通过应用项目来间接配置预其相关的系统库项目属性。
选择目标应用项目,鼠标右键—System Library Properties,然后具体配置。
图8 系统库属性配置
在系统库属性配置页面可以完成下列参数配置:
指定stdin,stdout和stderr标准I/O设备;指定代码或数据段所对应的目标物理存储器;指定系统时钟和timestamp时钟;指定个代码优化选项;添加或配置软体元件,比如RTOS或者文件系统;下面挑选几种配置简单介绍其功能:
Targre Hardware:用于显示当前系统库项目中的两个重要信息:所基于SOPC Builder System(*.ptf),所作用的CPU,在多处理器系统中用户必须指定系统库项目对应的CPU
System Library Contents:RTOS(Real-time operating system / 实时系统)配置系统库项目所基于的操作系统(OS),在该选项有两个可选条目:
None(single threaded): 为系统库配置单线程HAL(Hardware Abstraction
Layer/硬件抽象层)运行环境,本项目的设计就是该选项;
MicroC/OS-II:为系统库配置MicroC/OS-II。
Small C Library:使能该选项时,系统将使用精简的Newlib ANSI C标准库,此时某些Newlib ANSI C标准库的功能将不再起作用,比如pringf()、fpringf()、springf()等等都将不再支持浮点数据。
所以使用是一定要小心。
在该工程中采用标准的Newlib ANSI C库。
3.3.2 NiosⅡ IDE C/C++Build属性配置
该属性配置页主要用于配置NiosⅡ的GNU工具链的编译、预处理以及链接选项。
通过选择目标系统库项目或应用项目,鼠标右键--Properties--C/C++Build打开属性配置窗口。
图9 NiosII IDE C/C++Build属性配置
属性主要包含两个内容:Active Configuration和Configuration Settings
在该的工程中主要考虑调整Configuration Settings—tool setting下NiosII
compiler中的General选项的内容。
在Optimization Levels下拉窗口中:
图10 Configuration Settings界面
None (-O0): gcc编译器默认优化等级。
不做任何优化
Optimize (-O1):优化。
在-O1下:编译会尝试减少代码体积和代码运行时间。
但是并不执行会花费大量时间的优化操作
Optimize more (-O2) :gcc执行几乎所有支持的操作但不包括空间和速度之间权衡的优化。
-O2优化等级下,并不执行循环展开和函数“内联”优化操作。
Optimize most (-O3) :进一步优化;
Optimize size (-OS):针对程序空间大小优化(多用于嵌入式系统)。
-Os使能(-O2)中除去会增加程序空间的所有优化参数。
同时-Os还会执行更加优化程序空间的选项。
在nios2-elf-gcc编译器中使用“-O3”选项,代码可以被最大限度地优化,包括代码的大小和执行速度。
需要注意的是,编译器优化可能会带来一些意想不到的结果。
另外,必须在用户工程和系统库中都使用-O3选项。
在工程中采用的是Optimize more (-O2)优化等级。
3.3.3 软件系统的设计流程
NiosⅡIDE基于开放式的、可扩展Eclipse IDE project工程以及Eclipse C/C++ 开发工具(CDT)工程。
(1)启动Nios II IDE,在“开始菜单|所有程序|Altera|Nios II EDS 9.0”,选中“Nios II IDE 9.0”。
(2)新建工程,选择“File | New | Project”,在New Project对话框中选择“C/C++ Application”单击“Next”。
左栏中选择“Blank Project”模板,改工程名为“SensorBoard”,SOPC Builder System选择刚生成的系统文件“nios.ptf”,cpu为定制的“cpu”,点击Next。
图11 新建工程“SensorBoard_”
4 实验结果与分析
先设计传感器开发板的程序,核心代码如下。
int sensor(uchar cmd,int parameter)
{
int i = 0,total;
uchar txbuff[5];
uchar rxbuff[7];
fp = fopen("/dev/uart","r+");
txbuff[0] = 0xaa;
txbuff[1] = 0xff;
txbuff[2] = cmd;
txbuff[3] = 0xff ^ cmd;
txbuff[4] = 0xff;
for(i = 0 ; i <= 4 ; i++ )
{
fwrite(&txbuff[i],1,1,fp);
fflush(fp);
}
fclose(fp);
if(parameter == 1)
{
buffer_clear();
fp = fopen("/dev/uart","r+");
for(i = 0 ; i <= 6 ; i++ )
{
fread(&rxbuff[i],1,1,fp);
usleep(500);
printf("%x ",rxbuff[i]);
}
fclose(fp);
total = data_convert(rxbuff);
return total;
}
else
{
return 0;
}
再设计显示的程序,在NiosII自带的Console观察实验结果,核心代码如下。
if(cmd == 1)
{
buffer_clear();
data_rev = sensor(0x10,1);
printf("\nthe current temperature is/当前温度: %d°C\n",data_rev);
}
else if(cmd == 2)
{
buffer_clear();
data_rev = sensor(0x1D,1);
printf("\nthe current humidity is/当前湿度(0~100) : %d\n",data_rev); }
结论
(1)选择“project|Build all”进行编译,下载SensorBoard.sof文件。
(2)运行应用程序,选择“Run…”或者“Run As”,通过NiosII自带的Console 观察实验结果如图12所示。
图12 实验结果。