SOPC系统设计技术实验报告姓名:学号:院系:信息科学与工程学院专业:电子科学与技术指导老师:完成日期:2015年04月25日实验二、NIOSII实现串口收发数据及LCD显示一、实验目的(1)进一步熟悉QuartusII、SOPCBuilder、NIOSIIIDE的操作;(2)掌握SOPC硬件系统及NIOSII软件的开发流程。二、实验内容(1)、实验平台:硬件:PC级、SmartSOPC+教学实验开发平台;软件:QuartusII9.0,SOPCBuilder9.0,NIOSIIIDE9.0。(2)、实验内容:建立包含SDRAM、JTAG_UART、Timer、LCD的NIOSII处理器系统,通过JTAG_UART从IDE的控制端窗口读取输入值N,计算1至N的累加值,并将计算结果及计算花费时间的显示在LCD中。三、实验步骤3.1硬件设计根据实验内容,可以得出本次实验的硬件结构图如图3.1所示:图3.1硬件设计结构图具体硬件设计步骤如下:1)、在QuartusII中建立一个工程命名为:smallCore,器件设置为EP3C55F484C8;2)、以原理图输入方式建立空白顶层模块,并保持;3)、打开SOPCBuilder,命名SOPC系统名称为nios2system,开始建立NIOSII系统。4)、双击SOPCBuilder主界面左侧中的“NiosIIProcessor”,出现NiosIICPU的配置向导对话框,如图1.4所示,在这里可以有三种NiosIICPU选择,我们选择快速型的NiosII/f,不使用硬件乘法器及除法器。然后单击Next进入下一步配置;InstructionCache项中选择2Kbytes,在DataCache项中选择512Bytes,单击Next进行下一步配置;在“AdvancedFeatures”和“MMUandMPUSettings”选项卡中选择默认参数,然后单击Next,到了“JTAGDebugModule”选项卡,如图1.6所示。这里是选择JTAG调试接口,选择默认的模式Level1,然后单击Next,到了“CustomInstruction”选项卡,也选择默认参数,最后单击Finish完成对NiosIICPU的配置。5)、添加了NiosIICPU内核后,选中ModuleName下的cpu_0,单击鼠标右键,在Rename项中可以重命名cpu_0的名称为cpu,并在“ClockSettings”一栏中将clk_0名称改为clk。6)、双击在SOPCBuilder主界面左侧中的BridgesandAdapters→MemoryMapped→Avalon-MMClockCrossingBridge,出现ClockCrossingBridge的配置向导对话框,在“Slave-to-MasterFIFO”中的FIFOdepth中选择64。单击“finish”退出配置对话框,并重命名clock_crossing_0的名称为clock_crossing。7)、双击在SOPCBuilder主界面左侧中的MemoriesandMemoryControllers→SDRAM→DDRSDRAMHighPerformanceController,出现DDRSDRAMHighPerformanceController的配置向导对话框。修改“GeneralSettings”选项卡的参数配置,参数修改如下:Speedgrade:8PLLreferenceclockfrequency:85Memoryclockfrequency:100Localinterfaceclockfrequency:full修改“ModifyParameters”:DDRSDRAM控制器参数,参数修改如下:TotalMemoryinterfaceDQwidth:16Memoryvendor:otherColumnaddresswidth:98)、修改DDRSDRAM的控制器ddr_sdram_0的名称为ddr_sdram,并在ddr_sdram左侧中取消cpu.instruction_master和cpu.data_master中的实点,选择clock_crossing.m1的实点,将ddr_sdram控制器连接到ClockCrossingBridge的m1中。9)、双击在SOPCBuilder主界面左侧中的BridgesandAdapters→MemoryMapped→Avalon-MMPipelineBridge,出现PipelineBridge的配置向导对话框,选择默认参数,单击“finish”添加到SOPCBuilder中,并重命名pipeline_bridge_0为pipeline_bridge。10)、双击在SOPCBuilder主界面左侧中的Peripherals→MicrocontrollerPeripherals→PIO(ParallelI/O),出现PIO外设配置的对话框,在Wide一栏中选择8bit,在Direction一栏中选择Outputportsonly,如图1.13所示,最后单击Finish完成对PIO的设置,此时在SOPCBuilder中出现pio_0的外设,修改该名称为LED_PIO,并把LED_PIO外设连接到pipeline_bridge.m1上。11)、双击在SOPCBuilder主界面左侧中的Peripherals→DebugandPerformance→SystemIDPeripheral,直接在SOPCBuilder中添加sysid的外设,修改sysid_0名称为sysid,并把sysid外设连接到pipeline_bridge.m1上。12)、双击在SOPCBuilder主界面左侧中的PLL→PLL,单击“LaunchAltera’sALTPLLMegaWizard”,出现PLL配置对话框1。在“whatisthefrequencyoftheinclock0input”一栏中设置输入的频率为50MHz,单击Next,进行下一步的设置。在PLL配置对话框2中的“Lockoutput”中选择“Create‘locked’output”,PLL配置对话框的page3、4、5都选择默认参数,在page6中ClockTapSettings一栏中选择“Enteroutputclockfrequency”,将c0时钟输出为85MHz,单击Next,进行下一步的设置。PLL配置对话框的page7-11都选择默认参数,在page12中单击“finish”退出PLL配置对话框,最后再单击“finish”退出。在SOPCBuilder中重命名pll_0为sys_pll,并把sys_pll外设连接到pipeline_bridge.m1上。13)、在“ClockSettings”一栏中将sys_pll_c0名称改为system_clk,并在SOPCBuilder中的Clock一栏中为每一个外设选择合适的clock信号。需要特别注意的是sys_pll中的s1时钟需要选择clk,clock_crossing中的s1需要选择system_clk,m1需要选择ddr_sdram_sysclk,ddr_sdram对应选择system_clk,ddr_sdram中的s1需要选择ddr_sdram_sysclk,其它的外设选择system_clk。14)、添加JTAG_UART:使用缺省设置,命名为jtag_uart,对应system_clk,连接至pipeline_bridge;15)、添加Timer:InitialPeriod改为20ms,命名为sys_clock_timer,对应system_clk,连接至pipeline_bridge;16)、添加Avalon-MMTristatebridge:使用缺省设置,命名为ext_bus,对应system_clk,连接至cpu;17)、添加zlg_avalon_lcd240_128:命名为lcd240_128,对应system_clk,连接至ext_bus;18)、添加pio:1位输出,outputonly,命名为lcd_light,对应system_clk,连接至pipeline_bridge;19)、单击SOPCBuilder菜单的system→Auto-AssignBaseAddress,进行自动分配地址,单击SOPCBuilder菜单的system→Auto-AssignIRQs,进行自动分配中断号。20)、双击SOPCBuilder中的cpu,确认在ResetAddress一栏中选择ddr_sdram,在ExceptionAddress一栏中选择ddr_sdram。完整的nios2系统如图3.2所示:图3.2nios2系统构造图时钟设制如图3.3所示:图3.3系统时钟设置图21)、生成系统。在之前建立好的原理图文件中添加NIOSII系统至顶层模块,保存原理图文件。22)、定制delay_reset_block模块:原理图如图3.4所示:图3.4delay_reset_block模块原理图23)、在smallCore原理图中添加delay_reset_block模块原理图,并且添加输入输出端口,得到系统原理图,如图3.5所示:图3.5系统原理图24)、在QuartusII主界面中选择Assignments→Device。在“Availabledevices”一栏中选择“EP3C55F484C8”器件。对器件和引脚进行配置。配置项有:UnusedPins设置为:Asinputtri-stated;configurationdevice设置为:EPCS16;DefaultI/Ostandard配置为:3.3-VLVTTL电平;Dual-PurposePins中的所有引脚设置为“UseasregularI/O”。25)、将DDRSDRM引脚约束文件中的“YES”改为“NO”,运行DDRSDRM引脚约束文件。26)、对系统进行引脚分配:新建引脚约束文件:”setup.tcl”。setup.tcl文件见附录。运行set.up.tcl引脚约束文件。27)、编译整个工程,编译成功之后将系统下载到FPGA中去。硬件设计完成。3.2软件设计本系统的软件设计流程图如图3.6所示:图3.6软件设计流程图具体步骤如下:1)、在NiosIIIDE的工程中选择File→New→NiosIIC/C++Application,新建一个C/C++工程文件,在“SelectProjectTemplate”一项中选择空白文件。在Name一项中填入工程名,在这里我们命名为num,在SOPCBuilderSystem一项里,我们选择QuartusII工程目录下的nios2system.ptf文件。2)、选中NiosIIIDE工程右侧的num工程,单击鼠标的右键,选择“SystemLibraryProperties”一项,配置系统的参数,在这里,我们选择默认参数。3)、添加主程序文件num.c文件(见附录),zlg_avalon_lcd240_128.c文件,zlg_avalon_lcd240_128.h文件。4)、选中NiosIIIDE工程右侧的led_flow工程,单击鼠标的右键,选择“BuildProject”一项,开始编译工程,在工程下面的Console选项卡中查看编译信息。5)、选中NiosIIIDE工程右侧的num工程,单击鼠标的右键,选择RunAs→NiosIIHardware,开始下载程序到FPGA,等待下载完毕后,在实验箱上可以看到LCD屏幕显示的变化。四、结论4.1结果展示运行后的结果如图4.1所示:图4.1实验结果图当输入N为100时的计算结果为5050,耗时为2039,这里的2039是执行指令的时间,不是秒。4.2实验总结1、试验中遇到的问题:1)、在使用SOPCbuilder设计nios2系统时,每个IP核对应的时钟很重要,要细心选择,经常选错;2)、添加完所有IP核后,忘记对cpu的复