基于 Spartan3E的 LCD IP核设计与实现
作 者:杜黎 贾立伟
指 导 教 师:解永平 副教授
研 制 单 位:大连理工大学
基于Spartan-3E的LCD IP 核设计与实现
- I -
目 录
1 设计介绍 ................................................................................................................................. 1
2 功能描述 ................................................................................................................................ 2
3 设计
架构
酒店人事架构图下载公司架构图下载企业应用架构模式pdf监理组织架构图免费下载银行管理与it架构pdf
................................................................................................................................ 3
4 各模块详细描述 .................................................................................................................... 4
4.1 C 语言数据写入寄存器模块 ...................................................................................... 4
4.2 分频模块 ...................................................................................................................... 5
4.3 字节传输模块 .............................................................................................................. 6
4.4 UCF 文件 ..................................................................................................................... 9
4.5 波形仿真 .................................................................................................................... 10
4.6 C 语言验证模块 ........................................................................................................ 11
5
总结
初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf
....................................................................................................................................... 12
参 考 文 献 ............................................................................................................................ 13
基于Spartan-3E的 LCD IP核设计与实现
–1–
1 设计介绍
设计目的:基于 Spartan-3E 的 LCD IP 核设计与实现
IP 内核是具有知识产权的集成电路芯核的简称,其作用是把一组拥有知识产权的
电路设计集合在一起,构成芯片的基本单位,以供设计时搭积木之用。其实可以把 IP 理
解为一颗 ASIC,以前是 ASIC 做好以后供人家在 PCB 上使用,现在是 IP 做好以后让
人家集成在更大的芯片里。一般而言,IP 可以分为两种形式:软核和硬核。两种方式都
可使客户获得在功能上经过验证的设计。软核也被称为可综合内核,需要客户进行综合
并在其 SOC 上实现。而硬核已完全实现,IP 供应商将直接给出其设计版图,且通常可
以直接用于制造。在 SOC 项目中,实现的意思是指该 IP 安排布局等处理后可以直接投
入生产,SOC 设计者只需将硬核像一个集成电路模块那样置入芯片即可。本设计所要制
作的 LCD IP 核是一个软核。
本设计是所应用的设计平台是 Xilinx 公司推出的 Spartan-3E 开发板。在 Spartan-3E
开发板上所提供的各个部件的 IP 核中,缺少 LCD 的 IP 核。因此,本设计就是要在
Spartan-3E 开发板上制作 LCD IP 核已完成 LCD 显示的功能。本设计的思路大体可以分
为 LCD IP 核模版生成,LCD IP 核的完成即 LCD 时序的实现,时序的仿真和 LCD IP 核
的验证。
LCD IP 核的完成需要了解 LCD 时序,并使用 VHDL 来实现出 LCD 的时序原理。
还需要了解 LCD 的各个管脚与 FPGA 管脚的连接,并在 UCF 文件中加入各个管脚的映
射关系。
在制作完成 LCD IP 核后,就需要对所编写的 VHDL 进行仿真检验以来观察是否符
合所要求的时序,仿真所要使用到软件是 ISE 和 Modelsim。
在仿真正确后,就可以调用所制作的 LCD IP 核,并通过编写 C 语言来进行验证。
基于Spartan-3E的 LCD IP核设计与实现
–2–
2 功能描述
图 2.1 说明了一个由 Microblaze 控制系统的实例,其主要是说明数据的传输过程,
数据通过 C 语言由 UART IP 控制通过 UART 输入到 FPGA 的指定位置,再由 Microblaze
进行控制以送到 LCD IP 的指定位置,最后由 LCD IP 按照 LCD 的时序送到 LCD 控制器。
本设计就是由 Microblaze 微控制器进行控制,通过 C 语言将数据送入到 LCD IP 中指定
的寄存器,在经过 LCD IP 的处理,按照 LCD 的要求送入到 LCD 中,首先要通过 C 语
言达到对 LCD 初始化的要求,再通过 C 语言设置显示的首地址,最后便可以将要显示
的单个字符或字符串显示在 LCD 上。在输入要显示的数据是,可以直接输入要显示的
字符而不需要输入 ASCII,即起到了方便用户的作用。还提供了初始化的程序
模板
个人简介word模板免费下载关于员工迟到处罚通告模板康奈尔office模板下载康奈尔 笔记本 模板 下载软件方案模板免费下载
,用
户只要根据自己的需要按照模板进行初始化的设置。如设置显示的首地址,显示的各种
方式等。
Microblaze
UART IP
LCD IP
UART
Data
Opb
LCD
FPGA
图 2.1 实例
基于Spartan-3E的 LCD IP核设计与实现
–3–
3 设计架构
整个设计的架构可以分为软件和硬件两部分,软件部分即为 C 语言部分,负责对 LCD
的初始化和数据的输入。硬件部分则可以分为 user logic 和 ipif 两部分,user logic 文件
是用户实现逻辑的,用户需要将某一器件的工作原理或时序用 VHDL 语言来实现。在本
设计中,就是要满足 LCD 的时序图的要求。ipif 是 user logic 与 opb 总线之间相连接的
接口电路,两者之间的关系如图 3.1 所示。对于端口的选择,本实验在 user logic 中定义
了四个输出端口,即 LCD_E,LCD_RS,LCD_RW 和 lcddata_out[7:0]。这 user logic 中四
个输出端口还需要映射到 ipif 中的端口才能最后连接到 opb 总线上。对于寄存器个数的
选择,在本设计中,选择两个 32 位的寄存器,slv_reg0 和 slv_reg1。Slv_reg0 作为字节
的传输,不论是指令字节还是数据字节都送入 slv_reg0。而 slv_reg1 中可选择后三位来
作为传输准备位和指令或是数据的选择位。
图 3.1 user logic 于 ipif 关系
基于Spartan-3E的 LCD IP核设计与实现
–4–
4 各模块详细描述
4.1 C 语言数据写入寄存器模块
C 语言的数据要送入到寄存器 0 即 slv_reg0 或寄存器 1 即 slv_reg1
流程图如图 4.1 所示
在此流程图中,总线数据即为程序中的 Bus2IP_Data,也就是 C 语言要写入的数据。
复位信号即为程序中的 Bus2IP_Reset,当 Bus2IP_Reset = '1'时,就可以将 reg0,reg1
清 0。寄存器选择信号即为程序中的 slv_reg_write_select 信号,当 slv_reg_write_select
为 10 时选择寄存器 0(slv_reg0),当为 01 时选择寄存器 1(slv_reg1),他们对应的寄存
器地址为 C_BASEADDR + 0x0 和 C_BASEADDR + 0x4,C_BASEADDR 为所选择的寄
存器的基地址,基地址的值可以在 EDK 中设定,需要注意的是 LCD 核所用的基地址不
能和其它核所用到的基地址有所冲突。字节使能信号为一个四位的端口,即为程序中的
Bus2IP_BE,在此程序中,使用了一段循环程序来完成 32 位数据的传输,具体的程序模
块如下:
for byte_index in 0 to (C_DWIDTH/8)-1 loop
if ( Bus2IP_BE(byte_index) = '1' ) then
slv_reg1(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to
byte_index*8+7);
end if;
end loop;
当 Bus2IP_BE(0)=1 时,传输 Bus2IP_Data(0 to 7)。
当 Bus2IP_BE(1)=1 时,传输 Bus2IP_Data(8 to 15)。
当 Bus2IP_BE(2)=1 时,传输 Bus2IP_Data(16 to 23)。
当 Bus2IP_BE(3)=1 时,传输 Bus2IP_Data(24 to 31)。
通过以上的模块,就可以将 C 语言要写入的数据通过总线传输到寄存器中,以待继续接
下的工作。
基于Spartan-3E的 LCD IP核设计与实现
–5–
图 4.1 C 语言数据写入寄存器模块
4.2 分频模块
如图 4.2 所示,从 LCD 的时序图可以看到,一个字节的高四位和低四位之间至少要
间隔 1us,而 Spartan-3E 板所提供的时钟为 50MHz,因此,需要做一个分频电路来产生一
个周期为 1us 的时钟信号。于是就可以在向 LCD 送数的电路中就可以用此分频的时钟
信号来完成。
编写的程序如下:
基于Spartan-3E的 LCD IP核设计与实现
–6–
signal clk_temp: std_logic:='0';
fdiv : process(Bus2IP_Clk)
variable count : integer range 0 to 30 :=1;
begin
if Bus2IP_Clk'event and Bus2IP_Clk='1' then
if count = 25 then
count := 0;
clk_temp <= not clk_temp;
else
count :=count +1;
end if;
end if;
end process fdiv;
图 4.2 LCD 时序图
程序中 Bus2IP_Clk 即为 Spartan-3E 所提供的 50MHz,clk_temp 即为所要使用到的
周期为 1us 的时钟信号。
4.3 字节传输模块
在将 C 语言要写入的数据送入寄存器和分频信号产生之后,就可以按照 LCD 的时
序将要用到的 8 位数据送入到 LCD 中。因为此流程图比较大,所以将分两部分来表示。
第一个即为整体流程模块,第二个为四字节的传输数据模块。
整体模块流程图如图 4.3 所示:
在流程图中的 statecontrol 被定义为 std_logic_vector(1 down0)型的变量,它被用来存储寄
存器 1 中的第 30 和第 31 位,即 statecontrol :=slv_reg1(30 to 31),它的作用是用来判别
向寄存器 0 中写入的数据是需要显示的数据或是指令数据或是需要进行其它的操作,流
程图中的 trans_flag 被定义为 std_logic 型的变量,它被用来存储寄存器 1 中的第 29 位,
即 trans_flag <= slv_reg1(29),它的作用是判别数据是否准备完毕的一个标志位,即当
基于Spartan-3E的 LCD IP核设计与实现
–7–
trans_flag='1'时,则表示要向 LCD 中传输的数据已经准备完毕,可以发送数据了。其具
体的应用如下:
寄存器准备数据
是否检测到上升沿
Statecontrol="00"?
Y
LCD_RW <= '1'
LCD_E <= '0'
num := 1
Y
Statecontrol="01"?
N
Statecontrol="10"?
LCD_E <='0'
N
N
发送指令模块
发送数据模块
图 4.3 字节传输整体模块
定义当 statecontrol 为 00 时,则将 LCD_RW <= '1',LCD_E <= '0',num := 1。num
为定义的一个变量。
定义当 statecontrol 为 01,trans_flag='1'时,则将 LCD_RS <= '0'。表示写入的数据
为指令数据。
基于Spartan-3E的 LCD IP核设计与实现
–8–
定义当 statecontrol 为 10,trans_flag='1'时,则将 LCD_RS <= '1'。表示写入的数据
为要显示的数据。
定义当 statecontrol 为 11 时,则将 LCD_E <='0'。即关闭 LCD 的使能端,不向 LCD
中送入数据。
四字节传输数据模块,因为传输指令数据和需要显示的数据在传送时序上基本相
同,只是在 statecontrol 的取值上有所不同,所以,只画出了传输指令数据过程的流程图。
传输需要显示数据的流程图中只需将 statecontrol 的取值变为 10 即可。流程图如图 4.4
所示。
在此流程图中,trans_flag 为表示数据是否准备完毕的标志位,当 trans_flag 为 1 时,
表示已经准备完毕。num 为定义的一个整型的变量,它被赋予不同的值来控制各个端口
信号的高低。它具体的工作模式如下:
首先检测 num 是否为 1,如是 1,则将 LCD_E 即使能端至高,将 LCD_RW 至低,
即表示为写入操作,将寄存器 0 的第 24 到第 27 位即 8 位数据的高四字节送到输出端口。
同时将 num 加 1。
当 num 为 2 时,则将 LCD_E 即使能端至低,将 LCD_RW 至高,即表示为读操作,
同时将 num 加 1。
当 num 为 3 时,则将 LCD_E 即使能端至高,将 LCD_RW 至低,即表示为写入操
作,将寄存器 0 的第 28 到第 31 位即 8 位数据的低四字节送到输出端口。同时将 num 加
1。
当 num 为 4 时,则将 LCD_E 即使能端至低,将 LCD_RW 至高,即表示为读操作,
此时已发送完毕一个字节。
基于Spartan-3E的 LCD IP核设计与实现
–9–
图 4.4 四字节传输模块
4.4 UCF 文件
##### Module LCD constraints ######
Net lcdtest_0_lcddata_out_W_pin<7> LOC=M15;
Net lcdtest_0_lcddata_out_W_pin<7> IOSTANDARD = LVCMOS33;
Net lcdtest_0_lcddata_out_W_pin<6> LOC=P17;
Net lcdtest_0_lcddata_out_W_pin<6> IOSTANDARD = LVCMOS33;
基于Spartan-3E的 LCD IP核设计与实现
–10–
Net lcdtest_0_lcddata_out_W_pin<5> LOC=R16;
Net lcdtest_0_lcddata_out_W_pin<5> IOSTANDARD = LVCMOS33;
Net lcdtest_0_lcddata_out_W_pin<4> LOC=R15;
Net lcdtest_0_lcddata_out_W_pin<4> IOSTANDARD = LVCMOS33;
Net lcdtest_0_LCD_E_W_pin LOC= M18;
Net lcdtest_0_LCD_E_W_pin IOSTANDARD = LVCMOS33;
Net lcdtest_0_LCD_RS_W_pin LOC=L18;
Net lcdtest_0_LCD_RS_W_pin IOSTANDARD = LVCMOS33;
Net lcdtest_0_LCD_RW_W_pin LOC=L17;
Net lcdtest_0_LCD_RW_W_pin IOSTANDARD = LVCMOS33;
4.5 波形仿真
在本设计中选择了 ISE 来进行仿真,并应用 Modelsim 来观察波形。在 ISE 中,所
用到的程序与 user logic 中所用的程序基本相同,只是定义的端口略有不同,下面将一
一对应来说明:
clk 对应于 user logic 中的 clk_temp 即分频信号,
data_in 对应于 user logic 中的寄存器 0 ,
control_in 对应于 user logic 中的寄存器 1,
lcddata_out 对应于 user logic 中的 lcddata_out,
write_enable 对应于 user logic 中的 LCD_RW,
rs_flag 对应于 user logic 中的 LCD_RS,
global_enable 对应于 user logic 中的 LCD_E。
仿真后的波形如图 4.5 所示
图 4.5 仿真波形图
基于Spartan-3E的 LCD IP核设计与实现
–11–
4.6 C 语言验证模块
本设计也编写了一个 C 语言程序来使用所制作的 LCD 核。所编写的 C 程序只是实
现了在 LCD 屏上显示两个字符串。
要使用 LCD 屏显示,首先要进行 LCD 屏的初始化,本设计的 C 语言中对 LCD 的
初始化,具体的初始化程序是先向寄存器 1 中写入 0x00,再向寄存器 0 中写入数据,再
向寄存器 1 中写入 0x05。在每一段初始化指令写入之后,还需要加入一段延时程序,以
满足初始化的要求。下面就具体的举出一段初始化程序,因每段初始化指令在形式上都
基本相同,所以,就只举一段功能设置的 C 语言例子:
LCD_mWriteReg(XPAR_LCDTEST_0_BASEADDR, 0x4 ,0x00);
LCD_mWriteReg(XPAR_LCDTEST_0_BASEADDR, 0x0 ,0x28);
LCD_mWriteReg(XPAR_LCDTEST_0_BASEADDR, 0x4 ,0x05);
De lay();
void delay()
{
unsigned int i;
for(i=0;i<30000;i++);
}
以上的例子是写入指令数据的操作,下面再举一个写入显示数据的操作:
LCD_mWriteReg(XPAR_LCDTEST_0_BASEADDR, 0x4 ,0x00);
LCD_mWriteReg(XPAR_LCDTEST_0_BASEADDR, 0x0 ,0x28);
LCD_mWriteReg(XPAR_LCDTEST_0_BASEADDR, 0x4 ,0x06);
delay();
void delay()
{
unsigned int i;
for(i=0;i<30000;i++);
}
基于Spartan-3E的 LCD IP核设计与实现
–12–
5 总结
通过 C 语言的编写,在 LCD 的首行上显示自定义的一个字符串和第二行的第七位上
显示一个字符 a。编写显示一个字符的目的是为了验证能否自定义显示的首地址,同时
需要注意的是在传输要显示的字符串时,也需要使用 4.6 中所举的例子的格式,只是要
在每传输完一个字节后都要加入延时,因此需要使用循环程序来完成字符串的输入显
示,每次只传一个字节,传完每一字节后要延时至少 40us,以模仿图 4.5 所示的时序图。
具体的 LCD 屏显示结果如图 5.1 所示。
图 5.1 LCD 显示
本设计通过对于 LCD IP 核的设计,了解了 IP 核的原理及制作过程,并在此基础上
通过一步步地研究,从做简单的 IP 核入手,来了解 IP 核的设计全过程,再通过了解 LCD
的时序原理编写出 VHDL 来实现其时序,在进行各个管脚的连接,就设计出了 LCD IP
核,再通过 C 语言的编写来验证所作的 LCD IP 核是否可行,最终实现了对于 Spartan-3E
上 LCD 屏的使用。使使用者可以通过调用核及编写一些简单的 C 语言程序就能利用
LCD 屏进行显示。方便了使用者。
程序编写时,采用了模块设计,每一个模块实现一个功能,结构很明了,使得程序
移植性好,易于读写和修改。
基于Spartan-3E的 LCD IP核设计与实现
–13–
参 考 文 献
[1] 徐欣,于红旗,卢启中等. 基于 FPGA 的嵌入式系统设计. 北京:机械工业出版社,2004.
[2] 刘韬,楼兴华.FPGA 数字电子系统设计与开发实例导航.北京:人民邮电出版社,2006.
[3] 朱智平, 胡荣强, 陈尚志.基于 SOPC 的指纹识别系统设计.电子元器件应用,2007,(4):23-25.
[4] 王诚,薛小刚,钟信潮.FPGA/CPLD设计工具Xilinx ISE使用详解. 北京:人民邮电出版社,2005.
[5] 孙航.Xilinx 可编程逻辑器件的高级应用与设计技巧.北京:电子工业出版社,2004.
[6] 石英,李新新,姜宇柏等.ISE 应用与开发技巧.北京:机械工业出版社,2007.
[7] James R,Armstrong, F. Gail Gray.VHDL design representation and synthesis,2004.
[8] 刘绍汉.Verilog FPGA 芯片设计.北京:北京航空航天大学出版社,2006.
[9] 林明权等.VHDL 数字控制系统设计范例.北京:电子工业出版社,2003.
[10] 孟贵胥 王兢.数字电子技术.大连:大连理工大学出版社.2002.
[11] Xilinx.Embedded System Tools Guide[EB/OL]. November 13,2002.
[12] Xihnx.MicroBlaze Processor Reference Guide[EB/OL]. November 13,2002.
[13] Xilinx.“Embedded System Tools Guide” EDK(v6.2 Xlinx,)September 29,2008.
[14] 郭强.液晶显示应用技术.北京:电子工业出版社,2000.
[15] 赵泽才,常青. 基于MicroBlaze的嵌入式系统设计.现代电子技术,2006,(1O):12-15.