基于NIOSⅡ的万年历设计

发布时间:2010-8-13 15:34    发布者:lavida
关键词: NIOS , 万年历
摘要: 本文介绍了一种基于片上可编程系统(SOPC)设计万年历的方法。在FPGA 芯片上,通过配置NIOS 软核处理器和相关接口模块,实现了嵌入式系统的硬件结构。系统用液晶模块显示万年历等汉字字符,用8 个七段数码管显示电子钟的日期和时间,并可通过按键对其进行调整。具有高集成度、设计灵活和可移植性较好等特点。  

1 引言  

SOPC代表了当今电子设计的发展方向,它可以将处理器、存储器、I/O接口、硬件协处理器和普通的用户逻辑等系统设计需要的功能模块都集成到一个FPGA芯片里,构建一个可编程的片上系统。它具有软硬件可重构、剪裁和编程等功能,由于同时涉及底层的硬件系统设计和相应的软件设计,在系统优化方面有了前所未有的自由度。  

现在的电子万年历多数采用基于单片机的控制技术,可移植性较差,集成度较低,本文以杭州康芯电子有限公司生产的GW48-PK 系统的64×64 点阵型液晶显示模块LCD GDM12864A 为例,利用NIOSⅡ软核在Altera公司的CycloneEP1C6Q240C8 芯片中,既能实现用户定制的处理器,又能对液晶显示模块和数码管显示进行编程控制。本文在软、硬件开发过程中,通过利用SOPC技术,缩短设计开发周期,节约开发成本,优化性能和资源。  

本文以万年历设计为例,使读者初步了解SOPC的开发过程。  

2 系统硬件设计  

在系统的硬件设计中,FPGA 内部各模块设计是本系统硬件设计的核心技术。FPGA 内部各模块是利用ALTERA 公司的Quartaus Ⅱ开发软件中的SOPC builder 工具对CPU 进行定制,包括CPU 的数据和指令Cache 的大小、CPU 寄存器数量(NIOS Ⅱ 最多可以有512 个寄存器)等。用户可以增加新的外设,新的指令,分配外设的地址等进行定义,完成SOPC 开发的集成过程。将这些设计在Quartaus Ⅱ中编译并生成sof 格式文件后,下载到FPGA 芯片中就形成了SOPC 的嵌入式系统硬件平台。  

对万年历设计来说,需要将本设计所需要的外设添加到NIOS 软核中。NIOS Ⅱ自带的各种IP Core 如按键、七段数码管、LED 等可以直接添加进来。对于LCD,由于SOPC builder 自带的IP 库中并不包含LCD 配置接口模块,所以该模块需要设计者根据要配置的芯片的寄存器特点和功能要求进行专门的设计。本系统的LCD 液晶屏显示器驱动接口在设计时作为普通的外部设备PIO 进行操作,因此液晶屏显示器的数据以及读、写和片选信号等都包括在PIO 总线上。液晶屏显示器以7 个PIO 的形式添加进来,如图1 所示利用SOPC builder 开发工具创建用户定制的NIOSⅡ配置及其地址映射。  






  


然后,用SOPC Builder 将定制转化成为具体的元件,即用户定制的NIOS Ⅱ处理器模块,如图2 所示。最后加入增强时钟稳定性的锁相环和复位输入端最终形成顶层结构,除此之外,SOPC builder 还根据定制的结果,自动生成针对特定硬件环境的C 语言和汇编语言的头文件以及函数库,这在软件设计中会极大的减少软件开发人员的工作量。  



  


3 系统软件设计本系统的软件是在ALTERA 公司提供的软件集成开发工具NIOS Ⅱ IDE 中,以C 语言形式,在硬件抽象层(HAL )函数支持下设计的。它可完成整个软件工程的编辑、编译、调试和下载等过程,极大地提高了软件的开发效率。系统的软件设计主要包括两个部分:液晶显示模块和万年历模块。  

(1)液晶显示模块  

在GDM12864A 液晶屏显示器的应用时,显示屏被分为左右两个区,上下一共八页,在进行访问时,由于纵坐标不好控制,而横坐标自动加一,因此选择由page0—page7 逐行写入数据。即对于32×32 的“万年历”三个字将分4 次写入。而“作者:刘雅斌”这几个16×16 的字符将分两次写入。每个汉字在液晶屏上是以点阵字模形式显示的,每个点用一个二进制位表示。关键算法是利用NIOSⅡ函数控制液晶屏显示器写命令和写数据。写命令和写数据程序如下所示:void LCD_Write_Command(alt_u8 m_Command) // 写命令{ if (!BUSY)  

{ IOWR_ALTERA_AVALON_PIO_DATA(LCD_RS_BASE, 0);// 选择命令 IOWR_ALTERA_AVALON_PIO_DATA(LCD_RW_BASE, 0); // 写信号有效 IOWR_ALTERA_AVALON_PIO_DIRECTION(LCD_DB_BASE,0xff); 数据总线:输出 IOWR_ALTERA_AVALON_PIO_DATA(LCD_DB_BASE, m_Command); 写命令字 IOWR_ALTERA_AVALON_PIO_DATA(LCD_E_BASE, 1); // 使能信号置1 IOWR_ALTERA_AVALON_PIO_DATA(LCD_E_BASE, 0); // 使能信号置0  

}} void LCD_Write_Data(alt_u8 m_Data) //写数据{ if (!BUSY)  

{ IOWR_ALTERA_AVALON_PIO_DATA(LCD_RS_BASE, 1);// 选择数据 IOWR_ALTERA_AVALON_PIO_DATA(LCD_RW_BASE, 0); // 写信号有效 IOWR_ALTERA_AVALON_PIO_DIRECTION(LCD_DB_BASE,0xff); // 数据总线:输出 IOWR_ALTERA_AVALON_PIO_DATA(LCD_DB_BASE, m_Data);// 写入数据 IOWR_ALTERA_AVALON_PIO_DATA(LCD_E_BASE, 1);// 使能信号置1 IOWR_ALTERA_AVALON_PIO_DATA(LCD_E_BASE, 0);// 使能信号置0  

}}  

(2)万年历模块  

这一部分主要实现了万年历的基本功能,即能够显示日期与时间,并具有调整日期和时间的功能。Nios 提供了关于LED、七段数码管和按键进行读写的函数,通过这些函数可以实现日期和时间的显示。例如:  

在LED 上输出显示data 数据的语句格式为:  

IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,data);  

在七段数码管上输出显示data 数据的语句格式为:  

IOWR_ALTERA_AVALON_PIO_DATA(SEVEN_SEG_PIO_BASE,data);  

用变量key 读取按键BUTTON 上的数据的语句格式为:  

Key=IORD_ALTERA_AVALON_PIO_DATA(BUTTON_PIO_BASE);  

以上程序经过在杭州康芯公司的开发板上进行了软、硬件调试,实现了对液晶模块的万年历和作者信息等汉字字符显示,并在LED 上实现了万年历的功能,并能够进行日期和时间的调整。  

3 结论  

本文作者创新点是采用NIOS Ⅱ集成开发环境提供的快捷开发手段,在Cyclone 1C6Q240C8 芯片上创建了一个用户定制CPU 和外设的片上系统,同时完成对液晶显示器和LED 的编程控制。整个系统充分体现了SOPC 设计方法的灵活性,设计时只定制系统需要的外设器件接口,避免过多的外围电路和器件造成体积、功耗的增多和可靠性的下降。由于采用软核结构,方便系统的升级和扩展,而不必硬件改版,节约了成本,加快开发进度,缩短了产品的开发周期。  

综上所述,万年历的设计思想新颖独特,有很多创新之处,具有良好的推广前景和广阔的应用领域.。
本文地址:https://www.eechina.com/thread-21326-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表