实验:建立简单的NIOSII系统一、实验目的1、学习QuartusII、SOPCBuilder、NiosIIIDE的基本操作。2、初步了解SOPC的开发流程。3、初步了解NIOSIIIP核的设计流程。4、掌握NIOSIIIDE软件的开发流程的使作调试方法。二、实验设备1、硬件:PC机,SOPC-NIOSIIEDA/SOPC系统开发平台。2、软件:QuartusII5.1、SOPCBuilder5.1、NiosIIIDE5.1。三、实验内容快速建立一个用于控制LED灯闪烁的最简单的NIOSII处理器系统,让使作者了解一个SOPC开发的基本流程。整个开发流程包括以下几个步骤:1、在QuartusII中建立一个工程。2、使用SOPCBuilder建立并生成一个简单的NIOSII硬件系统。3、在QuartusII中编译这个简单的NIOSII硬件系统并生成其配置文件.SOF或.POF文件。4、在NiosIIIDE中建立一个相对应于这个NIOSII硬件系统的用户C/C++工程,编写一个简单的用于处理这个简单NIOSII硬件系统的用户程序。5、在NiosIIIDE中编译、修改、调试用户程序,最后生成可执行文件.elf文件。6、将配置文件.SOF和可执行文件.elf都下载到FPGA进行调试运行。四、实验原理为了使读者更加快速的了解SOPC的开发流程,在这个实验中,我们建立一个最简单的SOPC系统。控制LED灯闪烁的用户程序代码很小,我们直接可以将其固化在片内的ROM中来执行。运行时使用片内的RAM。因此这个NIOSII系统可以不使用任何处部的存储器。相关的实验电路请参考用户手册。整个系统框图如图1-1所示。SOPC-NIOSIIEDA/SOPCSystemPlatformNIOSIIExperimentGuidance5图1-1控制LED的NIOSII系统框图我们还可以根据设计的需要,将其它的一些逻辑电路加入FPGA中。NIOSII系统可以与其它的逻辑电路相互作用。在本实验中只用到了NIOSII系统,没有将其它的逻辑电路设计进去。五、实验步骤1、使用QuartusII建立一个工程文件1)选择开始程序AlteraQuartusII5.1,运行QUARTUSII软件。或者双击桌面上的QUARTUSII的图标运行QUARTUSII软件,出现如图1-2所示,如果是第一次打开QUARTUSII软件可能会有其它的提示信息,使用者可以根据自己的实际情况进行设定后进入图1-2所示界面。图1-2QUARTUSII软件运行界面SOPC-NIOSIIEDA/SOPCSystemPlatformNIOSIIExperimentGuidance62)选择软件中的菜单FileNewProjectWizard,新建一个工程。如图1-3所示。3)点击图1-3中的【NEXT】进入工作目录,工程名的设定对话框如图1-4所示。第一个输入框为工程目录输入框,用户可以输入如e:/SOPC等工作路径来设定工程的目录,设定好后,所有的生成文件将放入这个工作目录。第二个输入框为工程名称输入框,第三个输入框为顶层实体名称输入框。用户可以设定如EXP1,一般情况下工程名称与实体名称相同。使用者也可以根据自已的实际情况来设定。图1-3新建工程对话框图1-4指定工程名称及工作目录SOPC-NIOSIIEDA/SOPCSystemPlatformNIOSIIExperimentGuidance74)点击【NEXT】,进入下一个设定对话框,按默认选项直接点击NEXT进行器件选择对话框。如图1-5所示。这里我们以选用Cyclone系列芯片EP1C12F324C8为例进行介绍。用户可以根据使用的不同芯片来进行设定,其过程基本相同。图1-5器件选择界面首先在图1-5的对话框的左上方的Family下拉菜单中选取Cyclone,在中间右边的Speedgrade下拉菜单中选取8,在左下方的Availabledevices框中选取EP1C12F324C8,点击【NEXT】完成器件的选取,进入EDATOOL设定界面如图1-6所示。图1-6EDATOOL对话框SOPC-NIOSIIEDA/SOPCSystemPlatformNIOSIIExperimentGuidance85)在按默认选项,点击【NEXT】出现新建工程以前所有的设定信息,如图1-7所示,点击【FINISH】完成新建工程的建立。图1-7新建工程信息6)在创建好设计工程后,选择FileNEW…菜单,出现图1-8所示的新建设计文件类型选择窗口。在图1-8中选择BlockDiagram/SchematicFile,单击【OK】建立一个空的顶层模块,缺省名为Block.bpf,如图1-9所示。图1-8新建设计文件选择窗口SOPC-NIOSIIEDA/SOPCSystemPlatformNIOSIIExperimentGuidance9图1-9将BDF存盘7)在QuartueII中的File菜单中点选“Saveas”存盘并保证该文件添加到工程中,可以命名为EXP1。至此,顶层模块文件建立完成。2、使用SOPCBuilder建立一个简单的NIOSII硬件系统1)启动SOPCBuilder在QuartueII集成开发软件环境中选择TOOLS菜单下的SOPCBuilder选项或者点选快捷按钮来启动SOPCBuilder。SOPCBuilder启动后显示CreateNewSystem对话框,如图1-10所示。值得注意的是打开SOPCBuilder之前必须打开一个工程文件,否则SOPCBuilder将无法打开。图1-10CreateNewSystem对话框在图1-10中的SystemName输入框中输入NIOSII的名称,名称不得与工程名称相同,否则这个NIOSII系统模块无法插入到顶层模块中。名称设定完成后,点选输出的设计语言,如VHDL,点选【OK】进入SOPCBuilder图形界面,如图1-11。SOPC-NIOSIIEDA/SOPCSystemPlatformNIOSIIExperimentGuidance10图1-11SOPCBuilder图形界面2)指定目标FPGA及时钟在图1-11中,Target和Clock选项区是用来设置SOPCBuilder系统与外部的联系。如果使用NIOSIIIDE的FLASH编程工具进行编程,则必须选取一个目标板Flash编程设计。在本实验中没有用到Flash进行编程设计,所以不用选取其它的目标板。所以Board选取“UnspecifiedBoard”即可。由于开发平台使用的时钟为50M的时钟,所以时钟设置输入50M。在DeviceFamily下拉列表中选取开发平台所用的目标FPGA芯片的系列“Cyclone”。的用户可以根据开发的需要来进行设置。3)添加NIOSII内核在图1-11所示的工作界面上,在可用元件列表区里,展开AvalonComponents选取NIOSIIProcessAlteraCorporation。点击下方的【ADD】按钮,如图1-12所示,进入AlteraNIOSII配置向导,如图1-13所示。在图1-13中首先显示的是NiosIICore设置选项,我们可以看到NiosII在该系列的FPGA中支持3种类型的CPU。每个CPU的具体参数下方都有说明,读者可以根据应用要求和目标FPGA中的器件约束来选择合适的CPU。在本开发平台中我们选取NiosII/s内核的CPU。具体配置如下:SOPC-NIOSIIEDA/SOPCSystemPlatformNIOSIIExperimentGuidance11图1-12SOPCBuilder图形界面图1-13NiosIICore配置选项�SelectaNiosIICore:NiosII/s�HardwareMultiply:None�HardwareDivide:不选中点击【NEXT】按钮进入Cache&TightlyCoupledMemories设置选项,如图1-14所示。用户可以根据自己的实际情况进行设置,在本实验中我们按默认选项进行设置。SOPC-NIOSIIEDA/SOPCSystemPlatformNIOSIIExperimentGuidance12图1-14Cache&TightlyCoupledMemories设置选项点击【NEXT】按钮进入JTAGDebugModule设置选项,如图1-15所示。为了方便调试,给CPU加入JTAG调试模块。JTAG调试模块要占用较多的逻辑单元,如果整个系统已调试完毕,可以选用“NoDebugger”,以减少系统占用资源。JTAG调试模块根据功能的不同分成多级,每一级的功能在下方都有说明。本实验选择“Level1”,支持软件断点调试。图1-15JTAGDebugModule设置选项点击【NEXT】按钮进入CustomInstructions设置选项,如图1-16所示。该设SOPC-NIOSIIEDA/SOPCSystemPlatformNIOSIIExperimentGuidance13置选项用于用户定制的指令。本实验不使用用户指定的指令,按按默认选项进行设置即可。图1-16CustomInstructions设置选项单击【Finish】按钮完成NiosII处理器的配置,生成一个带JTAG调试接口的NiosII/s型的CPU核。要工作区将会出现一个名称为cpu_0的NiosII内核。在工作区内右击名称为cpu_0的NiosII内核,然后选择“Renane”将其重命名为cpu,如图1-17所示,此时NiosII处理器内核添加完成。图1-17加入名为CPU的myCPU系统注意:在添加完NiosII内核后,要消息窗口会出现红色错误提示,用户可以不用理会,等其它外设添加结束后,这些错误信息会自动消失。SOPC-NIOSIIEDA/SOPCSystemPlatformNIOSIIExperimentGuidance144)添加片内存储器大家都知道,处理器至少要求一个存储器用于数据和指令的存储。因为本实验的代码相对较少,所以可以使用片内的存储器来进行存储。本实验设计一个2KB的片内ROM存储器(Onchip_ROM)用于存储程序代码。2KB的片内RAM存储器(Onchip_RAM)用于变量存储、Heap、Stack等。其添加步骤如下:在可用元件列表中,展开Memory选项,如图1-18所示,选择其组件下的“On_chipMemory-(RAMorROM)”选项,点击下方的【Add】按钮进入添加片内存储器配置向导,如图1-19所示。图1-18SOPCBuilder图形界面图1-19片内存储器配置向导SOPC-NIOSIIEDA/SOPCSystemPlatformNIOSIIExperimentGuidance15在MemoryType选项区域选中“RAM(writeable)”,指定为片内的RAM型。在Size选项中的“TotalMemorySize”的输入框中输入“2”来指定2KB的存储容量,其它设置不做更改,按默认设置即可。点击【FinishT】按钮完成片内RAM的配置。此时在工作区内将会出现一个名为Onchip_memory_0的片内RAM。右击工作区中的Onchip_memory_0,然后选择“Rname”将Onchip_memory_0重命名为Onchip_RAM,完成片内RAM的添加。用相同的方法对片内的ROM进行配置,不同的只是在MemoryType选项区域选中“ROM(read-only)”,指定为片内的ROM型。在Size选项中输入指定的大小,完成后,将工作内生成的Onchip_memory_0重命名为Onchip_ROM,完成片内ROM的添加。片内ROM和片内RAM添加完成后如图1-20所示。图1-20加入名为onchip_ram和onchip_rom的myCPU系统5)添加PIOPIO为NiosII处理器系统接收输入输出信号提供了一种简易的方法,根据本实验的设计要求,加入一个一位的PIO用来驱