在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1704|回复: 0

[原创] 例说FPGA连载87:工业现场实时监控界面设计之LCD显示驱动模块代码解析

[复制链接]
发表于 2017-4-5 19:37:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
例说FPGA连载87:工业现场实时监控界面设计之LCD显示驱动模块代码解析

特权同学,版权所有

配套例程和更多资料下载链接:

http://pan.baidu.com/s/1c0nf6Qc

1.jpg



该模块除了实现正常的LCD驱动显示逻辑,还需要实现LCD图像的数据读出控制信号产生、波形数据点的读出控制信号产生,并对LCD当前显示像素点的多个显示数据做仲裁判断,以显示我们所期望的正确色彩。该模块的功能框图如图17.15所示。

2.jpg

17.15 LCD显示驱动模块功能框图

波形显示的X坐标有效区域(wave_xs,wave_xe)区域内,产生双口RAM的数据读请求信号wave_rden。之所以(wave_xs,wave_xe)区域内都需要读取当前对应的波形点,是由于波形点的数据本身决定了它处于(wave_ys,wave_ye)的具体位置,我们无法预测,所以只能在整个x轴显示区域读取并作判断。这部分设计的逻辑代码如下。

reg wave_rden;      //双口RAM读使能信号


always @(posedge clk or negedge rst_n)

    if(!rst_n) wave_rden <= 1'b0;

    else if((xcnt >={2'd0,wave_xs}+(VGA_HST+VGA_HBP-5)) && (xcnt <{2'd0,wave_xe}+(VGA_HST+VGA_HBP-5))) wave_rden <= 1'b1;

    else wave_rden <= 1'b0;


相邻波形点在显示时不是简单的打点显示,而是划线将它们平滑的连接在一起。因此,我们就专门定义了寄存器wave_datbusr对上一个时钟周期的波形值wave_datbus打一拍,这样可以实现前后相邻两个波形点取值的比对,给这两个值之间的像素点都赋波形色,即实现平滑的波形划线效果。这部分设计的逻辑代码如下。

    //显示数据处理输出

reg[15:0] lcd_djdbr;

reg[7:0] wave_datbusr;  //波形值缓存一拍,用于连线


always @(posedge clk) begin

    wave_datbusr <= wave_datbus;

end

   

    //叠加层和波形处理

always @(posedge clk or negedge rst_n)

    if(!rst_n) lcd_djdbr <= 16'd0;

    else if(wave_dis) begin //波形显示区域

        if((wave_datbusr == 8'd0) ||(wave_datbus == 8'd0)) begin   //X轴第1个点和最后1个点显示单点

            if(ycnt ==(VGA_VST+VGA_VBP)+({2'd0,wave_ye}-(wave_datbus-1'b1))) lcd_djdbr <=wave_fcor;   //前景色

            else lcd_djdbr <=wave_bcor;    //背景色

        end

        else begin  //X轴第1个点和最后1个点之间的显示连续的连线效果

            if(wave_datbusr >wave_datbus)

                if((ycnt >=(VGA_VST+VGA_VBP)+({2'd0,wave_ye}-(wave_datbusr-1'b1)))

                   && (ycnt<= (VGA_VST+VGA_VBP)+({2'd0,wave_ye}-(wave_datbus-1'b1)))) lcd_djdbr <=wave_fcor;    //前景色

                else lcd_djdbr <=wave_bcor;    //背景色

            end

            else begin

                if((ycnt >=(VGA_VST+VGA_VBP)+({2'd0,wave_ye}-(wave_datbus-1'b1)))

                    && (ycnt<= (VGA_VST+VGA_VBP)+({2'd0,wave_ye}-(wave_datbusr-1'b1)))) lcd_djdbr <=wave_fcor;  //前景色

                else lcd_djdbr <=wave_bcor;    //背景色

            end

        end

    end

    else lcd_djdbr <= lcd_djdb;





您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-29 21:57 , Processed in 0.029740 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表