thiết kế hệ thống xử lý ảnh và video trên fpga

43 449 0
thiết kế hệ thống xử lý ảnh và video trên fpga

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương 4: Sơ lược hệ thống Trang 33 PHẦN II: THIẾT KẾ HỆ THỐNG CHƯƠNG 4: SƠ LƯC HỆ THỐNG 4.1. YÊU CẦU  Tìm hiểu về các giải thuật xử lý ảnh.  Ứng dụng giải thuật xử lý ảnh video vào phần cứng, cụ thể là mô tả phần cứng thực hiện giải thuật bằng ngôn ngữ Verilog HDL.  Ứng dụng FPGAs để kiểm tra kết quả, đồng thời so sánh với kết quả với hình ảnh video ban đầu. 4.2 NỘI DUNG THỰC HIỆN  Lấy nguồn tín hiệu video từ DVD ( VCD ) Player đưa vào kit DE2 của Altera qua cổng TV-IN.  Sử dụng phần mềm Quartus II của Altera để viết chương trình bằng ngôn ngữ Verilog HDL và giao tiếp với kit DE2.  Thiết kế khối lọc trung bình và dò biên cho ảnh ngõ ra bằng Verilog HDL.  Giao tiếp với ADV7181B, VGA, SDRAM trên kit DE2.  Hiển thò kết quả lên Monitor và so sánh với tín hiệu gốc Chương 4: Sơ lược hệ thống Trang 34 4.3 SƠ ĐỒ THIẾT KẾ VÀ NGUYÊN LÝ HOẠT ĐỘNG 4.3.1 SƠ ĐỒ THIẾT KẾ Hình 4.1: Sơ đồ hệ thống 4.3.2 NGUYÊN LÝ HOẠT ĐỘNG  Khối I2C_Video_Config: với giao thức giao tiếp I2C sẽ đặt giá trò cho các thanh ghi của bộ mã hóa ADV7181 để cấu hình hoạt động cho chip mã hóa này.  Khối Timer trì hỗn ban đầu: Sau chuỗi khới động, ADV7181B rơi vào thời kì không ổn đònh, khối sẽ phát hiện thời kì không ổn đònh này rôiø tính toán thời điểm bắt đầu làm việc của các khối khác.  Khối Desize_Horizon: Lấy ra chuỗi liên tục các Pixel trong dòng dữ liệu do ADV7181B xuất ra đồng thời đònh lại kích thước frame ảnh từ dạng 720 x 480 sang chuẩn VGA 640 x480. Chương 4: Sơ lược hệ thống Trang 35  SDRAM BUFFER: Nhận dữ liệu và tín hiệu điều khiển ghi từ khối Desize Horizon để ghi giá trò các Pixel vào SDRAM, đồng thời cũùng nhận tín hiệu từ VGA controller để điều khiển việc xuất dữ liệu, đòa chỉ phù hợp (xuất xen kẽ các line thuộc Odd field và Even fieldû)  Khối xử lý ảnh YUV: Xử lý dữ liệu ảnh nhận được từ SDRAM BUFFER rồi xuất ra dữ liệu ảnh cho khối Convert YUV to RGB  Khối ConvertYUVtoRGB: ADV7181B xuất ra ảnh video dạng YUV, để có thể hiển thò lên VGA thì trước tiên chuyển đổi thành dạng RGB.  Khối VGA_Controller: Nhận dữ liệu ảnh RGB từ khối ConvertYUVtoRGB để xuất dữ liệu và tín hiệu đồng bộ cho Video DAC 7123, đồng thời cũng phát ra các tín hiệu điều khiển SDRAM_BUFFER để xuất dữ liệu từ SDRAM. Chương 5: Khối I2C_Video_Config Trang 36 PHẦN III: NỘI DUNG THIẾT KẾ CHƯƠNG 5: Khối I2C_VIDEO_CONFIG 5.1 SƠ ĐỒ KHỐI Hình 5.1: Sơ đồ khối I2C_Video_Config Tên Mô tả ICLK Xung Clock 50MHz từ Kit DE2 RESET Tín hiệu Reset hệ thống I2C_SCLK Ngõ ra chứa xung Clock cung cấp cho ADV7181B I2C_DATA Port 2 chiều để cấu hình giá trò các thanh ghi của ADV7181B Hình 5.2: Dạng sóng để truyền dữ liệu và cấu trúc ghi với giao thức I2C Chương 5: Khối I2C_Video_Config Trang 37 5.2 LƯU ĐỒ GIẢI THUẬT: 5.3 MÔ TẢ Vai trò của khối chỉ là ghi giá trò vào các thanh ghi của ADV7181B nên có thể chọn xung clock làm việc của khối là 20KHz nhờ vào bộ chia tần từ tần số 50MHz. Đòa chỉ Slaver của ADV7181B là 40h nên ta sử dụng cách gán mI2C_DATA <= {8’h40, LUT_DATA}. Với mI2C_DATA là chuỗi dữ liệu cần truyền trên Bus và LUT_DATA chứa đòa chỉ của thanh ghi và giá trò cần nạp. Khi reset, bắt đầu cấu hình lại cho ADV7181B bằng cách xóa giá trò các bộ đếm và cờ. Sau đó để nạp giá trò cho các thanh ghi ta sử dụng máy trạng thái sau: Chương 5: Khối I2C_Video_Config Trang 38 always@(posedge mI2C_CTRL_CLK or negedge iRST_N) begin if(!iRST_N) begin LUT_INDEX <= 0; mSetup_ST <= 0; mI2C_GO <= 0; end else begin if(LUT_INDEX < LUT_SIZE) //LUT_SIZE làsố lần nạp giá trò cho các thanh ghi cần thiết vàLUT_INDEX //là biến đếm để ánh xạ đến đòa chỉ của các thanh ghi và giá trò cần nạp. begin case(mSetup_ST) 0: begin // Nhập chuỗi dữ liệu cần truyền để đặt giá trò cho các thanh ghi mI2C_DATA <= {8'h40,LUT_DATA}; mI2C_GO <= 1; mSetup_ST <= 1; end 1: begin if(mI2C_END) // mI2C_END là cờ báo khi truyền hết chuỗi dữ liệu Begin //Có xác nhận ACK là đã nạp xong giá trò cho 1 thanh ghi từ ADV thì nhảy tới trạng thái 2 if(!mI2C_ACK) mSetup_ST <= 2; //Không có xác nhận thì nhảy về trạng thái 0 else mSetup_ST <= 0; mI2C_GO <= 0; end end 2: begin Chương 5: Khối I2C_Video_Config Trang 39 // Tăng LUT_INDEX lên 1 để nhảy đến thanh ghi mới rồi quay về trạng thái 0 LUT_INDEX <= LUT_INDEX+1; mSetup_ST <= 0; end endcase end end end Ta chỉ cần đặt giá trò cho một số thanh ghi cần thiết nên không thực hiện việc tăng dần đòa chỉ thanh ghi mà sẽ ánh xạ từ LUX_INDEX đến LUX_DATA nhờ vào lệnh case, chẳng hạn như khi LUX_INDEX =27 để nạp giá trò 8’h50 vào thanh ghi có đòa chỉ 8’h00 ta có cấu trúc: case(LUX_INDEX): 27: LUT_DATA <= 16'h0050; Để ADV7181B có thể phát hiện chuẩn video NTSC thì ta sẽ nạp các giá trò cho các thanh ghi theo bảng giá trò cài đặt ở phần mô tả ADV7181B . Tuy nhiên khi truyền chuỗi này trên bus ta cần phải thêm các bit đồng bộ: 1 bit cho trạng thái IDE, 2 bit để thiết lập cờ START, 3 bit để chờ 3 ACK do ADV xác nhận, 3 bit để thiết lập cờ STOP và báo kết thúc chuỗi, vì vậy thực sự chuỗi dài 33 bit: case (SD_COUNTER) 6'd0 : begin ACK1=0 ;ACK2=0 ;ACK3=0 ; END=0; SDO=1; SCLK=1;end //Thiết lập cờ START 6'd1 : begin SD=I2C_DATA;SDO=0;end 6'd2 : SCLK=0; //Đòa chỉ SLAVER củ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]; Chương 5: Khối I2C_Video_Config Trang 40 6'd9 : SDO=SD[17]; 6'd10 : SDO=SD[16]; //Thả nổi đường truyền để nhập ACK từ ADV7181B qua Port 2 chiều I2C_DATA 6'd11 : SDO=1'bz; //Đòa chỉ thanh ghi cần nạp 6'd12 : begin SDO=SD[15]; ACK1=I2C_SDAT; end 6'd13 : SDO=SD[14]; 6'd14 : SDO=SD[13]; 6'd15 : SDO=SD[12]; 6'd16 : SDO=SD[11]; 6'd17 : SDO=SD[10]; 6'd18 : SDO=SD[9]; 6'd19 : SDO=SD[8]; // Thả nổi đường truyền nhập để ACK từ ADV7181B qua Port 2 chiều I2C_DATA 6'd20 : SDO=1'bz; //Giá trò cần ghi vào thanh ghi 6'd21 : begin SDO=SD[7]; ACK2=I2C_SDAT; end 6'd22 : SDO=SD[6]; 6'd23 : SDO=SD[5]; 6'd24 : SDO=SD[4]; 6'd25 : SDO=SD[3]; 6'd26 : SDO=SD[2]; 6'd27 : SDO=SD[1]; 6'd28 : SDO=SD[0]; // Thả nổi đường truyền nhập ACK từ ADV7181B qua Port 2 chiều I2C_DATA 6'd29 : SDO=1'bz; //Thiết lập cờ STOP và báo kết thúc chuỗi 6'd30 : begin SDO=1'b0; SCLK=1'b0; ACK3=I2C_SDAT; end 6'd31 : SCLK=1'b1; 6'd32 : begin SDO=1'b1; END=1; end endcase Trong đó SD_COUNTER thực hiện đếm từ 0 -> 63, như vậy việc nạp cho một thanh ghi chỉ thực hiện trong 33 chu kỳ đầu còn 30 chu kỳ sau thì Bus ở trạng thái IDE (SCLK = Chương 5: Khối I2C_Video_Config Trang 41 1 và SDO = 1) để chờ chu kỳ ghi tiếp theo. Đồng thời để đảm bảo được yêu cầu về dạng sóng trên chân I2C_SCLK và xác nhận (ACK) đã nạp xong thanh ghi, ta thực hiện: wire I2C_SCLK = SCLK | ( ( (SD_COUNTER >= 4) & (SD_COUNTER <=30) )? ~CLOCK : 0 ); wire ACK=ACK1 | ACK2 |ACK3; // khi xét xác nhận đã nạp xong thanh ghi ta sử dụng giá trò bù của ACK(tích cự mức thấp), chỉ xác nhận khi có đủ 3 xác nhận ACK1, ACK2, ACK3 Và dạng sóng thu được trên chân I2C_SCLK như sau (END từ 0 lên 1 chỉ ra rằng đã nạp xong giá trò cho một thanh ghi): Hình 5.3: Dạng sóng mô phỏng trên chân I2C_SCLK Chương 6: Khối Timer trì hoãn ban đầu Trang 42 CHƯƠNG 6: KHỐI TIMER TRÌ HOÃN BAN ĐẦU 6.1 SƠ ĐỒ KHỐI Hình 6.1: Sơ đồ của khối Timer trì hoãn ban đầu Tên Mô tả ICLK Xung clock 50Mhz từ kit DE2 VS Tín hiệu VS ( Vertical Sync ) từ ADV7181B HS Tín hiệu HS (Horizontal Sync) từ ADV7181B TD_Stable Báo hiệu ADV7181b đã hoạt động ổn đònh RST0, RST1, RST3 Ngõ ra cho phép các khối khác bắt đầu làm việc 6.2 MÔ TẢ Với cấu hình đã cài đặt ở phần trước, khi đã hoạt động ổn đònh, dạng sóng do ADV7181B phát ra như sau: Vì vậy để phát hiện xem chip mã hóa này đã hoạt động ổn đònh hay chưa khối TD_DETEC tiến hành kiểm tra điều kiện: VS ở mức cao trong 9 chu kỳ liên tiếp của HS rồi chuyển xuống mức thấp, nếu thỏa mãn thì đưa TD_Stable lên mức cao. Khi tín hiệu TD_Stable lên mức cao, khối RESET_DELAY bắt đầu đếm lên theo xung nhip của ICLK [...]... để đưa vào khối xử lý ảnh YUV : assign mYCbCr_d = !VGA_Y[0]? m1YcbCr : m2YCbCr; với !VGA_Y[0] là do khối VGA Controller đưa ra cho biết line đang xuất trên màn hình ở vò trí lẻ hay chẵn để chọn dữ liệu xuất ra tương ứng Trang 61 Chương 9: Khối Xử lý ảnh YUV CHƯƠNG 9: KHỐI XỬ LÝ ẢNH YUV 9.1 SƠ ĐỒ KHỐI Hình 9.1: Sơ đồ của khối xử lý ảnh YUV Tên Mô tả CLK Xung clock 27Mhz từ kit DE2 RESET Reset hệ thống. .. {out1,out2} : {out3,out4}; Khối sẽ xuất ra giá trò của pixel ảnh tương ứng với giá trò pixel ảnh nằm chính giữa cửa sổ Có 1 vấn đề được đặt ra ở đây là khi một frame vừa bắt đầu thì cửa sổ chưa có đủ 9 Pixel nhưng bộ xử lý ảnh vẫn thực hiện lọc và xuất pixel sẽ dẫn đến sai số ở biên ảnh Đồng thời khối Image Process cần có 1 số chu kỳ xung clock để xử lý xong ảnh Tuy nhiên với 1 frame kích thước 640 x 480 thì... 640, số Tap là 1, và đánh dấu chọn để sử dụng chân clock enable Như vậy ta được cửa sổ Pixel:  P1 P2 P3     P4 P5 P6   P7 P8 P9    Trang 63 Chương 9: Khối Xử lý ảnh YUV Khối xử lý ảnh: ta chọn 1 trong hai chế độ làm việc:lọc trung bình và tách biên 1 2 1 1   Lọc trung bình: thực hiện phép tương quan cửa sổ pixel với mặt nạ  2 4 2 16   1 2 1 Tuy nhiên dữ liệu vào là 16 bit với 8... ra là với chu kỳ truy xuất như giản đồ trên thì lượng dữ liệu xuất ra sẽ gấp 2 lần lượng dữ liệu ghi vào SDRAM Tuy nhiên quá trình trên còn chòu ảnh hưởng của các ngõ vào RD1 và RD2, (tác động đến các giá trò READ_SIDE1 và READ_SIDE2) sẽ điều khiển các thao tác xuất dữ liệu từ SDRAM vào SDRAM READ FIFO như sau: +RD1 = ~RD2 = 1: ngừng tác vụ xuất dữ liệu từ SDRAM vào SDRAM READ FIFO2 tức là chỉ xuất các... hợp ta được một khối với khai báo như sau (trong đó radical là dữ liệu 17 bit ngõ vào, q là kết quả 9 bit của phép lấy cănt,t a không sữ dụng chân remainder): module SQUARE ( radical, q, remainder); Thực chất khối xử lý ảnh chỉ là các cặp khối lọc biên, lọc trung bình được ghép song song nhau Mỗi khối trong cặp xử lý trên từng 8 bit dữ liệu, sau đó ghép chúng lại với nhau (out3, out 4 tương tự là các... 65 Chương 9: Khối Xử lý ảnh YUV module MULT2 ( dataa, datab, result); Để lấy phép bình phương ta nhập cùng một giá trò cho 2 ngõ vào dataa và datab  Dùng bộ lấy căn bậc 2 từ thư viện của Quartus để tính G từ tổng hai kết quả trên: Phần Menu >> Tools >> MegaWizard Plug_in Manager… >> Create … tạo custom mới, đặt tên là SQUARE, chọn phần Arithmetic >> ALTSQRT Chọn độ rộng bit ngõ vào là 16 bit.Sau khi... hoạt khối xử lý ảnh YUV vàVGA Controller 3) Giữ nguyên giá trò ngõ ra cho đến khi có tín hiệu RESET hệ thống thì lặp lại  Điểm cần chú ý ở đây là khi Desize Horizon hoạt động thì sẽ xuất DATA_VALID cho phép ghi dữ liệu vào SDRAM BUFFER Rồi phải chờ 1 khoảng thời gian để ghi đủ số dữ liệu cần thiết mới kích hoạt VGA Controller để xuất dữ liệu từ SDRAM BUFFER Như ta đã biết 1 frame ảnh do ADV7181B xuất... phần mô tả SDRAM BUFFER Cấu trúc và thiết kế của khối này tương đối đơn giản nên ta không đưa lưu đồ giải thuật và code thực thi mà chỉ mô tả sơ lược Trang 43 Chương 7: Khối Desize Horizon CHƯƠNG 7: KHỐI DESIZE_HORIZON 7.1 SƠ ĐỒ KHỐI Hình 7.1: Sơ đồ của khối Desize Horizontal Tên Mô tả CLK_27 Xung clock 27Mhz từ kit DE2 RST_N Reset hệ thống TD_DATA[7:0] Dữ liệu hình ảnh từ ADV7181B ACLR Tín hiệu xóa... lệnh đọc và ghi SDRAM Rồi dùng biến đếm ST (bắt đầu từ 0) để thiết lập khoảng thời gian cần thiết cho 1 tác vụ bao gồm: thời gian chờ bus đảm bảo rảnh hoàn (đối với lệnh đọc là SC_CL+SC_RCD+1, ghi là SC_CL-1, phụ thuộc vào cấu trúc của SDRAM: SC_CL = SC_RCD = 3 được khai báo trong tập tin Sdram_Params.h ), thời gian thực hiện tác vụ (mLENGTH = 128).Tạo tín hiệu điều khiển việc ghi đọc các FIFO và cờ báo... multi_4 + multi_6 + multi_8; assign multi = multi1 + multi2 + multi_5; -Chia tổng trên cho 16 tương đương với viêc lấy 8 bit cao: assign out = multi[11:4];  Tách biên: tương tự như trên ta cũng tách dữ liệu 16bit ra từng thành phần để xử lý với các bước thực hiện như sau : 1)Tính | G x | và | Gy |: Chập ma trận cửa sổ 3×3 pixels ảnh của frame với hai mặt nạ lọc theo phương pháp gradient với măt nạ lọc Prewitt . Sơ lược hệ thống Trang 33 PHẦN II: THIẾT KẾ HỆ THỐNG CHƯƠNG 4: SƠ LƯC HỆ THỐNG 4.1. YÊU CẦU  Tìm hiểu về các giải thuật xử lý ảnh.  Ứng dụng giải thuật xử lý ảnh video vào phần. Chương 4: Sơ lược hệ thống Trang 34 4.3 SƠ ĐỒ THIẾT KẾ VÀ NGUYÊN LÝ HOẠT ĐỘNG 4.3.1 SƠ ĐỒ THIẾT KẾ Hình 4.1: Sơ đồ hệ thống 4.3.2 NGUYÊN LÝ HOẠT ĐỘNG  Khối I2C _Video_ Config: với giao. HDL và giao tiếp với kit DE2.  Thiết kế khối lọc trung bình và dò biên cho ảnh ngõ ra bằng Verilog HDL.  Giao tiếp với ADV7181B, VGA, SDRAM trên kit DE2.  Hiển thò kết quả lên Monitor và

Ngày đăng: 14/10/2014, 00:59

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan