《SOPC课程设计实验报告--万年历》由会员分享,可在线阅读,更多相关《SOPC课程设计实验报告--万年历(11页珍藏版)》请在金锄头文库上搜索。
1、 FPGA-CPLD原理及应用课程设计报告 题目: 万年历 学院: 信息与电子工程学院专业: 电子科学与技术学号: 姓名: 指导老师: 时间:2013-7-152013-7-201一、摘要本文介绍了一种基于片上可编程系统(SOPC)设计万年历的方法。本次设计从系统硬件出发,由CPU,总线,RAM,外接设备等构成SOPC Builder的硬件系统,通过Nios II DE2开发的嵌入式软件编写并嵌入SOPC Builder的硬件中实现万年历的整体开发。通过应用SoPC Builder开发工具,设计者可以摆脱传统的、易于出错的软硬件设计细节,从而达到加快项目开发、缩短开发周期、节约开发成本的目的并
2、具有高集成度、设计灵活和可移植性较好。关键词:万年历 SOPC SOPC Builder Nios II DE2二、设计要求 用Nios II DE2 开发板的LCD显示电子钟的日期和时间。LCD分两行显示,第1行显示年、月、日;第2行显示时、分、秒。用输入BUTTON0来控制LCD行的修改,同时让Nios II DE2开发板上的绿色发光二极管亮灭来表示这个选择。当BUTTON0按一下后,LEDG3亮,可以修改年、月和日的数字;再按一下BUTTON0后,LEDG3灭,可以修改时、分和秒的数字。另外用输入按钮BUTTON3来控制日期和时间的修改,当处于日期修改方式时,每次按动一次BUTTON3,
3、依次更换“年”、“月”和“日”的修改。当处于时间修改方式时,每次按动一次BUTTON3,依次更换“时”、“分”和“秒”的修改。修改对象被选中后,按动BUTTON2输入按钮可以增加显示的数字;按动BUTTON1输入按钮可以减少显示的数字。三、设计内容1、按键信息BUTTON3:“年”、“月”、“日”或“时”、“分”、“秒”切换键BUTTON2:+键BUTTON1:-键BUTTON0:“年”、“月”、“日”与“时”、“分”、“秒”切换键显示信息LCD_Line1:显示“年”、“月”、“日” LCD_Line1:显示“时”、“分”、“秒”2、SOPC Builder 硬件建立 SOPC Builde
4、r是在Quartus II里的SOPC Builder进行的,先建立工程,在SOPC Builder里添加硬件,包括CPU ,jtag_uart ,RAM,LCD,PIO,按键,LED,以及LCD_ON。3、Quartus II硬件处理 硬件会自动建立一个顶层模块,通过建一个原理图来对对应的硬件进行输入输出的添加,再锁定引脚,编译工程,硬件下载。 4、Nios II DE2嵌入软件编写 在Nios II里建立工程,选择相应的模块,编写需要嵌入的软件,添加缺少的头文件对应的宏定义,编译工程,进行软件下载,在观察结果。四、设计步骤1、打开Quartus II新建工程2、打开SOPC Builder
5、生成相应的硬件如图所示 建立好后点击Generate运行,看是否出错,然后点击exit退出。 3、调用刚才生成的硬件系统,在Quartus II中建立图形文件,然后进行引脚锁定。引脚锁定引脚文件如下:#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_loca
6、tion_assignment PIN_V18 -to led3set_location_assignment PIN_W19 -to led2set_location_assignment PIN_AF22 -to led1set_location_assignment PIN_AE22 -to led0set_location_assignment PIN_W26 -to KEY3set_location_assignment PIN_P23 -to KEY2set_location_assignment PIN_N23 -to KEY1set_location_assignment PI
7、N_G26 -to KEY0set_location_assignment PIN_K4 -to LCD_RWset_location_assignment PIN_K3 -to LCD_ENset_location_assignment PIN_K1 -to LCD_RSset_location_assignment PIN_L4 -to LCD_ONset_location_assignment PIN_J1 -to LCD_DATA0set_location_assignment PIN_J2 -to LCD_DATA1set_location_assignment PIN_H1 -to
8、 LCD_DATA2set_location_assignment PIN_H2 -to LCD_DATA3set_location_assignment PIN_J4 -to LCD_DATA4set_location_assignment PIN_J3 -to LCD_DATA5set_location_assignment PIN_H4 -to LCD_DATA6set_location_assignment PIN_H3 -to LCD_DATA7 然后进行编译,在Quartus I下生成文件如下图:4、 Nios II运行打开Nios II IDE2,建立工程,选择count_bin
9、ary模块,添加一个LCD.h的顶层文件。LCD.h的顶层文件为:#ifndef _LCD_H_#define _LCD_H_/LCD Module 16*2#define lcd_write_cmd(base,data) IOWR(base, 0, data)#define lcd_read_cmd(base) IORD(base, 1)#define lcd_write_data(base,data) IOWR(base, 2, data)#define lcd_read_data(base) IORD(base, 3)/=void LCD_Init();void LCD_Show_Tex
10、t(char*Text);void LCD_Line2();void LCD_Test();/=#endif /_LCD_H_然后建立count_binary的C+文件。C+文件见附件。5、 连接开发板,将文件下载到开发板,运行文件检验是否正确。6、 检查错误并修改,知道结果正确。五、运行情况与问题分析1、建立工程时,注意不能出现中文或者空格,且工程名需与文件名一致,选定芯片;2、在生成CPU硬件系统时,定义端口时,需注意设定端口输入与输出的位宽,需与程序定义的数值一致,否则运行溢出报错,须修改;3、建立图形文件后,需进行编译,出现错误得返回原理图核对,找到错误修改后重新编译;4、进行引脚锁定
11、时,注意引脚文件的编写,否则选择引脚文件点击Run后会不成功,从而影响后面程序的调试; 5、当日数为31时,调节月份日期不会随机改变,就会出现4月31日等错误,加入程序段但是还是没有完成跳变; 6、程序中闪烁程序段、跳变程序段不执行,程序还需后续修改。 六、结论采用NIOS集成开发环境提供的快捷开发手段,在EP4CE115F29C7N芯片上创建了一个用户定制CPU和外设的片上系统,同时完成对液晶显示器和LED的编程控制。整个系统充分体现了SOPC设计方法的灵活性,设计时只定制系统需要的外设器件接口,避免过多的外围电路和器件造成体积、功耗的增多和可靠性的下降。由于采用软核结构,方便系统的升级和扩
12、展,而不必硬件改版,节约了成本,加快开发进度,缩短了产品的开发周期。综上所述,万年历的设计思想新颖独特,有很多创新之处。 七、心得体会 经过本次SOPC课程设计实验,使我更加熟悉了Quartus 与Nios DE2以及开发板的使用,熟练掌握了从理论设计到硬件开发的流程,了解了万年历通过编程实现的整个过程。从整个实验实现的过程中,碰到一些以前未出现过的问题,在自己的努力以及同学、老师的帮助下,使自己的理论及操作水平有所提高,在此我要郑重感谢指导老师。附 件C+程序代码如下:/* * Hello World example. * * This example prints Hello from N
13、ios II to the STDOUT stream. It runs on * the Nios II standard, full_featured, fast, and low_cost example * designs. It runs with or without the MicroC/OS-II RTOS and requires a STDOUT * device in your systems hardware. * The memory footprint of this hosted application is 69 kbytes by default * usin
14、g the standard reference design. * * For a reduced footprint version of this template, and an explanation of how * to reduce the memory footprint for a given application, see the * small_hello_world template. * */#include #include altera_avalon_pio_regs.h#include alt_types.h#include system.h#ifndef _LCD_H_#define _LCD_H_/LCD Module 16*2#define lcd_write_cmd(base,data) IOWR(base, 0, data)#define lc