FPGA/ASIC技术
1 前言
近年来,随着嵌入式核心芯片的飞速发展,改变了传统嵌入式系统的设计方法,嵌入式系统逐渐由板级向芯片级过渡,即片上系统——SOC。片上系统是追求产品系统最大包容的集成器件,是当前嵌入式应用领域的技术热点。SOC的出现使集成威廉希尔官方网站 发展成为集成系统,整个电子整机的功能可以集成到一块芯片中,降低了设计成本,缩短了开发周期。因此,本文设计了一个基于FPGA的嵌入式系统,既能满足嵌入式系统教学实验的需要,同时也可作为嵌入式产品开发平台。
2 系统硬件设计
本系统要实现的功能包括:可以运行嵌入式操作系统;支持NIOS II开发;支持USB通讯;支持RS-232串口通讯;支持以太网通讯;支持JTAG接口在线调试与下载。
2.1 系统硬件框图
针对所需的功能,设计出系统的相应硬件平台,硬件平台主要是由嵌入式处理器模块、存储器模块、包括以太网接口、USB接口和电源等外部接口威廉希尔官方网站 模块组成。系统硬件结构框图如图1 所示。
图1 系统硬件结构图
2.2 嵌入式处理器模块
嵌入式处理器是整个系统的控制管理中心,主要功能是实现整个系统的控制和任务调试管理。在本系统中嵌入式处理器采用ALTERA公司的Cyclone系列的EP1C12Q240C8芯片,其采用QFP封装,拥有12060个逻辑单元(LE)、52个M4K 存储块、全部RAM位数为239616、两个锁相环,以及249个可用的I/O脚, 其配置存储器采用EPCS1,编译后系统速度可以达到100MHz,支持ALTERA 公司的SOPC内核NIOS II系统的开发,NIOS II开发环境编译后的可执行文件可以通过JTAG接口下载到开发板上的FLASH中去,可以支持一些嵌入式操作系统,比如MicroC/OS操作系统和mClinux操作系统。
2.3存储器模块
2.3.1 专用串行配置器件EPCS1接口威廉希尔官方网站
EPCS系列器件是Altera公司提供的一种基于FLASH存储器的专用串行配置器件,其具有串行接口,接口只需要四个引脚,能够存储Stratix II 系列、Cyclone系列的FPGA的配置信息,并在系统上电或者需要重新配置FPGA时,向FPGA发送配置信息。本系统用的串行配置器件EPCS1大小为1M字节,反复擦写次数可多达十万,可以轻松实现掉电保护
2.3.2 Flash存储器接口威廉希尔官方网站
Flash存储器具有低功耗、大容量、擦写速度快、可整片或分扇区在系统编程(烧写)、擦除等特点,因而在各种嵌入式系统中得到了广泛的应用。
系统中用了一片AMD29LV320D FLASH存储器,其单片存储容量为32M位(4M字节),工作电压为2.7V~3.6V,16位数据宽度。AMD29LV320D仅需3V电压即可完成在系统的编程与擦除操作,通过对其内部的命令寄存器写入标准的命令序列,可对Flash进行编程(烧写)、整片擦除、按扇区擦除以及其他操作。
Flash存储器在系统中通常用于存放程序代码,系统上电或复位后从此获取指令并开始执行,由于,在进行系统整体设计时,可以通过使用Quartus II对引脚进行配置,所以对于AMD29LV320D FLASH的三个功能引脚nCE、nOE、nWE,可以各接一个EP1C12Q240C8的通用I/O脚即可。
2.3.3 SDRAM存储器接口威廉希尔官方网站
与Flash存储器相比较,SDRAM不具有掉电保持数据的特性,但其存取速度大大高于Flash存储器,且具有读/写的属性,因此,SDRAM在系统中主要用作程序的运行空间、数据及堆栈区。当系统启动时,CPU首先从复位地址0x0处读取启动代码,在完成系统的初始化后,程序代码调入SDRAM中运行,以提高系统的运行速度。同时,系统及用户堆栈、运行数据也都放在SDRAM中。
系统中用了一片HY57V641620 SDRAM存储器,其存储容量为4组x16位(8M字节),工作电压为3. 3V,常见封装为54脚TSOP,兼容LVTTL接口,支持自动刷新(Auto-Refresh)和自刷新(Self-Refresh), 16位数据宽度。可满足运行MicroC/OS操作系统、或者mClinux操作系统及各种相对较复杂的算法的运行要求。
要在系统中使用SDRAM,要求微处理器具有刷新控制逻辑,或在系统中另外加入刷新控制逻辑威廉希尔官方网站 。通过Altera公司提供的NIOS II开发工具可以将SDRAM控制器添加到NIOS CPU中,然后下载到EP1C12Q240C8中运行,因此可以方便地使用EP1C12Q240C8的通用I/O口与SDRAM相连接,同样在进行系统整体设计时通过Quartus II定义引脚。
2.4 外部接口模块
2.4.1以太网接口设计
系统采用realteck公司推出多年RTL8019AS网络芯片。RTL8019AS芯片是一款应用广泛的10M网络芯片,支持以太网II 和IEEE802.3 10Base5,10Base2,10BaseT、支持可编程输出的4-诊断 LED。利用RTL8019AS可以在NIOS II系统中方便的建立起完整的网络服务器,可以通过网络从FPGA芯片构成的软嵌入式系统中收发数据。
RTL8019AS与EP1C12Q240C8通过外部总线进行连接。主要是把RTL8019AS的数据总线(SDO~SD15)、地址总线(SAO~SA5,SA8)、读使能(IORB)、写使能(IOWB)、中断输出信号(INTO)和中断输入信号(RSTDRV)与EP1C12Q240C8的通用I/O脚连接即可。
2.4.2 USB接口设计
系统采用Cypress公司的SL811HS芯片作为USB接口芯片,它是一种USB主机控制器,它能与全速或低速USB外围设备通信。SL811HS能与各种微处理器、微控制器、FPGA以及DSP,ISA等各种总线进行接口,适用于各种要求配置USB主机或设备的嵌入式系统。
在USB接口威廉希尔官方网站 设计中,SL811HS的8位数据线直接和FPGA芯片的8位数据线相连。其中需要注意的是,SL811HS的AO引脚和低8位地址线的最低位AO相连,即与锁存器的地址输出端的最低位相连。
2.4.3 串行接口设计
RS232是应用最为广泛的UART接口,可以方便的实现与计算机的数据通讯;同时在调试基于FPGA的嵌入式操作系统时候,可以作为辅助调试接口,结果输出到主机的超级终端上面。因为FPGA的通用I/O引脚可以在后期通过Quartus II软件定义,所以只需选取EP1C12Q240C8的任意四个引脚与电平转换器MAX3232C相连,通过MAX3232C 接RS232标准串行接口(DB9),可与PC机进行串行通信。
2.4.4 电源接口设计
系统需要使用1.5V、3.3V和5V三种直流电源,其中,EP1C12Q240C8内核使用1.5V电源,EP1C12Q240C8的I/O口、MAX3232C、LCD接口等器件使用3.3V电源,RTL8019AS使用5V电源。为简化系统电源威廉希尔官方网站 的设计,要求整个系统的输入电压为高质量的5V直流电压电源,本系统采用电压转换芯片B1117来得到1.5V和3.3V的电压。
2.4.5 系统时钟威廉希尔官方网站 设计
系统时钟模块为试验系统提供时钟信号,使其工作在指定的频率下,是系统不可缺少的部分。本系统的时钟信号由50MHz的有源晶振产生,为了使系统有稳定的时钟输入,要对晶振的输入电压通过简单的LC滤波威廉希尔官方网站 做滤波处理,使其电压更加稳定,尽可能减小干扰。
2.4.6 复位威廉希尔官方网站 设计
在系统中,复位威廉希尔官方网站 主要完成系统的上电复位和系统在运行时用户的按键复位功能。本系统根据实际需要,通过Quartus II软件对复位信号进行延时设计,然后在外部再加以需要简单的威廉希尔官方网站 来实现。
2.4.7 JTAG接口设计
JTAG(Joint Test Action Group)是一种国际标准测试协议,主要用于芯片内部测试及对系统进行仿真、调试 。JTAG技术是一种嵌入式调试技术,它在芯片内部封装了专门的测试威廉希尔官方网站
,可以通过专用的JTAG测试软件对芯片内部节点进行测试。EP1C12Q240C8有四个专用引脚TMS、TDI、TCK、TDO与Altera公司的专用下载电缆——Byte Blaster II通过一个十针的插座相连,用于下载以及在线调试。
3 系统软件设计
本系统主要的开发调试工具有SOPC Builder、Quartus II和 NIOS II IDE。SOPC Builder是一个自动化的系统开发工具,它能够极大地简化高性能SOPC的设计工作;Quartus II是Altera公司推出的CPLD/FPGA开发工具,Quartus II提供了完全集成且与威廉希尔官方网站 结构无关的开发包环境,具有数字逻辑设计的全部特性,主要用于system-on-a-programmable-chip (SOPC)的设计环境;NIOS II IDE是NIOS II系列嵌入式处理器的基本软件开发工具。所有软件开发任务都可以NIOS II IDE下完成,包括编辑、编译和调试程序。
3.1.系统软件配置
采用NIOS处理器开发设计与采用传统的处理器开发设计不同,开发者必须先配置处理器结构、设置接口等内容。也就是说,开发者必须根据实际需求构建一个处理器,而传统的处理器具有固定接口、片内RAM和外部设备。系统设计所需的具体软件配置如下:
(1)用SOPC Builder系统综合软件来进行NIOS软核的软件配置,包括NIOS CPU配置、片上ROM及RAM设置、FLASH设置、SDRAM设置、JTAG调试配置、加入定时器、加入外部RAM总线——Avalon三态总线桥、通讯接口、按键PIO与LED PIO设置、指定基地址和配置NIOS软核,这样整个NIOS软核已经配置完毕,之后需要编译,并生成图形文件,成为Quartus II设计的一部分。
(2)使用Quartos II软件来选取具体的Altera可编程器件系列,并对SOPC Builder生成的HDL设计文件进行布局布线;再使用Quartos II软件选取目标器件并对NIOS II系统上的各种I/O口分配管脚,另外还要根据要求进行硬件编译选项或时序约束的设置。在编译的过程中,Quartos II从HDL源文件综合生成一个适合目标器件的网表。最后生成配置文件。
(3)使用Quartos II编程器和Altera下载电缆,将配置文件下载到开发板上。当校验完当前硬件设计后,再将新的配置文件下载到开发板上的非易失存储器里。
3.2.嵌入式实时操作系统MicroC/OS-II的应用设计
目前比较流行的嵌入式操作系统主要有MicroC/OS-II , MicroCLinux,VxWorks等,考虑到系统资源以及NIOS II IDE 开发环境包含MicroC/OS-II实时操作系统,为设计者提供快速地搭建基于NIOS II处理器的MicroC/OS-II应用程序的能力,, 故本系统的操作系统选用MicroC/OS-II 。MicroC/OS-II 是一种可固化、可剪裁、占先式的多任务实时操作系统内核。它为每个任务分配单独的堆栈, 提供多种系统服务可进行中断管理。
创建一个基于NIOS II处理器的MicroC/OS-II软件过程包含以下步骤:创建一个新的NIOS II IDE工程;设定MicroC/OS-II软件工程库;建立并运行NIOS II 下的MicroC/OS-II软件工程。
一、 创建一个新的NIOS II IDE工程
创建一个新的NIOS II IDE工程的方法比较简单,基本上按照向导就能完成,要注意的是在 Project Template(工程模板)选择中, 要选择 the MicroC/OS-II Tutorial,在New System Library Dialog Box 页面中的Select Type of system library栏中要选择MicroC/OS-II。
二、设定MicroC/OS-II的步骤
(1). 在NIOS II IDE的C/C++ Projects视图中,右键在系统库上单击std_system_lib。
(2). 在弹出的菜单中选择Properties打开Properties对话框。
(3). 单击System Library显示system library选项。
(4).单击在RTOS 下面的RTOS Options。弹出MicroC/OS-II RTOS Options对话框。
(5).单击“+”在在左边的面板中,展开MicroC/OS-II目录。MicroC/OS-II是高度映射可设定的。你选定的对话框中的选项被保存在os_cfg.h文件中。选定的MicroC/OS-II选项被包含在二进制中。通过单击MicroC/OS-II下每一个选项检查你所能选择的选项。
(6).选择默认设置单击OK。你将返回系统库选项对话框,然后单击OK完成设置。
三、建立并运行NIOS II 下的MicroC/OS-II软件工程
在这一部分,在嵌入式系统中设计并运行一个MicroC/OS-II程序,通过在嵌入式操作系统MicroC/OS-II下编写2个互相调用任务来测试本系统的运行情况。
1.打开ucosii_tutorial.c
2.头文件加入如下代码
#include “system.h”
#include “altera_avalon_pio_regs.h”
#include “alt_types.h”
3.加入相关定义
#define TASK_STK_SIZE 1024
#define TaskStart_ID 0
#define Task1_ID 1
#define Task2_ID 2
#define TaskStart_Prio 1
#define Task1_Prio 4
#define Task2_Prio 3
OS_STK TaskStk[N_TASKS][TASK_STK_SIZE];
OS_EVENT *AckMbox;
OS_EVENT *TxMbox
4.在初始化函数 initCreateTasks函数中加入如下代码
OSTaskCreateExt(TaskStart, 0, &TaskStk[0][TASK_STK_SIZE-1], TaskStart_Prio, TaskStart_ID, &TaskStk[0][0], TASK_STK_SIZE, 0, OS_TASK_OPT_STK_CHK );
OSTaskCreateExt(Task1, 0, &TaskStk[1][TASK_STK_SIZE-1], Task1_Prio, Task1_ID, &TaskStk[2][0], TASK_STK_SIZE, 0, OS_TASK_OPT_STK_CHK );
OSTaskCreateExt(Task2, 0, &TaskStk[2][TASK_STK_SIZE-1], Task2_Prio, Task2_ID, &TaskStk[3][0], TASK_STK_SIZE, 0, OS_TASK_OPT_STK_CHK );
5.增加执行2任务互相调用的代码
void Task1(void * pParam)
{ //往接收消息队列发送A
char txmsg;
INT8U err;
txmsg = ‘A’;
while(1)
{
OS_ENTER_CRITICAL();
printf( “Hello from task1\n” );
OS_EXIT_CRITICAL();
OSMboxPost(TxMbox, &txmsg);
OSMboxPend(AckMbox, 0, &err);
OSTimeDly(2);
}
}
void Task2(void * pParam)
{
char *rxmsg;
INT8U err;
while(1)
{
rxmsg = OSMboxPend(TxMbox, 0, &err);
OS_ENTER_CRITICAL();
printf( “Hello from task2\n” );
OS_EXIT_CRITICAL();
OSTimeDly(2);
OSMboxPost(AckMbox, (void*)1);
}
}
6、 选择Run As 》 NIOS II Hardware (Run menu中)创建程序,下载它到试验板中并运行。下载完成后,当执行这两个任务时,任务一返回:“Hello from task1”;而任务二返回:“Hello from task2”,两个任务之间互相调用。
得到测试结果如图2:
图2 MicroC/OS系统测试结果
从测试结果中可以看出,任务一和任务二被反复的调用,这与预期中执行的结果相同,说明系统能够在FPGA中稳定运行。
四、结束语
本文介绍的基于FPGA的嵌入式系统设计达到了预期效果, CPU 本身是以软核的方式实现, 其功能可根据需要进行定制, 非常灵活。嵌入式MicroC/OS-II 操作系统的32 位嵌入式微处理器进行核心控制,利用它强大的运算处理能力,不仅减少了系统所用的器件数量和系统的尺寸,更提高了系统的可靠性和灵活性。该设计为嵌入式系统设计提供了一条新思路,体现了FPGA的灵活性、高集成性等特性,大大降低了成本,缩短了开发时间。
全部0条评论
快来发表一下你的评论吧 !