摘 要:LCD具有工作电压低、功耗小等优点,因而被广泛应用于电子产品中。LCD驱动电路是液晶显示系统的重要组成部分,常规LCD驱动电路的开发既浪费时间,而且复用性也较差。随着FPGA和SOPC技术的不断成熟,基于IP核的设备驱动设计能够提高产品的设计效率,缩短上市时间,因而受到越来越多开发人员的青睐。本文是基于IP核的LCD控制器的设计。首先,讨论了LCD控制器的设计实现;接着,为LCD控制器添加Avalon总线接口信号,实现与Avalon总线的连接,将其封装成LCD IP核;随后,为了方便软件开发,编写了LCD的驱动函数库;最后,构建了一个包含该IP核的SOPC系统,并且在Nios II IDE环境下,编写程序对该IP核的功能进行验证,结果表明,该IP核的软硬件功能设计正确。
关键词:FPGA,SOPC,LCD,IP 核,Avalon总线
前言
Nios II嵌入式处理器是Altera公司提出的SOPC解决方案,是一种用户可随意配置和构建的32位嵌入式处理器,结合丰富的外设可快速、灵活地构建功能强大的SOPC系统[1],并且其提供了一些通用的IP核,使用非常方便[2],但是在构建SOPC系统时,这些IP核都是受知识产权保护的,费用比较高。如果设计一个基于Avalon总线的LCD控制器IP核,这样对于构建一个具有显示系统的SOPC系统,就比较具有实际意义。本文在基于Nios II的SOPC系统中设计了LCD显示驱动IP核,并下载到Cyclone系列的FPGA中,实现了对LCD的显示驱动。
1 系统开发流程
(1)了解开发板上的LCD显示屏的规格原理。
(2)在Quartus II 8.1软件环境下进行LCD控制器的实现。
(3)将实现的LCD控制器在SOPC Bulider下封装成为IP核。
(4)建立LCD驱动函数库。
(5)搭建模拟测试硬件系统。
(6)搭建模拟测试软件系统。
2 LCD IP核的设计与实现
2.1 LCD驱动模块的实现
2.1.1 设计思路
LCD控制器的实现共包含三个部分,分别是LCD初始化模块,LCD显示模块,LCD显示顶层模块。LCD显示顶层模块用于连接初始化与显示模块,其中LCD初始化完成后会有一个使能信号,来驱动LCD显示模块工作,通过顶层文件连接初始化与显示模块两部分使得该系统可以正常工作。
2.1.2 LCD初始化模块实现
LCD初始化主要是对LCD模块的寄存器进行初始化,也就是给寄存器写入预设的数据,使得LCD可以正常工作。首先确定一系列输入输出信号,比如输入有时钟信号,复位信号,输出有RS,RW,数据位等,通过把50MHz时钟信号进行分频,产生大于15ms,4.1ms,100us的时钟信号,然后使用状态机进行一系列的赋值工作,当状态机进行到最后一个状态,即模式设置状态,将初始化完成信号赋值为1,代表初始化完成。
2.1.3 LCD显示模块实现
LCD显示模块主要是控制LCD正常工作,通过8位的数据输入,然后在LCD显示该8位数据代表的字符。首先LCD显示模块必须是在LCD初始完成后才能正常工作,所以LCD初始模块初始完成信号便是LCD显示模块的使能信号,通过一系列状态,比如清屏状态,功能设置状态等,使得输入的八位数据可以到达输出部分,并且在每个状态中对RS,RW等LCD的功能引脚进行赋值,以达到在合适的时候,将合适的指令与数据送到对应的引脚。这样才能确保LCD显示模块正常工作。
2.1.4 顶层模块的实现
首先,完成LCD初始模块与LCD显示模块的编码,然后通过各种器件进行连接,其中LCD初始化完成后会产生一个LCD初始化完成信号,来驱动LCD显示模块工作,LCD初始化与LCD显示模块的输出都要进入一个扩展模块,除了LCD初始模块的初始化完成后的信号,将两个模块的输出通过两个扩展模块后,再进入到一个二选一数据选择器中,数据选择器的选择信号量为初始化的完成信号,最后,将选择得到的数据进行拆分,分别输送到LCD的功能引脚,LCD的控制器到此完成。
2.2 LCD IP核的封装
在LCD IP核的封装过程中,首先要了解Avalon总线常用信号接口,这样才能确保LCD控制器信号量与Avalon总线连接的正确性;接着,将顶层模块中的 clk、reset_n、chipselect、address、data、write、writedata、export、read data等信号与Avalon总线信号接口对应相连,同时顶层模块将LCD显示屏的初始化模块与显示模块连接起来,使得LCD显示屏可以正常的工作;最后在SOPC Bulider中,将LCD IP核设置为组件,实现LCD IP核的封装。
2.3 建立LCD驱动函数库
LCD驱动函数库主要为了方便开发人员对该LCD IP核的使用。
3 LCD IP核功能验证
3.1 模拟测试系统的设计思路
要验证LCD IP核的功能,首先搭建一个包含该IP核的模拟测试硬件系统,然后搭建一个模拟测试软件系统,通过两部分的协作,来实现验证功能。
3.2 搭建模拟测试硬件系统
模拟测试硬件系统是将自定义的LCD IP核添加到一个具有Nios II处理器、JATG UART、RAM,PIO组件的SOPC系统中,在此过程中要添加两类PIO,分别是输入PIO,中断PIO,输入PIO的主要是进行数据的输入,中断PIO主要是产生中断信号,接着设置Nios II处理器的异常中断与复位地址,自动分配地址与中断号,最后生成SOPC系统,添加输入输出,重命名,编译综合,完成后进行引脚分配,再次综合,到此,一个完整的模拟测试硬件系统便搭建完毕。
3.3 搭建模拟测试软件系统
模拟测试软件系统主要是在模拟测试硬件系统的基础上,通过调用LCD驱动函数来实现对LCD IP核的功能进行验证。通过在Nios II IDE中创建NIOS II C/C++Application,编译该工程,配置和编译完成后,出现一系列与硬件系统相关的文件,之后进行主函数的编写,通过调用LCD驱动函数和中断技术来实现功能,在主函数中,首先在中断初始化程序中对中断服务程序进行注册,当捕获到中断时,便进入中断服务程序,在此过程中,先得到输入PIO的值,然后设定一个计数器来表示LCD字符的位置,先把字符显示在LCD显示屏第一行,当计数器大于15时,便把字符显示在LCD显示屏的第二行,当计数器等于31时,将计数器清零,继续把字符显示在LCD显示屏第一行第一个位置,这样便把输入的值通过中断显示在LCD显示屏上,通过拨动开关产生相对应字符的Ascll码,按下中断按键后,对应的字符便会显示在LCD显示屏上。