Tải bản đầy đủ (.docx) (7 trang)

KHỐI CONVERT YCRCB TO RGB

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (175.66 KB, 7 trang )

2. KHỐI CONVERT YCRCB TO RGB
2.1SƠ ĐỒ KHỐI
Hình 11.1: Sơ đồ của khối Convert YCrCb to RGB
Tên Mô tả
CLK
Xung clock 27Mhz từ kit DE2.
RESET Reset hệ thống.
iY[7:0]
Thành phần độ sáng (Luma) của Pixel được tách ra.
iCb[7:0]
Thành phần Cb của Pixel được tách ra.
iCr[7:0]
Thành phần Cr của Pixel được tách ra.
Red[9:0]
Thành phần Red của Pixel tương ứng.
Green[9:0]
Thành phần Green của Pixel tương ứng.
Blue[9:0]
Thành phần Blue của Pixel tương ứng.
2.2 MÔ TẢ
Khối này chuyển đổi từ dạng dữ liệu ảnh YCrCb 8 bit sang dạng RGB 10 bit cho phù hợp
với yêu cầu ngõ vào của VGA DAC là ADV7123. Dưới đây là công thức chuyển đổi sang dạng
RGB 8 bit:
R = 1.164 ( Y - 16 ) + 1.596 ( Cr – 128 ) ;
G = 1.164 ( Y - 16) - 0.392 ( Cb - 128 ) - 0.813 ( Cr - 128 ) ;
B = 1.164 ( Y - 16 ) + 2.017 ( Cb – 128 ) ;
Sau đó để có dạng RGB 10 bit thì ta dịch trái 2 bit ( nhân 4 ) nên có công thức mới:
R’ = 4.656 ( Y - 16 ) + 6.384 ( Cr - 128 ) ;
G’ = 4.656 ( Y - 16 ) - 1.568 ( Cb - 128 ) - 3.252 ( Cr - 128 );
B’ = 4.656 ( Y - 16 ) + 8.068 ( Cb - 128 ) ;
Do các hệ số có dạng thập phân, trong khi đó các phép toán của phần cứng được tổng


hợp chỉ thực hiện trên số nguyên nên khi làm tròn và tính toán thì sai số khá lớn, vì vậy ta phải
nhân biểu thức trên với một số nguyên H nào đó để giảm bớt sai số khi làm tròn các hệ số, sau
đó tính toán biểu thức rồi chia lại cho H. Số nguyên H ta chọn có dạng 2
k
thì thay vì thực hiện
phép chia cho A ta chỉ cần dịch phải k bit. Ở đây ta chọn k = 7 hay H = 128 thì đô chính xác của
hệ số sẽ đến chữ số thứ 2 sau dấu phẩy. Ta có công thức cuối cùng (đã làm tròn để tính toán
trên các số nguyên) :
oR = (596 Y + 817Cr – 114131) : 128 ;
oG = (596 Y – 200Cb – 416Cr + 69370) : 128 ;
oB = (596 Y + 1033Cb – 141781) : 128 ;
Để thực hiện công thức trên ta tiến hành theo các bước:
• Nhân các thành phần Y, Cb, Cr với các hệ số tương ứng rồi cộng chúng lại, sử dụng bộ tổng hợp
cộng nhân ( ALTMULT_ADD ) trong thư viện của Quartus :
Phần Menu >> Tools >> MegaWizard Plug_in Manager… >> Create … tạo custom mới,
đặt tên là MAC3; chọn phần Arithmetic>>ALTMULT_ADD. Với các thông số được chọn như sau:
- Tính oG cần 3 phép nhân : số lượng bộ nhân là 3.
- Y,Cb,Cr là số 8 bit dương: độ rộng ngõ vào A là 8, kiểu dữ liệu không dấu (Unsigned)
- Trong các hệ số có số âm nên, giá trị lớn nhất là 1033 (số 11 bit) : độ rộng ngõ vào B là 11, kiểu
dữ liệu có dấu (signed)
- Chọn hàm giữa hai bộ nhân đầu tiên (first pair of multiplier) là phép cộng (Add). Khi tổng hợp
xong ta được một khối với khai báo như sau :
module MAC_3 ( dataa_0,
dataa_1,
dataa_2,
datab_0,
datab_1,
datab_2,
result,
aclr0,

clock0);
Trong đó:
- Ngõ vào điều khiển : xóa bất đồng bộ aclr0 và xung clock làm việc clock0.
- Các ngõ vào dữ liệu là dataa_0; dataa_1; dataa_2 là các số 7 bit không dấu; datab_0; datab_1;
datab_2 là các số 11 bit có dấu;
- Ngõ ra là dữ liệu 21 bit có dấu:
result = (dataa_0 × datab_0) + (dataa_1 × datab_1) + (dataa_2 × datab_2).
Chú ý: data_b0, data_b1, data_b2 là các hệ số ở công thức đã tính ở trên: 596
d
= 254
h
,
817
d
= 331
h
, -200
d
= F38
h
(số bù hai), -416
d
= E60
h
(số bù hai), 1033
d
= 409
h
.Vậy để thực hiện
bước này ta sẽ gọi các khối MAC_3 như sau:

MAC_3 u0( iY, iCb, iCr,
11'h254, 11'h000, 11'h331,
X, iRESET, iCLK);
MAC_3 u1( iY, iCb, iCr,
11'h254, 11'hF38, 11'hE60,
Y, iRESET, iCLK);
MAC_3 u2( iY, iCb, iCr,
11'h254, 11'h409, 11'h000,
Z, iRESET, iCLK);
Sau đó trừ (cộng) với các số hạng còn lại rồi chia cho 128 bằng cách dịch phải 7 bit:
X_OUT <= ( X - 114131 ) >>7;
Y_OUT <= ( Y + 69370 ) >>7;
Z_OUT <= ( Z - 141787 ) >>7;
Tuy nhiên khi các giá trị R, G, B được tính theo công thức trên thì có thể là số âm hoặc
vượt quá 1023 (10 bit ) vì vậy ta giới hạn lại giá trị vào trong khoảng 0 đến 1023:
if(X_OUT[13])
oRed<=0;
else if(X_OUT[12:0]>1023)
oRed<=1023;
Thực hiện tương tự với 2 thành phần còn lại thì dữ liệu khối xuất ra sẽ là dạng RGB phù
hợp với yêu cầu đặt ra.
3. KHỐI VGA CONTROLLER
3.1 SƠ ĐỒ KHỐI
Hình 12.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 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 .
3.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 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à:

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×