Chöông 4:
Sô löôïc heä thoáng
PHAÀN II: THIEÁT KEÁ HEÄ THOÁNG
CHÖÔNG 4: SÔ LÖÔÏC HEÄ THOÁNG
4.1. YEÂU CAÀU
Tìm hieåu veà caùc giaûi thuaät xöû lyù aûnh.
ÖÙng duïng giaûi thuaät xöû lyù aûnh video vaøo phaàn cöùng, cuï theå laø moâ taû phaàn cöùng
thöïc hieän giaûi thuaät baèng ngoân ngöõ Verilog HDL.
ÖÙng duïng FPGAs ñeå kieåm tra keát quaû, ñoàng thôøi so saùnh vôùi keát quaû vôùi hình aûnh
video ban ñaàu.
4.2 NOÄI DUNG THÖÏC HIEÄN
Laáy nguoàn tín hieäu video töø DVD ( VCD ) Player ñöa vaøo kit DE2 cuûa Altera qua
coång TV-IN.
Söû duïng phaàn meàm Quartus II cuûa Altera ñeå vieát chöông trình baèng ngoân ngöõ
Verilog HDL vaø giao tieáp vôùi kit DE2.
Thieát keá khoái loïc trung bình vaø doø bieân cho aûnh ngoõ ra baèng Verilog HDL.
Giao tieáp vôùi ADV7181B, VGA, SDRAM treân kit DE2.
Hieån thò keát quaû leân Monitor vaø so saùnh vôùi tín hieäu goác
Trang 33
Chöông 4:
Sô löôïc heä thoáng
4.3 SÔ ÑOÀ THIEÁT KEÁ VAØ NGUYEÂN LYÙ HOAÏT ÑOÄNG
4.3.1 SÔ ÑOÀ THIEÁT KEÁ
Hình 4.1: Sô ñoà heä thoáng
4.3.2 NGUYEÂN LYÙ HOAÏT ÑOÄNG
Khoái I2C_Video_Config: vôùi giao thöùc giao tieáp I2C seõ ñaët giaù trò cho caùc thanh
ghi cuûa boä maõ hoùa ADV7181 ñeå caáu hình hoaït ñoäng cho chip maõ hoùa naøy.
Khối Timer trì hoãn ban đầu: Sau chuoãi khôùi ñoäng, ADV7181B rôi vaøo thôøi kì
khoâng oån ñònh, khoái seõ phaùt hieän thôøi kì khoâng oån ñònh naøy roâiø tính toaùn thôøi ñieåm baét ñaàu
laøm vieäc cuûa caùc khoái khaùc.
Khoái Desize_Horizon: Laáy ra chuoãi lieân tuïc caùc Pixel trong doøng döõ lieäu do
ADV7181B xuaát ra ñoàng thôøi ñònh laïi kích thöôùc frame aûnh töø daïng 720 x 480 sang chuaån
VGA 640 x480.
Trang 34
Chöông 4:
Sô löôïc heä thoáng
SDRAM BUFFER: Nhaän döõ lieäu vaø tín hieäu ñieàu khieån ghi töø khoái Desize Horizon
ñeå ghi giaù trò caùc Pixel vaøo SDRAM, ñoàng thôøi cuõùng nhaän tín hieäu töø VGA controller ñeå
ñieàu khieån vieäc xuaát döõ lieäu, ñòa chæ phuø hôïp (xuaát xen keõ caùc line thuoäc Odd field vaø
Even fieldû)
Khoái xöû lyù aûnh YUV: Xöû lyù döõ lieäu aûnh nhaän ñöôïc töø SDRAM BUFFER roài xuaát ra
döõ lieäu aûnh cho khoái Convert YUV to RGB
Khoái ConvertYUVtoRGB: ADV7181B xuaát ra aûnh video daïng YUV, ñeå coù theå
hieån thò leân VGA thì tröôùc tieân chuyeån ñoåi thaønh daïng RGB.
Khoái VGA_Controller: Nhaän döõ lieäu aûnh RGB töø khoái ConvertYUVtoRGB ñeå xuaát
döõ lieäu vaø tín hieäu ñoàng boä cho Video DAC 7123, ñoàng thôøi cuõng phaùt ra caùc tín hieäu ñieàu
khieån SDRAM_BUFFER ñeå xuaát döõ lieäu töø SDRAM.
Trang 35
Chöông 5:
Khoái I2C_Video_Config
PHAÀN III: NOÄI DUNG THIEÁT KEÁ
CHÖÔNG 5: Khoái I2C_VIDEO_CONFIG
5.1 SÔ ÑOÀ KHOÁI
Hình 5.1: Sô ñoà khoái I2C_Video_Config
Teân
Moâ taû
ICLK
Xung Clock 50MHz töø Kit DE2
RESET
Tín hieäu Reset heä thoáng
I2C_SCLK
Ngoõ ra chöùa xung Clock cung caáp cho ADV7181B
I2C_DATA
Port 2 chieàu ñeå caáu hình giaù trò caùc thanh ghi cuûa
ADV7181B
Hình 5.2: Daïng soùng ñeå truyeàn döõ lieäu vaø caáu truùc ghi vôùi giao thöùc I2C
Trang 36
Chöông 5:
Khoái I2C_Video_Config
5.2 LÖU ÑOÀ GIAÛI THUAÄT:
5.3 MOÂ TAÛ
Vai troø cuûa khoái chæ laø ghi giaù trò vaøo caùc thanh ghi cuûa ADV7181B neân coù theå choïn
xung clock laøm vieäc cuûa khoái laø 20KHz nhôø vaøo boä chia taàn töø taàn soá 50MHz. Ñòa chæ
Slaver cuûa ADV7181B laø 40h neân ta söû duïng caùch gaùn mI2C_DATA <= {8’h40,
LUT_DATA}. Vôùi mI2C_DATA laø chuoãi döõ lieäu caàn truyeàn treân Bus vaø LUT_DATA
chöùa ñòa chæ cuûa thanh ghi vaø giaù trò caàn naïp.
Khi reset, baét ñaàu caáu hình laïi cho ADV7181B baèng caùch xoùa giaù trò caùc boä ñeám vaø
côø. Sau ñoù ñeå naïp giaù trò cho caùc thanh ghi ta söû duïng maùy traïng thaùi sau:
Trang 37
Chöông 5:
Khoái I2C_Video_Config
always@(posedge mI2C_CTRL_CLK or negedge iRST_N)
begin
if(!iRST_N) begin
LUT_INDEX <=
mSetup_ST <=
mI2C_GO
<=
0;
0;
0; end
else
begin
if(LUT_INDEX < LUT_SIZE)
//LUT_SIZE laøsoá laàn naïp giaù trò cho caùc thanh ghi caàn thieát vaøLUT_INDEX
//laø bieán ñeám ñeå aùnh xaï ñeán ñòa chæ cuûa caùc thanh ghi vaø giaù trò caàn naïp.
begin
case(mSetup_ST)
0:
begin
// Nhaäp chuoãi döõ lieäu caàn truyeàn ñeå ñaët giaù trò cho caùc thanh ghi
mI2C_DATA <=
{8'h40,LUT_DATA};
mI2C_GO
mSetup_ST
<=
<=
1;
1;
end
1:
begin
if(mI2C_END)
// mI2C_END laø côø baùo khi truyeàn heát chuoãi döõ lieäu
Begin
//Coù xaùc nhaän ACK laø ñaõ naïp xong giaù trò cho 1 thanh
ghi töø ADV thì nhaûy tôùi traïng thaùi 2
if(!mI2C_ACK)
mSetup_ST
<=
2;
//Khoâng coù xaùc nhaän thì nhaûy veà traïng thaùi 0
else
mSetup_ST
<=
0;
mI2C_GO
<=
0;
end
2:
end
begin
Trang 38
Chöông 5:
Khoái I2C_Video_Config
// Taêng LUT_INDEX leân 1 ñeå nhaûy ñeán thanh ghi môùi roài quay veà
traïng thaùi 0
LUT_INDEX <=
LUT_INDEX+1;
mSetup_ST
<=
0;
end
endcase
end
end
end
Ta chæ caàn ñaët giaù trò cho moät soá thanh ghi caàn thieát neân khoâng thöïc hieän vieäc taêng
daàn ñòa chæ thanh ghi maø seõ aùnh xaï töø LUX_INDEX ñeán LUX_DATA nhôø vaøo leänh case,
chaúng haïn nhö khi LUX_INDEX =27 ñeå naïp giaù trò 8’h50 vaøo thanh ghi coù ñòa chæ 8’h00 ta
coù caáu truùc:
case(LUX_INDEX):
27:
LUT_DATA <=
16'h0050;
Ñeå ADV7181B coù theå phaùt hieän chuaån video NTSC thì ta seõ naïp caùc giaù trò cho caùc
thanh ghi theo baûng giaù trò caøi ñaët ôû phaàn moâ taû ADV7181B . Tuy nhieân khi truyeàn chuoãi
naøy treân bus ta caàn phaûi theâm caùc bit ñoàng boä: 1 bit cho traïng thaùi IDE, 2 bit ñeå thieát laäp
côø START, 3 bit ñeå chôø 3 ACK do ADV xaùc nhaän, 3 bit ñeå thieát laäp côø STOP vaø baùo keát
thuùc chuoãi, vì vaäy thöïc söï chuoãi daøi 33 bit:
case (SD_COUNTER)
6'd0 : begin ACK1=0 ;ACK2=0 ;ACK3=0 ; END=0; SDO=1; SCLK=1;end
//Thieát laäp côø START
6'd1 : begin SD=I2C_DATA;SDO=0;end
6'd2 : SCLK=0;
//Ñòa chæ SLAVER cuûa ADV7181B
6'd3 : SDO=SD[23];
6'd4 : SDO=SD[22];
6'd5 : SDO=SD[21];
6'd6 : SDO=SD[20];
6'd7 : SDO=SD[19];
6'd8 : SDO=SD[18];
Trang 39
Chöông 5:
Khoái I2C_Video_Config
6'd9 : SDO=SD[17];
6'd10 : SDO=SD[16];
//Thaû noåi ñöôøng truyeàn ñeå nhaäp ACK töø ADV7181B qua Port 2 chieàu I2C_DATA
6'd11 : SDO=1'bz;
//Ñòa chæ thanh ghi caàn naïp
6'd12
6'd13
6'd14
6'd15
6'd16
6'd17
6'd18
6'd19
: begin SDO=SD[15]; ACK1=I2C_SDAT; end
: SDO=SD[14];
: SDO=SD[13];
: SDO=SD[12];
: SDO=SD[11];
: SDO=SD[10];
: SDO=SD[9];
: SDO=SD[8];
// Thaû noåi ñöôøng truyeàn nhaäp ñeå ACK töø ADV7181B qua Port 2 chieàu I2C_DATA
6'd20 : SDO=1'bz;
//Giaù trò caàn ghi vaøo thanh ghi
6'd21
6'd22
6'd23
6'd24
6'd25
6'd26
6'd27
6'd28
: begin SDO=SD[7]; ACK2=I2C_SDAT; end
: SDO=SD[6];
: SDO=SD[5];
: SDO=SD[4];
: SDO=SD[3];
: SDO=SD[2];
: SDO=SD[1];
: SDO=SD[0];
// Thaû noåi ñöôøng truyeàn nhaäp ACK töø ADV7181B qua Port 2 chieàu I2C_DATA
6'd29 : SDO=1'bz;
//Thieát laäp côø STOP vaø baùo keát thuùc chuoãi
6'd30 : begin SDO=1'b0;
6'd31 : SCLK=1'b1;
SCLK=1'b0; ACK3=I2C_SDAT; end
6'd32 : begin SDO=1'b1; END=1; end
endcase
Trong ñoù SD_COUNTER thöïc hieän ñeám töø 0 -> 63, nhö vaäy vieäc naïp cho moät thanh
ghi chæ thöïc hieän trong 33 chu kyø ñaàu coøn 30 chu kyø sau thì Bus ôû traïng thaùi IDE (SCLK =
Trang 40
Chöông 5:
Khoái I2C_Video_Config
1 vaø SDO = 1) ñeå chôø chu kyø ghi tieáp theo. Ñoàng thôøi ñeå ñaûm baûo ñöôïc yeâu caàu veà daïng
soùng treân chaân I2C_SCLK vaø xaùc nhaän (ACK) ñaõ naïp xong thanh ghi, ta thöïc hieän:
wire I2C_SCLK = SCLK | ( ( (SD_COUNTER >= 4) & (SD_COUNTER <=30) )?
~CLOCK : 0 );
wire ACK=ACK1 | ACK2 |ACK3;
// khi xeùt xaùc nhaän ñaõ naïp xong thanh ghi ta söû duïng giaù trò buø cuûa ACK(tích cöï möùc thaáp),
chæ xaùc nhaän khi coù ñuû 3 xaùc nhaän ACK1, ACK2, ACK3
Vaø daïng soùng thu ñöôïc treân chaân I2C_SCLK nhö sau (END töø 0 leân 1 chæ ra raèng ñaõ
naïp xong giaù trò cho moät thanh ghi):
Hình 5.3: Daïng soùng moâ phoûng treân chaân I2C_SCLK
Trang 41
Chöông 6:
Khoái Timer trì hoaõn ban ñaàu
CHÖÔNG 6: KHOÁI TIMER TRÌ HOAÕN BAN ÑAÀU
6.1 SÔ ÑOÀ KHOÁI
Hình 6.1: Sô ñoà cuûa khoái Timer trì hoaõn ban ñaàu
Teân
Moâ taû
ICLK
Xung clock 50Mhz töø kit DE2
VS
Tín hieäu VS ( Vertical Sync ) töø ADV7181B
HS
Tín hieäu HS (Horizontal Sync) töø ADV7181B
TD_Stable
Baùo hieäu ADV7181b ñaõ hoaït ñoäng oån ñònh
RST0, RST1, RST3
Ngoõ ra cho pheùp caùc khoái khaùc baét ñaàu laøm vieäc
6.2 MOÂ TAÛ
Vôùi caáu hình ñaõ caøi ñaët ôû phaàn tröôùc, khi ñaõ hoaït ñoäng oån ñònh, daïng soùng do
ADV7181B phaùt ra nhö sau:
Vì vaäy ñeå phaùt hieän xem chip maõ hoùa naøy ñaõ hoaït ñoäng oån ñònh hay chöa khoái
TD_DETEC tieán haønh kieåm tra ñieàu kieän: VS ôû möùc cao trong 9 chu kyø lieân tieáp cuûa HS
roài chuyeån xuoáng möùc thaáp, neáu thoûa maõn thì ñöa TD_Stable leân möùc cao. Khi tín hieäu
TD_Stable leân möùc cao, khoái RESET_DELAY baét ñaàu ñeám leân theo xung nhip cuûa ICLK
Trang 42
Chöông 6:
Khoái Timer trì hoaõn ban ñaàu
(50MHz) ñeå tính thôøi ñieåm xuaát ra möùc 1 treân caùc chaân RST0, RST1, RST2. Caùc tín hieäu
naøy duøng ñeå khôûi ñoäng caùc khoái khaùc theo trình töï nhö sau:
1) Ban ñaàu thì xoùa taát caû döõ lieäu trong caùc khoái.
2) Tính töø thôøi ñieåm TD_Stable leân 1(dôn vò laø chu kyø clock 27MHz) :
Sau 1132461.5: tích cöïc RST0 ñeå kích hoaït khoái SDRAM BUFFER,
Sau 1698692.5: tích cöïc RST1 ñeå kích hoaït khoái Desize Horizon
Sau 2264923.5: tích cöïc RST2 ñeå kích hoaït khoái xöû lyù aûnh YUV vaøVGA Controller.
3) Giöõ nguyeân giaù trò ngoõ ra cho ñeán khi coù tín hieäu RESET heä thoáng thì laëp laïi.
Ñieåm caàn chuù yù ôû ñaây laø khi Desize Horizon hoaït ñoäng thì seõ xuaát
DATA_VALID cho pheùp ghi döõ lieäu vaøo SDRAM BUFFER. Roài phaûi chôø 1 khoaûng thôøi
gian ñeå ghi ñuû soá döõ lieäu caàn thieát môùi kích hoaït VGA Controller ñeå xuaát döõ lieäu töø
SDRAM BUFFER. Nhö ta ñaõ bieát 1 frame aûnh do ADV7181B xuaát ra bao goàm 900900
byte (525 line, moãi line coù 1716 byte) hay ñeå truyeàn heát 1 frame seõ maát 900900 chu kyø.
Do xung clock treân chaân LLC ñeå truyeàn caùc byte laø 27 MHz neân ta kieåm tra laïi caùc thôøi
ñieåm naøy nhö sau:
Laáy goác thôøi gian laø khi baét ñaàu frame ñaàu tieân
TD_Stable leân 1 khi Frame ñaàu tieân ñaõ phaùt ñöôïc 9 line: 9 x 1716 = 15444 chu kyø.
Frame thöù 3 ñöôïc baét ñaàu taïi thôøi ñieåm 2 x 900900 = 1801800
Khoái Desize Horizon ñöôïc kích hoaït taïi thôøi ñieåm 1714136.5 (= 15444 + 1698692.5)
töùc laø tröôùc khi frame thöù 3 baét ñaàu. Ñaûm baûo raèng khoái seõ xuaát ra DATA_VALID = 1 ôû
toaøn boä caùc Active Pixel cuûa frame thöù 3.
Khoái VGA controller ñöôïc kích hoaït taïi thôøi ñieåm 2280367.5 (=15444 + 2264923.5)
neân oRequest ñöôïc xuaát ra taïi thôøi ñieåm 2315727.5 (= 2280376.5 + 35360 ). Vôùi 35360
chu kyø laø khoaûng thôøi gian töø khi khoái ñöôïc reset cho ñeán khi oRequest leân 1. Vaäy vieäc
ñoïc töø SDRAM BUFFER ñöôïc kích hoaït khi frame thöù 3 ñaõ baét ñaàu ñöôïc 1 khoaûng thôøi
gian laø 513927.5 (= 2315727.5 - 1801800). Ñieàu naøy ñaûm baûo cho vieäc xuaát ra ñuùng töøng
frame töø SDRAM BUFFER maø ta seõ ñeà caäp kyõ hôn ôû phaàn moâ taû SDRAM BUFFER.
Caáu truùc vaø thieát keá cuûa khoái naøy töông ñoái ñôn giaûn neân ta khoâng ñöa löu ñoà giaûi
thuaät vaø code thöïc thi maø chæ moâ taû sô löôïc.
Trang 43
Chöông 7:
Khoái Desize Horizon
CHÖÔNG 7: KHOÁI DESIZE_HORIZON
7.1 SÔ ÑOÀ KHOÁI
Hình 7.1: Sô ñoà cuûa khoái Desize Horizontal
Teân
Moâ taû
CLK_27
Xung clock 27Mhz töø kit DE2
RST_N
Reset heä thoáng
TD_DATA[7:0]
Döõ lieäu hình aûnh töø ADV7181B
ACLR
Tín hieäu xoùa baát ñoàng boä do khoái Timer trì hoaõn cung caáp
CLK
Xung clock 27MHz töø chaân TD_CLK cuûa ADV7181B
Soá chia = 9
Soá chia cung caáp cho boä chia do ngöôøi thieát keá nhaäp vaøo
TV_X[9:0]
Vò trí cuûa Pixel trong haøng hieän haønh ñoàng thôøi cuõng laø soá
bò chia cung caáp cho boä chia
Thöông [9:0]
Thöông cuûa pheùp chia TV_X cho 9
Soá dö [9:0]
Soá dö cuûa pheùp chia TV_X cho 9
DATA_VALID
Ñoàng boä cho oYCbCr ñeå ñöa vaøo SDRAM_Controller
oYCbCr[15:0]
Chuoãi döõ lieäu aûnh ngoõ ra
DATA_VALID: ôû möùc 1 thì seõ cho pheùp Pixel ñi keøm ñöôïc ghi vaøo SDRAM thoâng
qua SDRAM_Controller. Do frame maø ADV7181B xuaát ra coù daïng 720x480 ñeå ñöa veà
chuaån 640x480 maø hình aûnh khoâng bò xeùn thì vôùi moãi 9 pixel lieân tieáp ta seõ loaïi boû Pixel
Trang 44
Chöông 7:
Khoái Desize Horizon
ñaàu tieân: khoâng cho pheùp ghi vaøo SDRAM baèng caùch ñöa DATA_VALID xuoáng möùc 0
8
(laáy ra 8 Pixel trong 9 Pixel : 640 720 )
9
Ñoàng thôøi ñeå ñaûm baûo ñöôïc chuoãi ñöa vaøo SDRAM_controller vaãn coù daïng chuoãi
CbYnCrYn+1 lieân tieáp thì phaûi hoaùn ñoåi giöõa 2 thaønh phaàn Cb vaø Cr cứ sau 2 laàn loaïi boû 1
Pixel.
Hình 7.2: Vò trí caùc Pixel trong chuoãi
Nhö ôû hình treân X laø vò trí caùc Pixel bò loaïi boû (bò boû qua khi hieån thò leân maøn hình),
khi ñoù chuoãi Pixel taïi S1 laø Cb4Y8Cb5 Y10 vaø taïi E1 laø Cr8Y17Cr9Y19 vì vaäy ñeå ñaûm baûo
chuoãi ra coù daïng CbYCrY lieân tieáp thì phaûi hoaùn ñoåi vò trí giöõa Cb vaø Cr trong khoaûng Cb5
Y10 .... Cr8Y17.
Trang 45
Chöông 7:
Khoái Desize Horizon
7.2 LÖU ÑOÀ GIAÛI THUAÄT
Trang 46
Chöông 7:
Khoái Desize Horizon
7.3 MOÂ TAÛ
TD_DATA laø chuoãi Pixel ñöôïc phaùt ra theo chuaån Video ITU656. Ta coù theå xem
moät frame thöïc söï baét ñaàu vôùi Odd Field khi bit F (bit 6 trong Byte cuoái cuûa tröôøng SAV
hay EAV) chuyeån töø 1 veà 0, vaäy ñeå xeùt ñieàu kieän baét ñaàu cuûa 1 frame ta phaûi ñôïi ñeán
tröôøng SAV hay EAV roài môùi kieåm tra giaù trò cuûa bit F:
Window
<=
{Window[15:0],iTD_DATA};
if(Window==24'hFF0000)
//khi phaùt hieän tröôøng SAV (EAV) thì gaùn giaù trò bit V cho FVAL vaø bit F cho Field
begin
FVAL <=
Field <=
!iTD_DATA[5];
iTD_DATA[6];
end
//kieåm tra ñieàu kieän bit F chuyeån töø 1 veà 0 ñeå baét ñaàu 1 frame nhö sau:
Pre_Field <= Field;
if({Pre_Field,Field}==2'b10)
Start
<= 1'b1;
//phaùt hieän tröôøng SAV
Assign SAV = (Window==24'hFF0000)&(iTD_DATA[4]==1'b0);
//khôûi ñoäng boä ñeám cont ñeå xaùc ñònh soá byte cuûa chuoãi Pixel trong 1 haøng
if(SAV)
begin
Cont <=
18'h0;
Active_video <= 1’b0;
end
else if(Cont<1440)
Cont
<=
Cont+1'b1;
//cöù 2 byte 1 Pixel ñöôïc neân khi xaùc ñònh vò trí Pixel trong haøng thì phaûi chia Cont cho 2:
assign
oTV_X
=
Cont>>1;
Ñeå thöïc hieän pheùp chia oTV_X cho 9 ta söû duïng boä chia töø thö vieän cuûa Quartus:
Trang 47
Chöông 7:
Khoái Desize Horizon
Phaàn Menu >> Tools >> MegaWizard Plug_in Manager… >> Create … taïo custom
môùi, ñaët teân laø DIV; choïn phaàn Arithmetic >> LPM_DEVIDE. Vì oTV_X 720 neân choïn
ñoä roäng bit cuûa soá bò chia (Numerator) laø 10, ñoä roäng bit cuûa soá chia (denominator) laø 4,
kieåu döõ lieäu khoâng daáu. Vì soá chia caàn nhaäp laø 9 neân ta gheùp vaøo khoái toång theå nhö sau:
DIV
u5
(
.aclr(!DLY0),
.clock(TD_CLK),
.denom(4'h9),
.numer(TV_X),
.quotient(Quotient),
.remain(Remain));
Trong ñoù quotient, remain laø thöông vaø soá dö, ta nhaäp caùc ñieàu kieän oTV_X coù chia
heát cho 9 vaøthöông laø soá leû thoâng qua caùc chaân iSkip vaø iSwap_CbCr baèng caùch khai baùo:
Desize_Horizontal
u4
(
.iTD_DATA(TD_DATA),
.oTV_X(TV_X),
.oYCbCr(YCbCr),
.oDVAL(TV_DVAL),
.iSwap_CbCr(Quotient[0]),
.iSkip(Remain==4'h0),
.iRST_N(DLY1),
.iCLK_27(TD_CLK) );
Sau ñoù gheùp 1 Y vôùi 1 Cr hay 1 Y vôùi 1 Cb ñoàng thôøi hoaùn ñoåi vò trí cuûa Cr vaø Cb taïi
caùc vò trí caàn thieát:
if(iSwap_CbCr)
begin
case(Cont[1:0])
0:
Cb
//hoaùn ñoåi Cb Vaø Cr
<=
iTD_DATA;
1:
2:
3:
{iTD_DATA,Cr};
<=
iTD_DATA;
{iTD_DATA,Cb};
YCbCr <=
Cr
YCbCr <=
endcase
end
else
begin
Trang 48
Chöông 7:
Khoái Desize Horizon
case(Cont[1:0])
0:
Cb
1:
YCbCr <=
// khoâng caàn hoaùn ñoåi
<=
iTD_DATA;
{iTD_DATA,Cb};
2:
Cr
3:
YCbCr <=
endcase
<=
iTD_DATA;
{iTD_DATA,Cr};
end
Sau ñoù xeùt theâm ñieàu kieän Cont[0] ñeå ñaûm baûo vieäc gheùp 1 byte Y vôùi 1 byte Cr hay
1 byte Y vôùi 1 byte Cb ñaõ hoaøn thaønh ñeå xuaát DATA_VALID :
if(Start && FVAL && Active_Video && Cont[0] && !iSkip
Data_Valid <=
1'b1;
)
else
Data_Valid
<=
1'b0;
Nhö vaäy Data_Valid chæ leân 1 ôû Active Pixel ñeå ñieàu khieån söï ghi vaøo SDRAM BUFFER.
Trang 49
Chöông 8:
Khoái SDRAM BUFFER
CHÖÔNG 8: KHOÁI SDRAM BUFFER
8.1 SÔ ÑOÀ KHOÁI
Goàm 2 khoái PLL vaø SDRAM Controller:
Hình 8.1: Sô ñoà cuûa khoái SDRAM BUFFER
Trang 50
Chöông 8:
Khoái SDRAM BUFFER
Teân
Moâ taû
RESET
Tín hieäu Reset heä thoáng
CLK_27
Xung clock 27Mhz töø kit DE2
CLK
Xung clock 81MHz PLL ñöa ra cho caùc ngoõ vaøo CLK cuûa khoái
SDRAM Controller ( chính laø taàn soá ñoïc cuûa SDRAM WRITE
FIFO, ghi cuûa SDRAM READ FIFO1 vaø SDRAM READ FIFO2)
SDR_CLK
Xuaát xung clock 81MHz cho SDRAM
WR_LOAD
RD1_LOAD
Laàn löôït laø tín hieäu ñeå xoùa baát ñoàng boä SDRAM WRITE FIFO,
SDRAM READ FIFO1 vaø SDRAM READ FIFO2 laáy töø chaân
RD2_LOAD
RST0 cuûa khoái Timer trì hoaõn ban ñaàu.
WR_DATA
Döõ lieäu aûnh ñöa vaøo SDRAM WRITE FIFO do Desize horizon caáp
WR
Cho pheùp ghi vaøo SDRAM WRITE FIFO laáy töø chaân
DATA_VALID cuûa khoái Desize horizon
WR_CLK
Xung clock 27MHz töø chaân LLC(TD_CLK) cuûa ADV7181B
RD_WRFIFO
Cho pheùp ñoïc döõ lieäu töø SDRAM WRITE FIFO
WRITE_SIDE[8:0] Soá töø (Word) hieän coù trong SDRAM WRITE FIFO
DATA_IN
Döõ lieäu töø SDRAM WRITE FIFO ñöa vaøo Control Center ñeå ghi
SDRAM.
DATA_OUT[15:0]
Döõ lieäu Control Center ñoïc töø SDRAM ñeå xuaát ra ngoaøi qua 1
trong 2 FIFO: SDRAM READ FIFO1, SDRAM READ FIFO2
RD1
RD2
RD1 = ~ RD2: Laàn löôït cho pheùp ñoïc döõ lieäu töø SDRAM READ
FIFO1, SDRAM READ FIFO2 vôùi söï ñieàu khieån cuûa khoái VGA
Cotroller thoâng qua chaân Request vaø VGA_Y.
RD1_CLK
RD2_CLK
Taàn soá ñoïc cuûa SDRAM READ FIFO1 vaø SDRAM READ FIFO2
ñöôïc laø 27MHz töø KIT DE2
READ_SIDE1[8:0] Soá töø (Word) hieän coù trong SDRAM READ FIFO1
READ_SIDE2[8:0] Soá töø (Word) hieän coù trong SDRAM READ FIFO2
WR_RDFIFO1
Cho pheùp ghi döõ lieäu SDRAM READ FIFO1
WR_RDFIFO2
Cho pheùp ghi döõ lieäu SDRAM READ FIFO2
RD1_DATA[15:0]
RD2_DATA[15:0]
Döõ lieäu ngoõ ra cung caáp cho khoái xöû lyù aûnh YUV
Caùc chaân DQ[15:0], SA[11:0], CKE, CAS_N, RAS_N, SDR_CLK, WE_N, BA[1:0],
CS_N[1:0], DQM[1:0] thì ñöôïc noái töông öùng vaøo chip SDRAM coù saün treân kit DE2.
Trang 51
Chöông 8:
Khoái SDRAM BUFFER
8.2 LÖU ÑOÀ GAÛI THUAÄT
Löu ñoà daønh cho vieäc ghi vaø xuaát töøng khoái döõ lieäu xen keõ töø SDRAM.
Trang 52
- Xem thêm -