11.1 SƠ ĐỒ KHỐI
Hình 11.1 : Sơ đồ của khối VGA Controller
Tín Mô tả
CLK Xung clock 27Mhz từ kit DE2.
RESET Tín hiệu reset do khối Timer trì hoên ban đđu cung cấp
oRequest Tín hiệu điều khiển cho phĩp xuất dữ liệu từ SDRAM BUFFER vă lưu câc giâ trị của Line Pixel văo khối Line Buffer oVGA_BLANK
oVGA_SYNC oVGA_VS oVGA_HS
Câc chđn năy được gắn tương ứng văo chip giải mê ADV7123 vă cổng VGA trín kit DE2 để đồng bộ việc xuất ra monitor câc frames ảnh. Do xuất ảnh theo chuẩn VGA 640x480 nín chđn VGA_SYNC luôn phải đặt ở mức cao để đảm bảo việc đồng bộ. VGA_X[0] Cho biết vị trí của Pixel lă chẵn hay lẻ để điều khiển việc tâch câc thănh phần Y, Cr, Cb trong khối xử lý ảnh YUV
VGA_Y[0] Cho biết Line sẽ hiển thị trín măn hình lă thuộc Odd Frame hay Even Frame để chọn dữ liệu đưa ra từ SDRAM BUFFER Câc chđn dữ liệu iRed, iGreen, iBlue được nối trực tiếp với ngõ ra VGA_R, VGA_G, VGA_B. Ngõ ra oVGA_CLOCK lă nghịch đảo của ngõ văo CLK .
Chương 11: Khối VGA Controller
Trang 72
11.2 LƯU ĐỒ GIẢI THUẬT
Giải thuật tạo tín hiệu đồng bộ để giao tiếp với VGA lă tạo câc bộ đếm với câc thông số chuẩn để tạo ra câc tín hiệu đồng bộ theo giản đồ thời gian:
Chương 11: Khối VGA Controller
Từ câc thông số định thì cho chuẩn VGA 640x480 60Hz ở trín , do xung clock trong thiết kế có tần số 27MHz nín ta chọn câc giâ trị tương ứng cho câc thông số như sau:
1) Đối với VGA_HS (tín hiệu đồng bộ quy định thời gian hiển thị 1 hăng trong 1 chu kỳ quĩt ngang): H_FRONT = 16, H_SYNC = 96, H_BACK = 48, H_ACT = 640. Như vậy khi hiển thị xong 1 hăng thì phải chờ 1 khoảng thời gian lă H_BLANK = H_FRONT + H_SYNC + H_BACK = 160 (đơn vị lă số chu kỳ xung clock) thì hiển thị hăng mới. Lúc năy thời gian quĩt ngang lă: H_TOTAL = H_BLANK + H_ACT = 800.
Chương 11: Khối VGA Controller
Trang 74
2) Đối với VGA_VS(tín hiệu đồng bộ quy định thời gian hiển thị 1 frame trong 1 chu kỳ quĩt toăn bộ măn hình): V_FRONT = 11; V_SYNC = 2; V_BACK = 31; V_ACT = 480. Như vậy khi hiển thị xong 1 frame thì phải chờ 1 khoảng thời gian lă V_BLANK = V_FRONT+V_SYNC+V_BACK = 44 (đơn vị lă chu kỳ xung quĩt ngang VGA_HS) thì hiển thị frame mới. Thời gian quĩt măn hình lă V_TOTAL = V_BLANK + V_ACT= 524.
Lưu đồ giải thuật tạo VGA_VS cũng được thực hiện tương tự chỉ khâc lă V_Cont được đếm lín sau mỗi cạnh lín của VGA_HS.
11.3 MÔ TẢ
Khối sẽ tạo câc tín hiệu điều khiển cho ADV 7123 vă đồng bộ việc truy xuất, xử lý dữ liệu với câc khối khâc dựa trín câc tín hiệu định thì quĩt ngang vă quĩt dọc sao:
+ Tạo tín hiệu quĩt ngang VGA_HS với bộ đếm lín H_Cont : always@(posedge iCLK or negedge iRST_N)
begin if(!iRST_N) begin H_Cont <= 0; oVGA_HS <= 1; end else begin
if( H_Cont < H_TOTAL )
H_Cont <= H_Cont+1'b1;
else
H_Cont <= 0;
//đưa VGA_HS về 0 tương ứng với khoảng thời gian Horizontal SYNC if(H_Cont == H_FRONT-1) oVGA_HS <= 1'b0; if(H_Cont == H_FRONT+H_SYNC-1) oVGA_HS <= 1'b1; end end
Chương 11: Khối VGA Controller
+Tạo tín hiệu quĩt dọc VGA_VS với bộ đếm V_Cont theo cạnh lín của VGA_HS: always@(posedge oVGA_HS or negedge iRST_N)
begin if(!iRST_N) begin V_Cont <= 0; oVGA_VS <= 1; end else begin if(V_Cont < V_TOTAL) V_Cont <= V_Cont+1'b1; else V_Cont <= 0;
//đưa VGA_HS về 0 tương ứng với khoảng thời gian Horizontal SYNC if(V_Cont == V_FRONT-1) oVGA_VS <= 1'b0; if(V_Cont == V_FRONT+V_SYNC-1) oVGA_VS <= 1'b1; end end
+Sau đó xuất câc tín hiệu điều khiển khâc: //Tích cực tín hiệu BLANK để xóa câc Flicker:
assign oVGA_BLANK = ~((H_Cont < H_BLANK) || (V_Cont < V_BLANK));
//oRequest lín 1 ở thời gian hiển thị frame trong 1 chu kỳ quĩt măn hình: assign oRequest = ( ( H_Cont >= H_BLANK && H_Cont < H_TOTAL )
&& ( V_Cont>=V_BLANK && V_Cont<V_TOTAL ) );
//tính toân vị trí X, Y của Pixel trong frame (X : vị trí pixel trong hăng vă Y : vị trí hăng trong frame):
assign oCurrent_X = (H_Cont>=H_BLANK)? H_Cont-H_BLANK : 11'h0; assign oCurrent_X = (V_Cont>=V_BLANK)? V_Cont-V_BLANK : 11'h0;
Như vậy kể từ khi bắt đầu quĩt 1 frame thì phải chờ 1 khoảng thời gian có độ dăi lă (V_BLANK × H_TOTAL) + H_ BLANK = 35360 (chu kỳ) thì oRequest mới được tích cực.
Tổng kết