LinCoding

【原创】基于FPGA的VGA测试程序

1
阅读(2039)

【主题】:基于FPGA的VGA测试程序

【作者】:LinCoding

【时间】:2016.11.5       

【声明】:转载、引用,请注明出处

         由于自己先买的黑金的开发板,后买的CB的书,最近在看基于SDRAM的VGA显示,一直有点问题,今天上午本来想写个验证程序看一下问题在哪,但是却弄了一上午,因为碰到了一个小问题,不过最终还是解决了。

 先上效果图:

blob.png

blob.png

blob.png

blob.png

 就是这样每隔一秒切换下一张,但是问题是,VGA一直停留在第一张图片上

 这是我的定时器程序:

blob.png

 就是每当一张图片的数据完成以后开始定时1s,isCount是定时器的开关

blob.png

 原本写成这样,做了仿真,isCount时钟等于0,定时器无论如何也不会开始工作,很郁闷,最后发现是这个样子的:

if ( lcd_xpos == `H_DISP && lcd_ypos == `V_DISP )
begin
     isCount <= 1'b1;

 尽管打开了定时器,但是同时由于没有display_done == 0; 导致执行了下面这个if语句的else,也就是isCount <= isCount,而此时isCount是上一个clk的值,也就是复位时候的0,所以导致了isCount被赋值1时候也被赋值0,产生了竞争,最后可能是由于编译器优化为了0,导致定时器开启失败,也就导致,状态机只停留在了这个状态

 最后优化如下:

if ( display_done )
    begin
        isCount <= 1'b0;
        image_state <= image_state + 1'b1;
    end
else if ( lcd_xpos == `H_DISP && lcd_ypos == `V_DISP )
    begin
        isCount <= 1'b1;
        image_state <= image_state;
    end		

问题得到完美解决!