1. 程式人生 > 其它 >15.基礎實驗(4)vga顯示影象動態移動

15.基礎實驗(4)vga顯示影象動態移動

技術標籤:FPGA基礎實驗fpgaverilogsvga

vga顯示影象動態移動

一、實驗內容

實現vga顯示中心200x200的方塊動態移動。

二、系統框圖

解析度保持為640x480保持不變,200x200方塊在螢幕上移動,總共有5個狀態,將3個狀態列出,繪製如下框圖。

image-20210108203626444

state1:200x200的方塊在顯示屏上正常移動。

state2:200x200的方塊到達顯示屏的底部,下一步開始從下往上移動。

state3:200x200的方塊到達顯示屏的右部,下一步開始從右往左移動。

三、設計分析

簡單來說,就是200x200的方塊移動到顯示屏的邊緣時變換方向,可以設計如下的時序。

用兩個暫存器作為上下、左右方向控制的變數,初始狀態,200x200的方塊是從左往右,從上往下移動的,碰到顯示器的邊沿後,方向改變。200x200的方塊替換為相應的顯示影象,就可以實現類似螢幕保護程式的功能。

image-20210108213014215.png

x和y為顯示偏移量,設定為每一幀資料改變顯示的方向,當顯示影象觸碰到顯示屏的邊沿位置時,改變顯示的方向。

四、實驗步驟

根據設計的時序圖,編寫實現的程式碼。

//h_add_flag
always @(posedge clk) 
begin
	if (rst == 1'b1) 
		h_add_flag <= 1'b0;
	else if (x == 'd1)	//state change  
		h_add_flag <= 1'b0;
	else if (x == H_ADDR_TIME - H_BASIC - 'd1)	//state change 
		h_add_flag <= 1
'b1; end //v_add_flag always @(posedge clk) begin if (rst == 1'b1) v_add_flag <= 1'b0; else if (y == 'd1) //state change v_add_flag <= 1'b0; else if (y == V_ADDR_TIME - V_BASIC - 'd1) //state change v_add_flag <= 1'b1; end //x always @(posedge clk) begin if (rst == 1'b1) x <= 'd0;
else if (vcnt == (V_TOTAL_TIME - 'd1) && hcnt == (H_TOTAL_TIME - 'd1) && h_add_flag == 1'b0) x <= x + 'd1; else if (vcnt == (V_TOTAL_TIME - 'd1) && hcnt == (H_TOTAL_TIME - 'd1) && h_add_flag == 1'b1) x <= x - 'd1; end //y always @(posedge clk) begin if (rst == 1'b1) y <= 'd0; else if (vcnt == (V_TOTAL_TIME - 'd1) && hcnt == (H_TOTAL_TIME - 'd1) && v_add_flag == 1'b0) y <= y + 'd1; else if (vcnt == (V_TOTAL_TIME - 'd1) && hcnt == (H_TOTAL_TIME - 'd1) && v_add_flag == 1'b1) y <= y - 'd1; end //rgb always @(posedge clk) begin if (rst == 1'b1) rgb <= 'd0; else if (h_valid == 1'b1 && v_valid == 1'b1) begin if (h_valid_cnt >= x && h_valid_cnt < x+'d200 && v_valid_cnt >= y && v_valid_cnt < y+'d200) rgb <= 3'b111; else if (v_valid_cnt < 'd120) rgb <= 3'b100; else if (v_valid_cnt < 'd240) rgb <= 3'b010; else if (v_valid_cnt < 'd360) rgb <= 3'b001; else rgb <= 3'b101; end else rgb <= 'd0; end

x,y代表的是偏移量,且只有在一幀顯示完畢之後,才會有影象的移動。

程式碼量很少,關鍵在於設計的思想。

五、實際波形模擬

模擬就不必了,直接上結果。

結果如下。

image-20210108214307232

六、總結與討論*

1.涉及到優先順序的問題,方塊的顯示為最高優先順序,其餘靠邊站。

2.每一幀影象顯示完畢後,才進行影象的偏移,且水平和垂直方向同步變化。