Đại Học Quốc Gia Tp. Hồ Chí Minh
TRƯỜNG ĐẠI HỌC BÁCH KHOA
-----------------
TRẦN QUANG VIỆT
THIẾT KẾ BỘ BIẾN ĐỔI SA-DCT/IDCT
(TRONG MÃ HÓA MPEG-4) TRÊN FPGA
Chuyên ngành : Kỹ Thuật Điện Tử
LUẬN VĂN THẠC SĨ
Tp.HCM, tháng 12 năm 2008
CƠNG TRÌNH ĐƯỢC HỒN THÀNH TẠI
TRƯỜNG ĐẠI HỌC BÁCH KHOA
ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
Cán bộ hướng dẫn khoa học : ............................................................................
(Ghi rõ họ, tên, học hàm, học vị và chữ ký)
Cán bộ chấm nhận xét 1 : ..................................................................................
(Ghi rõ họ, tên, học hàm, học vị và chữ ký)
Cán bộ chấm nhận xét 2 : ..................................................................................
(Ghi rõ họ, tên, học hàm, học vị và chữ ký)
Luận văn thạc sĩ được bảo vệ tại HỘI ĐỒNG CHẤM BẢO VỆ LUẬN VĂN
THẠC SĨ
TRƯỜNG ĐẠI HỌC BÁCH KHOA, ngày . . . . . tháng . . . . năm . . . . .
ĐẠI HỌC QUỐC GIA TP. HCM
TRƯỜNG ĐẠI HỌC BÁCH KHOA
----------------
CỘNG HOÀ XÃ HỘI CHỦ NGHIÃ VIỆT NAM
Độc Lập - Tự Do - Hạnh Phúc
---oOo--Tp. HCM, ngày . . . . . tháng . . . . . năm . . . . . .
NHIỆM VỤ LUẬN VĂN THẠC SĨ
Họ và tên học viên: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Giới tính : Nam
/ Nữ
Ngày, tháng, năm sinh : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nơi sinh : . . . . . . . . . . . . .
…………………………………………………………………………………………………...
Chuyên ngành : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
Khoá (Năm trúng tuyển) : . . . . . . . . . . . ………………………………………………………..
1- TÊN ĐỀ TÀI: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
...
2- NHIỆM VỤ LUẬN VĂN: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
............................................................................
............................................................................
............................................................................
............................................................................
............................................................................
............................................................................
............................................................................
............................................................................
............................................................................
............................................................................
............................................................................
............................................................................
3- NGÀY GIAO NHIỆM VỤ : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4- NGÀY HOÀN THÀNH NHIỆM VỤ : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5- HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN (Ghi đầy đủ học hàm, học vị ): . . . . . . . . . . . . . . .
.........................................................................
Nội dung và đề cương Luận văn thạc sĩ đã được Hội Đồng Chuyên Ngành thông qua.
CÁN BỘ HƯỚNG DẪN
(Họ tên và chữ ký)
CHỦ NHIỆM BỘ MÔN
QUẢN LÝ CHUYÊN NGÀNH
(Họ tên và chữ ký)
LỜI CẢM ƠN
Đề tài luận văn này được hoàn thành là sự nổ lực rất lớn của bản thân người thực hiện
trong việc tìm tịi, nghiên cứu và khơng ngừng học hỏi. Tuy nhiên, nó khơng thể hồn
thành tốt nếu khơng có sự góp ý, giúp đỡ, và động viên từ nhiều người. Tôi xin chân
thành cảm ơn PGS.TS. Dương Hoài Nghĩa và Ths. Hồ Trung Mỹ những người đã trực
tiếp hướng dẫn và góp ý cho tơi trong suốt thời gian thực hiện luận văn. Tôi xin gửi lời
cảm ơn tới vợ và gia đình, những người tạo hậu phương vững chắc về mọi mặt để tơi
có thể n tâm hồn thành tốt nhiệm vụ. Tơi cũng xin chân thành cảm ơn bạn bè, đồng
nghiệp những người luôn sẵn sàng giúp đỡ tôi trong công việc, chia sẽ về kinh nghiệm
và kiến thức để đề tài được hoàn thành một cách tốt nhất.
Tp.HCM, ngày 01 tháng 12 năm 2008
Người thực hiện luận văn
Trần Quang Việt
TÓM TẮT
MPEG-4 được phát triển bởi Moving Picture Experts Group, là một chuẩn mã hóa và
tạo dịng bit để mơ tả các đối tượng về hình ảnh và âm thanh cũng như mô tả sự kết
hợp của chúng với nhau. MPEG-4 đưa ra các cơng cụ để mã hóa các dạng đối tượng
một cách độc lập, sau đó các đối tượng được kết hợp lại với nhau theo một kịch bản để
tạo nên một cảnh video. Kỹ thuật này làm cho MPEG-4 có được tỷ số nén cao, có thể
truyền được trên những kênh truyền có dung lượng thấp, và đặc biệt hơn với cách mã
hóa đối tượng MPEG-4 mở ra các ứng dụng có tính tương tác cao ví dụ như video
game. Một trong những công cụ đưa ra đễ mã hóa đối tượng hình ảnh là biến đổi
Cosine rời rạc có chiều dài thay đổi theo hình dạng (Shape Adaptive- Discrete Cosine
Transform – SA-DCT). SA-DCT là một trong những phần tính tốn chiếm nhiều thời
gian nhất trong hệ thống mã hóa, chính vì thế nó cần được tăng tốc bằng cách thực
hiện trên phần cứng. Đề tài này lựa chọn FPGA làm phần cứng để thực hiện tính SADCT và biến đổi ngược của nó SA-IDCT. Đề tài lựa chọn giải pháp số học phân phối
để thực hiện các phép nhân bằng các phép cộng và phép dịch bit, từ đó xây dựng các
đường dữ liệu hoạt động theo kiểu đường ống nhằm loại bỏ các bộ nhân để giảm tài
nguyên và tăng tốc độ thực thi. Các khối điều khiển thu phát, xử lý dữ liệu và điều
khiển đường dữ liệu sau đó được đưa vào để tạo nên các bộ tính SA-DCT và SA-IDCT
hồn chỉnh. Các thiết kế được mô tả dùng ngôn ngữ mô tả phần cứng VHDL, sau đó
tổng hợp trên FPGA Cyclone II EP2C35 của Altera dùng phần mềm Quatus II 6.0
Web Edition. Hoạt động và tính chính xác trong tính tốn của các bộ biến đổi được
kiểm tra dùng phần mềm ModelSim-Altera 6.0d Web Edition. Cuối cùng các thiết kế
được kiểm tra trên FPGA Cyclone II EP2C35 dùng Kit DE2 kết hợp với công cụ InSystem Memory Content Editor hỗ trợ bởi Quatus II của Altera. Các kết quả thực hiện
cho thấy thiết kế phù hợp với các đòi hỏi của MPEG-4 về tính chính xác và thời gian
thực thi. 356 chu kỳ là thời gian xấu nhất để khôi phục một khối 8x8 các hệ số DCT về
các điểm ảnh ban đầu dùng SA-IDCT như vậy chỉ cần hoạt động với tần số 25.4MHz
thì thiết kế có thể đáp ứng được ứng dụng thời gian thực cho MPEG-4 CIF
352x288x30(4:2:0).
Mục lục
Trang
Chương 1. GIỚI THIỆU …………………………………………………………………... 1
1.1. Giới thiệu ….…………………………………………………………………………..... 1
1.2. Tình hình nghiên cứu……….…………………………………………………………… 2
1.3. Mục tiêu của đề tài ……………………………………………………………………… 3
Chương 2. PHÉP BIẾN ĐỔI 1D-DCT/IDCT VÀ GIẢI PHÁP THỰC HIỆN TRÊN
FPGA ………………………………………………............................................................ 5
2.1. Biến đổi thuận 1D-DCT ………………………………………………………………. 5
2.2. Biến đổi ngược 1D-IDCT ……………………………………………………………... 6
2.3. Giải pháp thực hiện 1D-DCT/IDCT trên FPGA ………………………………………... 7
2.3.1. Số học phân phối và cách thực hiện trên FPGA………………………………………. 7
2.3.2. Đường dữ liệu tính DCT N điểm……………………………………………………… 12
2.3.3. Đường dữ liệu tính IDCT N điểm……………………………………………………... 15
Chương 3. BIẾN ĐỔI SA-DCT VÀ SA-IDCT TRONG MÃ HÓA MPEG-4 ………….. 20
3.1. Giới thiệu ……………………………………………………………………………….. 20
3.2. Biến đổi thuận SA-DCT …………………………………………………………………21
3.3. Biến đổi ngược SA-IDCT ………………………………………………………………. 22
Chương 4. XÂY DỰNG KIẾN TRÚC BỘ BIẾN ĐỔI SA-DCT/IDCT………………… 24
4.1. Kiến trúc bộ biến đổi thuận SA-DCT …………………………………………………... 24
4.1.1. Kiến trúc khối INPUT BUFFER………………………………………………….. 26
4.1.2. Kiến trúc khối TRAM ……………………………………………………………. 26
4.1.3. Kiến trúc khối 1D-DCT DATAPATH ……………………………………………. 27
4.1.4. Kiến trúc khối CONTROL LOGIC ………………………………………………. 28
4.2. Kiến trúc bộ biến đổi ngược SA-IDCT …………….…………………………………… 37
4.2.1. Khối INPUT CONTROL …………………………………………………………. 39
4.2.2. Khối DATAPATH CONTROL ………………………………………………….. 52
4.2.3. Kết hợp khối DATAPATH CONTROL và INPUT CONTROL …………………. 55
Chương 5. MÔ TẢ KIẾN TRÚC BỘ BIẾN ĐỔI SA-DCT/IDCT DÙNG NGƠN NGỮ
VHDL VÀ CÁC KẾT QUẢ ………………………………………………………………. 57
5.1. Mơ tả kiến trúc bộ biến đổi SA-DCT dùng VHDL và các kết quả …………………….. 57
5.2. Mô tả kiến trúc bộ biến đổi SA-IDCT dùng VHDL và các kết quả ……………………. 63
5.3. Kiểm tra tính chính xác của bộ khơi phục SA-IDCT theo yêu cầu của MPEG-4 ……… 69
5.4. Kiểm tra hoạt động của các bộ biến đổi trên phần cứng FPGA ………………………... 70
Chương 6. SO SÁNH CÁC KẾT QUẢ, KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CỦA
ĐỀ TÀI …………………………………………………………………………………….. 73
6.1. So sánh các kết quả ……………………………………………………………………...73
6.2. Kết luận …………………………………………………………………………………. 74
6.3. Hướng phát triển của đề tài ……………………………………………………………... 75
PHỤ LỤC…………………………………………………………………………………….76
TÀI LIỆU THAM KHẢO ………………………………………………………………...152
Lý lịch trích ngang……… ………………………………………………………………...153
Luận Văn Thạc Sĩ – Cao Học Kỹ Thuật Điện Tử 2006
Chương 1
GIỚI THIỆU
1.1. Giới thiệu
Một cảnh video trên thực tế bao gồm một cảnh nền không thay đổi và các đối tượng
có hình dạng khác nhau di chuyển trên đó. Máy ghi hình ghi lại các khung hình liên tiếp
với tốc độ lớn hơn 24 hình/giây, để khi quét liên tục các khung hình trên màn hình sẽ tái
tạo lại cảnh video ban đầu. Vấn đề nảy sinh ở đây là khi lưu trữ hoặc truyền dẫn nguyên
bản các khung hình phải cần dung lượng bộ nhớ hoặc băng thông kênh truyền rất lớn.
Để khắc phục vấn đề trên, các chuẩn nén video ra đời mà thông dụng nhất là các chuẩn
MPEG. Kỹ thuật thông dụng trong chuẩn MPEG là dùng biến đổi cosine rời rạc
(Discrete Cosine Transform - DCT) để gom năng lượng các điểm ảnh (pixel) trong một
khối vng thường là 8x8 pixel về một số ít các hệ số DCT tập trung về một góc của
khối, thuận tiện cho việc dùng các kỹ thuật mã hóa tối ưu nhằm giảm tối đa chuỗi bit
cần lưu trữ hoặc truyền dẫn.
Trong các chuẩn MPEG ra đời trước (như MPEG-1, MPEG-2), hệ thống mã hóa
thực hiện chia khung hình thành một chuỗi các khối vuông 8x8 pixel và thực hiện biến
đổi DCT 8x8 lần lượt trên các khối đó. Như vậy, nếu trong nhiều khung hình liên tiếp
của một cảnh video chỉ có một vài đối tượng thay đổi cịn cảnh nền khơng đổi thì việc
mã hóa cảnh nền trên mỗi khung hình là khơng hiệu quả. Chuẩn MPEG-4 dùng biến đổi
DCT thích nghi theo hình dạng (Shape Adaptive, SA-DCT), chỉ biến đổi DCT trên các
pixel thuộc đối tượng, nhằm hỗ trợ mã hóa đối tượng. Khi đó, cảnh nền cho nhiều
khung hình sẽ được mã hóa riêng sau đó truyền đi một lần duy nhất cho tồn cảnh
video, các đối tượng thay đổi trong cảnh video được mã hóa riêng cho từng khung hình
dùng biến đổi SA-DCT. Như vậy, với kỹ thuật mã hóa đối tượng MPEG-4 đã cải thiện
hiệu quả nén đồng thời tạo ra khả năng linh hoạt như chỉnh sửa, thay đổi nội dung cảnh
video ngay trong dòng bit MPEG-4.
MPEG-4 đưa ra các kỹ thuật mới đã cải thiện được hiệu quả nén và thêm vào các
tính năng mới. Nhưng khi thực hiện chuẩn MPEG-4, phải cần tới những cơng đoạn xử
lý tính, tốn phức tạp hơn, trong đó có biến đổi SA-DCT. Phải qua nhiều cơng đoạn tính
tốn và trong mỗi cơng đoạn lại rất phức tạp, dẫn tới thời gian tính tốn sẽ chậm lại nếu
GVHD: PGS.TS. Dương Hoài Nghĩa, Ths. Hồ Trung Mỹ
HVTH : KS. Trần Quang Việt – MSHV : 01406337
Trang 1
Luận Văn Thạc Sĩ – Cao Học Kỹ Thuật Điện Tử 2006
dùng phần mềm. Để đáp ứng cho các ứng dụng thời gian thực, mã hóa MPEG-4 cần
phải được tăng tốc bằng phần cứng.
Đề tài này tập trung vào việc nghiên cứu, xây kiến trúc phần cứng bộ biến đổi SADCT và bộ biến đổi ngược của nó SA-IDCT. Đây là hai khối xử lý quan trọng và chiếm
một khối lượng tính tốn khá lớn trong hệ thống mã hóa MPEG-4.
1.2. Tình hình nghiên cứu
Nhiều tác giả đưa ra kiến trúc tính SA-DCT và SA-IDCT, các kiến trúc chủ yếu dựa
trên các bộ nhân nên sẽ không tối ưu về tài nguyên cũng như về tốc độ. Hai kiến trúc
thực hiện tính DCT khơng cần dùng tới các bộ nhân nhằm giảm diện tích phần cứng
cũng như cải thiện tốc độ xung clock được đưa ra bởi : Chen và các cộng sự [7], Kinane
và các cộng sự [1]. Cả hai kiến trúc này đều dựa cơ sở số học phân phối. Ví dụ khi cần
tính giá trị Fn theo biểu thức:
N −1
Fn = ∑ Ci fi , với Ci là các hằng số và fi là vectơ ngõ vào
i =0
N −1 W −1
W −1
N −1
k =0
k =0
i =0
Có thể biểu diễn Fn dưới dạng sau: Fn = ∑ ∑ bi ,k .2− k . fi = ∑ ∑ bi ,k . fi .2− k , trong
i=0
đó W là chiều dài bit và bi,k là bit thứ k của Ci. Như vậy, Fn có thể được tính bởi các
phép tốn dịch bit và các phép toán cộng.
Chen và các cộng sự [7], dùng biểu diễn CSD cho các hệ số Ci để tạo ra sự giống
nhau ở các bit thứ k (bi,k) với các i khác nhau để đặt thừa số có thể dùng chung, nhằm
giảm bớt số lần tính tốn phép cộng. Các tác giả sau đó xây dựng một đường dữ liệu
cần duy nhất một bộ cộng và một bộ dịch bit để thực hiện tính DCT/IDCT. Với việc
dùng một kiến trúc chứa chương trình để điều khiển đường dữ liệu đảm bảo cho kiến
trúc này có sự mềm dẻo khi tính tốn cũng như cần một tài ngun phần cứng nhỏ, bù
lại là kiến trúc này phải tốn nhiều chu kỳ khi tính tốn DCT/IDCT, 124 chu kỳ cho
DCT 8 điểm. Mặt khác, kiến trúc này chỉ áp dụng trên chiều dài N chẵn. Với N lẻ, vì
khơng thể biểu diễn CSD tối ưu cho các hệ số, các tác giả đề nghị thêm vào giá trị 0 và
tính như DCT (N+1) điểm. Tuy nhiên, các tác giả không đề cập tới khả năng tương
thích khi dùng kiến trúc này với một kiến trúc tính DCT/IDCT khác. Các tác giả cũng
GVHD: PGS.TS. Dương Hoài Nghĩa, Ths. Hồ Trung Mỹ
HVTH : KS. Trần Quang Việt – MSHV : 01406337
Trang 2
Luận Văn Thạc Sĩ – Cao Học Kỹ Thuật Điện Tử 2006
chỉ tập trung đề cập tới việc tính DCT N điểm cho vectơ một chiều hơn là đề cập tới
việc tính SA-DCT cho một khối ảnh 8x8 mà trong đó hình dạng ảnh là bất kỳ.
Kinane và các cộng sự [1] xây dựng một đường dữ liệu dùng 16 bộ cộng và một cây
Wallace kết hợp với bộ nhớ TRAM để tính SA-DCT. Đường dữ liệu này kết hợp tất cả
các fi mà nhân với các hệ số có bit bi,k bằng ‘1’ bằng các bộ cộng để tạo ra các trọng số
w-k, sau đó các trọng số này được cộng lại trong cây Wallace. Đường dữ liệu của kiến
trúc này mất 10 chu kỳ để tính DCT 8 điểm, bù lại nó chiếm tài nguyên lớn, 12016
cổng. Tuy dùng kỹ thuật khóa cổng để tiết kiệm năng lượng nhưng với việc dùng đường
dữ liệu tính DCT N=8 điểm để tính DCT N<8 điểm, rõ ràng là sẽ có nhiều bộ cộng
khơng dùng tới, có nghĩa là vẫn chưa tận dụng tốt nguồn tài nguyên.
1.3. Mục tiêu của đề tài
Khảo sát các kiến trúc đã thực hiện cho thấy khi giảm tài nguyên phần cứng xuống
thì số chu kỳ tính tốn sẽ tăng lên và ngược lại. Với hai kiến trúc đã trình bày ở phần
1.2, tơi lựa chọn kiến trúc của Kinane và các cộng sự[1] vì nó là một kiến trúc đầy đủ
cho biến đổi SA-DCT/IDCT và là kiến trúc phần cứng tham khảo trong chuẩn MPEG4. Theo đó, mục tiêu và cơng việc thiết kế của tơi đặt ra như sau :
-
Trong mã hóa đối tượng, chiều dài DCT/IDCT sẽ thay đổi tùy theo đối tượng,
không phải lúc nào cũng bằng 8. Trong khi đường dữ liệu của Kinane lại xây
dựng trên cơ sở DCT/IDCT 8 điểm, do đó có một số phần trong đường dữ liệu sẽ
trở nên dư thừa khi tính cho trường hợp N<8, đặc biệt là khi N<5. Để giảm tài
nguyên, tôi thực hiện thiết kế đường dữ liệu để tính DCT/IDCT N điểm trên cơ
sở DCT/IDCT 4 điểm, với N>4 sẽ phải dùng 2 lần tính cho một hệ số, đồng
nghĩa với số chu kỳ tăng lên gấp đôi. Tuy nhiên, về tồn cục thì số chu kỳ tính
chưa hẳn phải là gấp đơi, nó cịn phụ thuộc vào hình dạng của đối tượng cần mã
hóa.
-
Thiết kế khối điều khiển để điều khiển đường dữ liệu tính DCT/IDCT và thực
hiện tồn bộ các yêu cầu của biến đổi SA-DCT/IDCT như điều khiển nhận dữ
liệu, sắp xếp lại các pixel và xuất dữ liệu…
GVHD: PGS.TS. Dương Hoài Nghĩa, Ths. Hồ Trung Mỹ
HVTH : KS. Trần Quang Việt – MSHV : 01406337
Trang 3
Luận Văn Thạc Sĩ – Cao Học Kỹ Thuật Điện Tử 2006
-
Mục tiêu là thiết kế một kiến trúc tính SA-DCT/IDCT đáp ứng tốt yêu cầu của
chuẩn nén MPEG-4, chấp nhận số chu kỳ tính tăng lên (xấu nhất là 2 lần) để
giảm tài nguyên phần cứng và cải thiện tốc độ xung clock.
GVHD: PGS.TS. Dương Hoài Nghĩa, Ths. Hồ Trung Mỹ
HVTH : KS. Trần Quang Việt – MSHV : 01406337
Trang 4
Luận Văn Thạc Sĩ – Cao Học Kỹ Thuật Điện Tử 2006
Chương 2.
PHÉP BIẾN ĐỔI 1D-DCT/IDCT VÀ GIẢI PHÁP THỰC HIỆN
TRÊN FPGA
2.1. Biến đổi thuận 1D-DCT
Biến đổi thuận Cosine rời rạc (DCT) là biến đổi được dùng phổ biến trong nén tín
hiệu số, đặc biệt là trong xử lý ảnh số. Nó cho phép gom năng lượng tín hiệu vào một số
ít các hệ số DC và AC. Hệ số DC chính là trung bình của tất cả các mẫu đầu vào, các hệ
số AC biểu diễn cho độ lớn các thành phần tần số của tín hiệu. Như vậy, thay vì truyền
hay lưu trữ các mẫu nguyên thủy của tín hiệu ban đầu, người ta thực hiện phép biến đổi
DCT trên các mẫu tín hiệu đó để nén nó vào một số ít các hệ số DC và AC, sau đó thực
hiện lượng tử hóa và các phép mã hóa tối ưu (mã hóa Huffman, VLC,…) để tạo dịng
bit ngắn nhất khi truyền hay lưu trữ. Việc làm này cho phép tiết kiệm dung lượng bộ
nhớ khi lưu trữ cũng như băng thông kênh truyền khi truyền dẫn.
Biến đổi thuận DCT cho N mẫu tín hiệu đầu vào (f0, f1, … , fN-1) được thực hiện theo
công thức (2.1.1) để tạo ra N đầu ra (F0, F1, … , FN-1) chứa các hệ số DC và AC
N −1
Fk =
2
N
c(k )∑ f i cos (2i2+1)N kπ
(2.1.1)
i =1
k=0
C (k ) = 2
1
1
Trong đó c(k) được tính theo cơng thức (2.1.2):
k≠0
(2.1.2)
Để thực hiện biến đổi 1D-DCT trên phần cứng, cần phải tính các hệ số cos (2i2+1)N kπ
để tìm ra các hệ số nhân với các giá trị fi tương ứng và thường được biểu diễn dưới dạng
nhân ma trận, ví dụ như tính 1D-DCT 4 điểm được biểu diễn theo (2.1.3)
F0 0.500000 0.500000 0.500000 0.500000 f 0
F
1 = 0.653281 0.270598 -0.270598 -0.653281 . f1
F2 0.500000 -0.500000 -0.500000 0.500000 f 2
F3 0.270598 -0.653281 0.653281 -0.270598 f3
(2.1.3)
Theo nguyên tắc, cần có NxN hệ số cho phép biến đổi 1D-DCT N điểm. Tuy nhiên,
từ (2.1.3) ta thấy các hệ số trong phép nhân với các fi có sự giống nhau theo kiểu PingGVHD: PGS.TS. Dương Hoài Nghĩa, Ths. Hồ Trung Mỹ
HVTH : KS. Trần Quang Việt – MSHV : 01406337
Trang 5
Luận Văn Thạc Sĩ – Cao Học Kỹ Thuật Điện Tử 2006
Pong, ví dụ như f0 với f3 và f2 với f1. Như vậy, khi tính các hệ số chẵn ta đặt thừa số
chung theo tổng (ví dụ, f0+f3, f1+f2 khi tính F0 hoặc F2), khi tính các hệ số lẻ ta đặt thừa
số chung theo hiệu (ví dụ, f0-f3, f1-f2 khi tính F1 hoặc F3). Làm như vậy, số lượng các hệ
số giảm xuống còn một nữa, đồng nghĩa với số lượng bộ nhân giảm xuống một nữa nếu
thực hiện phần cứng tính song song hoặc giảm số lần tính phép nhân xuống một nữa
nếu thực hiện phần cứng tính theo kiểu tuần tự. Tuy nhiên, nếu xét 1D-DCT với N lẻ thì
số lượng các hệ số giảm được nhỏ hơn một nữa, ví dụ xem (2.1.4) cho phép tính 1DDCT 5 điểm sẽ thấy rõ điều này. Trong trường hợp này chỉ gom được hai cặp mẫu pingpong và một mẫu đơn như vậy số hệ số sẽ là 3x5.
0.447213 0.447213 0.447213 0.447213 f 0
0.371748 0.000000 -0.371748 -0.601500 f1
-0.195439 -0.632455 -0.195439 0.511667 . f 2
-0.601500 -0.195439 0.601500 -0.371748 f3
-0.511667 0.632455 -0.511667 0.195439 f 4
F0 0.447213
F
1 0.601500
F2 = 0.511667
F3 0.371748
F 0.195439
4
(2.1.4)
2.2. Biến đổi ngược 1D-IDCT
Biến đổi ngược Cosine rời rạc 1D-IDCT là biến đổi luôn đi kèm với biến đổi thuận
1D-DCT trong các hệ thống mã hóa dùng DCT. Nó cho phép chuyển các hệ số DCT trở
về các mẫu của tín hiệu ban đầu. Thường thì phép biến đổi IDCT được dùng ở đầu thu
hoặc trong các bộ giải mã để thực hiện khôi phục các mẫu tín hiệu từ các hệ số DCT thu
được từ kênh truyền hoặc từ thiết bị lưu trữ.
Biến đổi ngược 1D-IDCT cho N hệ số DCT đầu vào (F0, F1, … , FN-1) được thực
hiện theo công thức (2.2.1) để khôi phục N mẫu ban đầu (f0, f1, … , fN-1):
N −1
fi =
2
N
∑ C (k ).F .cos
k
(2 i +1) kπ
2N
k =1
(2.2.1)
Trong đó C(k) được tính theo cơng thức (2.1.2). Tương tự như phép biến đổi thuận
1D-DCT, để tính 1D-IDCT dùng phần cứng ta cũng thực hiện tính các hệ số nhân với
các Fi tương ứng và biểu diễn nó dưới dạng nhân ma trận. Ví dụ, phép tính 1D-IDCT 4
điểm được biểu diễn theo (2.2.2)
GVHD: PGS.TS. Dương Hoài Nghĩa, Ths. Hồ Trung Mỹ
HVTH : KS. Trần Quang Việt – MSHV : 01406337
Trang 6
Luận Văn Thạc Sĩ – Cao Học Kỹ Thuật Điện Tử 2006
f 0 0.500000 0.653281 0.500000
f
1 = 0.500000 0.270598 -0.500000
f 2 0.500000 -0.270598 -0.500000
f 3 0.500000 -0.653281 0.500000
0.270598 F0
-0.653281 F1
.
0.653281 F2
-0.270598 F3
(2.2.2)
Trong (2.2.2) ta thấy không thể đặt các hệ số chung như trong phép biến đổi thuận
để giảm số bộ nhân hoặc số lần tính phép tính nhân. Tuy nhiên, để ý một tính chất khác
có thể thấy từ (2.2.2), các mẫu fi theo quy luật ping-pong được tính từ tổng các hệ số
DCT Fi nhân với các hệ số tương ứng rất giống nhau chỉ đổi dấu ở các hệ số lẻ của Fi.
Từ đó, có thể tính đồng thời (song song) các hệ số fi theo quy luật ping-pong dùng
chung các bộ nhân và nhờ đó giảm số lượng các bộ nhân hoặc số lần tính phép nhân
xuống cịn một nữa trong khi tính 1D-IDCT.
2.3. Giải pháp thực hiện 1D-DCT/IDCT trên FPGA
2.3.1. Số học phân phối và cách thực hiện trên FPGA
Như đã trình bày ở 2.1 và 2.2 để tính một hệ số trong DCT/IDCT N điểm ta cần thực
hiện N phép nhân giữa N mẫu đầu vào với N hệ số cosine sau đó cộng tất cả các kết quả
này lại theo dạng thức sau:
N −1
W −1
N −1
W −1 N −1
Fn = ∑ −bi ,0 + ∑ bi ,k .2− k . f i = −∑ bi ,0 ⋅ fi + ∑ ∑ bi , k . f i .2− k (2.3.1)
i=0
k =1
i =0
k =1 i = 0
Trong đó các hệ số Cosine luôn nhỏ hơn 1 và được biểu diễn theo công thức
W −1
Ci = −bi ,0 + ∑ bi ,k .2 − k , với bi,k là bit thứ k của Ci, W là số bit để biểu diễn cho Ci.
k =1
Từ (2.3.1) ta thấy thay vì thực hiện phép nhân ta có thể thực hiện bằng các phép
cộng và phép dịch bit. Phép tốn bi,k.fi chính là phép AND tất cả các bit của fi với bit
bi,k, một số khi nhân với 2-k chính là phép dịch phải số đó đi k bit. Như vậy để tính Fn ta
làm các bước sau:
a. AND bit thứ 0 của hệ số Ci (bi,0) với tất cả các bit của fi, với i = 0 -> (N-1), sau
đó cộng N số hạng này với nhau và dịch phải kết quả đi 0 bit. Tính tương tự cho
bit thứ k với k=1 -> (W-1)
b.
Fn bằng tổng của W kết quả trên
GVHD: PGS.TS. Dương Hoài Nghĩa, Ths. Hồ Trung Mỹ
HVTH : KS. Trần Quang Việt – MSHV : 01406337
Trang 7
Luận Văn Thạc Sĩ – Cao Học Kỹ Thuật Điện Tử 2006
Do bi,k chỉ có 2 giá trị là ‘0’ và ‘1’ nên đầu ra cho lần xử lý bit thứ k(bi,k) là tổng của
các fi với nhau. Khi bi,k=‘1’ thì fi sẽ có mặt trong tổng trên, nếu bi,k=‘0’ thì fi khơng có
mặt trong tổng trên. Tương ứng với một tổ hợp các bit bi,k với i = 0 -> N-1 sẽ cho ra một
tổng các fi. Do vậy, chỉ cần thiết kế một bộ tính tổ hợp các tổng có thể có của các fi với
nhau, sau đó dùng W bộ MUX để lựa chọn tổ hợp tổng tương ứng cho bit thứ k. Ta
thấy rằng khi N càng lớn thì số tổ hợp sẽ tăng lên dẫn tới bộ tính tổ hợp các tổng của
các fi với nhau sẽ phức tạp lên, kéo theo số ngõ vào bộ MUX cũng tăng lên. Thiết kế
của Kinane lựa chọn trường hợp xấu nhất là N=4 cần tới 11 bộ cộng (kết nối thành 2
tầng) để xác định tổ hợp các tổng của fi và các bộ MUX 36 ngõ vào. Kết quả này cho
thấy tài nguyên phần cứng tăng lên cũng như thời gian trễ cũng sẽ tăng lên (tức làm
giảm tần số xung clock). Để khắc phục, thiết kế này chọn N=2, mỗi lần xử lý 2 phép
nhân Ci với fi, và chấp nhận tính tích lũy 2 lần. Với lựa chọn này, thiết kế chỉ cần 1 bộ
cộng là có thể tính được 4 tổ hợp tổng có thể có của 2 ngõ vào fi và theo đó cũng chỉ
cần dùng các bộ MUX 4:1 là có thể xác định đươc ngõ ra tương ứng. Hình 2.3.1 trình
bày cách tính đầu ra khi xử lý cho bit thứ k(bi,k) với i= 0->1.
Hình 2.3.1. Mạch tạo tổ hợp tổng của f0 và f1 và lựa chọn đầu ra cho bit thứ k
Trên hình 2.3.1 cho thấy với 2 mẫu vào f0 và f1 thì 4 tổ hợp tổng có thể là 0, f0, f1 và
f0+f1. Đầu ra Wk lựa chọn 1 trong 4 tổ hợp này bằng 2 bit b0,k và b1,k. Việc xử lý cho
các bit còn lại chỉ cần dùng các bộ MUX 4:1 để lựa chọn đầu ra tương ứng.
Để tính bước b cần phải dùng tới bộ tính tổng W số hạng ngõ vào Wk với k=0->W1 (tương ứng với W-1 bộ cộng 2 số hạng). Trên thực tế, việc dùng các bộ cộng 2 số
hạng cho trường hợp này là không hiệu quả do phải nối thành nhiều tầng làm thời gian
trễ tăng lên, đặc biệt là trường hợp dùng các bộ cộng truyền số nhớ (CRA – Carry
Ripple Adder) và khi số bit lớn, cho dù các FPGA đều hỗ trợ mạch truyền số nhớ
nhanh. Việc lựa chọn dùng kết hợp các bộ nén 4:2, 3:2 để tính ra tổng (sum) và số nhớ
GVHD: PGS.TS. Dương Hoài Nghĩa, Ths. Hồ Trung Mỹ
HVTH : KS. Trần Quang Việt – MSHV : 01406337
Trang 8
Luận Văn Thạc Sĩ – Cao Học Kỹ Thuật Điện Tử 2006
(cout) sau đó dùng một bộ cộng nhanh để cộng tổng và số nhớ này và cho ra kết quả
cuối cùng là giải pháp tốt để giảm thời gian trễ.
Hình 2.3.2 trình bày bộ nén 4:2 n bit dùng các bộ cộng toàn phần (FA – Full Adder)
và bán phần (Half - Adder) với thời gian trễ tối đa là 2 lần thời gian trễ của một FA.
Trên hình vẽ ta thấy thời gian trễ sẽ không tăng lên khi ta tăng số bit và cần nguồn tài
I3(0)
I0
cin
s
cout(0)
sum(0)
cout
I1
s
I0
cin
I3(1)
I0(0)
I1(0)
I2(0)
I1
cout
I0
I1
cin
s
cout
I0
cin
cout(1)
sum(1)
I0
cin
cout(2)
sum(2)
s
I1
cout
s
I3(2)
I0(1)
I1(1)
I2(1)
cout
I1
cin
I0(2)
I1(2)
I2(2)
I0
I1
cout
I0
s
cout(n-2)
sum(n-2)
cin
s
I1
cout
s
cin
I3(n-2)
I0(n-2)
I1(n-2)
I2(n-2)
cout
I0
cin
sum(n-1)
s
I1
I0
I1
I3(n-1)
cin
I0
s
I1
I0(n-1)
I1(n-1)
I2(n-1)
nguyên là 2x(n-1) FA và 2 HA, tương đương 2 CRA n bit.
Hình 2.3.2. Bộ nén 4:2 dùng FA và HA
Hình 2.3.3 trình bày sơ đồ của bộ nén 3:2 n bit với thời gian trễ bằng 1 FA .
Trên hình 2.3.3 ta thấy nguồn tài nguyên cho bộ nén 3:2 n bit là n-1 FA và 1 HA
tương đương 1 CRA n bit.
Hình 2.3.3. Bộ nén 3:2 dùng FA và HA
Việc kết hợp các bộ nén 4:2 và 3:2 để cộng W số hạng ngõ vào được thực hiện một
cách dễ dàng. Trong thiết kế này lựa chọn biễu diễn các hệ số Ci là một số 13 bit
(W=13), khi đó ta cần một bộ cộng 13 số hạng ngõ vào để thực hiện bước b. Hình 2.3.4
GVHD: PGS.TS. Dương Hồi Nghĩa, Ths. Hồ Trung Mỹ
HVTH : KS. Trần Quang Việt – MSHV : 01406337
Trang 9
Luận Văn Thạc Sĩ – Cao Học Kỹ Thuật Điện Tử 2006
trình bày sơ đồ bộ cộng 13 số hạn ngõ vào khi cần cộng tích lũy với ngõ ra trước đó (14
số hạn) hoặc khơng cần cộng tích lũy với ngõ ra (13 số hạn).
Hình 2.3.4. Bộ cộng 13 số hạn W0 ->W12. (a) cộng tích lũy với ngõ ra trước đó,
(b) khơng cộng tích lũy với ngõ ra trước đó
Hình 2.3.4 cho thấy cần tối đa là 6 bộ nén 4:2 và một bộ cộng để thực hiện cộng 13
số hạn có tích lũy, tương đương với tài nguyên là 13 CRA. Tài nguyên này tương
đương với khi ta thực hiện toàn bằng các CRA. Về thời gian trễ, tuy số tầng là như nhau
nhưng việc dùng các bộ nén lại giảm thời gian trễ đi rất nhiều, đặc biệt là khi số bit
tăng. Ví dụ, nếu ngõ vào 8 bit thì khi dùng các mạch CRA cần khoảng thời gian truyền
là 8bit x 4 tầng =24 lần thời gian trễ của 1FA, trong khi đó kiến trúc hình 2.3.4 cần
khoảng thời gian truyền là 2FA x 3tầng + 8(tầng thứ 4) = 14 lần thời gian trễ của 1FA.
Tính tương tự cho trường hợp ngõ vào 28 bit thì có sự chênh lệch rất lớn : 112 lần 1FA
so với 34 lần 1FA. Để tiếp tục giảm thời gian trễ của kiến trúc hình 2.3.4 ta thực hiện
thay CRA bằng bộ cộng nhanh, được lựa chọn là bộ cộng chọn cờ carry (CSA – Carry
Select Adder). Kiến trúc bộ cộng CSA 28 bit được trình bày trên hình 2.3.5 bằng cách
kết hợp các bộ cộng thấy trước số nhớ (CLA – Carry Lookahead Adder) 4 bit với các bộ
MUX nhằm giảm bớt trì hỗn do việc truyền số nhớ từ ngõ vào tới ngõ ra. Hai số hạn I0
và I1 28 bit được chia thành 7 nhóm 4 bit theo thứ tự từ LSB tới MSB, nhóm 4 bit đầu
tiên (3:0) được cộng lại trong CLA cho ra tổng sum(3:0) và một cờ nhớ c0, c0 sẽ được
truyền lên nhóm 4 bit tiếp theo (7:4). Ở nhóm (7:4) ta thực hiện dùng 2 bộ cộng CLA để
tính đồng thời cho hai trường hợp cờ nhớ bằng ‘0’ và bằng ‘1’, hai ngõ ra này được đưa
tới bộ MUX và ngõ ra sum(7:4) sẽ được lựa chọn bằng cờ c0. Mặt khác, cờ nhớ c1 cũng
được tạo ra từ c0, g1 và p1, ta thấy rằng nếu c0 = ‘1’ thì sẽ chọn c1 = p1 (vì p1 là cờ nhớ
của nhóm 7:4 khi cộng lại với cờ vào là ‘1’), cờ c1 được chọn bằng g1 khi c0 = ‘0’ và p1
GVHD: PGS.TS. Dương Hoài Nghĩa, Ths. Hồ Trung Mỹ
HVTH : KS. Trần Quang Việt – MSHV : 01406337
Trang 10
Luận Văn Thạc Sĩ – Cao Học Kỹ Thuật Điện Tử 2006
= ‘1’ (vì nếu p1= ‘0’ thì g1 khơng thể bằng ‘1’ hiển nhiên khi đó c1 được chọn bằng ‘0’).
Tương tự, cờ c1 sẽ được đưa lên để tính c2 cho nhóm tiếp theo… Hình 2.3.5 cũng cho
thấy trì hỗn của mạch sẽ được giảm xuống do cờ carry không phải truyền qua từng bit
I1(3:0)
I0(3:0)
Cin
I1(7:4)
I0(7:4)
‘0’
I1(7:4)
I0(7:4)
‘1’
I1(11:8)
I0(11:8)
‘0’
I1(11:8)
I0(11:8)
‘1’
‘0’
I1(15:12)
I0(15:12)
I1(15:12)
I0(15:12)
‘1’
‘0’
I1(19:16)
I0(19:16)
I1(19:16)
I0(19:16)
‘1’
‘0’
I1(23:20)
I0(23:20)
I1(23:20)
I0(23:20)
‘1’
I1(27:24)
I0(27:24)
‘0’
I1(27:24)
I0(27:24)
‘1’
mà truyền qua một nhóm 4 bit. Bù lại tài nguyên phần cứng tăng gần như gấp đơi.
Hình 2.3.5. Bộ cộng CSA 28 bit
Như vậy, trong thiết kế cần phải xem xét tầm quan trọng của việc thực hiện các bộ
cộng trên FPGA. Thực hiện các bộ cộng truyền số nhớ trên FPGA rất dễ dàng và tốn ít
tài nguyên, tuy nhiên thời gian trễ sẽ tăng lên, đặc biệt khi số bit lớn. Các mạch cộng
nhanh thực hiện trên FPGA sẽ phức tạp hơn, tốn nhiều tài nguyên hơn nhưng thời gian
trễ ít hơn. Do đó trong thiết kế cần có sự cân nhắc lựa chọn khi nào thì dùng bộ cộng
nhanh, khi nào dùng bộ cộng truyền số nhớ. Bảng 2.3.1 là một số kết quả so sánh khi
thực hiện các bộ cộng trên FPGA Cyclone II 2C35 của Altera. Kết quả cho thấy các bộ
nén 4:2 và 3:2 tiêu tốn nguồn tài nguyên bằng với CRA khi dùng để thực hiện cùng một
chức năng nhưng thời gian trễ là nhỏ hơn rất nhiều và không thay đổi khi tăng số bit. Bộ
cộng CSA tốn tài nguyên gần như gấp đôi CRA nhưng bù lại thời gian trễ giảm nhiều.
Bảng 2.3.1. Kết quả thực hiện các bộ cộng trên Cyclone II 2C35 FPGA
Bộ cộng
CRA
CSA
Nén 4:2
Nén 3:2
FA
CRA
Nén 4:2
Nén 3:2
Số bit
28
28
28
28
1
16
16
16
Số LEs
68
110
109
55
2
38
61
31
GVHD: PGS.TS. Dương Hoài Nghĩa, Ths. Hồ Trung Mỹ
HVTH : KS. Trần Quang Việt – MSHV : 01406337
Trì hỗn (ns)
19.337
11.208
6.910
5.929
5.632
13.444
7.189
5.632
Trang 11
Luận Văn Thạc Sĩ – Cao Học Kỹ Thuật Điện Tử 2006
2.3.2. Đường dữ liệu tính DCT N điểm
Trên cơ sở toán học và mạch thực hiện ở phần 2.3.1, ta thực hiện xây dựng đường
dữ liệu tính DCT N điểm (N=1, 2, …, 8). Như trình bày ở phần 2.1, lợi dụng sự giống
nhau của các hệ số cosine theo kiểu ping-pong, ta đặt thừa số chung để rút gọn N mẫu
ngõ vào còn lại N/2 mẫu (khi N chẵn) hoặc N/2 + 1 (khi N lẻ) bằng cách dùng các bộ
MUX để lựa chọn cặp mẫu cần kết hợp với nhau, sau đó cộng lại (khi thứ tự hệ số cần
tính là chẵn) hoặc trừ nhau (khi hệ số cần tính là lẻ) để tạo thành một mẫu. Tầng tiếp
theo là bộ tính số học phân phối mỗi lần xử lý 2 mẫu ngõ vào với 2 hệ số cosine 13 bit
để tạo thành 13 trọng số tương ứng và cuối cùng được cộng tích lũy trong bộ cộng 13 số
hạn. Sơ đồ đường dữ liệu tính DCT N điểm được trình bày trên hình 2.3.6
MUX
MUX
4:2
MUX
REG
ROUND
REG
4:2
MUX
cin
MUX
MUX
MUX
MUX
4:2
4:2
MUX
gnd
cin
MUX
MUX
MUX
13 REG
REG
cin
4:2
MUX
MUX
MUX
MUX
MUX
4:2
MUX
MUX
MUX
output_valid
acc_flag
one_pel_flag
coff_code_0[12:0]
coff_code_1[12:0]
rst
clk
even_odd
Ki
N[3:0]
MUX
Hình 2.3.6. Đường dữ liệu tính DCT N điểm
Đường dữ liệu trên hình 2.3.6 được thiết kế theo kiểu đường ống bao gồm 4 tầng. Ở
tầng đầu tiên (INPUT_SEL), các bộ MUX có nhiệm vụ lựa chọn ngõ vào và kết hợp với
bộ cộng để cho ra các ngõ ra tương ứng với chiều dài DCT cần tính (N), hệ số cần tính
là chẵn hay lẻ (e/o – even_odd) và lần lặp cho một hệ số (Ki). Bảng 2.3.2 trình bày các
ngõ ra trong khối INPUT_SEL tương ứng với các chiều dài các chiều dài DCT cần tính
(N=1, 2, …, 8) và các tín hiệu điều khiển tương ứng. Hai ngõ ra cuối cùng của khối
INPUT_SEL là sig12 và sig13 được chuyển tới tầng tiếp theo (COFF_MUX) qua thanh
ghi chốt dữ liệu ra khi có cạnh lên của xung clk.
GVHD: PGS.TS. Dương Hoài Nghĩa, Ths. Hồ Trung Mỹ
HVTH : KS. Trần Quang Việt – MSHV : 01406337
Trang 12
Luận Văn Thạc Sĩ – Cao Học Kỹ Thuật Điện Tử 2006
Bảng 2.3.2. Các ngõ vào ra trong khối INPUT_SEL
N
e/o
Ki
sig0
sig1
sig2
sig3
sig4
sig5
sig6
1
0
0
f0
0
0
0
0
0
0
2
2
3
3
4
4
0
1
0
1
0
1
0
0
0
0
0
0
f0
f0
f0
f0
f0
f0
0
0
f1
f1
f1
f1
0
0
0
0
0
0
0
0
0
0
0
0
f1
f1
f2
f2
f3
f3
0
0
0
0
f2
f2
0
0
0
0
0
0
5
5
5
5
6
6
0
0
1
1
0
0
0
1
0
1
0
1
f0
f0
f0
f0
f0
f0
f1
f1
f1
f1
f1
f1
f2
f2
f2
f2
f2
f2
0
0
0
0
0
0
f4
f4
f4
f4
f5
f5
f3
f3
f3
f3
f4
f4
0
0
0
0
f3
f3
6
6
7
7
7
7
8
1
1
0
0
1
1
0
0
1
0
1
0
1
0
f0
f0
f0
f0
f0
f0
f0
f1
f1
f1
f1
f1
f1
f1
f2
f2
f2
f2
f2
f2
f2
0
0
f3
f3
f3
f3
f3
f5
f5
f6
f6
f6
f6
f7
f4
f4
f5
f5
f5
f5
f6
8
8
8
0
1
1
1
0
1
f0
f0
f0
f1
f1
f1
f2
f2
f2
f3
f3
f3
f7
f7
f7
f6
f6
f6
sig7
sig8
sig9
si10
0
f0
0
0
0
0
0
0
0
0
f0
f0
f0
f0
f0
f0
0
0
f1
f1
f1
f1
f1
/f1
f2
/f2
f3
/f3
0
0
0
0
0
0
f0
f2
f0
f2
f0
f2
f1
0
f1
0
f1
0
f4
0
/f4
/0
f5
f3
f3
f3
f4
f4
f4
f4
f5
0
0
0
0
0
0
f4
f0
f2
f0
f2
f0
f2
f0
f1
0
f1
f3
f1
f3
f1
f5
f5
f5
f4
f4
f4
f2
f0
f2
f3
f1
f3
sig11
si12
sig13
0
f0
0
0
/0
0
/0
f2
/f2
f0+f1
f0-f1
f0+f2
f0-f2
f0+f3
f0-f3
0
0
f1
f1
f1+f2
f1-f2
f3
0
/f3
/0
f4
0
f0+f4
f2
f0-f4
f2
f0+f5
f3+f3
f1+f3
0
f1-f3
0
f1+f4
0
/f5
/f3
f6
f4
/f6
/f4
f7
/f4
/0
f5
0
/f5
/0
f6
f0-f5
f3-f3
f0+f6
f2+f4
f0-f6
f2-f4
f0+f7
f1-f4
0
f1+f5
f3
f1-f5
f3
f1+f6
f5
/f7
/f5
f4
/f6
/f4
f2+f5
f0-f7
f2-f5
f3+f4
f1-f6
f3-f4
Ở tầng COFF_MUX, hai mẫu ngõ vào được đưa qua bộ cộng để tính ra tổ hợp tổng
có thể của chúng như trình bày ở phần 2.3.1, sau đó đưa qua hệ thống 13 bộ MUX được
điều khiển bởi các bit của các hệ số cosine (các bit thứ k điều khiển xác định trọng số
thứ k) để tìm ra 13 trọng số w0, w1, …, w12. Các bit điều khiển các bộ MUX
(coff_code_0 và coff_code_1) được tạo ra trong 1 LUT mà ngõ vào là N, K (hệ số DCT
thứ K) và Ki. Bảng 2.3.3 trình bày các bit điều khiển các bộ MUX để lựa chọn các trọng
số tương ứng với N, K và
Ki. Các trọng số wk được chuyển tới tầng tiếp theo
(TREE_ADDER & ACC ADDER) bằng dãy 13 thanh ghi xuất dữ liệu ra ở cạnh lên của
xung clk.
Ở tầng TREE_ADDER & ACC ADDER 13 trọng số được cộng lại nhờ các bộ nén
và bộ cộng CSA. Trường hợp chiều dài N>4, mỗi hệ số DCT được chia làm 2 lần tính
(tương ứng với Ki = ‘0’ và Ki = ‘1’) sau đó cộng tích lũy. Việc cộng tích lũy được điều
khiển bằng tín hiệu acc_flag, khi bằng ‘1’ nó điều khiển đưa ngõ ra trước đó quay về,
GVHD: PGS.TS. Dương Hoài Nghĩa, Ths. Hồ Trung Mỹ
HVTH : KS. Trần Quang Việt – MSHV : 01406337
Trang 13
Luận Văn Thạc Sĩ – Cao Học Kỹ Thuật Điện Tử 2006
nếu bằng ‘0’ nó điều khiển đưa giá trị 0 quay về. Trường hợp N=1 (1 pixel), giá trị ngõ
vào phải được đưa xuyên suốt qua các tầng. Ở đây, tín hiệu one_pel_flag sẽ điều khiển
thực hiện cơng việc này, nếu bằng ‘0’, trọng số w0 phải được lấy bù 1 vì bit 0 là bit dấu
của hệ số cosine, nếu bằng ‘1’, trọng số w0 không cần phải lấy bù 1, vì bit 0 lúc này thể
hiện hệ số cosine bằng 1. Ngõ ra cuối cùng của tầng TREE_ADDER & ACC ADDER
sẽ được chuyển qua tầng tiếp theo bằng 1 thanh ghi chốt dữ liệu ra ở cạnh lên của xung
clk.
Ở tầng cuối (ROUND_OUTPUT) dữ liệu được làm trịn và xuất ra ngồi qua một
thanh ghi và một tín hiệu output_valid, chỉ khi nào tín hiệu này bằng ‘1’ thì hệ số mới
xuất ra ngõ ra (output_coff).
Bảng 2.3.2. Các ngõ vào ra của LUT tạo các bit điều khiển các bộ MUX trong khối
COFF_MUX
N
1
2
2
3
3
3
4
4
4
4
5
5
5
5
5
5
5
5
5
5
6
6
6
6
6
6
6
K
0
0
1
0
1
2
0
1
2
3
0
0
1
1
2
2
3
3
4
4
0
0
1
1
2
2
3
Ki
0
0
0
0
0
0
0
0
0
0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
coff_code_0
1000000000000
0101101010001
1010010101111
0100100111101
0101101010001
0011010001000
0100000000000
0101001110100
0100000000000
0010001010100
0011100101000
0011100101000
0100110100000
0000000000000
0100000110000
1010111100010
0010111110001
1110011100000
0001100100000
0101000011110
0011010001000
0011010001000
0100011101100
0001001100100
0100000000000
1100000000000
0011010001000
GVHD: PGS.TS. Dương Hoài Nghĩa, Ths. Hồ Trung Mỹ
HVTH : KS. Trần Quang Việt – MSHV : 01406337
coff_code_1
0000000000000
0000000000000
0000000000000
0100100111101
0000000000000
1001011110000
0100000000000
0010001010100
1100000000000
1010110001100
0011100101000
0000000000000
0010111110001
0000000000000
1110011100000
0000000000000
1011001100000
0000000000000
1011111010000
0000000000000
0011010001000
0000000000000
0011010001000
0000000000000
0000000000000
0000000000000
1100101111000
Trang 14
Luận Văn Thạc Sĩ – Cao Học Kỹ Thuật Điện Tử 2006
6
6
6
6
6
7
7
7
7
7
7
7
7
7
7
7
7
7
7
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
others
3
4
4
5
5
0
0
1
1
2
2
3
3
4
4
5
5
6
6
0
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
others
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
others
1100101111000
0010010011110
0010010011110
0001001100100
0100011101100
0011000001100
0011000001100
0100001010111
0001110110100
0011110110100
1101010101011
0011010110000
1011110101001
0010101010101
1111000011001
0001110110100
0011010110000
0000111100111
0011110110100
0010110101000
0010110101000
0011111011000
0010001110010
0011101100100
1110011110000
0011010100110
1100000101000
0010110101000
1101001011000
0010000111001
0000110001111
0001100010000
0011101100100
0000110001111
0011010100110
0000000000000
0000000000000
1011011000011
0000000000000
1100101111000
0000000000000
0011000001100
0011000001100
0011010110000
0000000000000
0000111100111
1011101110011
1110001001100
0000000000000
1100001001100
0100010001101
1011110101001
0000000000000
1101010101011
1011101110011
0010110101000
0010110101000
0011010100111
0000110001111
0001100010000
1100010011100
1111001110001
1101110001110
1101001011000
1101001011000
1100000101000
0011010100110
1100010011100
1110011110000
1101110001110
1100000101000
0000000000000
2.3.3. Đường dữ liệu tính IDCT N điểm
Như đã trình bày trong phần 2.2, biến đổi IDCT N điểm khơng có sự giống nhau ở
các hệ số cosine theo kiểu Ping-Pong, nhưng nếu 2 hệ số IDCT cần tính có thứ tự theo
kiểu Ping-Pong lại có sự giống nhau trong cách tính, ngoại trừ dấu (-) ở các hệ số cosine
lẻ. Do đó, tuy khơng nén được số mẫu ngõ vào xuống còn N/2 hoặc N/2 + 1 như trong
tính DCT, nhưng ta có thể xây dựng đường dữ liệu tính IDCT N điểm mà trong đó 2 hệ
số IDCT cần tính có thứ tự theo kiểu Ping-Pong sẽ được tính đồng thời. Kiến trúc
GVHD: PGS.TS. Dương Hồi Nghĩa, Ths. Hồ Trung Mỹ
HVTH : KS. Trần Quang Việt – MSHV : 01406337
Trang 15
Luận Văn Thạc Sĩ – Cao Học Kỹ Thuật Điện Tử 2006
đường dữ liệu được trình bày như trên hình 2.3.7. Đường dữ liệu tính IDCT được thiết
kế theo kiểu đường ống gồm 4 tầng tính là INPUT_SEL_COFF_MUX,
TREE_ADDER, ACC_ADDER và RESTORE_ROUND_OUT.
MUX
3:2
MUX
4:2
MUX
acc_flag
even_odd
one_pel_flag
rst
buffer_wr
buffer_addwr[1:0]
buffer_addrd[1:0]
REG
MUX
coff_code_0[12:0]
coff_code_1[12:0]
clk
OUTPUT
BUFFER
MUX
MUX
cin
MUX
output_valid
4:2
4:2
MUX
gnd
Ki[1:0]
REG
ROUND
MUX
REG
4:2
13 REG
4:2
REG
MUX
MUX
buffer_rd
MUX
MUX
Hình 2.3.7. Đường dữ liệu tính IDCT N điểm
Trong tầng đầu tiên (INPUT_SEL_COFF_MUX), các mẫu ngõ vào được lựa chọn
theo từng cặp chẵn và lẻ để đưa vào bộ xử lý số học phân phối, như trình bày trong
phần 2.3.1, để tạo ra 13 trọng số w0, w1, …, w12 tương ứng với các bit của 2 hệ số
cosine của 2 mẫu cần xử lý. Các trọng số này được đưa vào bộ cộng 13 số hạn
(TREE_ADDER) qua 13 thanh ghi chốt dữ liệu theo cạnh lên của xung clk. Bảng 2.3.3
trình bày ngõ ra của bộ lựa các mẫu vào nhờ tín hiệu Ki. Bảng 2.3.4 trình bày ngõ ra
của LUT tạo ra các bit điều khiển bộ số học phân phối.
Bảng 2.3.2. Các cặp mẫu vào được lựa chọn theo Ki
Ki
0
1
2
3
sig0
F0
F1
F4
F5
sig1
F2
F3
F6
F7
Trong tầng TREE_ADDER, các trọng số wk đưa vào được cộng lại với nhau nhờ các
bộ nén 4:2, 3:2 và bộ cộng CSA. Trường hợp N=1, dữ liệu vào được cho qua nhờ tín
GVHD: PGS.TS. Dương Hồi Nghĩa, Ths. Hồ Trung Mỹ
HVTH : KS. Trần Quang Việt – MSHV : 01406337
Trang 16
Luận Văn Thạc Sĩ – Cao Học Kỹ Thuật Điện Tử 2006
hiệu one_pel_flag. Tín hiệu one_pel_flag nếu bằng ‘0’, trọng số w0 phải được lấy bù 1
vì bit 0 là bit dấu của hệ số cosine, nếu bằng ‘1’, trọng số w0 khơng cần phải lấy bù 1, vì
bit 0 lúc này thể hiện hệ số cosine bằng 1. Ngõ ra của tầng này được chuyển tới tầng
tiếp theo (ACC_ADDER) qua thanh ghi chốt dữ liệu theo cạnh lên của clk.
Bảng 2.3.3. Các ngõ vào ra của LUT tạo các bit điều khiển các bộ MUX
N
1
2
2
3
3
3
3
4
4
4
4
5
5
5
5
5
5
5
5
5
6
6
6
6
6
6
6
6
6
6
6
6
7
7
7
7
7
K
0
0
0
0
0
1
1
0
0
1
1
0
0
0
1
1
1
2
2
2
0
0
0
0
1
1
1
1
2
2
2
2
0
0
0
0
1
Ki
0
0
1
0
1
0
1
0
1
0
1
0
1
2
0
1
2
0
1
2
0
1
2
3
0
1
2
3
0
1
2
3
0
1
2
3
0
coff_code_0
1000000000000
0101101010001
0101101010001
0100100111100
0101101010001
0100100111100
0000000000000
0100000000000
0101001110100
0100000000000
0 0 1 0 0 0 1 0 10 1 0 0
0011100101000
0100110100000
0001100100000
0011100101000
0010111110001
1011111010000
0011100101000
0000000000000
0101000011110
0011010001000
0100011101100
0010010011110
0001001100100
0011010001000
0011010001000
1011011000011
1100101111000
0011010001000
0001001100100
0010010011110
0100011101100
0011000001100
0100001010111
0010101010101
0001110110100
0011000001100
GVHD: PGS.TS. Dương Hoài Nghĩa, Ths. Hồ Trung Mỹ
HVTH : KS. Trần Quang Việt – MSHV : 01406337
coff_code_1
0000000000000
0000000000000
0000000000000
0011010001000
0000000000000
1001011110000
0000000000000
0100000000000
0010001010100
1100000000000
1010110001100
0100000110000
0010111110001
0000000000000
1110011100000
1011001100000
0000000000000
1010111100010
0000000000000
0000000000000
0100000000000
0011010001000
0000000000000
0000000000000
0000000000000
1100101111000
0000000000000
0000000000000
1100000000000
1100101111000
0000000000000
0000000000000
0011110110100
0011010110000
0000111100111
0000000000000
0000111100111
Trang 17
Luận Văn Thạc Sĩ – Cao Học Kỹ Thuật Điện Tử 2006
7
7
7
7
7
7
7
7
7
7
7
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
others
1
1
1
2
2
2
2
3
3
3
3
0
0
0
0
1
1
1
1
2
2
2
2
3
3
3
3
others
1
2
3
0
1
2
3
0
1
2
3
0
1
2
3
0
1
2
3
0
1
2
3
0
1
2
3
others
0011010110000
1100001001100
1011110101001
0011000001100
0001110110100
1111000011001
0011010110000
0011000001100
0000000000000
0100010001101
0000000000000
0010110101000
0011111011000
0010110101000
0010001110010
0010110101000
0011010100110
1101001011000
1100000101000
0010110101000
0010001110010
1101001011000
0000110001111
0010110101000
0000110001111
0010110101000
0011010100110
0000000000000
1110001001100
1101010101011
0000000000000
1101010101011
1011110101001
0011110110100
0000000000000
1011101110011
0000000000000
1011101110011
0000000000000
0011101100100
0011010100110
0001100010000
0000110001111
0001100010000
1111001110001
1100010011100
1101110001110
1110011110000
1100000101000
1100010011100
0011010100110
1100010011100
1101110001110
1110011110000
1100000101000
0000000000000
Tầng ACC_ADDER làm nhiệm vụ cộng/trừ tích lũy để tạo ra đồng thời 2 hệ số
IDCT có thứ tự theo kiểu Ping-Pong. Các hệ số IDCT có thứ tự ở phần thấp của cặp
Ping-pong được điều khiển tính tích lũy nhờ tín hiệu acc_flag, khi acc_flag = ‘1’ thì
cộng tích lũy với kết quả trước đó, ngược lại thì không cộng. Các hệ số IDCT ở phần
cao của cặp Ping-pong được tính tích lũy nhờ vào 2 tín hiệu, even_odd và acc_flag, vai
trò của acc_flag tương tự như khi tính hệ số phần thấp, tín hiệu báo chẵn lẻ even_odd
điều khiển cộng/trừ kết quả tích lũy trước đó với ngõ vào hiện tại. Hai hệ số này được
đưa tới tầng cuối cùng (RESTORE_ROUND_OUT) để tiếp tục xử lý.
Trong tầng RESTORE_ROUND_OUT, hệ số phần cao được lưu lại trong bộ đệm ra
(OUTPUT BUFFER) nhờ vào các tín hiệu cho phép ghi (buffer_wr) và địa chỉ ghi
(buffer_addwr), hệ số phần thấp được chọn làm tròn trong bộ làm tròn ROUND và xuất
ra ngồi qua thanh ghi cho phép bởi tín hiệu output_valid và chốt theo cạnh lên của
GVHD: PGS.TS. Dương Hoài Nghĩa, Ths. Hồ Trung Mỹ
HVTH : KS. Trần Quang Việt – MSHV : 01406337
Trang 18