Tải bản đầy đủ (.pdf) (13 trang)

ĐỒ ÁN CƠ SỞ Nghiên cứu VGA và xây dựng ứng dụng trên kit UP2_1 ppsx

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 (713.46 KB, 13 trang )

ĐỒ ÁN CƠ SỞ
Nghiên cứu VGA và xây dựng
ứng dụng trên kit UP2

GIỚI THIỆU ĐỀ TÀI
Đề tài này trình bày về thiết kế hệ thống xử lý ảnh Video trên FPGA
(Cyclone II) bao gồm các thành phần: Thu nhận và số hóa tín hiệu Video Analog,
xử lý ảnh Video số, hiển thị lên VGA.
Trong đề tài này ngoài Cyclone II các thành phần tích hợp trên Kit DE2 mà
ta sẽ sử dụng là: Chip mã hóa tín hiệu Video Analog ADV7181B, SDRAM
IS42S16400 để lưu trữ và xuất frame ảnh hợp lý, cổng VGA (chip ADV7123) để
hiển thị ảnh lên màn hình.

1. GIỚI THIỆU VỀ NGÔN NGỮ VHDL VÀ FPGA
1.1 NGÔN NGỮ VHDL
VHDL là một ngôn ngữ mô tả phần cứng (hardware description
language), mô tả hành vi của mạch điện hoặc hệ thống, từ đó mạch điện vật lý
hoặc hệ thống có thể được thực thi.
VHDL là viết tắt của VHSIC Hardware Description Language. Bản thân
VHSIC là viết tắt của Very High Speed Integrated Circuits (mạch tích hợp tốc
độ cao), lần đầu tiên được sáng lập bởi United State Department of Defense
trong những năm 80, sau đó tạo ra VHDL. Phiên bản đầu tiên là VHDL 87, lần
nâng cấp sau đó có tên là HDL 93. VHDL là ngôn ngữ mô tả phần cứng nguyên
gốc đầu tiên được chuẩn hóa bởi Institue of Electrical and Electronics
Engineers (IEEE), tới chuẩn IEEE 1076. Trong IEEE 1164, có một chuẩn được
thêm vào là giới thiệu hệ thống logic đa giá trị (multi-valued logic system).
Động cơ thúc đẩy cơ bản khi dùng VHDL (hay dùng Verilog) là VHDL là
một ngôn ngữ độc lập chuẩn của các nhà công nghệ, các nhà phân phối do đó
chúng có khả năng portable và kế thừa cao (reusable). Hai ứng dụng trực tiếp
chính của VHDL là trong mảng các thiết bị logic lập trình được (Programmable
Logic Devices) (bao gồm CPLDs – Complex Programmable Logic Devices và


FPGAs – Field Programmable Gate Arrays). Mỗi khi mã nguồn VHDL được viết,
chúng có thể được dùng để thực thi mạch điện trong các thiết bị lập trình được
(từ Altera, Xilinx, Almel, ) hoặc có thể gửi đến các xưởng chế tạo các chíp
ASIC. Hiện này, rất nhiều các chip thương mại phức tạp (ví dụ như các
microcontrollers ) được thiết kế dựa trên cách tiếp cận này.
Một điều chú ý về VHDL là trái ngược với các chương trình máy tính
thông thường được thực hiện tuần tự thì các câu lệnh được thực hiện song
song (concurrent). Vì lí do đó, nên VHDL thường được coi là một mã nguồn
hơn là một chương trình. Trong VHDL chỉ có các câu lệnh đặt trong PROCESS,
FUNCTION, hay PROCEDURE được thực thi tuần tự.
Một trong những tiện ích lớn của VHDL là cho phép tổng hợp mạch điện
hoặc hệ thống trong thiết bị khả lập trình (programmable devide) (PLD hoặc
FPGA) hoặc trong một hệ ASIC.
1.2 FPGA
FPGA (Field Programable Gate Arrays) là một thiết bị bán dẫn bao gồm
các khối logic lập trình được gọi là "Logic Block", và các kết nối khả trình. Các
khối logic có thể được lập trình để thực hiện các chức năng của các khối logic
cơ bản như AND, XOR, hoặc các chức năng kết hợp phức tạp hơn như decoder
hoặc các phép tính toán học. Trong hầu hết các kiến trúc FPGA, các khối logic
cũng bao gồm cả các phần tử nhớ. Đó có thể là các Flip-Flop hoặc những bộ
nhớ hoàn chỉnh hơn.
Các kết nối khả trình cho phép các khối logic có thể nối với nhau theo
thiết kế của người xây dựng hệ thống, giống như một bảng mạch khả trình.
Một số kiến trúc FPGA hiện nay còn có thể cho phép cấu hình lại từng
phần (partial re-configuration). Có nghĩa là cho phép một phần của thiết kế
được cấu hình lại trong khi những thiết kế khác vẫn tiếp tục hoạt động.
Một ưu điểm khác của FPGA, là người thiết kế có thể tích hợp vào đó các
bộ xử lý mềm (soft processor) hay vi xử lý tích hợp (embedded processor).
Các vi xử lý này có thể được thiết kế như các khối logic thông thường, mà mã
nguồn do các hãng cung cấp, thực thi các lệnh theo chương trình được nạp

riêng biệt, và có các ngoại vi được thiết kế linh động ( khối giao tiếp UART,
vào/ra đa chức năng GPIO, thernet ). Các vi xử lý này cũng có thể được lập
trình lại (re-configurable computing) ngay trong khi đang chạy.
FPGA được ứng dụng điển hình trong các lĩnh vực như: xử lý tín hiệu số,
xử lý ảnh, thị giác máy, nhận dạng giọng nói, mã hóa, mô phỏng
(emulation) FPGA đặc biệt mạnh trong các lĩnh vực hoặc ứng dụng mà kiến
trúc của nó yêu cầu một lượng rất lớn xử lý song song, đặc biết là mã hóa và
giải mã. FPGA cũng được sử dụng trong những ứng dụng cần thực thi các thuật
toán như FFT, nhân chập (convolution), thay thế cho vi xử lý.
Hiện nay công nghệ FPGA đang được sản xuất và hỗ trợ phần mềm bởi
các hãng như: Xilinx, Altera, Actel, Atmel Trong đó Xilinx và Altera là 2 hãng
hàng đầu. Xilinx cung cấp phần mềm miễn phí trên nền Windows, Linux, trong
khi Altera cung cấp những công cụ miễn phí trên nền Windows, Linux và
Solaris.
1.2.1 KIẾN TRÚC FPGA

Hình 1.1: kiến trúc FPGA
Mỗi nhà sản xuất FPGA có riêng cấu trúc FPGA, nhưng nhìn chung cấu
trúc được thể hiện giống như trong hình bên trên. Cấu trúc FPGA bao gồm có
configuration logic blocks (CLBs), configurable I/O blocks (IOB), và
programmable interconnect. Và tất nhiên, chúng có mạch clock để truyền tín
hiệu clock tới các logic block, và thêm vào đó có các logic resources như ALUs,
memory và có thể có cả decoders. Các phần tử lập trình được của FPGA có 2
dạng cơ bản là các RAM tĩnh (Static RAM) và anti - fuses.
Configurable I/O Blocks:
Configurable Logic Blocks (CLBs) bao gồm các Look-Up Tables (LUTs)
rất linh động có chức năng thực thi các logic và các phần tử nhớ dùng như là
các flip-flop hoặc các chốt (latch). CLB thực hiện phần lớn các chức năng logic
như là lưu trữ dữ liệu,
Configurable I/O Blocks:

Input/Output Blocks (IOBs) điều khiển dòng dữ liệu giữa các chân vào
ra I/O và các logic bên trong của FPGA. Nó bao gồm có các bộ đệm vào và ra
với 3 trạng thái và điều khiển ngõ ra dạng open collector. Phần lớn là có trở
kéo lên ở ngõ ra và thỉnh thoảng lại có trở kéo xuống.IOBs hỗ trợ luồng dữ liệu
2 chiều (bidirectional data flow) và hoạt động logic 3 trạng thái (3 state). Hỗ
trợ phần lớn các chuẩn tín hiệu, bao gồm một vài chuẩn tốc độ cao, như
Double Data-Rate (DDR).
Programmable Interconnect:
Interconnect ở FPGA khác xa so với ở CPLD, tuy nhiên lại giống với của gate
array ASIC. Có một line dài được dùng để nối các CLBs quan trọng mà chúng
lại ở cách xa nhau mà không gây ra quá nhiều trễ. Chúng có thể được dùng
như là các bus ở trong chip. Có các line ngắn được dùng để liên kết các CLBs
riêng rẽ nhưng đặt gần nhau. Và cũng thường có vài ma trận chuyển đổi
(switch matrices), giống như trong CPLD, nối giữa các line dài và ngắn lại với
nhau theo một số cách đặc biệt. Các chuyển đổi lập trình được (Programmable
switches) bên trong chip cho phép kết nối giữa CLBs tới các interconnect line
và giữa interconnect line với các line khác và với switch matrix. Các bộ đệm 3
trạng thái được dùng để kết nối phần lớn các CLBs với các line dài (long line),
tạo nên các bus. Các long line đặc biệt, gọi là các line clock toàn cục (global
clock lines), được thiết kế đặc biệt cho trở kháng thấp và nhờ đó mà thời gian
lan truyền nhanh hơn. Chúng được kết nối với các bộ đệm clock và với mỗi
phần tử được clock trong mỗi CLB. Đó là cách mà clock có thể phân phối bên
trong FPGA.
Mạch đồng hồ (Clock Circuitry):
Các khối vào ra với bộ đệm clock high drive gọi là các clock driver, nằm
rải rác xung quanh chip. Các bộ đệm này được nối với các chân clock vào và lái
các tín hiệu clock vào các đường clock toàn cục (global clock line) như mô tả ở
bên trên. Các đường clock được thiết kế sao cho thời gian thời gian lệch nhỏ
nhất và thời gian lan truyền nhanh. Thiết kế đồng bộ là yêu cầu bắt buộc với
FPGA, từ khi độ lệch tuyệt đối và trễ không được bảo đảm. Chỉ khi dùng các tín

hiệu clock từ các bộ đệm clock thì thời gian trễ tương đối và thời gian lệch mới
được đảm bảo.
2. CHÍP MÃ HÓA TÍN HIỆU VIDEO ADV7181B
2.1 CHỨC NĂNG VÀ DẠNG DỮ LIỆU NGÕ RA
Nguồn ảnh cần xử lý là tín hiệu analog video do DVD plalyer xuất ra. Kết
nối ngõ ra TV-Out composite của DVD Player với cổng TV-In trên Kit DE2 thì bộ
ADV7181B sẽ số hóa tín hiệu này sang chuẩn ITU - RTBT 656 là chuỗi các frame
ảnh. Mỗi điểm trong frame ảnh thu về được biểu diễn dưới dạng I(x,y) trong đó x,y
là tọa độ của pixel trên frame và I là mức xám tương ứng của pixel đó. Như vậy 1
frame ảnh thu được sẽ đươc biểu diễn dưới dạng một ma trận 2 chiều 720 x 525
với 720 là số pixel trên 1 hàng, 525 là số hàng trong 1 frame.
Chuẩn Video ITU – RBT601:
Chuẩn ITU – RBT 610/656 định nghĩa một thiết kế cho việc mã hóa một
khung bao gồm 525 (hoặc 625) line tín hiệu video tương tự thành dạng số, truyền
tín hiệu với xung clock 27MHz. Một single horizontal line có cấu trúc:
EAV BLANKING

SAV Active Video Data

EAV, BLANKING và SAV đều là các trường (field) phân biệt để đồng bộ
dữ liệu được truyền.
EAV và SAV đều là các trường 4 byte:
EAV: cho biết điểm kết thúc của Active Video Data trong line hiện hành
cũng như là điểm bắt đầu của line tiếp theo.
SAV: báo hiệu điểm bắt đầu của Active Video Data trong line hiện hành.
FFh 00h 00h XY

Byte thứ tư XY chứa thông tin về trường được truyền, tình trạng của khoảng
trống (field blanking) theo chiều dọc (Vertical) hoặc của dòng trống (line blanking)
theo chiều ngang (horizontal):

MSB LSB
1 F V H P3 P2 P1 P0

Bit Symbol Chức năng
7 1 Luôn ở mức 1
6 F Field Bit: 0 => Field1; 1 => Field2
5 V
Vertical Blanking Status Bit:
- Lên mức cao khi ở vertical field blanking
interval.
- Xuống mức thấp ở các trường hợp khác.

4 H
Horizontal Blanking Status bit:
- Nếu là trường SAV thì ở mức 0.
- Nếu là trường EAV thì ở mức 1.
3 P3 Protection bit 3
2 P2 Protection bit 2
1 P1 Protection bit 1
0 P0 Protection bit 0
Các Protecction bit thì dùng để kiểm tra và sửa lỗi phụ thuộc vào các bít
F,V,H. nhưng khi nhận Video Stream ta có thể bỏ qua các bit này nên ta không xét
đến.
Ý nghĩa của các bit F và V là để đảm bảo sự đồng bộ các horizontal line
trong một frame theo chiều dọc:
TABLE 1
Field interval definitions

625 525
V

-
digital field blanking

Field 1 Start
(V=1)
Finish
(V=0)

Field 2 Start
(V=1)
Finish
Line 624 Line 1
Line 23 Line 20
Line 311 Line 264
Line 336 Line 283


(V=0)

V
-
digital field identification

Field 1 F=0
Field 2 F=1
Line 1 Line 4
Line 313 Line 266

Cách đặt giá trị các bit F,V theo trường (Field 1 hoặc 2) và tính hiệu dụng
(Active or Blanking) sẽ được hiểu rõ hơn qua bảng mô tả một frame gồm 525

horizontal line sau :
Field 1 (F=0) : 262 line từ line 4 đến line 265; Field 2(F=1) : 263 line từ
line 266 đến line 3
Active or Blanking : các Active video data và các Vertical Blanking
Interval được sắp xếp xen kẽ nhau :
Active portion (V=0) Odd Field : 244 line từ 20->263; Even Field: 243 line
từ 283->525;
Vertical Blanking Interval (V=1): 38 line gồm 19 line từ 1->19 và 19 line từ
266->282;

Hình 2.1: Frame ảnh theo chuẩn ITU656
Một horizontal line tín hiệu sẽ gồm các thành phần sau:
Blanking: trong suốt thời gian truyền tín hiệu Video, ở giữa các Active video
signal Segments sẽ là các horizontal blanking interval. Giá trị của các byte trong
trường này sẽ phải phù hợp với các cấp độ (level) của các tín hiệu Cb, Cr và Y
tương ứng theo quy tắc sau: Cb = 80h; Y = 10h; Cr = 80h ta có chuỗi byte : 80h,
10h, 80h,…80h,10h.
Tùy vào số line tín hiệu mà chuỗi này sẽ bao gồm 268 byte (khung 525 line)
hoặc là 280 byte (khung 625 line).
Active Video Data: Có tất cả 1440 byte chứa đựng các thông tin về ảnh: 720
giá trị Y (luminace-brightness); 360 giá trị Cr (red chrominace); 360 giá trị Cb
(blue chromiance) được sắp xếp theo từng nhóm cứ một Cb và Cr thì có 2 giá trị Y:
CbYnCrYn+1 tạo thành chuỗi:

















………








Các trường SAV và EAV: mỗi trường dài 4 byte
Vậy trong hệ thống 525 line thì một Horizontal line sẽ bao gồm 1716 byte.
2.2 GIAO THỨC CÀI ĐẶT I2C
ADV7181B hỗ trợ một giao diện kết nối 2 dây tuần tự “a-wire serial
interface” I2C. Hai ngõ vào : dữ liệu tuần tự SDA, xung clock tuần tự SCLK mang
thông tin giữa ADV7181B với bộ điều khiển hệ thống I2C. Mỗi thiết bị tới (Slave)
sẽ được nhận ra bởi một địa chỉ duy nhất.
Các chân I2C của ADV7181B cho phép người dùng cài đặt, cấu hình bộ mã
hóa và đọc ngược lại dữ liệu VBI (vertical blank interval) bắt được. ADV7181B có
4 địa chỉ Slave cho tất cả thao tác đọc và ghi phụ thuộc vào mức logic của chân
ALSB. ALSB điều khiển bit 1 của địa chỉ Slave (Slave_address[1] ) bởi việc thay
đổi chân này có thể điều khiển được cả 2 bộ ADV7181B mà không có sự xung đột

vì trùng địa chỉ Slave. Bit thấp nhất của địa chỉ Slave( LSB hay là
Slave_address[0] ) quyết định thao tác ghi hay đọc: mức 1 đọc và mức 0 thì ghi. Ở
đây ta chỉ sử dụng 1 bộ ADV7123, giao thức I2C chủ yếu dùng để nạp dữ liệu cho
các thanh ghi nên chọn địa chỉ Slave cho chip mã hóa này là 0x40h từ bảng giá trị
địa chỉ I2C Slave dưới đây:

Để điều khiển thiết bị trên Bus thì phải có một giao thức đặc biệt đi kèm.
Đầu tiên Master sẽ khởi động truyền dữ liệu bằng việc thiết lập điều kiện bắt đầu
(SDA từ 1 xuống 0 trong khi SCLK vẫn ở mức cao) ở đây ta gọi là START, nó ám
chỉ rằng theo sau đó là một luồng địa chỉ hay dữ liệu. Các ngoại vi đáp trả lại
START và dịch chuyển 8 bit tiếp theo (7 bit địa chỉ và 1 bit đọc/ghi), các bit này
được truyền từ bit cao (MSB) đến thấp (LSB). Các ngoại vi khi đã nhận ra các địa
chỉ được truyền thì đáp ứng bằng cách giữ SDA = 0 trong toàn bộ chu kỳ thứ 9 của
xung clock gọi là ACK. Các thiết bị khác thì sẽ rút khỏi bus tại điểm này và bảo
toàn trạng thái IDE (khi cả SDA và SCLK đều ở mức cao để cho các thiệt bị theo
dõi 2 line này, chờ START và địa chỉ được truyền đúng). Bit đọc/ghi chỉ ra hướng
của dữ liệu, LSB = 0/1 thì master ghi/đọc thông tin vào/từ ngoại vi.
ADV7181B hoạt động như thiết bị Slave tiêu chuẩn trên Bus, chứa 196 địa
chỉ con (Subaddress là độ lệch của địa chỉ cần thao tác với địa chỉ thiết bị) để cho
phép truy cập các thanh ghi nội. Điều đó giải thích rằng byte đầu tiên là địa chỉ của
thiết bị và byte thứ 2 là địa chỉ con đầu tiên. Các địa chỉ con này tự động tăng dần
cho phép truy đọc/ghi ở địa chỉ con bắt đầu. Sự truyền dữ liệu thì luôn bị ngắt bởi
điều kiện dừng (STOP). Người dùng có thể truy cập tới bất cứ duy nhất 1 thanh ghi
ở địa chỉ con trên cơ sở 1-1 khi không có sự cập nhật toàn bộ các thanh ghi. Ở đề
tài này ta không sử dụng chế độ cập nhật toàn bộ mà chỉ truy cập vào các thanh
ghi cần thiết ở các địa chỉ con trên cơ sở 1-1.
START và STOP có thể xuất hiện ở bất kì đâu trong sự truyền dữ liệu, nếu
các điều kiện này được khẳng định ở ngoài chuỗi liên tục với các thao tác đọc và
ghi thông thường, thì nó tác động làm bus trở về trạng thái IDE. Nếu địa chỉ người
dùng phát ra không phù hợp (invalid) thì ADV7181B sẽ không gửi xác nhận ACK

và trở về trạng thái IDE.
Nếu các địa chỉ con tự động tăng dần rồi vượt quá giới hạn địa chỉ con cao
nhất:
 Nếu đang đọc thì những giá trị chứa đựng trong thanh ghi có địa chỉ con
cao nhất sẽ được tiếp tục đọc cho đến khi Master phát 1 NACK (SDK không bị
đưa xuống mức thấp trong toàn bộ chu ky thứ 9) để chỉ rằng việc đọc kết thúc.
Nếu đang ghi thì những giá trị của byte không phù hợp sẽ không được load

×