Verilog:连续4x4平方到VGA显示屏(弹跳框)

时间:2019-07-18 03:15:38

标签: verilog fpga quartus vga

我正在研究数据路径和控件(FSM),以在Verilog的VGA显示器上创建一个弹跳框,类似于旧的DVD屏幕保护程序。我在保留状态之间的x和y坐标时遇到问题,因为它们存储在寄存器中。

我的S_DRAW状态在定格时钟上将绘制信号设置为高电平。下一个状态是S_WAIT状态,表明它可以正常工作。因为每个姿势时钟只能绘制一个像素,所以我以S_DRAW状态循环,直到全部绘制了16个像素。

在以前的状态下,我设置x_start <= x和y_start <= y,这样在绘制框之后,我可以将它们恢复为原始值,然后擦除框,然后重复递增以创建“移动”效果

next_state = (do_draw) ? S_WAIT : S_DRAW

[...]

always @(*)
begin
    if (draw)
    begin
        if ((x == x_start + 3) && (y == y_start + 3))
        begin
            do_draw <= 1'b1;
            x <= x_start;
            y <= y_start;
        end
        else if (x == x_start + 3)
        begin
            x <= x_start[7:0];
            y <= y + 1'd1;
        end
        else
            x <= x + 1'd1;
    end
end

但是,在调试中,我发现x和y没有正确还原。例如,要绘制第一个框,x和y从(0,0)(左上角)开始,并绘制一个顶点为(0,0),(0,3),(3,0)的4x4框。 ,(3,3)正确。但是x和y不能从(3,3)恢复到(0,0),因此不能正确擦除。我知道我可以简单地清除屏幕,但是我希望稍微更精致一些。我可以通过调试确认,将第一次迭代的x_start和y_start设置为0。

任何帮助或见识将不胜感激。谢谢。

0 个答案:

没有答案