NIOSII SOPC实例.docx
- 文档编号:30712136
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:33
- 大小:5.63MB
NIOSII SOPC实例.docx
《NIOSII SOPC实例.docx》由会员分享,可在线阅读,更多相关《NIOSII SOPC实例.docx(33页珍藏版)》请在冰豆网上搜索。
NIOSIISOPC实例
一.关于SOPC
1)SOPC英文全名为:
System-On-a-Programmable-Chip,即可编程片上系统。
SOPC用可编程逻辑技术把整个系统放到一块硅片上,来用于嵌入式系统研究和电子信息处理。
SOPC是一种特殊的嵌入式系统,它是片上系统(System-On-a-Chip,SOC),即由单个芯片完成整个系统的主要逻辑功能但它不是简单的SOC,它也是可编程系统,具有灵活的设计方式,可裁减、可扩充、可升级,并具备软硬件在系统可编程的功能。
SOPC设计包括以32位NIOSII软核处理器为核心的嵌入式系统的硬件配置、硬件设计、硬件仿真、软件设计以及软件调试等。
SOPC系统设计的基本软件工具有:
1)QuartusII:
用于完成NIOSII系统的综合、硬件优化、适配、编程下载以及硬件系统调试等;
2)SOPCBuilder:
AlteraNiosII嵌入式处理器开发软件包,用于实现NiosII系统的配置、生成,内嵌于QuartusII软件中;
3)ModelSim:
用于对SOPC生成的NiosII系统的HDL描述进行系统的功能仿真;
4)NiosIIIDE:
用于进行软件的开发、调试,以及向目标开发板进行Flash下载;
二.关于NIOSII处理器
NIOSII是一个可配置的软核处理器。
“可配置”的意思是设计者可以根据性能和成本的要求来增加或删减处理器的功能。
ALTERA公司并不销售NIOSII处理器芯片,而是销售空的FPGA,并提供NIOSII系统相应的IP核来组成NIOSII系统,然后将这个系统下载到FPGA中实现。
1)关于AVALON
Avalon总线是SOPC硬件系统的重要组成部分,Avalon总线规范是为了开发SOPC环境下外设而设计的。
图1-1一个SOPC的示例
二.SOPC简单实例:
软核控制LCD液晶字母显示器
1.系统构成规划
1)系统功能:
在characterLCD上显示”HelloLCDfromNiosII!
”
2)本系统中需要的外围器件:
(1)LCD:
输出显示
(2)SRAM存储器:
程序运行时将其导入SRAM
3)SOPC中建立系统需要添加的模块包括:
(1)NiosII32bitCPU
(2)LCDdisplay
(3)外部RAM总线
(4)外部RAM接口
(5)JTAGUARTInterface
(6)定时器
2.硬件系统的建立
1)首先打开QuartusII建立工程文件:
将工程文件命名为hello_lcd,顶层文件和工程文件同名。
如图2-1,图2-2所示。
2)NEXT选择和目标器件相对应的FPGA型号,CycloneIIIDevKit上的FPGA型号为:
EP3C120F780C7。
点击Finish完成。
工程建立之后,我们可以通过路径Assignment->Device中可以更改目标芯片的型号。
图2-1建立工程文件
图2-2建立新工程文件
图2-3-1实验平台
图2-3选择相对应的目标器件
3)新建顶层电路图,和工程文件同名:
图2-4建立和工程名字相同的顶层电路图
4)打开SOPCBuilder:
有两种方式可以打开SOPCBuilder,可以直接点击页面右上角的SOPCBuilder图标,或者通过路径Tool->SOPCBuilder打开,如图2-5所示。
图2-5进入SOPCBuiler
5)新建SOPC系统,命名为lcd_sys。
此时系统会自动生成一个默认值为50MHz的驱动时钟CLK,将其手动重命名为:
sys_clk,并将其修改为100MHz。
6)在旁边的SystemContents中选择添加需要的系统组件。
可以在下面的检索栏中输入组件名,如NiosII,可以检索到组件,如图2-7所示。
图2-6建立新的SOPC系统
图2-7搜索器件
7)双击添加一个NiosII内核,会打开NiosII的配置对话框,如图2-8所示。
在NiosIICPU配置选项中可以根据用户需要,选择处理器类型。
具体有以下三种:
a.经济型CPU内核(NiosII/e),最小的逻辑占用的优化,占用逻辑元素LE最少,功能最少。
b.标准型CPU内核(NiosII/s),平衡于性能和尺寸,具有NiosIICPU核的一般功能。
c.全功能CPU内核(NiosII/f),最高性能优化,具有NiosIICPU核的所有功能,包括一些高级功能,而需要使用的LE也是最多的。
一般来说,选择NiosII/S标准型CPU核即可满足一般系统需要。
这里我们选择NiosII/s标准型内核,其他参数采用默认值即可。
8)添加片上存储,用于系统程序和数据的存储:
配置中选择类型为RAM,(Datawidth)数据宽度默认为32位,将存储大小改为64Kbit,点击Finish完成添加。
此时下方信息栏会出现地址冲突的error提示,先不管它。
图2-9添加片上存储RAM
9)添加JTAG_UART串口模块:
用于和计算机通信,使用默认配置即可。
图2-10添加JTAG_UART模块
10)添加intervaltimer定时器模块:
可用于对JTAGUART驱动,而实现串口工作的暂停。
选择超时周期设置为1ms。
Preset有四个选项,在此选择Full-features,如图2-11所示。
图2-11添加定时器模块
11)添加外部SRAM接口。
我们所用的板子上有共8M的32bit数据位的SRAM模块。
在SOPCBuilder中没有对应的IP模块,需要我们自己手动建立对应的接口模块。
双击模块池中的“Createnewcomponent”,可以看到新建的元件模块可以通过HDL文件的形式(HDLFile),或者直接添加信号(Signals)的形式创建。
我们这里通过直接添加信号的方式,直接添加对应SRAM接口,作为AVALON总线的从端口。
这里只需添加基本的、必备的信号:
clk(模块时钟),chipselect(片选),outputenable(输出使能),write(写使能),byteenable(字节段写使能),address(地址),data(数据)即可,如图2-12所示。
图2-12添加新建端口信号
12)当端口的信号都添加完成之后,点击选项卡中的Interfaces选项,设置该SRAM模块的时序参数。
并勾选”showdeprecatedparameters”选项,务必勾选Deprecated中的Memorydevice选项。
图2-13设置模块时序参数
模块在SOPC系统中显示的名字(Displayname),还有在模块槽中的位置(Group)等一些其他参数,都可以在“componentwizard”中设置。
当完成所有参数设置和修改之后,点击Finish,完成新模块的生成。
如图2-14设置,我们可以在模块槽中的SRAM分类中找到新建的模块,双击添加入系统。
图2-14新建模块的一些其他设置
13)添加外部RAM总线(AvalonTri-StateBridge):
AvalonTri-StateBridge是Nios处理器和FPGA片外存储器之间相互通信的桥梁。
新添加的SRAM模块,需要通过三态桥的链接,才能和系统中的NiosII处理器进行通信。
将三态桥添加入系统之后,将新添加的SRAM设置成为其从端口,并勾选三态桥”SharedSignals”选项卡中的sram_address一项。
若要对新添加的SRAM进行任何更改设置,每次更改过后,都要重新对三态桥的选项进行配置。
图2-15AVALON三态桥设置
14)添加LCD模块,和系统ID。
15)由于SRAM模块的时钟,和系统时钟存在-3.5ns的偏差才能正常运行,则需要通过PLL锁相环电路生成另一个符合条件100MHZ的时钟,命名为sram_clk,来驱动SRAM,如图2-16所示。
图2-16SRAM的驱动时钟设置
16)当所有器件模块都添加以后,下面信息栏会发现很多的Error报警信息。
此时右击CPU模块,选择Edit对CPU中的ResetVector(复位地址)和ExceptionVector(异常地址)进行设置,此两项地址选择onchip_mem,即为之前添加的内部RAM存储模块。
图2-17CPU地址重新配置
17)调整基地址:
SOPCBuilder为用户系统中每个IP模块制定默认的基地址,地址为一个32位的值,如果地址位出现重叠,则会出现error警告。
自动调整基地址的方法是选择:
system->auto-assignmentbaseaddress.分配完基地址之后,之前的error提示就消失了。
并可以通过Auto-assignIRQs自动分配中断优先级。
图2-18调整基地址以及分配中断优先级
18)系统配置成功选择SystemGeneration,点击Generate生成系统。
当系统生成成功,点击EXIT退出SOPCBuilder。
图2-19系统生成成功
19)在顶层图中添加生成的系统模块,进行引脚连接和重命名。
双击顶层图空白处,出现对话框,如图2-20,图2-21所示。
这里必须要注意的一点是,我们在系统中添加的sram模块的地址宽度为21bit,但是生成的三态桥上的地址位宽为23bit。
这是由于:
AVALON总线中通过三态桥连接的片外存储设备的地址分配,遵循如下准则:
当数据位为8bit时,地址位从最低位开始,即如:
片外存储为24bit,则生成三态桥的地址也为24bit.当数据位为16bit时,地址位比实际存储多一位,低位舍弃,即片外存储为24bit,生成的三态桥地址为25bit,但只有实际上是[24..1]和片外存储的地址线相连接。
以此类推,当数据线为32bit的时候,地址位的低两位舍弃。
因而该系统在地址分配时,只需分配高21bit即可。
图2-20添加系统模块
图2-21引脚连接和重命名
20)添加锁相环PLL:
由于SRAM的时钟和CPU的时钟存在一定角度的差,才能正常运行。
因而需要通过PLL锁相环来进行时钟调整,获得相应的时钟。
双击顶层图空白处出现对话框,点击如图2-22所示MegaWizardPlug-InManager,新建一个宏模块。
点击Next,在如图2-23的宏模块中选择ALTPLL,命名为pll0。
点击Next,对PLL输入输出时钟进行配置。
图2-22添加宏模块
图2-23添加PLL锁相环
21)对PLL时钟进行配置:
输入时钟选择板上125MHZ的晶振。
输出时钟c0选择100MHZ、0度偏转,作为系统驱动时钟。
输出时钟c1选择频率为100Mhz,-3.5ns的偏转,作为SRAM模块的驱动时钟。
点击Finish,完成对PLL的配置,并在顶层电路图中添加生成锁相环。
最终生成顶层电路图,如图2-27所示。
图2-25输入时钟配置
图2-26输出时钟c1的配置
图2-27完整的顶层电路图
22)通过对照参考手册(referencemanual),对生成的顶层电路图的引脚进行配置。
配置方式有两种:
a.综合仿真(Analysis&Synthesis)后通过路径Assignment->Pins进入引脚配置页面进行配置如图2-29所示;通过这种方法分配引脚时,通过路径Assignment->Device->DeviceandPinOptions来将未用的引脚(unusedPins)改成输入三态(Asinputtri-state),以降低功耗。
b.通过编写新的TCL文件进行引脚配置,TCL文件模板可以在新生成的TCL文件空白处右击,选择“InsertTemplate”查看模板。
此处我们通过第一种方法来进行引脚配置。
对于顶层图中没有,但referencemanual中存在的模块信号,如sram_wait[0]和sram_wait[1],可以在“pins”中将对应信号的对应引脚设置为默认的电压值即可。
图2-28综合仿真
图2-29引脚配置
23)当完成引脚配置之后,检查电路,进行工程编译:
路径为:
Processing->StartCompilation。
或是点击右上方的编译快捷图标。
图2-30工程编译
24)工程编译完成,生成整个工程的整体报告,显示芯片利用率等信息。
图2-31工程报告
25)编译完成后,通过Programmer下载到板子上。
路径为:
Tools->Programmer。
或者点击任务栏中programmer图标打开,如图1-22所示。
将硬件程序烧录入芯片中。
3.软件系统建立
1)打开NiosII软件,建立新工程:
路径为File->new->project.或者点击如图2-1所示新建图标,选择NiosIIC/C++Application,点Next,进入工程设置页面。
图3-1新工程建立
2)在工程设置页面中,NiosII会给出许多模板,在这里,我们选择模板为空(BlankProject),选择SpecifyLocation可以指定生成工程文件的路径。
SelectTargetHardware中,选择我们刚刚生成的硬件系统lcd_sys.ptf。
这里需要注意的是:
对比QuartusII中目标器件的选择,在工程建立之后,可以通过路径Assignment->Device来修改目标器件;而NiosII工程是建立在选定的硬件系统的基础之上的,根据选定的硬件系统,来生成系统头文件”system.h”,系统文件会随着硬件系统的更新而更新,但是不能在工程建立之后改变目标系统,因而在此处必须选择正确的对应系统。
完成系统配置之后,点击Next进入下一页,选择“Createanewsystemlibrarynamed”,点击finish完成工程建立。
工程建立之后,NiosIIIDE左边列表将出现3个工程,并且程序会在后台自动索引。
如图3-3所示。
图3-2系统配置页面
图3-3系统生成
3)选择菜单栏Window->Preferences..在弹出对话框中选择Run/Debug->Launching出现如图2-4页面,勾选掉Build(ifrequired)beforelaunching前面的钩,以减少程序下载和调试前的准备时间。
图3-4References界面
4)选择工程hello_lcd,右击选择Properties,在C/C++MakeProject选项卡内选中Build(IncrementalBuild),在ProjectReferences选项卡内取消所有的勾,确认。
类似地,右键单击工程hello_lcd_syslib->Properties,选中C/C++MakeProject选项卡中的Build(IncrementalBuild)。
图3-5Propertiesforhello_lcd
5)在propertiesforhello_lcd_syslib中选中systemlibrary选项卡如图3-6界面中,取消掉CleanExit(FlushBuffer)和SupportC++前的勾,因为我们的程序不会退出,也不包含C++的函数和库。
选中Programneverexits,Reducedevicedrivers和SmallClibrary以减小程序体积。
其他保持默认设置即可。
SystemLibrary配置是NiosII中一个非常重要的配置界面。
如图2-6中所示stdout,stderr,stdin等选项的目标接口,作为标准输出、错误输出、标准输入的接口,这里我们将stdout接口选为“lcd”作为现实输出。
界面右边的ProgramMemory选项,可以选择程序运行的存储设备,当系统有多个片外存储时,如sram和flash,我们可以选择flash存储硬件信息和程序,而当程序运行时,导入sram中运行。
我们的系统在运行时要将其导入SRAM,因此选择sram。
图3-6systemlibrary界面
6)右键点击hello_lcd_syslib,选择BuildProject。
生成hello_led的系统工程文件,如图3-7所示.
图3-7BuildProject
7)右击工程hello_lcd,选择New->Sourcefile,在弹出对话框中指定文件名为main.c。
以下lcd控制代码复制到其中。
#include"system.h"
#include
intmain()
{
printf("HellofromNiosII!
\n");
intcount=0;
intdelay;
while
(1)
{
delay=0;
while(delay<2000000)
{
delay++;
}
count++;
}
return0;
}
8)右键点击工程hello_lcd,选择BuildProject。
编译完成后,软件部分也就完成了。
图3-8工程编译完成
9)NiosII中的调试器Debug:
在工程编译成功后,可通过路径window->OpenPerspective->Debug,或如图3-9所示路径进入Debug调试器进行调试。
Debug包含以下基本调试功能:
运行控制,调用堆栈查看、软件断点、反汇编代码查看、调试信息查看、指令仿真器。
还支持硬件断点调试ROM或内存中的代码、数据触发、指令集仿真器等高级功能。
图3-9进入Debug调试界面
可通过路径Windows->Showview来打开信息查看窗口:
包括函数变量Variable、寄存器register、断点breakpoint、储存器Memory以及表达式赋值函数的查看。
并可进行程序的运行控制。
本程序涉及比较少,因而这里不作调试演示
10)关于烧录:
cycloneIIIFPGAdevkit原有配置中,只能通过USB口和计算机通信,因而烧录方式只能选择USB-Blaster。
在QuartusII中工程文件编译完成之后,通过programmer将硬件系统烧录到系统中,如图2-10所示。
软件部分在NiosII中编译完成之后,通过路径Run->Run..打开Run界面,选择要烧录的工程文件,将工程烧录入目标板中。
观察板上程序运行情况再进行调试
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NIOSII SOPC实例 SOPC 实例
![提示](https://static.bdocx.com/images/bang_tan.gif)