电子工程系实验指导书SoPC系统开发.docx
《电子工程系实验指导书SoPC系统开发.docx》由会员分享,可在线阅读,更多相关《电子工程系实验指导书SoPC系统开发.docx(29页珍藏版)》请在冰豆网上搜索。
电子工程系实验指导书SoPC系统开发
SoPC系统开发
实验指导书
引言
《SoPC系统开发》是电子信息工程(嵌入式系统工程方向)必修课,是以《数字电路》,《程序设计基础(C语言)》和《数字系统设计》为先导课程,为后续课程的实施,以及参加工作或者继续深造奠定基础的课程,也是一门实践性很强的课程。
通过这门课程的学习,使学生熟练掌握SoPC系统开发的基本理论和基本方法;掌握SoPC系统开发的实践方法,获得实践技能的基本训练;培养学生分析问题和解决问题的能力,深化和扩展对课程内容的理解。
本门课程理论内容包括:
SoPC设计绪论,SoPC硬件设计流程,SoPC软件设计流程,相关EDA工具,NiosⅡ体系结构,Avalon总线规范等。
实践内容包括:
片上最小系统、片外SDRAM、PIO输出—LED、PIO输入—中断、IntervalTimer和基于SoPC的USB画笔设计与实现等。
本实验指导书旨在对《SoPC系统开发》课程的实验进行规范,内容包括:
实验目的和要求、设备或环境、实验原理、实验内容等。
学生可遵照本实验指导书内容完成相应实验并提交实验报告。
设备与工具
这章主要介绍本实验指导书中会用到的硬件设备。
DE2-115FPGA开发板
一、概述
DE2系列平台一直位居于国内外FPGA教育开发平台的领先地位。
因其拥有适应各种应用需求的丰富接口及工业等级的设计资源,成为全球1000所名校实验室中的首选。
延续DE2系列开发平台之领先和成功,搭载CycloneIVE芯片之DE2-115开发平台,不仅提供客户一个低功耗,丰富逻辑资源,大容量存储器以及DSP功能的选择,而且搭配了丰富的外围接口,以满足对移动视频、语音、数据接入及高品质图像的开发需求。
二、使用说明
DE2-115开发板包括以下硬件资源:
•AlteraCyclone®IV4CE115FPGA器件
•Altera系列配置–EPCS64
•板上USBBlaster用于编程,同时支持JTAG模式和AS模式
•2MBSRAM
•2片64MBSDRAM
•8MB闪存
•SD卡插槽
•4个按钮开关
•18个滑动开关
•18个红色LEDs
•9个绿色LEDs
•50MHz晶振提供给时钟源
•24-bitCD-品质声道CODEC带有线路输入,线路输出和麦克风输入接口
•VGADAC(8-比特高速三通道DACs)带有VGA输出接口
•TV解码器(NTSC/PAL/SECAM)和TV输入接口
•2千兆以太网PHY带RJ45连接器
•带有A类和B类USB接口的USB主从控制器
•RS-232收发器和9针连接器
•PS/2鼠标/键盘接口
•IR收发器
•2个SMA接头,用于外部时钟输入/输出
•1个40-pin扩展口,带二极管保护
•1个HSMC连接器
•16x2LCD模组
该开发板使用说明请参见《DE2-115UserManual》。
实验一:
片上最小系统和片外SDRAM
一、目的和要求
1、完成基于Qsys的片上最小硬件系统设计
2、完成基于SBT的软件开发流程(HelloWorld!
)
3、在片上最小系统基础上添加SDRAM
二、设备或环境
DE2-115FPGA开发板
三、实验原理
利用Qsys搭建最小硬件系统(NIOSIICPU、JTAGUART、SYSTEMID、On-ChipMemory),应用SBT创建HelloWorld!
模板的软件工程,在DE2-115FPGA开发板上系统软硬件能够正常运行。
四、实验内容
1、最小系统硬件设计
(1)创建Quartus工程,工程存放路径及工程名可自行定义(不要包含中文)。
Device配置如下图所示。
(2)新建顶层原理图文件(文件名与工程名一致),并保存,如下图所示。
(3)单击Tools->Qsys->ComponentLibrary->EmbeddedProcessors->NiosIIProcessor,配置如下图所示。
单击finish。
(4)单击ComponentLibrary->InterfaceProtocols->Serial->JTAGUART,配置如下图所示,单击finish。
(5)单击ComponentLibrary->Peripherals->DebugandPerformance->SystemIDPeripheral,配置如下图所示,单击finish。
(6)单击ComponentLibrary->MemoriesandMemoryControllers->On-Chip->On-ChipMemory(RAMorROM),配置如下图所示,单击finish。
(7)AVALON总线连接关系如下图所示。
(8)双击NiosIICPU,将ResetVector和ExceptionVector修改为片内存储器onchip_memory,如下图所示。
(9)单击System菜单下面的AssignBaseAddress和AssignInterruptnumbers,自动进行地址和中断号分配。
(10)单击Generation选项卡下面的Generate按钮,生成系统。
(11)双击顶层原理图空白处,添加硬件如下图所示,单击OK。
(12)在顶层原理图中,右键单击上述Symbol,在弹出的菜单中,左键单击选择GeneratePinsforSymbolPorts,如下图所示。
(13)单击StartAnalysis&Synthesis,如
所示。
(14)分配管脚如下图所示。
(15)编译并通过JTAG将设计下载到FPGA中。
2、最小系统软件设计(HelloWorld!
)
(1)双击SBT,选择软件工程路径(不含中文)。
(2)单击NiosIIApplicationandBSPfromTemplate,如下图所示。
(3)新建应用程序工程和BSP工程,单击finish,如下图所示。
(4)新建软件工程(Hello_world模板),如下图所示。
(5)右键单击ProjectExplorer的Hello工程,选择BuildProject。
(6)右键单击ProjectExplorer的Hello工程,选择RunAs->NiosIIHardware。
如果系统硬件及软件正常运行,将在SBT的Console中打印显示“HellofromNiosII!
”。
3.在片上最小系统基础上添加SDRAM
(1)将上次实验得到的QuartusII工程打开,单击Tools->Qsys,将上次实验得到的片上最小系统打开,如下图所示。
右键单击onchip_memory2_0,单击remove,将其移除。
(2)双击ComponentLibrary->MemoriesandMemoryControllers->ExternalMemoryInterfaces->SDRAMInterfaces->SDRAMController,配置信息如下图所示,单击finish。
(3)AVALON总线连接关系如下图所示,双击图中的两个椭圆形区域(将对应IP的引脚输出),单击图中圆形区域(连接中断)。
(4)双击NiosIICPU,将ResetVector和ExceptionVector修改为如下图所示。
(5)单击System菜单下面的AssignBaseAddress和AssignInterruptnumbers,自动进行地址和中断号分配。
(7)单击Generation选项卡下面的Generate按钮,生成系统。
(8)将顶层原理图中设计删除,双击顶层原理图空白处,添加硬件如下图所示,单击OK。
(9)在顶层原理图中,右键单击上述Symbol,在弹出的菜单中,左键单击选择GeneratePinsforSymbolPorts,如下图所示。
(10)双击顶层原理图空白处,添加输出引脚,如下图所示,单击OK。
将此引脚重命名为Sdram_clock,与clk_clk输入引脚相连,如下图所示。
(11)单击StartAnalysis&Synthesis,如
所示。
(12)分配管脚如下图所示。
(12)编译并通过JTAG将设计下载到FPGA中。
五、实验结果及实验报告内容
(1)最小系统硬件设计过程。
(2)最小系统软件设计过程。
(3)在片上最小系统基础上添加SDRAM硬件设计过程。
(4)实验过程中遇到的问题和解决办法。
实验二:
PIO输出—LED
一、目的和要求
1、扩展PIO输出
2、利用PIO输出控制LED
二、设备或环境
DE2-115FPGA开发板
三、实验原理
创建硬件系统(NIOSIICPU、JTAGUART、SYSTEMID、SDRAM、EPCS)基础上,添加PIO控制器,实现系统对LED的控制。
四、实验内容
1、系统硬件设计
(1)创建如实验一的QuartusII工程,单击Tools->Qsys。
(2)双击ComponentLibrary->Peripherals->MicrocontrollerPeripherals->PIO,配置信息如下图所示,单击finish。
(3)AVALON总线连接关系如下图所示,双击图中的椭圆形区域(将对应IP的引脚输出)。
(4)单击System菜单下面的AssignBaseAddress和AssignInterruptnumbers,自动进行地址和中断号分配。
(5)单击Generation选项卡下面的Generate按钮,生成系统。
(6)将顶层原理图中设计删除,双击顶层原理图空白处,添加硬件如下图所示,单击OK。
(7)在顶层原理图中,右键单击上述Symbol,在弹出的菜单中,左键单击选择GeneratePinsforSymbolPorts,如下图所示。
记得添加Sdram_clock输出。
(8)单击StartAnalysis&Synthesis,如
所示。
(9)分配管脚如下所示。
set_location_assignmentPIN_E21-topio_0_external_connection_export[0]
set_location_assignmentPIN_E22-topio_0_external_connection_export[1]
set_location_assignmentPIN_E25-topio_0_external_connection_export[2]
set_location_assignmentPIN_E24-topio_0_external_connection_export[3]
(10)编译并通过JTAG将设计下载到FPGA中。
2、系统软件设计
(1)新建软件工程(Hello_world模板),如下图所示。
(2)右键单击工程名,新建Led.h头文件。
(3)Led.h头文件内容如下所示。
#include"system.h"
#define_LED
typedefstruct
{
unsignedlongintDATA;
unsignedlongintDIRECTION;
unsignedlongintINTERRUPT_MASK;
unsignedlongintEDGE_CAPTURE;
}PIO_STR;
#ifdef_LED
#defineLED((PIO_STR*)PIO_0_BASE)
#endif
(4)修改主程序文件“hello_world.c”内容如下所示。
#include
#include
#include"led.h"
intmain()
{
LED->DATA=1;
inti=0;
while
(1)
{
LED->DATA=1<
if(i==4)i=0;
elsei=i+1;
usleep(100000);
}
return0;
}
(5)右键单击ProjectExplorer的软件工程,选择BuildProject。
(6)右键单击ProjectExplorer的软件工程,选择RunAs->NiosIIHardware,如果系统硬件及软件正常运行,将观察到开发板上的四个LED轮流被点亮。
五、实验结果及实验报告内容
(1)系统硬件设计过程。
(2)系统软件设计过程。
(3)实验过程中遇到的问题和解决办法。
实验三:
PIO输入—中断
一、目的和要求
1、扩展PIO输入
2、利用PIO输入实现外部中断输入
二、设备或环境
DE2-115FPGA开发板
三、实验原理
创建硬件系统(NIOSIICPU、JTAGUART、SYSTEMID、SDRAM、EPCS、PIO输出)基础上,添加PIO输入控制器,通过PIO输入实现系统对外部中断的响应。
四、实验内容
1、系统硬件设计
(1)创建如实验二的QuartusII工程,单击Tools->Qsys。
(2)双击ComponentLibrary->Peripherals->MicrocontrollerPeripherals->PIO,配置信息如下图所示,单击finish。
(3)AVALON总线连接关系如下图所示,双击图中的两个椭圆形区域(将对应IP的引脚输出),单击图中圆形区域(连接中断)。
(4)单击System菜单下面的AssignBaseAddress和AssignInterruptnumbers,自动进行地址和中断号分配。
(5)单击Generation选项卡下面的Generate按钮,生成系统。
(6)参考实验三步骤,更新顶层原理图,并生成管脚,管脚分配如下。
set_location_assignmentPIN_AC28-topio_1_external_connection_export
(7)编译并通过JTAG将设计下载到FPGA中。
2、系统软件设计
(1)新建软件工程(Hello_world模板),如下图所示。
(2)右键单击工程名,新建Led.h头文件。
#include"system.h"
#define_LED
typedefstruct
{
unsignedlongintDATA;
unsignedlongintDIRECTION;
unsignedlongintINTERRUPT_MASK;
unsignedlongintEDGE_CAPTURE;
}PIO_STR;
#ifdef_LED
#defineLED((PIO_STR*)PIO_0_BASE)
#defineKEY((PIO_STR*)PIO_1_BASE)
#endif
(3)修改主程序文件“hello_world.c”内容如下所示。
#include
#include
#include"led.h"
voidKEY_ISR()
{
LED->DATA=15;
KEY->EDGE_CAPTURE=0;
printf("KEY_ISROCCURED:
%d\n",KEY->DATA);
}
voidinit()
{
KEY->INTERRUPT_MASK=1;
alt_ic_isr_register(PIO_1_IRQ_INTERRUPT_CONTROLLER_ID,PIO_1_IRQ,KEY_ISR,NULL,0);
}
intmain()
{
printf("HellofromNiosII!
\n");
init();
LED->DATA=1;
inti=0;
while
(1)
{
LED->DATA=1<
if(i==4)i=0;
elsei=i+1;
usleep(100000);
}
return0;
}
(4)右键单击ProjectExplorer的软件工程,选择BuildProject。
(5)右键单击ProjectExplorer的软件工程,选择RunAs->NiosIIHardware,如果系统硬件及软件正常运行,将观察到开发板上的四个LED轮流被点亮。
当相应按键按下时,触发中断,四个LED灯将被全部点亮。
五、实验结果及实验报告内容
(1)系统硬件设计过程。
(2)系统软件设计过程。
(3)实验过程中遇到的问题和解决办法。
实验四:
IntervalTimer
一、目的和要求
1、IntervalTimer模块的生成和使用
2、在NiosII中实现定时器功能、SystemClock功能和Timestamp功能
二、设备或环境
DE2-115FPGA开发板
三、实验原理
在实验三系统(NIOSIICPU、JTAGUART、SYSTEMID、SDRAM、EPCS、PIO输出、PIO输入)基础上,添加IntervalTimer模块,在NiosII中实现定时器功能、SystemClock功能和Timestamp功能。
四、实验内容
1、系统硬件设计
(1)将上次实验得到的QuartusII工程打开,单击Tools->Qsys。
(2)双击ComponentLibrary->Peripherals->MicrocontrollerPeripherals->
IntervalTimer,配置信息如下图所示,单击finish。
(3)以相同方式再次添加IntervalTimer,其AVALON总线连接如下图所示。
(4)单击System菜单下面的AssignBaseAddress和AssignInterruptnumbers,自动进行地址和中断号分配。
(5)单击Generation选项卡下面的Generate按钮,生成系统。
(6)更新顶层原理图。
(7)编译并通过JTAG将设计下载到FPGA中。
2、系统软件设计
(1)应用SBT,打开实验四所建立的软件工程。
(2)修改helloworld.c文件,添加定时器功能,如下所示。
#include
#include
#include"led.h"
#include"altera_avalon_timer_regs.h"
#include"sys/alt_alarm.h"
#include"alt_types.h"
#include"sys/alt_timestamp.h"
intcounter=0;
voidTIMER_ISR()
{
counter++;
IOWR(TIMER_0_BASE,ALTERA_AVALON_TIMER_STATUS_REG,0);
printf("%d\n",counter);
}
voidinit_timer()
{
alt_ic_isr_register(TIMER_0_IRQ_INTERRUPT_CONTROLLER_ID,TIMER_0_IRQ,TIMER_ISR,NULL,0);
IOWR(TIMER_0_BASE,ALTERA_AVALON_TIMER_STATUS_REG,0);
IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_0_BASE,50000000);
IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_0_BASE,50000000>>16);
IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_0_BASE,0x07);
}
intmain()
{
init_timer();
while
(1);
return0;
}
(3)右键单击软件工程名,NiosII->BSPEditor,选择Main->Settings->
Common->hal->sys_clk_timer,如下图所示。
(4)在helloworld.c文件中添加,如下代码。
alt_u32my_alarm_callback(void*context)
{
LED->DATA=15;
return0;
}
intmain()
{
alt_alarmalarm;
alt_alarm_start(&alarm,10,my_alarm_callback,NULL);
while
(1);
return0;
}
(5)右键单击软件工程名,NiosII->BSPEditor,选择Main->Settings->
Common->hal->timestamp_timer,如下图所示。
(6)在helloworld.c文件中添加,如下代码。
intmain()
{
unsignedinttime1,time2;
time1=alt_timestamp();
printf("HellofromNiosII!
\n");
time2=alt_timestamp();
printf("time=%d\n",time2-time1);
while
(1);
}
(7)右键单击ProjectExplorer的软件工程,选择BuildProject。
(8)右键单击ProjectExplorer的软件工程,选择RunAs->NiosIIHardware,如果系统硬件及软件正常运行,请将观察到的结果记录在实验报告上。
五、实验结果及实验报告内容
(1)系统硬件设计过程。
(2)系统软件设计过程及执行结果。
(3)实验过程中遇到的问题和解决办法。