Tên Mơ tả CLK Xung clock 27Mhz từ kit DE2.
RESET Tín hiệu reset do khối Timer trì hỗn ban đầu cung cấp. oRequest Tín hiệu BUFFER và lưu các giá trị của Line Pixel vào khối Line điều khiển cho phép xuất dữ liệu từ SDRAM
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 640 x 480 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 .
12.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:
Hình 12.2: Vùng hiển thị trong một chu kỳ quét với tình hiệu reset từ hệ thống
Từ các thơng số định thì cho chuẩn VGA 640 x 480 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:
a) Đố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.
b) Đố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 tồ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.
12.3 MƠ TẢ
Khối sẽ tạo các tín hiệu điều khiển cho ADV7123 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 như 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
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;
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 Hrizontal 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ính 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 <_BLANK));
//oRquest lên 1 ở thời gian hiển thị frame trong một 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 tố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.
13. KẾT LUẬN