Tài liệu Thiết kế hệ thống xử lý ảnh và video trên fpga

  • Số trang: 43 |
  • Loại file: PDF |
  • Lượt xem: 107 |
  • Lượt tải: 0
nhattuvisu

Đã đăng 27125 tài liệu

Mô tả:

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 -