基于CPLD的双屏结构液晶控制器的研究与设计
发布时间:2008/5/28 0:00:00 访问次数:454
随着集成电路技术的发展, 在现代电子设计中,可编程逻辑器件的运用越来越多,原因在于其规模大,体积小,功能强,价格便宜。cpld可擦写上万次,使得硬件设计像软件设计一样灵活方便。verilog hdl语言作为硬件描述语言有其独特的优势:在门级描述的底层,描述的设计思想、电路结构和逻辑关系清晰明了,设计语言简练、易学易用,模块化分层结构在大规模设计时具有优势。如果使用verilog把控制功能集成在一片cpld芯片里,整个电路将会变得更简洁、实用。
2.液晶控制器原理
液晶控制器用于单片机和液晶屏的接口,一方面不断地把显存的数据刷新到液晶屏上,另一方面控制单片机对显存数据的更新。
双屏结构液晶控制器内部主要的计数器,分别是4bit时钟同步字符计数器、行计数器和帧计数器,它们在系统时钟fclk的控制下同时计数,主要是用来产生行同步信号lp 和帧同步信号fp ,分别用来控制液晶屏换行和换页。液晶屏就是在这三个信号的控制下反复地把显存里的数据刷新到屏幕上。
本设计采用altera 公司生产的epm7128scpld芯片来实现lcd 控制器以及它的外围
液晶屏刷新速度的计算公式为ffrp = fclk/ ( hn×nx )。
其中,ffrp为液晶屏显示帧扫描频率,一般要大于70 hz ,hn为一行显示的4bit同步字符数640/4=160,nx为一屏帧扫描的行数480/2=240,fclk为系统的工作时钟频率,采用晶振提供频率11.05926mhz,将其四分频得到2.764815mhz即可作为系统时钟fclk。
系统构成如下图所示:
3.实现过程
1)液晶刷新时序产生
此部分主要产生行同步和帧同步信号,完成行和帧同步。
由于双屏结构液晶屏以4bit为单位上下同时显示,可以在cpld内定义两个寄存器,行含4bit字符寄存器scp_reg,值为640/4=160, 帧含行寄存器lp_reg,值为480/2=240。字符时钟同步计数器scp_count为4bit字符的计数器,在系统时钟scp_clk作用下计数加一,与行含字符寄存器内容比较,若等,表示一行结束,开始下一行,scp_count清零,行计数器lp_count加一,lp_flag置一,产生行同步信号lp。行计数器lp_count与帧含行寄存器内容比较,若等,表示一帧结束,开始下一帧,scp_count, lp_count 清零,fp_flag置一,产生帧同步信号fp。实现的程序如下:
always@(posedge scp_clk)
begin
scp_count=scp_count+1;
if(scp_count==scp_reg)
begin
lp_count=lp_count+1;
lp_flag=1;
scp_count=0;
if(lp_count==lp_reg)
begin
fp_flag=1;
lp_count=0;
scp_count=0;
end
else fp_flag=0;
end
else lp_flag=0;
end操作lcd时,scp_reg=160,lp_reg=240。仿真时取scp_reg=3,lp_reg=4,如下:
2) 单片机写数据至ram
此部分为单片机通过cpld更新ram数据。
单片机写信号wr有效,cpld判断数据线上内容为指令还是数据,若为指令,则将db内容存入指令寄存器cmdreg,若为数据,判断指令寄存器cmdreg内容以指示状态。若cmdreg为8’h00或8’h02,表示db为低或高八位地址,分别存入低高八位地址寄存器addl和addh,若为8’h04,表示db为要写入ram的数据,存入数据寄存器ioreg。
cmdreg db内容
8’h00 低八位地址
8’h02 高八位地址
8’h04 数据
if(a0==1) cmdreg="db";
else begin
if(cmdreg==8'h00) addl="db";
&nb
begin
addh="db";
p={addh,addl};
end
else if(cmdreg==8'h04) ioreg="db";
end
3)显存的数据刷新到液晶屏
此部分完成ram数据到lcd的正确映射。
ram存储和lcd对应关系如下图所示:
随着集成电路技术的发展, 在现代电子设计中,可编程逻辑器件的运用越来越多,原因在于其规模大,体积小,功能强,价格便宜。cpld可擦写上万次,使得硬件设计像软件设计一样灵活方便。verilog hdl语言作为硬件描述语言有其独特的优势:在门级描述的底层,描述的设计思想、电路结构和逻辑关系清晰明了,设计语言简练、易学易用,模块化分层结构在大规模设计时具有优势。如果使用verilog把控制功能集成在一片cpld芯片里,整个电路将会变得更简洁、实用。
2.液晶控制器原理
液晶控制器用于单片机和液晶屏的接口,一方面不断地把显存的数据刷新到液晶屏上,另一方面控制单片机对显存数据的更新。
双屏结构液晶控制器内部主要的计数器,分别是4bit时钟同步字符计数器、行计数器和帧计数器,它们在系统时钟fclk的控制下同时计数,主要是用来产生行同步信号lp 和帧同步信号fp ,分别用来控制液晶屏换行和换页。液晶屏就是在这三个信号的控制下反复地把显存里的数据刷新到屏幕上。
本设计采用altera 公司生产的epm7128scpld芯片来实现lcd 控制器以及它的外围
液晶屏刷新速度的计算公式为ffrp = fclk/ ( hn×nx )。
其中,ffrp为液晶屏显示帧扫描频率,一般要大于70 hz ,hn为一行显示的4bit同步字符数640/4=160,nx为一屏帧扫描的行数480/2=240,fclk为系统的工作时钟频率,采用晶振提供频率11.05926mhz,将其四分频得到2.764815mhz即可作为系统时钟fclk。
系统构成如下图所示:
3.实现过程
1)液晶刷新时序产生
此部分主要产生行同步和帧同步信号,完成行和帧同步。
由于双屏结构液晶屏以4bit为单位上下同时显示,可以在cpld内定义两个寄存器,行含4bit字符寄存器scp_reg,值为640/4=160, 帧含行寄存器lp_reg,值为480/2=240。字符时钟同步计数器scp_count为4bit字符的计数器,在系统时钟scp_clk作用下计数加一,与行含字符寄存器内容比较,若等,表示一行结束,开始下一行,scp_count清零,行计数器lp_count加一,lp_flag置一,产生行同步信号lp。行计数器lp_count与帧含行寄存器内容比较,若等,表示一帧结束,开始下一帧,scp_count, lp_count 清零,fp_flag置一,产生帧同步信号fp。实现的程序如下:
always@(posedge scp_clk)
begin
scp_count=scp_count+1;
if(scp_count==scp_reg)
begin
lp_count=lp_count+1;
lp_flag=1;
scp_count=0;
if(lp_count==lp_reg)
begin
fp_flag=1;
lp_count=0;
scp_count=0;
end
else fp_flag=0;
end
else lp_flag=0;
end操作lcd时,scp_reg=160,lp_reg=240。仿真时取scp_reg=3,lp_reg=4,如下:
2) 单片机写数据至ram
此部分为单片机通过cpld更新ram数据。
单片机写信号wr有效,cpld判断数据线上内容为指令还是数据,若为指令,则将db内容存入指令寄存器cmdreg,若为数据,判断指令寄存器cmdreg内容以指示状态。若cmdreg为8’h00或8’h02,表示db为低或高八位地址,分别存入低高八位地址寄存器addl和addh,若为8’h04,表示db为要写入ram的数据,存入数据寄存器ioreg。
cmdreg db内容
8’h00 低八位地址
8’h02 高八位地址
8’h04 数据
if(a0==1) cmdreg="db";
else begin
if(cmdreg==8'h00) addl="db";
&nb
begin
addh="db";
p={addh,addl};
end
else if(cmdreg==8'h04) ioreg="db";
end
3)显存的数据刷新到液晶屏
此部分完成ram数据到lcd的正确映射。
ram存储和lcd对应关系如下图所示:
上一篇:面向FPGA的ESL工具
深圳服务热线:13751165337 13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)

深圳市碧威特网络技术有限公司
付款方式