SOPC技术实验指导书.doc_第1页
SOPC技术实验指导书.doc_第2页
SOPC技术实验指导书.doc_第3页
SOPC技术实验指导书.doc_第4页
SOPC技术实验指导书.doc_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SOPC技术与应用实验指导书实验一 SOPC快速入门一、实验目的1、学习Quartus II、SOPC Builder、Nios II IDE的基本操作;2、初步了解SOPC的开发流程,基本掌握Nios II软核的定制流程;3、掌握Nios II软件的开发流程;掌握软件的基本调试方法。二、实验设备硬件: PC机,GW48系列SOPC/EDA实验开发平台;软件: Quartus II 8.0,SOPC Builder 8.0,Nios II IDE 8.0。三、实验内容建立可用于控制LED闪烁的简单Nios II处理器系统,具体包括: 1、在Quartus II中建立一个工程;2、使用SOPC Builder建立并生成一个简单的基于Nios II的硬件系统;3、在Quartus II工程中编译基于Nios II的硬件系统并生成配置文件.sof;4、在Nios II IDE中建立对应硬件系统的用户C/C+工程,编写一简单用户程序,在Nios II IDE中编译程序生成可执行文件.elf;5、 将配置文件.sof和可执行文件.elf都下载到FPGA进行调试运行。四、实验原理控制LED灯闪烁的用户程序代码很小,可将其固化在片内ROM来执行。变量、堆栈等空间使用片内RAM,不使用任何片外存储器。整个系统的框图如图1所示。从图1控制LED闪烁的系统框图可知,其它逻辑与Nios II系统一样可存在于FPGA中。Nios II系统可与其它片内逻辑相互作用,取决于整个系统的需要。为了简单起见,本实验在FPGA内不包括其它逻辑。图1 控制LED闪烁的系统框图 五、实验步骤1、使用Quartus II建立工程2、使用SOPC Builder创建NiosII系统SOPC Builder设计过程不需要按固定顺序进行,本实验采用常用设计步骤。读者可采用不同的顺序进行SOPC Builder设计。3、 集成Nios II系统到Quartus II工程在第1步中已经建立Quartus II顶层模块,现在要将刚生成的Nios II系统添加到顶层模块中。注意:本实验在模式5中完成,除非有特别说明,否则实验均在模式5中完成。根据选择的模式,选择对应的引脚,如下图所示。序号管脚名称FPGA管脚号类型序号管脚名称FPGA管脚号类型1CLOCKPIN_28I2RESETPIN_240I4、设置编译选项并编译硬件系统5、 下载硬件设计到目标FPGA成功编译硬件系统后,将产生first_nios2_system.sof的FPGA配置文件输出。这里简单介绍将SOF文件下载到目标FPGA器件的步骤。 通过DE2板上的BLASTER 口连接DE2 USB-Blaster 和主计算机USB口,接通DE2 SW18电源开关。 在Quartus II软件中选择ToolsProgrammer,打开编程器窗口,并自动打开配置文件(led_test.sof),如图38所示。如果没有自动打开配置文件,则须自己添加需要编程的配置文件。 确保编程器窗口左上角的Hardware Setup图标中硬件已经安装。 确保Program/Configure复选框选中。 单击开始使用配置文件对FPGA进行配置,Progress栏显示配置进度。如果使用DE2板,板上的配置绿色指示灯LOAD、GOOD亮,说明配置成功。本节实验只介绍了将配置文件下载到FPGA中,掉电后FPGA中的配置数据将丢失。因此,可以将配置文件写入掉电保持的EPCS中,在上电时使用EPCS对FPGA进行配置。6、使用Nios II IDE建立用户程序本步骤将启动Nios II集成开发环境(IDE)来建立和编译一个简单的LED灯闪烁的C语言程序。在创建用户程序时,必须用到第2步所生成的first_nios2_system.ptf文件。7、调试/运行程序在本步骤中,用户将运行程序来观察编译代码的执行。用户可以在目标硬件上或Nios II指令集仿真器(ISS)上运行程序。本节实验只讲述在目标硬件上调试和运行程序,关于在Nios II指令仿真器(ISS)上运行程序请读者参考Altera公司的相关文档。(1) 在目标硬件上运行程序当编译连接成功后,在C/C+ Projects视图中右击hello_led_0工程文件夹,然后在弹出的快捷菜单中选择Run AsNios II Hardware运行程序,也可以在菜单栏中选择ProjectRun AsNios II Hardware在目标板上运行程序。注意,在目标板上运行程序前,要确保USB Blaster下载电缆已经连接好,要保证已经使用硬件系统对FPGA完成配置,即完成第5步。程序运行前,会将程序代码下载到硬件系统中。如果使用DE2板,当程序运行后,板上的用户指示灯LOAD、GOOD将闪烁。至此,整个设计过程结束。如果在硬件配置成功后,板上的用户指示灯并不闪烁,说明用户程序存在问题。可以通过调试来解决。 (2) 在目标板上调试程序启动调试程序和启动运行程序类似。在编译连接成功后,在C/C+ Projects视图中右击hello_led_0工程文件夹,然后在弹出的快捷菜单中选择Debug AsNios II Hardware来调试程序,也可以在菜单栏中选择ProjectDebug AsNios II Hardware来调试程序。调试运行后,会打开如图46所示调试界面。IDE会首先下载程序在目标板,在alt_main()处设置断点并准备开始执行程序。程序运行观察窗口局部变量观察窗口图2 调试界面用户可以选取图47所示的通用调试控制来跟踪程序的运行。在程序运行观察窗口中可以观察程序的运行情况,在局部变量观察窗口中可以观察变量的值。此外还能查看寄存器、存储器等的值。暂停运行运行到光标所在的当前行运行并跳出子程序单步跟踪时不进入子程序单步跟踪时进入子程序停止调试从当前代码处继续执行设置断点跳过所有断点图3 调试控制工具当程序调试通过后,经过IDE编译器生成的onchip_ROM.hex文件包含了正确可执行的程序代码。在Quartus II软件中对硬件系统进行重新编译(见第4步的(2)),利用onchip_ROM.hex文件对onchip_ROM进行初始化,生成的配置文件将包含onchip_ROM.hex的内容。在Quartus II中重新编译硬件系统后,使用配置文件对FPGA进行配置后(见第5步),程序将直接运行,DE2板上的用户指示灯LOAD、GOOD将闪烁。1 思考请总结SOPC开发的流程。实验二 建立带SRAM的NiosII系统实验一、实验目的1、在实验一的基础上进一步熟悉Quartus II、SOPC Builder、Nios II IDE的操作,熟悉SOPC开发过程;2、掌握较复杂NiosII系统的定制,熟悉添加SRAM的方法;二、实验设备硬件: PC机,GW48系列SOPC/EDA实验开发平台;软件: Quartus II 8.0,SOPC Builder 8.0,Nios II IDE 8.0。三、实验内容1、建立一个包括Nios II/e、PIO、SRAM和JTAG_UART的系统。2、建立一个流水灯应用程序,并下载到SRAM中运行。四、实验原理开发平台上LED接口的电路原理图如图1所示。图 1 LED接口电路Nios II系统完整的顶层图如图2所示。图2 完整的顶层模块图管脚分配表如表1所示。表 1 管脚分配表序号管脚名称FPGA管脚号类型序号管脚名称FPGA管脚号类型1CLOCKPIN_28O36LED0PIN_1O2RESETPIN_24037LED1PIN_23SRAM_D0PIN_65IO38LED2PIN_34SRAM_D1PIN_6639LED3PIN_45SRAM_D2PIN_6740LED4PIN_66SRAM_D3PIN_6841LED5PIN_77SRAM_D4PIN_7342LED6PIN_88SRAM_D5PIN_7443LED7PIN_129SRAM_D6PIN_7544SRAM_BE0PIN_118O10SRAM_D7PIN_7645SRAM_BE1PIN_11911SRAM_D8PIN_7746SRAM_BE2PIN_12012SRAM_D9PIN_7847SRAM_BE3PIN_12113SRAM_D10PIN_7948SRAM_CSPIN_117O14SRAM_D11PIN_8249SRAM_OEPIN_116O15SRAM_D12PIN_8350SRAM_WEPIN_115O16SRAM_D13PIN_8451SRAM_ADDR0PIN_122O17SRAM_D14PIN_8552SRAM_ADDR1PIN_12318SRAM_D15PIN_8653SRAM_ADDR2PIN_4219SRAM_D16PIN_8754SRAM_ADDR3PIN_4320SRAM_D17PIN_8855SRAM_ADDR4PIN_4421SRAM_D18PIN_9356SRAM_ADDR5PIN_45O22SRAM_D19PIN_9457SRAM_ADDR6PIN_4623SRAM_D20PIN_9558SRAM_ADDR7PIN_4724SRAM_D21PIN_9859SRAM_ADDR8PIN_4825SRAM_D22PIN_9960SRAM_ADDR9PIN_4926SRAM_D23PIN_10061SRAM_ADDR10PIN_5327SRAM_D24PIN_101IO62SRAM_ADDR11PIN_5428SRAM_D25PIN_10463SRAM_ADDR12PIN_5629SRAM_D26PIN_10564SRAM_ADDR13PIN_5730SRAM_D27PIN_10665SRAM_ADDR14PIN_5831SRAM_D28PIN_10766SRAM_ADDR15PIN_5932SRAM_D29PIN_10867SRAM_ADDR16PIN_6033SRAM_D30PIN_11368SRAM_ADDR17PIN_6134SRAM_D31PIN_11469SRAM_ADDR18PIN_623570SRAM_ADDR19PIN_63注:SDRAM的I/O电平为SSTL-2 CLASS I。五、实验步骤1、使用Quartus II建立工程(1) 打开Quartus II软件并建立工程参考实验1实验新建工程的步骤来新建一个SmallCore工程,只是在图3中的设置不同。图3 新建工程路径、名称、顶层实体指定对话框图3第一栏指定工程所在的工作库文件夹为SmallCore;第二栏指定工程名,直接用顶层文件的实体名作为工程名(建议使用);第三栏指定顶层文件的实体名。本实验工程的路径为D:DE2exampleSmallCore文件夹,工程名与顶层文件的实体名同名,为SmallCore。 (2) 建立顶层模块参考实验一建立顶层模块的步骤,新建空白BDF文件,并保存为SmallCore.bdf。保存时确保Add file to current project选项选中,以使该文件添加到工程中。2、使用SOPC Builder定制NiosII系统 一些步骤的详细解释请参考实验一节实验。(1) 启动SOPC Builder新建工程后,在Quartus II界面中选择ToolsSOPC Builder来启动SOPC Builder,打开Create New System对话框,如图4所示。图 4 Create New System对话框在图4中单击“OK”,进入SOPC Builder 图形界面,如图5所示。 (2) 指定目标FPGA和时钟设置Target和Clock选项区域用来设置SOPC Builder系统与外部的联系。在定制系统前,还需要指定系统的时钟频率。SOPC Builder将利用这个时钟频率产生时钟分频或波特率等。该频率要与系统实际运行的时钟频率相匹配。本实验选择的是50 MHz。如图5所示。确保Device Family下拉列表框中器件选择Cyclone,否则最终的设计将不能运行。图5 指定目标FPGA和时钟设置(3) 添加NiosII处理器内核在可用元件列表中,双击Avalon SOPC Builder组件下的Nios II Process,出现Altera Nios II配置向导,在Nios II Core选项卡中指定下列设置: Nios II Core: Nios II/e Hardware Multiply: None Hardware Divide: 不选中由于是Nios II/e核,在Cache & Tightly Coupled Memories选项卡中不进行设置。不改变JTAG Debug Module选项卡中的设置。为了方便调试,给CPU加入JTAG调试模块。JTAG调试模块要占用较多的逻辑单元,如果整个系统已经调试完毕,可以选用No Debugger,以减少系统占用资源。由于不使用自定义指令,因此不改变Custom Instructions选项卡中的设置。单击Finish按钮完成Nios II处理器的配置,生成一个带有JTAG调试接口的Nios II/e型CPU核。在激活的元件窗口中将出现名称为cpu的Nios II内核。添加Nios II内核后,在SOPC Builder Message窗口会出现错误信息。这些信息暂不考虑,将在后面步骤中处理它们。(4) 添加JTAG_UART带Avalon接口的JTAG_UART设备可以实现PC与Nios II系统间的串行通信。在许多设计中,JTAG_UART常取代RS232通信设备,用于字符的输入/输出。与UART设备不同的是,JTAG_UART是通过JTAG接口来传输数据的。在可用元件的列表中,双击Interface Protocols Serial组件下的JTAG UART,出现JTAG UART配置向导,如图6所示。不改变其中的设置,直接单击Finish按钮完成添加。激活元件窗口中出现jtag_uart。图6 JTAG UART配置对话框(5) 添加SRAM控制器内核 众所周知,处理器系统至少要求一个存储器用于数据和指令。本实验利用一个SRAM控制器来使用板上1MB的SRAM存储器,用于程序运行、变量存储(R/W数据)、Heap和Stack等。在可用元件列表中,双击GW_SOPC组件下的SRAM Controller ,Cy7C1041出现如图7所示对话框, 按图7所示对话框中配置。 图 7 SRAM控制器配置(6) 添加PIOPIO为NiosII处理器系统接收输入信号以及输出信号提供一种简易的方法。本实验设计使用8个PIO来驱动实验箱主板上的8个LED。执行下列步骤添加PIO:在可用元件列表中,双击Peripherals Microcontroller Peripherals组件下的PIO(Parallel I/O),出现Avalon PIO配置向导,如图8所示。 默认Width选项区域的文本框中宽度设置8;在Direction选项区域中选择Output ports only,即仅为输出模式。 单击“Finish”,元件窗口中出现名称PIO。 右击激活元件窗口中PIO,然后选择Rename将其重命名为led_pio。注意,此处必须命名为led_pio,因为后面的实验程序中将使用该命名。图 8 PIO置向导 (9) 指定基地址和中断请求优先级至此,已经将本实验所有必需的元件添加到系统中,如图10所示。图10 添加完所用元件的窗口接下来,要为每个外设分配基地址和中断请求优先级(IRQ)。由于本实验中所有外设都没有中断,所以无需进行中断优先级分配。只需使用SOPC Builder提供Auto Assign Base Addresses命令分配外设基地址。 (10) 设置NiosII复位和异常地址双击激活窗口中CPU 进入Nios II Processor,如图11所示,设置系统的复位地址和异常向量地址。图11 设置系统的复位地址和异常向量地址将Reset Vector和Exception Vector对应的Memory 都设置为sram、Offset只有在多处理器系统中才进行设置,且其值必须是0x20的倍数,此处不用修改。由于本实验没有添加掉电保存的存储器,所以系统只能用于程序的调试。系统上电后,应用程序从Nios II IDE下载到SDRAM中运行。 (12) 生成Nios II系统使用SOPC Builder生成Nios II系统,执行下列步骤: 选择System Generation选项卡。 关闭Simulation. Create simulator project files复选框,以节省时间,因为本实验不进行硬件仿真。 单击“Generate”,系统生成开始。系统生成时间的长短随计算机的性能而变化,一般需要几分钟。System Generation选项卡显示系统生成的过程。当系统生成结束时,System Generation选项卡中将显示一条消息“SUCCESS: SYSTEM GENERATION COMPLETED.”。 单击“Exit”返回到Quartus II主界面。至此,已经完成Nios II处理器系统的创建。系统生成后,要将其集成到Quartus II硬件工程中,并使用Nios II IDE来开发软件。可以先使用Nios II IDE进行软件开发,也可以先将系统集成到Quartus II中。如果是多人合作开发,两者可同时进行。5、集成各模块到Quartus II工程第2、3、4步中已经建立好各功能模块,下面将其添加到顶层模块中。单击模块编辑工具栏中的按钮,打开添加模块对话框,选择nios2e_2C35进行添加。并按图19input、output以及bidir三种类型的引脚。图19系统顶层模块设置6、设置编译选项并编译硬件系统(1) 设置编译选项本实验采用默认的编译设置。若要进行编译选项设置,请参考Altera公司的Quartus II使用手册。(2) 编译硬件系统选择ProcessingStart Compilation进行全程编译,也可选择工具栏上的按钮启动编译。在编译过程中,可能产生很多警告信息,但不会影响设计结果。(3) 查看编译报告编译结束后,对话框显示消息“Full compilation was successful.”,单击“OK”进入Compilation Report界面,可查看编译报告、综合报告、适配报告、时序分析报告。展开Timing Analyzer部分,单击Summary检查Actual Time单元中列出的频率,这是该FPGA设计能够运行的最大频率(FMAX)。如果Actual Time中的频率低于板上实际的振荡器频率,该设计可能不会正常运行。必须执行Quartus II高级编译选项设置和时序分配来优化时钟。(4)按表1分配管脚。(5)从新编译硬件系统7、下载硬件设计到目标FPGA8、使用Nios II IDE建立用户程序 应用程序文件为led_flow.c9、调试/运行程序实验三 通过C库函数访问JTAG UART一、 实验目的了解使用ANSI C标准库函数访问JTAG UART的方法。二、 实验设备硬件: PC机,GW48系列SOPC/EDA实验开发平台;软件: Nios II IDE 8.0。三、 实验内容用ANSI C标准库函数从JTAG UART中读入字符。如果检测到符合要求的字符,则输出提示信息。学习printf()、 scanf()、 fopen()和fwrite()等函数的用法。四、 实验步骤(1) 使用实验二硬件配置。(2) 启动Nios II IDE,新建一个空白CC+工程,并命名为JtagUartTtest。(3) 根据提供的参考程序在JtagUart_test1工程文件夹中新建应用程序文件JtagUartTtest.c。(4) 在System Library设置页中,先将标准输入/输出设备指定为jtag_uart,再将程序和数据区都指定为sram,如图1所示。(5) 编译整个工程,查找语法错误。(6) 下载硬件配置文件到FPGA。(7) 全速运行程序,在信息显示框中与JTAG UART进行交互,如图1所示。图 1 标准输入输出设备指定为“jtag_uart”五、 实验参考程序程序清单 ANSI C标准库来访问JTAG UART参考程序/* 文 件 名:JtagUart_test1.c* 功 能:ANSI C标准库来访问JTAG UART;如果检测到字符t,则报告检测到字符t;* 如果检测到字符v,则退出程序;其它字符则忽略。* 说 明:在信息框口与设备进行交互。*/#include#include#include system.hint main () char* msg = Detected the character t.n; FILE* fp; char prompt = 0; printf(Please Enter some characters: n); fp = fopen (JTAG_UART_NAME, r+); /打开文件进行读和写 if (fp) while (prompt != v) / 循环直至接收到 v prompt = getc(fp); / 从JTAG UART中获取字符 if (prompt = t) / 如果字符为 t 打印信息 fwrite (msg, strlen (msg), 1, fp); if (ferror(fp)/ 检查错误是否与文件指针一起出现 clearerr(fp);/ 如果是,清除它 fprintf(fp, Closing the JTAG UART file handle.n); fclose (fp); else printf(Fail to open file.n); return 0; 该程序运行效果如图2所示图2 检测字符程序实验四 七段数码管显示实验一、 实验目的掌握七段数码管的显示操作。二、 实验设备硬件: PC机,GW48系列SOPC/EDA实验开发平台;软件: Quartus II 8.0,SOPC Builder 8.0,Nios II IDE 8.0。三、 实验内容实验平台有8个七段数码管,工程使用实验二配置的工程,再配置上8位7段数码管PIO。配置后编程显示秒计数功能。 八位7段数码管电路连接原理图如图1所示,管脚分配见表1.图1 八位7段数码管图表 1 数码管对应的译码器管脚分配表序号管脚名称FPGA管脚号类型序号管脚名称FPGA管脚号类型1HEX00PIN_13O17HEX40PIN_137O2HEX01PIN_1418HEX41PIN_1383HEX02PIN_1519HEX42PIN_1394HEX03PIN_1620HEX43PIN_1405HEX10PIN_1721HEX50PIN_1416HEX11PIN_1822HEX51PIN_1587HEX12PIN_1923HEX52PIN_1598HEX13PIN_2024HEX53PIN_1609HEX20PIN_2125HEX60PIN_16110HEX21PIN_4126HEX61PIN_16211HEX22PIN_12827HEX62PIN_16312HEX23PIN_13228HEX63PIN_16413HEX30PIN_13329HEX70PIN_16514HEX31PIN_13430HEX71PIN_16615HEX32PIN_13531HEX72PIN_16716HEX33PIN_13632HEX73PIN_168四、 实验步骤(1) 使用实验二配置的工程,再配置上8位7段数码管PIO,重新编译。(2) 启动Nios II IDE,新建一个空白CC+工程,并命名为seven_segdisp_test。(3) 根据提供的参考程序在seven_segdisp_test工程文件夹中新建应用程序文件seven_segdisp_test.c。(4) 下载硬件配置文件到FPGA。(5) 编译整个工程,查找语法错误。(6) 全速运行程序,观察七段数码管的显示。实验五 定制基于Avalon总线的用户外设实验一、实验目的学习使用Verilog描述用户外设逻辑(PWM),然后利用SOPC Builder中的元件创建工具(Create New Component)来创建基于Avalon总线的用户外设。通过本实验让读者掌握定制用户逻辑外设的整个过程。二、 实验设备硬件: PC机,GW48系列SOPC/EDA实验开发平台;软件: Quartus II 8.0,SOPC Builder 8.0,Nios II IDE 8.0。三、实验内容(1) 使用Verilog描述PWM的逻辑;(2) 使用SOPC Builder中的元件创建工具创建PWM元件。四、实验原理SOPC Builder提供了一个元件编辑器,通过元件编辑器用户可以在GUI(图形用户界面)下将用户逻辑封装成一个SOPC Builder元件,并且随时可以编辑修改。本实验使用Create New Component将用户用硬件描述语言(Verilog或VHDL)描述的逻辑封装成一个可以被SOPC Builder使用的元件(也可称之为IP核)。一旦完成了将用户逻辑封装为SOPC Builder可用的元件,用户可以像使用Altera公司提供的外设元件一样使用这些元件,也可以提供给其它设计者使用。若用户修改了元件的描述文件,可以利用元件编辑器对定制好的元件进行编辑修改。一般来说,一个定制元件由下列部分组成:(1) 描述元件逻辑的硬件描述文件(HDL文件)。(2) 软件文件: 一个用来定义元件寄存器的C语言头文件以及让程序员控制该元件的软件驱动。(3) 元件的描述文件(class.ptf): 该文件定义了元件的架构,提供了SOPC Builder将该元件集成到一个系统时所需的各种信息。在定制用户逻辑外设时,该文件是由元件编辑器根据用户提供的硬件和软件文件以及在图形用户界面(GUI)设置的各选项和参数自动生成的。一个典型元件定制的步骤如下: 1. 规划元件的硬件功能。2. 如果采用微控制器控制该元件,则规划访问该硬件的应用程序接口(API)。3. 在硬件和软件要求的基础上,定义一个恰当的Avalon接口。4. 使用Verilog或VHDL来描述硬件逻辑。5. 单独验证元件的硬件功能。6. 编写用于描述寄存器的C头文件来为软件定义硬件寄存器映像。7. 使用元件编辑器封装硬件HDL和软件文件,得到一个元件。8. 将该元件集成到一个简单的SOPC Builder系统模块中。9. 使用Nios II测试寄存器级的访问是否正确。10. 如果以后要使用微控制器访问该元件,则要编写元件的驱动软件。11. 反复改进元件的硬件设计和软件驱动,并利用元件编辑器来更新所做的修改。12. 建立一个完整的SOPC Builder System,里面含有一个或多个该元件。13. 如果需要进一步改进,执行系统级的验证。14. 完成元件定制,并分发给其它设计者。限于篇幅,本实验并没有完全按照这些步骤来编写。一个用户逻辑元件必须进行硬件设计。这里的硬件设计是指用硬件描述语言HDL来描述和仿真硬件逻辑的组成。一个典型的元件由下列功能模块组成: (1) 任务逻辑。任务逻辑完成元件的基本功能,是必不可少的。(2) 寄存器文件。寄存器文件提供了任务逻辑与外界交换信息的途径。有了寄存器文件,用户就可以通过Avalon接口采用基地址地址偏移量的方式来访问元件内部各寄存器。(3) Avalon接口。Avalon接口为寄存器文件提供了一个标准的Avalon前端。它使用Avalon必须的信号来访问寄存器文件,并且支持任务逻辑的传输类型。图1给出了带Avalon Slave端口的典型元件组成框图。图 1 带Avalon Slave端口的典型元件组成框图创建好用户描述元件的硬件和软件文件后,就可以使用SOPC Builder中的元件编辑器将它们封装成一个元件。本实验的重点在于指导读者怎样将一个已经用硬件描述语言描述好的逻辑封装成SOPC Builder能使用的元件,而不详细介绍怎样用硬件语言描述一个用户逻辑。本实验首先需要读者了解Avalon接口的基本知识。关于本实验内容,由于使用已经创建好的硬件描述文件,所以不要求读者掌握诸如传输类型、信号时序等全面的Avalon接口知识。如果创建自己的用户元件,读者需要全面理解掌握Avalon总线接口,详细内容请参考Altera公司的文档Avalon Interface Specification。本实验所使用的PWM用户逻辑的设计文件列表如表1:表 1 PWM设计文件列表文件(文件夹)名描述/ pwm_hw该文件夹包含有描述PWM逻辑的硬件描述文件pwm_task_logic.v完成PWM功能的任务逻辑Verilog代码pwm_register_file.v完成读写PWM寄存器的逻辑Verilog代码pwm_avalon_interface.v为任务逻辑和寄存器文件提供Avalon slave接口逻辑,该文件包含有顶层模块。/ pwm_sw该文件夹包含有PWM软件接口的C文件 avalon_slave_pwm_regs.h定义访问PWM中寄存器的宏 altera_avalon_pwm_routines.h声明访问PWM的函数原形 altera_avalon_pwm_routines.c定义访问PWM的函数表1中文件的具体内容,请读者自行查阅。PWM输出一个占空比可调的方波。当一个周期11个时钟,高电平输出7个时钟时的PWM输出波形如图2所示。图2 PWM输出波形本实例的PWM是以下列要求设计的: 任务逻辑按一个简单时钟进行同步操作。 任务逻辑使用32位计数器为PWM提供一定范围的周期和占空比,最大可设为232个clk。 可以使用微控制器(Nios II)来设置PWM的周期和占空比的值。因此要提供一个可对PWM寄存器进行读写的接口和控制逻辑。 定义寄存器来存储PWM周期和占空比的值。 微控制器可以通过控制寄存器的禁止位来关闭PWM输出。PWM任务逻辑结构图如图3所示。PWM任务逻辑由输入时钟(clock)、输出信号口(pwm_out)、使能位、32位计数器以及一个32位比较电路组成。clk作为32位计数器的时钟信号,32比较电路比较32位计数器当前值与占空比设定寄存器(Duty Cycle Value Register)中的值来决定pwm_out的输出为高或低。当当前计数器中的值小于或等于占空比寄存器中的值时,pwm_out输出低电平,否则输出高电平。PWM周期设定寄存器(Modulo-n Value Register)用来设置pwm_out的信号周期,当当前计数器的值等于Modulo-n Value Register中的设定时,产生一个复位信号来清除计数器中的值。使能控制寄存器(Enable Control Register)能使时钟信号clock有效或无效,即控制计数器是否计数,从而保持pwm_out输出保持当前不变。图 3 任务逻辑结构图PWM内部包括使能控制寄存器(Enable Control Register)、周期设定寄存器(Modulo-n Value Register)以及占空比设置寄存器(Duty Cycle Value Register),如图3所示。设计中将各寄存器映射成Avalon Slave端口地址空间内一个单独的偏移地址。每个寄存器都能进行读写访问,软件可以读回寄存器中的当前值。寄存器以及偏移地址见表2。为了支持三个寄存器的访问,要求设计两位地址。两位地址将产生4个寄存器的空间,因此有一个寄存器不使用。表2 寄存器列表寄存器名地址偏移量访问属性描述Clock_divide00读/写用来设定PWM输出周期的时钟数duty_cycle01读/写用来设定一个周期内PWM输出低电平的时钟个数enable10读/写使能和关闭PWM输出,为1时使能PWM输出保留11PWM的Avalon接口需要一个简单的Slave端口,该端口使用较少的Avalon信号来处理简单的寄存器读、写传输。PWM的Avalon Slave端口与Avalon slave端口时钟信号同步,读写时的建立和保持时间为0,因为读、写寄存器仅需要一个时钟周期,所以端口读写时为零等待且不需要读延时。因为Slave端口连接到寄存器,所以使用静态地址对齐方式。表3列出了PWM的Avalon Slave端口需要的信号及其在HDL设计文件中的名称。表 3 PWM信号名称和Avalon信号类型列表HDL中的信号名Avalon信号类型宽度方向描述clockclock1input同步数据传输与任务逻辑resetnreset_n1input复位信号,低有效Chip_selectchipselect1input片选信号addressaddress2input2位地址,只有其中3个译码被使用writewrite1input写使能信号write_datawrite_data32input32位写数据值Readread1input读使能信号Read_datareaddata32output32位读数据值此外PWM还包括一个pwm_out信号,该信号是PWM输出,不属于Avalon接口信号。五、 实验步骤1、 封装pwm设计为SOPC Builder元件为了便于创建完PWM元件后的验证,该实验的前面步骤和实验lab4相同,不同的步骤如下:(1) 将建立好的lab5工程文件中一个新的目录,例如 D:lab5pwm。(2) 将PWM的设计文件拷贝到D:lab5pwm目录中,但是文件夹名称不能为中文。(3) 打开pwm文件夹中的lab5工程。注意,打开工程的目的只是为了打开SOPC Builder组件而已。(4) 在Quartus II中,选择ToolsSOPC Builder打开SOPC Builder。(5) 在SOPC Builder中,选择FileNew Component打开创建新元件向导。(6) 在向导中,选择HDL Files选项卡,单击“Add HDL File”按钮打开添加文件对话框。将路径指向PWM设计文件所在的目录,如4所示。逐一添加各文件,或按住键盘上的Ctrl键同时选中3个文件,然后单击“打开”按钮一次完成添加。图4 添加硬件描述文件(7) 添加完硬件文件后,在HDL Files栏中可看到刚添加的3个文件,绿色闪烁的条纹表示系统正在分析该文件,请等待系统分析完各文件后再进行其它操作。在Top Level Module下拉列表框中,默认是“pwm_avalon_interface.v: pwm_avalon_interface”,如图5所示。如果不是该选项,请修改。此时,在消息窗口中会出现错误提示,这将在后面的步骤中解决。图5 添加完硬件文件后的窗口(8) 选择Signals选项卡,按表3进行信号的设置。设置完成后如图6所示。此时,消息框内的错误提示都将消失。图6 设置信号(9) 选择Interfaces选项卡,修改Avalon Slave的名称为control_slave(这并不是必要的),确保slave addressing为Register(use native bus sizing),修改Read Wait=0, Write Wait=0,如图7所示。图7 设置接口(10) 选择Component Wizard选项卡,如图8所示。对于本例,可以不修改Component Name、Component Version 以及Component Group。图8 Component Wizard 设置页(11) 单击Preview the Wizard按钮进行预览。(12) 关闭预览窗口,单击“Finish”按钮,弹出一个消息框,告诉设计者元件存放的路径、创建了哪些文件等,如图9所示。单击“Yes”按钮确认。图9 创建的消息框(13) 在SOPC Builder左边可用元件列表中,将产生一个User Logic的新组,在下面出现刚才创建的元件pwm_avalon_interface,如图10所示。至此已经完成PWM元件的创建。图105、 使用并验证新创建的PWM元件(1)添加创建好的pwm_avalon_interface元件。用户可以双击已经添加的PWM元件,如图11所示。图11 PWM添加对换框(2) 右击刚才添加的元件pwm_avalon_interface_inst选择Rename,将其重命名为pwm。因为提供的示例程序中使用PWM对元件进行访问,所以读者最好以pwm来命名。当然读者也可以任意命名,然后修改对应的程序。(3) 在图12中单击“Generate”重新生成系统。生成成功后单击“Exit”退出并返回Quartus II。(4)在Quartus II中将弹出是否更新符号的提示,选项Yes更新。(5)不选中(移动时不保持信号连接),调整引脚的连接,并将名称为LED7.0的引脚移到pwm_out_from_the_pwm的接口上,并重命名为LED0(因为只有一路PWM输出)。LED引脚已经分配好,不用再进行引脚分配。将LED0引脚连接到LED1上,可以用PWM来控制LED1的亮度。(6) 在Quartus II界面中选择FileSave保存,然后选择ProcessingStart Compilation或单击开始全程编译。(7)将生成的新硬件配置文件下载到FPGA中。(8)启动Nios II IDE,将工作空间路径设为工程所在的文件夹pwm。(9) 选择FileNewC/C+ Application建立一个新工程。在Select Project Template列表框中选择Blank Project,即创建一个空白工程;在Name文本框中输入工程名称,如: pwm_test;选中Use Default Location;将SOPC Builder System指向刚才生成的带PWM的系统,设置完后如图12所示。然后按“Finish”完成工程创建。图12 创建测试PWM的工程(10) 将实验程序拷贝到

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论