您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > nios-ii-入门手册
一、建立quartusii工程首先,双击quartusii9.1图标打开软件,界面如下图1.1所示图1.11.1新建工程(1)点击file–NewProjectWizard出现图1.2所示的对话框。图1.2(2)点击Next。如图1.3所示:第一行是工程的路径,二、三行为实体名。填好后点击Next。图1.3(3)此处可选择加入已设计好的文件到工程,点击Next。图1.4(4)选择设计器件如图1.5所示。接着点击Next。图1.5(5)接着点击Next。无需改动,点击finish,显示如下图所示。图1.6(6)此时,工程已经建立完成,接下来需要建立一个原理图输入文件,点击file–New-BlockDiagram/SchematicFile后如图1.7所示。图1.7二、构建一个niosii软核(1)首先点击Tools-SopcBuilder图2.1在SystemName中输入软核的名称,注意:软核的名称不能和quartus工程的实体名相同,否则编译会出现错误,接着点击ok。图2.2图中clk_0为时钟名称,100.0为时钟值双击可修改其值。即软核的时钟就是100MHZ。(2)建立niosii处理器点击Processors-NiosiiProcessor如图2.3所示图2.3点击后,将出现下图,在下图中选择软核的类型。这里提供了三种类型,NiosII/e占用资源最少600-800LEs,功能也最简单,速度最慢。NiosII/s占资源比,前者多一些,功能也多了,速度也忚一些NiosII/f占资源最多,功能也最多,速度就最快,用户可根据实际的需要选择不同的类型。此处选择NiosII/f型,速度和功能都能满足。下方ResetVector是复位后启动的Memory类型和偏移量。待SDRAM设置号以后再来设置此处。图2.4点击Next,如下图所示,将DataCache设置为None,即关闭DataCache。图2.5接下来连续点击Next3次,此时的界面如下图所示。图2.6在这里设置JTAGDebugModule,即是Jtag调试时所用到的功能模块,功能越多,所占用的资源也就越多。从上图可以看见Level1-Level4功能逐渐增多,占用的资源也随之增加。此处选择Level1。点击Finish如图2.7所示,右击cpu_0-Rename可修改处理器的名称。图2.7(3)建立JATGURAT模块JTAGUART是实现PC和NiosII系统间的串行通信接口,它用于字符的输入和输出,是Niosii系统开发调试中重要的工具,具体设置如图2.8所示。双击InterfaceProtocos-Serial-JTAGUART图2.8点击InterfaceProtocos-Serial-JTAGUART如图2.9所示图2.9此项无需修改点击Next直至完成即可。此时显示的界面如图2.10所示:图2.10(4)建立SDRAM模块首先应建立SDRAM控制器,具体设置如图2.11所示图2.11双击SDRAMController,显示如下界面。图中Presets选项为SDRAM的型号此处选择Custom,以下几项按照SDRAM数据手册上的参数来设置即可。具体设置如下:图2.12点击Finish即可完成SDRAM控制器的设置。设置好SDRAM后如下图所示。图2.13双击CPU_0显示如下,将ResetVector项和ExceptionVector设置为SDRAM_0。图2.14至此基本模块已经建立完成。实验1LED闪烁实验在以上模块的基础上建立PIO模块,具体设置如下图所示。图2.15双击PIO(ParallelI/O)后如下图所示,图中第一个设置项为PIO的数据宽度。第二个设置项伟IO口的方向设置,类型从上到下依次为双向口、只输入、输入输出、只输出。最后一项为IO口复位的初始值。图2.16接着点击Finish完成PIO模块的建立,并将其改名为LED,如下图所示图2.17接着进行基地址的自动分配,具体设置如下图所示。图2.18到此,LED闪烁实验所用到的软核已经构建完成。接下来就开始编译了,首先保存一下,再点击Generate,开始编译,编译会用较长的时间,编译结束后显示如下点击Exit,进入Quartusii软件调用刚刚生成的软核,双击Quartusii软件中的空白处,弹出如下窗口点击led即可调用led软核。接下来为软核添加引脚,如下图所示:右击软核,选择GeneratePinForSymbolParts将显示下图接下来需要建立一个锁相环为SDRAM提供时钟具体过程如下,双击空白处,设置如下点击显示如下,点击Next。接下来点击IO-Altpll,在填入PLL的名称,点击Next。在下图的第二选项中选择锁相环的输入时钟,此处选择50Mhz,接着点击Next。进行如下设置下图中第一个选项框中填入倍频系数,第二个选项框中填入分频系数,可根据需要进行设置,由于Niosii软核的时钟设置的时100M,故在第一个选项框中填入2,第三个选项框为锁相环输出时钟的起始相位,如下图所示。接着点击Next连续点击Finish即可完成锁相环的设置。然后双击空白处接着点击Project调用PLL,并生成端口,进行如下连接接着,进行如下设置在出现的窗口中选择项,出现下图所示的界面点击UnusedPin进行如下设置,将所有未用到的引脚设置为三态输入,以免功耗过大烧坏FPGA芯片图3-1然后点击ok即可,接下来编译Quartusii工程编译结束后就可以分配引脚了,具体设置如下设置后出现如下图所示的界面,在引脚名称后填入对应的编号即可接下来再次编译Quartusii工程。同时将Niosii9.1IDE进入如下界面关闭Welcome,出现如下界面。点击File-New-Project出现如下界面,点击下图蓝色处点击Next出现下图所示界面,第一行是工程名在Browse,选择路径为Quartusii工程的存储路径,从中加入ptf文件,加入后会在下面出现一个CPU,如下图所示点击Finish即可。出现下图所示的界面图3-2将原程序拷入再进行如下设置,点击Run-Run,进入如下界面再点击TargetConnection进行如下设置在JTAGcable中选择USB_Blaster,JTAGDevice中选择EPCS,点击Apply,然后点击Close。在上图中点击Project-BuildAll编译工程,或者是快捷键(Ctrl+B)由于第一次编译工程要对很多库文件进行编译,所以第一次编译的时间会很长,以后的时间会较短,注意:每次编译之前要进行保存,在编译时文件不会自动保存,也不会提示用户该文件没有保存。编译完后再进行如下设置点击Tool-Programmer,出现如下的界面。在Mode中选择JTAG,再点击ADDFile,出现如下界面双击led.sof文件即可,在下图所示的界面中点击Start执行此项即将QuartusII中的软核下载到fpga中,接下来就是将Niosii中得出程序下载到软核中去,具体方法是点击Run-RunAs-NiosiiHardware。执行后,用户可以看见fpga核心板上的led在不断地闪烁。接下来解释一下如下出现#includesystem.h#includealtera_avalon_pio_regs.h#includealt_types.h#includeunistd.h#defineled_onIOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0x01)#defineled_offIOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0x00)voidfun();voidmain(void){while(1){//if(IORD_ALTERA_AVALON_PIO_DATA(KEY)==0)fun();}}voidfun(void){led_on;usleep(90000);led_off;usleep(90000);}出现中的#defineled_onIOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0x01)#defineled_offIOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0x00)为在指定的地址输出低电平和高电平。usleep(90000);为Niosii库函数中得延时函数,基本延时为1us即(usleep(1)的延时为1us)。实验二外部中断实验首先进入SopcBuilder,按照前面所讲的方法,将cpu,sdram,jtag配置好,如下图所示。图4-1图中的interr的配置按如下方式进行。点击Peripherals-MicrocontrollerPeripherals-pio弹出如下窗口。选择inputportsonly,点击next选择inputportsonly,点击next出现如下界面。图中GenerateIRQ为产生中断,即该端口具有中断的功能。Level为中断的类型,电平中断Edge为边沿中断,选择电平中断,注意:电平中断默认是高电平有效,点击Finish。接着再配置一个只输出的引脚来验证是否进入中断,配置方法和实验一的是相同的。接着自动分配基地址,中断优先级可手动修改。然后点击Generate生成软核。接着在Quartusii中调用软核进行如下连接。接着编译工程,并将未用到的端口设置为三态输入。设置方法见图3-1所示。分配引脚,再次编译工程,结束后将程序下载到fpga中。打开Niosii软件,按照实验1的步骤进行设置,打开软件以后将出现3-2所示的界面。首先编译工程,接着将在System.h中可以看见如下程序#defineINTRERR_NAME/dev/intrerr#defineINTRERR_TYPEaltera_avalon_pio#defineINTRERR_BASE0x01001000#defineINTRERR_SPAN16#defineINTRERR_IRQ1#defineINTRERR_IRQ_INTERRUPT_CONTROLLER_ID0#defineINTRERR_DO_TEST_BENCH_WIRING0#defineINTRERR_DRIVEN_SIM_VALUE0#defineINTRERR_HAS_TRI0#defineINTRERR_HAS_OUT0#defineINTRERR_HAS_IN1#defineINTRERR_CAPTURE0#defineINTRERR_DATA_WIDTH1#defineINTRERR_RESET_VALUE0#defineINTRERR_EDGE_TYPENONE#defineINTRERR_IRQ_TYPELEVEL#defineINTRERR_BIT_CLEARING_EDGE_REGISTER0可以看见INTRERR_IRQ1与图4-1中所示的INTRERR的中断优先级一样的,都为1。接下来讲解一下Niosii的硬件中断,首先介绍一下与硬件中断相关的内容,让用户对Niosii的硬件中断有一个概括性的了解。ISR(InterruptServiceRoutine)中断服务函数是为硬件中断服务的子程序。Niosii处理器支持32个硬件中断,每一个使能了的硬件中断都应该有一个ISR与之对应。中断产生时,硬件中断处理器会根据检测到的有效中断级别,调用相应的ISR为其中断服务。要完成硬件中断工作,需要做两件事:第一,注册中断函数ISR,它的原函数型如下所示:Intalt_irq_register(alt_u32id,void*context,void(*handler)(void*,alt_u32));id:中断优先级,即所注册的ISR是为哪个中断优先级的中断服务的。中断优先级在SOPCBuilder中分配的,如下图所示红圈标示。中断的优先级可人为修改,0的优先级最高。接下来介绍Context和Handler两个参数。Cont
本文标题:nios-ii-入门手册
链接地址:https://www.777doc.com/doc-4709223 .html