实验52跑马灯实验.docx
《实验52跑马灯实验.docx》由会员分享,可在线阅读,更多相关《实验52跑马灯实验.docx(14页珍藏版)》请在冰豆网上搜索。
![实验52跑马灯实验.docx](https://file1.bdocx.com/fileroot1/2022-10/22/402f8817-0b62-435d-a8f0-db3e7d569854/402f8817-0b62-435d-a8f0-db3e7d5698541.gif)
实验52跑马灯实验
实验5.2跑马灯实验
·实验说明
在FPGA实验板上用VHDL语言或者Verilog语言都能够很快地写出跑马灯实验程序。
本实验要求完成的是基于SOPC的跑马灯设计,具有一定的操作复杂性。
·实验步骤
5.2.1建立Quartus工程
1.新建Quartus工程RunningLED,顶层实体名RunningLED。
2.重新设置编译输出目录为../RunningLED/release。
5.2.2建立SOPC系统
3.点击QuartusII软件右上方图标打开SOPCBuilder,创建一个SOPC系统。
填写系统名称为RinningLED_System,并指定VHDL为描述系统的语言,如图5-23。
图5-23添加系统名称并指定语言
4.在系统上添加On-ChipMemory
在程序左侧列表中选择MemoryandMemoryControllers->On-Chip->On-ChipMemory(RAMorROM),双击添加至系统中。
在弹出的对话框中指定片上RAM的属性,因为不需要显示,编译结果很小,保持默认即可。
图5-24指定On-ChipMemory属性
鼠标移动到片内存储器的名称onchip_memonry2.0上并点击右键,在弹出菜单中选择Rename,然后更改名称为onchip_mem。
5.添加NiosIIProcessor
双击AlteraSOPCBuilder->NiosIIProcessor,在弹出的对话框中间选择处理器NIOSII/s;硬件乘法器(HardwareMultiply)选择None,即不需要硬件乘法器;复位向量和异常向量存储器(Memory)均选择前面刚刚添加的片内存储器onchip_mem,此时二者的偏移量(Offset)自动设置为0x0和ox20。
复位向量是指整个系统软件复位后启动的程序地址,一般为非易失存储器。
异常向量是软件的起始地址,一般是易失存储器,如SDRAM等。
如图5-24所示。
图5-25添加CPU设置参数
更改指令缓存(InstructionCache)为2Kbyte,其他地方使用默认设置。
最后点击Finish完成处理器设置。
6.添加定时器
在列表中选择Peripherals->MicrocontrollerPeripherals->IntervalTimer,弹出如下对话框。
定时器在本系统中主要作用是产生一个固定间隔的中断信号,让CPU改变LED灯的状态。
因此在Period中选择500ms,表示灯的状态每500ms改变一次。
更改预置(Presets)选项为Full-featured。
如图5-25。
更改定时器组件名为sys_clk_timer。
图5-26添加定时器并设置参数
7.配置JTAGUART
如图所示,双击组件库中的JTAGUART,添加JTAGUART组件。
更改JTAGUART组件名为jtag_uart。
8.添加IO控制器
双击Peripherals->MicrocontrollerPeripherals->PIO(ParallelI/O),保持默认设置即可,表示有8个输出用IO口,分别控制开发板上的8个绿色LED灯(LEDG[7..0])。
如图5-26。
图5-27添加IO控制器并设置参数
更改PIO组件名为led_pio。
9.配置系统ID
如图所示,双击组件库中的SystemIDPeripheral,添加系统ID组件。
无需做任何设置,直接点击系统ID配置窗口的Finish按纽即可。
不过请注意其中的警告信息。
是的,在配置完成后,务必更改系统ID名称为sysid。
10.完成SOPC工程设计
如图5-28。
图5-28完成的SOPC工程
注意:
系统的每个组件都需要一个地址才能正常工作。
某些组件,如定时器(IntervalTimer)还需要分配一个IRQ号。
如果发现各组件的地址或者IRQ号出现冲突,可以选择菜单栏上System->Auto-AssignBaseAddresses以及System->Auto-AssignIRQs自动设定地址和IRQ。
系统IRQ可以是从0到31的整数,数值越小优先级越高。
9.生成系统
通过点击下方Generate完成。
如图5-29。
图5-29生成系统
5.2.3用符号框图完成顶层实体
10.使用符号框图完成顶层实体
新建一个符号文件,添加刚才建立的SOPC系统。
如图5-30。
图5-30添加SOPC系统
11.添加输入与输出端口
在空白部分双击,在Name框内输入input可以快速定位,添加输入端口。
一共需要两个。
然后使用同样步骤添加一个ouput输出端口。
结果应如图5-31所示。
图5-31添加结果图
将两个输入端分别改名为iCLK_50及iKEY[0],代表开发板上的50MHz晶振和KEY0按钮。
将输出端改名为oLEDG[7..0],代表开发板上的oLEDG7到oLEDG0共8个绿色LED灯。
需要注意的是SOPCBuilder生成的系统的重启信号为低电平有效,开发板上的按键按下后代表低电平,弹起代表高电平。
然后将这几个元件连接起来,硬件电路部分设计完毕。
电路应如下图所示。
(注意:
此处的名称修改应该与DE2-115引脚的配置相一致)。
图5-32电路图
12.保存bdf文件,然后执行分析与综合
13.分配引脚
LEDG[1]
PIN_E22
LEDG[2]
PIN_E25
LEDG[3]
PIN_E24
LEDG[4]
PIN_H21
LEDG[5]
PIN_G20
LEDG[6]
PIN_G22
LEDG[7]
PIN_G21
LEDG[8]
PIN_F17
CLOCK_50
PIN_Y2
KEY[0]
PIN_M23
14.编译下载
编译完成后将程序烧写至FPGA开发板。
由于目前还没有编写软件,因此FPGA实验板上不会有什么现象。
7.4软件设计
15.打开NiosIIIDE,首先选择一个合适的工作空间,依旧设置在<工程所在目录>\softawre。
如图5-33。
图5-33选择工作空间确认以后软件会重新启动
在欢迎界面中选择Workbench,进入主界面。
16.新建一个NIOSIIApplicationandBSPfromTemplate工程。
图5-34选择工程模板
对新建的NIOS2软件工程进行设置。
点击SOPCInformationFilename一栏后的按钮,找到硬件工程所在目录下的.sopcinfo文件,这里硬件和软件之间就是通过这个.sopcinfo文件进行关联。
指定了.sopcinfo文件后,CPUname自动显示为“cpu”。
在Projectname一栏输入软件工程名为“first_swprj”。
使用默认的软件工程存放目录,即在硬件工程目录下生成一个名为software的目录用于存放软件工程。
选择工程模板(ProjectTemplate)中的CountBinary。
然后点击Finish完成工程新建。
等待一会后,如下图所示,在工程目录窗口生成了两个工程,一个是软件应用工程,另一个是bsp工程。
前者用于工程师编写程序;后者一般是系统自动产生,无需用户手动编辑,他主要是根据不同的硬件外设配置产生很多底层驱动相关的程序,在应用层只要调用这些程序就可以了,因此可以说bsp工程的主要作用就是做底层驱动,衔接应用层和硬件层。
17.设置软件编译属性
由于正常的工程模板软件C代码量比较大,而我们所分配的可用片内存储器(onchip_mem)容量也不大(12KBytes),因此需要在软件编译属性里做一些简单的设置,以裁剪代码量,否则编译将无法通过。
代码裁剪不是无依据的随便设置,在官方的edh_ed_handbook.pdfSectionII3.DebuggingNiosIIDesignsReducingCodeSize一节有所描述。
因此,根据文档中推荐的消减代码需要做如下设置。
如下图。
右键点击打开该工程的BSP编辑界面,如下图。
然后弹出如下图所示的BSP编辑界面,在这个编辑界面中按照上面的表格进行设置。
最后需要保存并点击右下角的“Generate”。
完成后退出即可。
17.Project->BuildAll,编译,结果只用了2K。
18.右击blank_project_0,选择RunAs->NiosIIHardware如图5-38。
图5-38下载运行C程序
20.NIOSIIIDE将程序下载到开发板上,之后就能看到8个LEDG灯轮流点亮了。
(注:
素材和资料部分来自网络,供参考。
请预览后才下载,期待你的好评与关注!
)