已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
万年历的设计一、实验目标 1. 巩固对基本的开发流程的掌握2. 复习对QUARTUS II软件的使用3. 复习NIOS II软件的使用4在训练掌握相关软件使用的基础上,完成课题的设计二、设计要求用Nios II DE2开发楹的LCD(或8个七段数码管)显示电子钏的日期和时间。LCD分两行显示,第1行显示年、月和日(例如显示:20080101);第2行显示时、分和秒(例如显示:00152545)。用输入按钮BUTTON0来控制LCD行修改,同时让Nios II DE2开发板上的绿色发光二极管LDG3的亮与灭来表示这个选择。当BUTTON0按下一次后,LDG3亮,可以修改年、月和日的数字;再按一次BUTTON0后,LDG3灭,可以修改时、分和秒的数字。另外和输入按钮BUTTON3来控制日期和时间的修改,当处于日期修改方式时,每按动一次BUTTON3按钮,依次更换“年”、“月”和“日”的修改。当处于时间修改方式时,每按动一次BUTTON3按钮,依次更换“时”、“分”和“秒”的修改。修改对象被选中后,按动BUTTON2输入按钮可以增加显示的数字;按动BUTTON1输入按钮可以减少显示的数字。三、实验原理与步骤 在QUARTUS II 中建立工程 用SOPC BUILDER建立NIOS系统模块 在QUARTUS II 中的图形编辑界面中进行管脚连接、锁定工作 编译工程后下载到FPGA中 在NIOS II IDE中根据硬件建立软件工程 编译后,经过简单设置下载到FPGA中进行调试、验证下面根据以上的步骤进行进行一次全程开发:第一步:硬件部分设计1. 在自己的文件目录下建立一个hello_led文件夹,注意目录中不能有空格或中文;2. 打开QUARTUS II,点击FILE菜单下的New Project Wizard会弹出如图2-1所示的对话框:图2-1 建立工程3. 然后输入工程存放目录,或点击工程路径右面的按钮设置工程存放目录,在第二栏中输入工程名称,我们这里输入为led;之后点击Finish,对话框消失,此时已经建立好了LED工程文件;4. 点击Assignment菜单中的Device,选择芯片为Cyclone II系列的EP2C35F672C6,如下图2-2所示:图2-2 选择器件5. 确认后。点击Tools下拉菜单下的SOPC Builder工具,出现如图2-3所示对话框:图2-3 设定名称6. 在系统名称(System Name)填写为nios_led,选择语言后点击OK,在Device Family中选择所要使用芯片的系列,我们所用的Cyclone II,系统频率设为50MHz,在Board中暂时先不做选择,使用Unspecified Board;如下图2-4所示:图2-4 设定芯片及系统时钟7. 在左边元件池中选择元件:我们这个设计工程需要使用NIOS 32BIT CPU、调试串口、ledPIO、RAM,首先选择如下图2-5所示的Nios processor,这个是NIOS处理器,双击会弹出如图2-6所示对话框:图2-5 选择NIOS II图2-6 NIOS II设置在JTAG Debug Module栏中选择Level 1,点击Finish按钮后返回SOPC Builder窗口,将CPU_0重新命名为CPU,如下图2-7所示:图2-7 重命名CPU注意:对模块命名要遵循如下规则: 名字最前面应该使用英文; 能使用的字符只有英文字母、数字和“_”; 不能连续使用“_”符号,在名字的最后也不能使用“_”。8. 添加JTAG UART Interface:此接口为NIOS II系统嵌入式处理器新添加的接口元件,通过它可以在PC主机和SOPC Builder系统之间进行串行字符流通讯,主要用来调试、下载数据等,也可作为标准输出、输入来使用; 选择Communication - JTAG UART加入,会出现设置向导,如图2-8所示:图2-8 加入JTAG UART 保持默认选项,单击Finish,返回SOPC Builder窗口。 将jtag_uart_0重新命名为jtag_uart。9. 添加内部RAM:RAM为程序运行空间,类似于电脑的内存,此空间越大越有利;在EP2C35F672C6这个元件中建议使用4Kbytes; 选择Memory - On-Chip Memory,双击加入,会出现如下图2-9所示设置向导:图3-9 设置内部RAM作为系统内存 设置后如上图所示,点击Finish,返回到SOPC Builder窗口,重新命名为RAM;10. 加入led_PIO:此元件为I/O口,和单片机中的I/O口类似,用户可以根据需要配置选项; 选择Other-PIO,双击加入,会出现如下图2-10所示设置向导:图2-10 加入LED_PIO 将Widths位宽改为4 bits; 选择Output ports noly,点击Finish,重新命名为led_pio。11. 指定基地址和分配中断号:SOPC Builder会给用户的NIOS II系统模块分配默认的基地址,用户也可以更改这些默认地址; 选择System下拉菜单中的Auto-Assign Base Address; 选择System下拉菜单中的Auto-Assign IRQs;12. 系统设置:选择More “CPU” Settings,按照下图2-11所示对系统进行设置:图2-11 设置系统运行空间13. 生成系统模块: 选择System Generation栏,如图2-12所示: 在System Generation中选中HDL选项,如果安装了Modelsim软件并需要仿真设计,可以选择Simulation选项。图2-12 生成CPU 点击Generation,SOPC Builder根据用户设定不同,而在生成过程中所执行的操作不同,在系统生成后点击“Exit”退出SOPC Builder。14. 将刚才生成的模块以图标形式添加到BDF文件中:在SOPC Builder生成的过程中,会生成系统模块的图标(Symbol),可以将该图标像其它QUARTUS II图标一样添加到当前项目的BDF文件中。步骤如下: 单击File- New,弹出如下图2-13所示的对话框:图2-13 加入原理图输入文件 选择Block Diagram/Schematic File,如上图所示,点击OK; 在图中单击右键,选择Insert- Symbol,如下图2-14所示:图2-14 加入系统顶层文件 在如下图2-15所示的弹出对话框中选择Project-nios_led,双击加入;图2-15 加入生成的NIOS II 32BIT CPU模块点击保存,系统会自动命名为led,不要对此文件名再作更改; 将模块与输入输出接口相连,连接后如下图2-16所示:图2-16 顶层文件图 锁定管脚:新建引脚锁定命令文件,File-New - Other Files - Tcl Script File,如下图2-17所示:图2-17 新建引脚锁定命令文件文件的格式和内容如下:#Setup.tcl#Setup pin settingset_global_assignment -name RESERVE_ALL_UNUSED_PINS AS INPUT TRI-STATEDset_global_assignment -name ENABLE_INIT_DONE_OUTPUT OFFset_location_assignment PIN_N2 -to clkset_location_assignment PIN_G26 -to rstset_location_assignment PIN_AE23 -to led3set_location_assignment PIN_AF23 -to led2set_location_assignment PIN_AB21 -to led1set_location_assignment PIN_AC22 -to led0set_location_assignment PIN_W26 -to KEY1set_location_assignment PIN_P23 -to KEY0写好之后,点击保存按钮。假如保存的文件名为Tcl_script1.tcl,需要放到当前的工程目录下。如图2-18所示:图2-18 添加引脚锁定命令文件到工程目录然后选择Tools - Tcl Scripts,会弹出如图2-19所示的对话框,选择Tcl_script1.tcl,然后点击RUN,管脚约束与锁定就会自动加入了。图2-19 运行TCL脚本文件对管脚进行锁定 编译工程:选择Process-Start Compilation命令对工程进行编译;15. 配置FPGA:接上实验板电源、连上USB下载线,将编译生成的SOF文件下载到目标板上,选择Tools- Programmer目标文件夹下载,选择USB-Blaster模式,通过JTAG口对FPGA进行配置,如图2-20所示:图2-20 下载配置文件第二步:软件部分设计1. 打开NIOS II IDE,会弹出工作环境路径选择,点击右边的Browse按钮选择自己的工程所在的文件夹,如图2-21所示:图2-21 工作环境路径选择2. 选择菜单File - New - Project,会弹出如下图2-22所示对话框:图2-22 添加新工程3. 选择C/C+ Application,如上图所示,点击Next,会弹出图2-23所示对话框:图2-23 选择现有工程实例4. 在Select Project Template中选择Hello LED;在SOPC Builder System中选择我们刚才建立好的工程,CPU栏会自动选择,如上图所示,点击Finish,系统会自动生成一个循环点亮LED的软件工程。代码如下:#include system.h#include altera_avalon_pio_regs.h#include alt_types.hint main (void) _attribute_ (weak, alias (alt_main);int alt_main (void) alt_u8 led = 0x2; alt_u8 dir = 0; volatile int i; while (1) if (led & 0x81) dir = (dir 0x1); if (dir) led = led 1; else led = led 1; IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led); i = 0; while (i RUN,系统会自动探测到JTAG连接电缆,并弹出如下图2-25所示对话框:图2-25(a) 自动探测电缆如果在Configurations栏中的Nios II Hardware前面没有“+”号(如图2-25(a)所示),就用鼠标左键双击Nios II Hardware进行电缆自动探测;成功后如下图2-25(b)所示:图2-25(b) 自动探测电缆7. 在Main列表中的Project中选择我们刚才建立的工程hello_led_0,在Target Connection中选择所要使用的电缆,如本实验板使用的USB-Blaster,如下图2-26所示:图2-26 选择电缆、设置通讯接口8. 其它部分使用默认选项,点击RUN后,目标板上的灯就会出现逐个点亮的状态。9. 如何要使用Debug进行单步、断点等调试,选择RUN - Debug,其它步骤类似于上面的RUN - RUN操作过程。四、实验总结与思考1. 如何实现LED灯逐个熄灭的控制程序?请自己更改程序进行尝试。2. 函数IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led)如何使用你是否能够理解?实验三 按键控制指示灯实验一、实验目标 1. 掌握基本的开发流程2. 熟练掌握QUARTUS II软件的使用3. 进一步熟悉NIOS II软件的使用4. 熟悉基本I/O口的软件编程方法二、实验内容使用2个按键作为输入,4位LED灯作为输出。按下1号键4个LED正向循环点亮;按下2号键4个LED反向循环点亮;无键按下时,第1、3个LED点亮,第2、4个LED熄灭;两个键同时按下时,4个LED全部点亮。三、实验原理与步骤1. 具体实验步骤请参考“实验二 流水灯实验”。 与“流水灯实验”的不同之处在于: 在SOPC Builder中生成CPU时,需要加入两位仅为输入的key_pio接口,如图3-1所示: 图3-1 加入key_pio接口 生成的顶层原理图如图3-2所示。引脚锁定的文件的编写请参考实验二,注意要加入两个按键接口的引脚锁定。图3-2 顶层原理图2. NIOS II软件程序还是采用Hello LED模块,并对其中的程序进行修改,加入对输入按键的检测与判读等操作。示例代码如下:#include system.h#include altera_avalon_pio_regs.h#include alt_types.hint main (void) _attribute_ (weak, alias (alt_main);int alt_main (void) alt_u8 led = 0x2; alt_u8 dir = 0; alt_u8 keydat = 0x03; volatile int i; while (1) keydat = IORD_ALTERA_AVALON_PIO_DATA(KEY_PIO_BASE); if(keydat & 0x03) = 0x01) dir = 1; else if(keydat & 0x03) = 0x02) dir = 0; else dir =2; if (dir = 1) led = led 1; if(led = 0x00) led = 0x80; else if(dir = 0) led = led 1; if(led = 0x00) led = 0x01; else led = 0x05; IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led); i = 0; while (i File,准备建立一个新的C语言源文件,方法如图4-4 所示。 图4-4 建立新的源文件4. 然后编写软件代码如下:#include alt_types.h#include #include system.h#include sys/alt_irq.h#include altera_avalon_pio_regs.h#include #include volatile int edge_capture;alt_u8 flag;static void handle_key_interrupt(void* context, alt_u32 id) /* Cast context to edge_captures type. It is important that this be declared volatile to avoid unwanted compiler optimization. */ /* 将edge_capture与*context对应起来 */ /* 设置为volatile 是为了避免下面的指令被编译器给优化掉 */ volatile int* edge_capture_ptr = (volatile int*)context; /* Store the value in the Buttons edge capture register in *context. */* 读取按键中断边沿捕捉寄存器中的值 - *context (这里就等于*edge_capture_ptr) */ *edge_capture_ptr = IORD_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO_BASE); /* Reset the Buttons edge capture register. */ /* 清0 边沿捕捉寄存器中的值 */ IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO_BASE, 0); flag = 1; /中断产生标志置1static void init_key_pio() /* Recast the edge_capture pointer to match the alt_irq_register() function prototype. */* 准备将寄存器 edge_capture作为中断注册函数alt_irq_register的一个输入参数*/ void* edge_capture_ptr = (void*)&edge_capture; /* Enable all 4 button interrupts. */ /* 使能4个按键的中断 */ IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY_PIO_BASE, 0xf); /* Reset the edge capture register. */ /* 清0 边沿捕捉寄存器中的值 */ IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO_BASE, 0x0); /* Register the interrupt handler. */ /* 对中断函数进行注册 */ alt_irq_register(KEY_PIO_IRQ,edge_capture_ptr,handle_key_interrupt);int main (void) _attribute_ (weak, alias (alt_main);int alt_main(void) alt_u8 led = 0x0; flag = 0; alt_irq_init(ALT_IRQ_BASE); /使能中断 (很重要,相对于总的中断开关) init_key_pio(); while(1) if(flag) flag = 0; switch(edge_capture) case 0x01: led = led 0x01; break; case 0x02: led = led 0x02; break; case 0x04: led = led 0x04; break; case 0x08: led = led 0x08; break; default: led = 0x0f; /将led的值写入到led对应的硬件寄存器(LED_PIO_BASE)中 IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led); return 0;注:下面的函数不容易理解因为它们与硬件有很大的相关性:IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY_PIO_BASE, 0xf);IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO_BASE, 0x0);IORD_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO_BASE);IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led);alt_irq_reg
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全员线上安全培训通知模板课件
- 全员安全培训内容记录课件
- 北辰职业规划发展指南
- 职业生涯规划与发展指南
- 食品博士女生就业指南
- 职业规划与路径设计
- 全体教职工安全培训课件
- 车辆安全用品清单讲解
- 人工智能利弊深度剖析报告
- 光电效应课件介绍
- 2025年中国成年人智能拐杖行业市场全景分析及前景机遇研判报告
- 新专业申报课件
- 幼儿午睡环节规范管理培训大纲
- 国机数字科技有限公司招聘笔试题库2025
- 2025年药学药物治疗合理应用测试卷答案及解析
- 联通通信传输管理办法
- 第12课-甲午中日战争
- 2025年国家电网县公司“光伏+储能”项目经理竞聘笔试专项练习含答案
- DBJT15-104-2015 预拌砂浆混凝土及制品企业试验室管理规范
- 口腔服务技巧培训课件
- 学堂在线 雨课堂 学堂云 临床中成药应用 章节测试答案
评论
0/150
提交评论