Tài liệu Đề tài Tìm hiểu thiết kế bộ phát mã Walsh cho hệ đo kênh MIMO dùng công nghệ FPGA
51 trang |
Chia sẻ: hunglv | Lượt xem: 1137 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Tìm hiểu thiết kế bộ phát mã Walsh cho hệ đo kênh MIMO dùng công nghệ FPGA, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 1
MỞ ĐẦU
Kĩ thuật MIMO xuất hiện rất sớm từ những năm 70 do A.R Kaye và D.A
George đề ra năm 1970 và W. van Etten năm 1975, 1976. Trong quá trình phát triển,
kĩ thuật này không ngừng được cải tiến. Ở Việt Nam, do điều kiện kỹ thuật công nghệ
còn khá xa với thế giới nên việc nghiên cứu cũng gặp nhiều khó khăn, đặc biệt là trong
quá trình xây dựng và test một hệ MIMO. Tuy nhiên, vài năm trở lại đây ở Việt Nam
đã bắt đầu được tiếp cận với một công nghệ mới. Đó là công nghệ FPGA. Với công
nghệ này thì việc xây dựng và test một hệ MIMO không còn quá xa vời.
Với kiến thức của sinh viên năm cuối khoa điện tử - viễn thông em đã quyết
định nhận một đề tài khóa luận liên quan đến FPGA với tên gọi “Thiết kế bộ phát mã
Walsh cho hệ đo kênh MIMO dùng công nghệ FPGA” với mục đích từng bước xây
dựng một hệ MIMO trong truyền thông vô tuyến. Nội dung của khóa luận gồm có 4
chương:
Chương 1: GIỚI THIỆU VỀ MIMO và FPGA. Trong chương này em đi vào
giới thiệu về hệ MIMO và những nét chính về FPGA như khái niệm và cấu trúc của
FPGA.
Chương 2: NGÔN NGỮ VÀ MÔI TRƯỜNG LẬP TRÌNH CHO FPGA: giới
thiệu khái quát về ngôn ngữ lập trình VHDL, Verilog và môi trường lập trình cho
FPGA của hãng Xilinx đó là ISE.
Chương 3: CÁC ĐẶC ĐIỂM CƠ BẢN CỦA KIT VIRTEX 4 VÀ CÁC PHẦN
MỀM BỔ TRỢ giới thiệu về kit FPGA Virtex 4 của Xilinx công cụ đã sử dụng trong
quá trình nghiên cứu, thực hiện đề tài và các phần mềm bổ trợ như MATLAB, FUSE,
công cụ System Generator.
Chương 4: THỰC HIỆN MÔ HÌNH THIẾT KẾ VỚI KIT VIRTEX 4. Chương
này đưa ra cách thực hiện một sơ đồ thiết kế cụ thể bằng MATLAB cùng các công cụ
sẵn có được cung cấp bởi Xilinx. Cuối cùng là kết quả thu được qua mô phỏng và kết
quả quan sát được trên giao động ký tại lối ra của thiết kế.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 2
CHƯƠNG 1: GIỚI THIỆU VỀ KĨ THUẬT MIMO VÀ FPGA
1.1. Giới thiệu về MIMO
1.1.1. Khái niệm
Kỹ thuật MIMO (MIMO technique) trong lĩnh vực truyền thông là kỹ thuật sử
dụng nhiều anten phát và nhiều anten thu để truyền dữ liệu. Kỹ thuật MIMO tận dụng
sự phân tập (không gian, thời gian, mã hóa ...) nhằm nâng cao chất lượng tín hiệu, tốc
độ dữ liệu ... (khác với khái niệm beam forming của smart aray antenna nhằm nâng
cao độ lợi thu, phát theo không gian...). Tuy vậy, hạn chế của kỹ thuật MIMO là chi
phí cho thiết bị cao hơn và giải thuật xử lý tín hiệu phức tạp hơn.
Kỹ thuật MIMO ngày nay đang được ứng dụng rất rộng rãi: MIMO-Wifi,
MIMO-UMTS ... nhờ tính tối ưu trong việc sử dụng hiệu quả băng thông, tốc dộ dữ
liệu cao, robust với kênh truyền fading ... Kỹ thuật MIMO tương đối đa dạng và phức
tạp.
Hình 1: Mô hình một hệ MIMO 4x4.
1.1.2. Lịch sử phát triển
Kĩ thuật MIMO với những ưu điểm đầy đủ của nó chỉ mới xuất hiện cách đây
không lâu, nhưng những khái niệm sơ khai về hệ MIMO đã xuất hiện rất sớm từ những
năm 70 do A.R Kaye và D.A George đề ra năm 1970, và W. van Etten năm 1975,
1976.
Giữa thập niên tám mươi, Jack Winters và Jack Salz làm việc tại Bell Labs đã
đưa ra những ứng dụng dùng kĩ thuật tạo búp sóng - được sử dụng trong hệ MIMO sau
này.
Năm 1993, Arogyaswami Paulraj và Thomas Kailath đề xuất khái niệm hợp kênh
không gian sử dụng hệ MIMO.
Năm 1996, Greg Raleigh và Gerard J.Foschini đưa ra phương pháp mới sử dụng
kĩ thuật MIMO dựa trên việc biểu diễn dung năng như hàm phụ thuộc vào số anten thu
phát.
S/P
S1
S2
S3
S4
…
…
S4,S3,S2,S1
(Các ký hiệu truyền)
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 3
Năm 1998, lần đầu tiên trong lịch sử Bell Labs chứng minh thí nghiệm mô hình
hợp kênh không gian (SM).
Năm 2001, sản phẩm thương mại đầu tiên sử dụng công nghệ MIMO – OFDMA
được đưa ra thị trường bởi hiệp hội Iospan Wireless Inc. Sản phẩm này hỗ trợ cả mã
phân tập và hợp kênh không gian.
Năm 2006, một số công ty viễn thông lớn (Beceem Communicatios, Samsung,
Runcom Technology …) tập trung phát triển kĩ thuật MIMO – OFDMA làm giải pháp
cho chuẩn di động băng rộng WIMAX IEEE 802.16e. Cũng trong năm 2006 một số
công ty (Broadcom, Intel …) phát triển kĩ thuật MIMO – OFDM chuẩn bị cho kĩ thuật
WiFi theo chuẩn IEEE 802.11n.
Trong tương lai kĩ thuật MIMO vẫn còn rất quan trọng trong hệ 4G, và vẫn đang
được nhiều nhà nghiên cứu quan tâm phát triển.
1.1.3. Phân loại
MIMO có thể chia thành 3 mảng chính: Mã trước (Precoding), hợp kênh không
gian – SM, và mã phân tập.
Mã trước là cách tạo búp sóng nhiều lớp. Trong cách tạo búp sóng đơn lớp mỗi
anten phát sẽ phát các tín hiệu giống nhau với các trọng số pha thích hợp để cực đại
công suất tại đầu thu. Kết quả tà tạo búp sóng làm tăng hệ số công suất thông qua cấu
trúc tổng hợp, và làm giảm hiệu ứng fading do đa đường. Nếu môi trường không có
tán xạ thì cách tạo búp sóng này rất có hiệu quả. Nhưng thật không may những hệ
thống trong thực tế đều không như vậy. Khi sử dụng nhiều anten nhận thì bên phát
không thể tạo búp sóng để cực đại tín hiệu trên tất cả các anten nhận. Khi đó mã trước
cần được sử dụng. Trong kĩ thuật này, nhiều luồng tín hiệu độc lập được phát đồng
thời từ các anten phát với các trọng số thích hợp sao cho thông lượng tại bộ thu cực
đại. Mã trước yêu cầu bên phát phải biết thông tin trạng thái kênh (CSI).
Hợp kênh không gian: yêu cầu cấu hình anten phù hợp. Trong hợp kênh không
gian, tín hiệu tốc độ cao được chia thành nhiều luồng tốc độ thấp hơn, mỗi luồng được
phát bởi một anten khác nhau trên cùng một băng tần. Nếu các luồng tín hiệu này đến
bộ thu có sự khác biệt kí hiệu không gian thích hợp thì bộ thu có thể tách biệt các
luồng này, tạo thành các kênh song song. Hợp kênh không gian rất hữu hiệu làm tăng
dung năng đáng kể trong trường hợp tỉ số SNR cao. Số luồng không gian cực đại đúng
bằng hoặc nhỏ hơn số anten nhở nhất ở bên phát và bên thu. Hợp kênh không gian
không yêu cầu bên phát phải biết kênh.
Mã phân tập là kĩ thuật khi bên phát không biết thông tin trạng thái kênh. Không
như kĩ thuật SM, mã phân tập chỉ phát đi một luồng tín hiệu được mã hoá theo kĩ thuật
được gọi là mã không – thời gian. Các anten phát tín hiệu mã hoá trực giao. Kĩ thuật
phân tập khai thác tính độc lập của fading trong hệ nhiều anten để nâng cao sự phân
tập của tín hiệu. Vì bên phát không biết kênh nên mã phân tập không tạo búp sóng.
Trong thực tế người ta có thể kết hợp kĩ thuật hợp kênh không gian với mã trước
khi bên phát biết trạng thái kênh, hoặc kết hợp với mã phân tập trong trường hợp
ngược lại.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 4
1.1.4. Ứng dụng của MIMO
Lợi ích chính của hệ MIMO là tăng đáng kể tốc độ dữ liệu và độ tin cậy của kênh
truyền. Kĩ thuật hợp kênh không gian đòi hỏi độ phức tạp của bộ thu, do đó nó thường
được kết hợp với kĩ thuật hợp kênh phân chia theo tần số trực giao (OFDM), hoặc
OFDMA. Chuẩn IEEE 802.16e kết hợp chặt chẽ với kĩ thuật MIMO – OFDMA và
chuẩn IEEE 802.11n sử dụng MIMO – OFDM.
Hệ MIMO cũng được sử dụng trong chuẩn di động 3GPP và 3GPP2 và đang
được phát triển kĩ thuật truyền thông MIMO nâng cao như là kĩ thuật xuyên lớp, kĩ
thuật nhiều người dùng và ad – hoc trong MIMO.
Xuyên lớp MIMO giải quyết các vấn đề xuyên lớp xảy ra trong hệ thống MIMO,
do đó làm tăng hiệu quả sử dụng kênh. Kĩ thuật xuyên lớp này cũng làm tăng hiệu quả
sử dụng kênh SISO. Các kĩ thuật xuyên lớp thường gặp là điều chế và mã hoá thích
nghi (AMC), liên kết thích nghi.
MIMO nhiều người dùng có thể khai thác sự giao thoa công suất của nhiều người
sử dụng như là một tài nguyên không gian cho kĩ thuật xử lý phát tiên tiến, còn trong
chế độ một người dùng, hệ MIMO chỉ sử dụng nhiều anten. Ví dụ cho xử lý phát tiên
tiến của hệ MIMO nhiều người dùng là giao thoa liên quan đến mã trước.
Ad – hoc MIMO là một kĩ thuật rất hữu dụng cho mạng tế bào tương lai, nó tập
trung vào mạng vô tuyến mắt cáo hay mạng vô tuyến ad – hoc. Trong mạng ad – hoc
nhiều nút phát liên lạc với nhiều nút thu. Để có thể tối ưu dung năng của kênh Ad –
hoc, khái niệm và kĩ thuật MIMO được áp dụng cho các liên kết trong cụm nút thu và
phát. Không giống với hệ anten trong hệ MIMO một người dùng, các nút này được đặt
như một hạng phân bố. Để đạt được dung năng trong mạng này cần quản lý sự phân bố
tài nguyên sóng vô tuyến hiệu quả như sự hoạt động đồng thời của các nút và khái
niệm mã trang nhiễm bẩn.
Tóm lại, hệ MIMO với những kĩ thuật phân tập, mã trước và nhiều người dùng
làm tăng đáng kể tốc độ dữ liệu và độ tin cậy kênh truyền, đang rất được quan tâm
nghiên cứu phát triển hứa hẹn đêm lại cho chúng ta nhiều lợi ích hơn nữa trong truyền
thông vô tuyến.
1.2. Giới thiệu về FPGA
1.2.1. Khái niệm
Field-programmable gate array (FPGA) là vi mạch dùng cấu trúc mảng phần
tử logic mà người dùng có thể lập trình được. (Chữ field ở đây muốn chỉ đến khả năng
tái lập trình “bên ngoài” của người sử dụng, không phụ thuộc vào dây chuyền sản xuất
phức tạp của nhà máy bán dẫn). Vi mạch FPGA được cấu thành từ các bộ phận (hình
2):
Các khối logic cơ bản lập trình được (logic block).
Hệ thống mạch liên kết lập trình được.
Khối vào/ra (I/O Pads).
Phần tử thiết kế sẵn khác như DSP slice, RAM, ROM, nhân vi xử lý...
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 5
Hình 2: Cấu trúc cơ bản của FPGA
FPGA cũng được xem như một loại vi mạch bán dẫn chuyên dụng ASIC, nhưng
nếu so sánh FPGA với những ASIC đặc chế hoàn toàn hay ASIC thiết kế trên thư viện
logic thì FPGA không đạt đựợc mức độ tối ưu như những loại này, và hạn chế trong
khả năng thực hiện những tác vụ đặc biệt phức tạp, tuy vậy FPGA ưu việt hơn ở chỗ
có thể tái cấu trúc lại khi đang sử dụng, công đoạn thiết kế đơn giản do vậy chi phí
giảm, rút ngắn thời gian đưa sản phẩm vào sử dụng.
Còn nếu so sánh với các dạng vi mạch bán dẫn lập trình được dùng cấu trúc
mảng phần tử logic như PLA, PAL, CPLD thì FPGA ưu việt hơn các điểm: tác vụ tái
lập trình của FPGA thực hiện đơn giản hơn; khả năng lập trình linh động hơn; và khác
biệt quan trọng nhất là kiến trúc của FPGA cho phép nó có khả năng chứa khối lượng
lớn cổng logic (logic gate), so với các vi mạch bán dẫn lập trình được có trước nó.
Thiết kế hay lập trình cho FPGA được thực hiện chủ yếu bằng các ngôn ngữ mô
tả phần cứng HDL như VHDL, Verilog, AHDL, các hãng sản xuất FPGA lớn như
Xilinx, Altera thường cung cấp các gói phần mềm và thiết bị phụ trợ cho quá trình
thiết kế, cũng có một số các hãng thứ ba cung cấp các gói phần mềm kiểu này như
Synopsys, Synplify... Các gói phần mềm này có khả năng thực hiện tất cả các bước
của toàn bộ quy trình thiết kế IC chuẩn với đầu vào là mã thiết kế trên HDL (còn gọi là
mã RTL).
FPGA được thiết kế đầu tiên bởi Ross Freeman, người sáng lập công ty Xilinx
vào năm 1984, kiến trúc mới của FPGA cho phép tính hợp số lượng tương đối lớn các
phần tử bán dẫn vào một vi mạch so với kiến trúc trước đó là CPLD. FPGA có khả
năng chứa tới từ 100.000 đến hàng vài tỷ cổng logic, trong khi CPLD chỉ chứa từ
10.000 đến 100.000 cổng logic; con số này đối với PAL, PLA còn thấp hơn nữa chỉ
đạt vài nghìn đến 10.000.
CPLD được cấu trúc từ số lượng nhất định các khối SPLD (Simple programable
devices, thuật ngữ chung chỉ chung chỉ PAL, PLA). SPLD thường là một mảng logic
AND/OR lập trình được có kích thước xác định và chứa một số lượng hạn chế các
phần tử nhớ đồng bộ (clocked register). Cấu trúc này hạn chế khả năng thực hiện
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 6
những hàm phức tạp và thông thường hiệu suất làm việc của vi mạch phụ thuộc vào
cấu trúc cụ thể của vi mạch hơn là vào yêu cầu bài toán.
Kiến trúc của FPGA là kiến trúc mảng các khối logic, khối logic, nhỏ hơn nhiều
nếu đem so sánh với một khối SPLD, ưu điểm này giúp FPGA có thể chứa nhiều hơn
các phần tử logic và phát huy tối đa khả năng lập trình của các phần tử logic và hệ
thống mạch kết nối, để đạt được mục đích này thì kiến trúc của FPGA phức tạp hơn
nhiều so với CPLD.
Một điểm khác biệt với CPLD là trong những FPGA hiện đại được tích hợp
nhiều những bộ logic số học đã sơ bộ tối ưu hóa, hỗ trợ RAM, ROM, tốc độ cao, hay
các bộ nhân cộng (multication and accumulation, MAC), thuật ngữ tiếng Anh là DSP
slice dùng cho những ứng dụng xử lý tín hiệu số DSP.
Ngoài khả năng tái cấu trúc vi mạch toàn cục, một số FPGA hiện đại còn hộ trợ
tái cấu trúc cục bộ, tức là khả năng tái cấu trúc một bộ phận riêng lẻ trong khi vẫn đảm
bảo hoạt động bình thường cho các bộ phận khác.
1.2.2. Ứng dụng
Ứng dụng của FPGA bao gồm: xử lý tín hiệu số DSP, các hệ thống hàng không,
vũ trụ, quốc phòng, tiền thiết kế mẫu ASIC (ASIC prototyping), các hệ thống điều
khiển trực quan, phân tích nhận dạng ảnh, nhận dạng tiếng nói, mật mã học, mô hình
phần cứng máy tính...
Do tính linh động cao trong quá trình thiết kế cho phép FPGA giải quyết lớp
những bài toán phức tạp mà trước kia chỉ thực hiện nhờ phần mềm máy tính, ngoài ra
nhờ mật độ cổng logic lớn FPGA được ứng dụng cho những bài toán đòi hỏi khối
lượng tính toán lớn và dùng trong các hệ thống làm việc theo thời gian thực.
Khối logic
Phần tử chính của FPGA là các khối logic (logic blocks). Khối logic được cấu
thành từ LUT và một phần tử nhớ đồng bộ flip-flop, LUT (Look up table) là khối logic
có thể thực hiện bất kì hàm logic nào từ 4 đầu vào, kết quả của hàm này tùy vào mục
đích mà gửi ra ngoài khối logic trực tiếp hay thông qua phần tử nhớ flip-flop.
Hình 3: Khối logic trong FPGA
Trong tài liệu hướng dẫn của các dòng FPGA của Xilinx còn sử dụng khái niệm
SLICE, một Slice tạo thành từ gồm 4 khối logic, số lượng các Slices thay đổi từ vài
nghìn đến vài chục nghìn tùy theo loại FPGA.
Look
Up
Table
(LUT)
Flip
-
Flop
Input
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 7
Nếu nhìn cấu trúc tổng thể của mảng LUT thì ngoài 4 đầu vào kể trên còn hỗ trợ
thêm 2 đầu vào bổ xung từ các khối logic phân bố trước và sau nó nâng tổng số đầu
vào của LUT lên 6 chân. Cấu trúc này là nhằm tăng tốc các bộ số học logic.
1.2.3. Hệ thống mạch liên kết
Khối chuyển mạch của FPGA là mạng liên kết trong FPGA được cấu thành từ
các đường kết nối theo hai phương ngang và đứng, tùy theo từng loại FPGA mà các
đường kết nối được chia thành các nhóm khác nhau, ví dụ trong XC4000 của Xilinx có
3 loại kết nối: ngắn, dài và rất dài. Các đường kết nối được nối với nhau thông qua các
khối chuyển mạch lập trình được (programable switch), trong một khối chuyển mạch
chứa một số lượng nút chuyển lập trình được đảm bảo cho các dạng liên kết phức tạp
khác nhau.
1.2.4. Các phần tử tích hợp sẵn
Ngoài các khối logic tùy theo các loại FPGA khác nhau mà có các phần tử tích
hợp thêm khác nhau, ví dụ để thiết kế những ứng dụng SoC, trong dòng Virtex 4,5 của
Xilinx có chứa nhân sử lý PowerPC, hay trong Atmel FPSLIC tích hợp nhân ARV…,
hay cho những ứng dụng xử lý tín hiệu số DSP trong FPGA được tích hợp các DSP
Slice là bộ nhân cộng tốc độ cao, thực hiện hàm A*B+C, ví dụ dòng Virtex của Xilinx
chứa từ vài chục đến hàng trăm DSP slices với A, B, C 18-bit.
Ngày nay ngành công nghệ chế tạo phần cứng luôn có những đột phá không
ngừng. Từ các mạch điện đơn giản đến các mạch số, mạch tích hợp, kiến trúc mạch
trở nên ngày một phức tạp hơn. Nhờ những ưu điểm hơn hẳn so với các phương pháp
phân tích, mô hình hoá, thiết kế mạch số kiểu truyền thống mà phương pháp sử
dụng các ngôn ngữ mô phỏng phần cứng (HDL - Hardware Description Languages)
đang trở thành một phương pháp thiết kế các hệ thống điện tử số phổ biến trên toàn
thế giới. Trong khóa luận này em xin giới thiệu hai loại ngôn ngữ mô phỏng phần cứng
đó là VHDL (Very high speed intergrated circuit Hardware Description Language) và
Verilog là hai ngôn ngữ chủ yếu được sử dụng để mô phỏng phần cứng trong công
nghệ CPLD, FPGA, ASIC…
Những ưu điểm của phương pháp thiết kế hệ thống số bằng ngôn ngữ
mô phỏng phần cứng (HDL).
Ngày nay, các mạch tích hợp ngày càng thực hiện được nhiều chức năng do đó
mà vấn đề thiết kế mạch càng trở nên phức tạp. Những phương pháp truyền thống
như dùng phương pháp tối thiểu hoá hàm Boolean hay dùng sơ đồ các phần tử không
còn đáp ứng được các yêu cầu đặt ra khi thiết kế. Nhược điểm lớn nhất của các
phương pháp này là chúng chỉ mô tả được hệ thống dưới dạng mạng nối các phần tử
với nhau. Người thiết kế cần phải đi qua hai bước thực hiện hoàn toàn thủ công: đó
là chuyển từ các yêu cầu về chức năng của hệ thống sang biểu diễn theo dạng hàm
Boolean, sau các bước tối thiểu hoá hàm này ta lại phải chuyển từ hàm Boolean sang
sơ đồ mạch của hệ thống. Cũng tương tự khi phân tích một hệ thống người phân
tích cần phải phân tích sơ đồ mạch của hệ thống, rồi chuyển nó thành các hàm
Boolean, sau đó mới lập lại các chức năng, hoạt động của hệ thống. Tất cả các bước
nói trên hoàn toàn phải thực hiện thủ công không có bất kỳ sự trợ giúp nào của máy
tính. Người thiết kế chỉ có thể sử dụng máy tính làm công cụ hỗ trợ trong việc vẽ sơ
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 8
đồ mạch của hệ thống và chuyển từ sơ đồ mạch sang công cụ tổng hợp mạch vật lý
dùng công cụ Synthesis. Một nhược điểm khác nữa của phương pháp thiết kế truyền
thống là sự giới hạn về độ phức tạp của hệ thống được thiết kế. Phương pháp dùng
hàm Boolean chỉ có thể dùng để thiết kế hệ thống lớn nhất biểu diễn bởi vài trăm hàm.
Còn phương pháp dựa trên sơ đồ chỉ có thể dùng để thiết kế hệ thống lớn nhất chứa
khoảng vài nghìn phần tử.
Phương pháp thiết kế, thử nghiệm, phân tích các hệ thống số sử dụng các ngôn
ngữ mô tả phần cứng nổi bật lên với các ưu điểm hơn hẳn và sẽ dần thay thế các
phương pháp truyền thống. Sự ra đời của ngôn ngữ mô phỏng phần cứng đã giải quyết
được rất nhiều nhược điểm lớn của các phương pháp thiết kế trước đây: Nếu các
phương pháp cũ đòi hỏi phải chuyển đổi từ mô tả hệ thống (các chỉ tiêu về chức
năng) sang tập hợp các hàm logic bằng tay thì bước chuyển đó hoàn toàn không cần
thiết khi dùng HDL. Hầu hết các công cụ thiết kế dùng ngôn ngữ mô phỏng phần
cứng đều cho phép sử dụng biểu đồ trạng thái (finite-state-machine) cho các hệ thống
tuần tự cũng như cho phép sử dụng bảng chân lý cho hệ thống tổng hợp. Việc
chuyển đổi từ các biểu đồ trạng thái và bảng chân lý sang mã ngôn ngữ mô phỏng
phần cứng được thực hiện hoàn toàn tự động.
Nhờ tính dễ kiểm tra thử nghiệm hệ thống trong suốt quá trình thiết kế mà
người thiết kế có thể dễ dàng phát hiện các lỗi thiết kế ngay từ những giai đoạn đầu,
giai đoạn chưa đưa vào sản xuất thử, do đó tiết kiệm được lượng chi phí đáng kể bởi
từ ý tưởng thiết kế đến tạo ra sản phẩm đúng như mong muốn là một việc rất khó
tránh khỏi những khó khăn, thất bại.
Khi mọi lĩnh vực của khoa học đều phát triển không ngừng thì sự phức tạp của
hệ thống điện tử cũng ngày một tăng theo và gần như không thể tiến hành thiết kế thủ
công mà không có sự trợ giúp cuả các loại máy tính hiện đại. Ngày nay, ngôn ngữ
mô tả phần cứng HDL được dùng nhiều để thiết kế cho các thiết bị logic lập trình
được PLD từ loại đơn giản đến các loại phức tạp như ma trận cổng lập trình được
FPGA.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 9
CHƯƠNG 2: NGÔN NGỮ VÀ MÔI TRƯỜNG LẬP TRÌNH CHO FPGA
2.1. Ngôn ngữ lập trình cho FPGA
2.1.1 Giới thiệu
Có nhiều ngôn ngữ có thể lập trình cho FPGA như VHDL, Verilog, C… Mỗi
ngôn ngữ lại có ưu nhược điểm riêng. Ví dụ như Verilog là ngôn ngữ được phát triển
và sử dụng chủ yếu ở Mỹ. Đây là một ngôn ngữ rất gần với C, chính vì vậy sẽ rất
thuận tiện cho ai đó đã quen lập trình với ngôn ngữ C. Tuy nhiên, ở châu Âu thì người
ta lại quen dùng VHDL hơn. Ưu điểm của ngôn ngữ này là người làm việc với nó sẽ
có cái nhìn rất thấu đáo về phần cứng. Trong chương này em xin được giới thiệu chủ
yếu về về ngôn ngữ VHDL – ngôn ngữ mà em đã tìm hiểu trong quá trình học tập và
làm thực nghiệm với FPGA trên phòng SIS (Smart Integrated Systems) và đưa ra vài
nét giới thiệu khái quát về Verilog cũng là một ngôn ngữ rất thông dụng đối với lập
trình FPGA hiện nay.
2.1.2. Ngôn ngữ VHDL
2.1.2.1. Khái niệm
VHDL là ngôn ngữ mô tả phần cứng cho các mạch tích hợp tốc độ rất cao, là một
loại ngôn ngữ mô tả phần cứng được phát triển dùng cho chương trình VHSIC (Very
High Speed Itergrated Circuit) của bộ quốc phòng Mỹ. Mục tiêu của việc phát triển
VHDL là có được một ngôn ngữ mô phỏng phần cứng tiêu chuẩn và thống nhất cho
phép thử nghiệm các hệ thống số nhanh hơn cũng như cho phép dễ dàng đưa các hệ
thống đó vào ứng dụng trong thực tế. Ngôn ngữ VHDL được ba công ty Intermetics,
IBM và Texas Instruments bắt đầu nghiên cứu phát triển vào tháng 7 năm 1983. Phiên
bản đầu tiên được công bố vào tháng 8-1985. Sau đó VHDL được đề xuất để tổ chức
IEEE xem xét thành một tiêu chuẩn chung. Năm 1987 đã đưa ra tiêu chuẩn về VHDL
(tiêu chuẩn IEEE-1076-1987).
VHDL được phát triển để giải quyết các khó khăn trong việc phát triển, thay đổi
và lập tài liệu cho các hệ thống số. Như ta đã biết, một hệ thống số có rất nhiều tài liệu
mô tả. Để có thể vận hành bảo trì sửa chữa một hệ thống ta cần tìm hiểu kỹ lưỡng tài
liệu đó. Với một ngôn ngữ mô phỏng phần cứng tốt việc xem xét các tài liệu mô tả trở
nên dễ dàng hơn vì bộ tài liệu đó có thể được thực thi để mô phỏng hoạt động của hệ
thống. Như thế ta có thể xem xét toàn bộ các phần tử của hệ thống hoạt động trong một
mô hình thống nhất.
VHDL được phát triển như một ngôn ngữ độc lập không gắn với bất kỳ một
phương pháp thiết kế, một bộ mô tả hay công nghệ phần cứng nào. Người thiết kế
có thể tự do lựa chọn công nghệ, phương pháp thiết kế trong khi chỉ sử dụng một ngôn
ngữ duy nhất. Và khi đem so sánh với các ngôn ngữ mô phỏng phần cứng khác đã kể
ra ở trên ta thấy VHDL có một số ưu điểm hơn hẳn các ngôn ngữ khác:
- Thứ nhất là tính công cộng: VHDL được phát triển dưới sự bảo trợ của chính
phủ Mỹ và hiện nay là một tiêu chuẩn của IEEE. VHDL được sự hỗ trợ của nhiều nhà
sản xuất thiết bị cũng như nhiều nhà cung cấp công cụ thiết kế mô phỏng hệ thống.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 10
- Thứ hai là khả năng hỗ trợ nhiều công nghệ và phương pháp thiết kế. VHDL
cho phép thiết kế bằng nhiều phương pháp ví dụ phương pháp thiết kế từ trên xuống,
hay từ dưới lên dựa vào các thư viện sẵn có. VHDL cũng hỗ trợ cho nhiều loại công cụ
xây dựng mạch như sử dụng công nghệ đồng bộ hay không đồng bộ, sử dụng ma trận
lập trình được hay sử dụng mảng ngẫu nhiên.
- Thứ ba là tính độc lập với công nghệ: VHDL hoàn toàn độc lập với công nghệ
chế tạo phần cứng. Một mô tả hệ thống dùng VHDL thiết kế ở mức cổng có thể được
chuyển thành các bản tổng hợp mạch khác nhau tuỳ thuộc công nghệ chế tạo phần
cứng mới ra đời nó có thể được áp dụng ngay cho các hệ thống đã thiết kế.
- Thứ tư là khả năng mô tả mở rộng: VHDL cho phép mô tả hoạt động của phần
cứng từ mức hệ thống số cho đến mức cổng. VHDL có khả năng mô tả hoạt động của
hệ thống trên nhiều mức nhưng chỉ sử dụng một cú pháp chặt chẽ thống nhất cho mọi
mức. Như thế ta có thể mô phỏng một bản thiết kế bao gồm cả các hệ con được mô tả
chi tiết.
- Thứ năm là khả năng trao đổi kết quả: Vì VHDL là một tiêu chuẩn được chấp
nhận, nên một mô hình VHDL có thể chạy trên mọi bộ mô tả đáp ứng được tiêu chuẩn
VHDL. Các kết quả mô tả hệ thống có thể được trao đổi giữa các nhà thiết kế sử dụng
công cụ thiết kế khác nhau nhưng cùng tuân theo tiêu chuẩn VHDL. Cũng như một
nhóm thiết kế có thể trao đổi mô tả mức cao của các hệ thống con trong một hệ thống
lớn (trong đó các hệ con đó được thiết kế độc lập).
- Thứ sáu là khả năng hỗ trợ thiết kế mức lớn và khả năng sử dụng lại các thiết
kế: VHDL được phát triển như một ngôn ngữ lập trình bậc cao, vì vậy nó có thể được
sử dụng để thiết kế một hệ thống lớn với sự tham gia của một nhóm nhiều người. Bên
trong ngôn ngữ VHDL có nhiều tính năng hỗ trợ việc quản lý, thử nghiệm và chia sẻ
thiết kế. Và nó cũng cho phép dùng lại các phần đã có sẵn.
2.1.2.2. Cấu trúc một mô hình hệ thống mô tả bằng VHDL
Mục đích của phần này là nhằm giới thiệu sơ qua về cấu trúc khung cơ bản của
VHDL khi mô tả cho một mô hình thiết kế thực. Thông thường một mô hình VHDL
bao gồm ba phần: thực thể (entity), kiến trúc (architecture) và các cấu hình. Đôi khi ta
sử dụng các gói (packages) và mô hình kiểm tra hoạt động của hệ thống (testbench).
+ Thực thể (entity)
Đây là nơi chứa các khai báo thực thể (là các port giao tiếp giữa FPGA và các tín
hiệu bên ngoài các port này được sử dụng như là lớp vỏ của kiến trúc thiết kế) và có
thể bao gồm các tùy chọn “generic” là khai báo chung có thể dễ dàng sửa đổi khi cần.
+ Kiến trúc (architecture)
Phần thứ hai trong mô hình VHDL là khai báo kiến trúc của chương trình. Mỗi
một khai báo thực thể đều phải đi kèm với ít nhất một kiến trúc tương ứng. VHDL
cho phép tạo ra hơn một kiến trúc cho một thực thể. Phần khai báo kiến trúc có thể
bao gồm các khai báo về các tín hiệu bên trong, các phần tử bên trong hệ thống, hay
các hàm và thủ tục mô tả hoạt động của hệ thống. Tên của kiến trúc là nhãn được đặt
tuỳ theo người xử dụng. Có hai cách mô tả kiến trúc của một phần tử (hoặc hệ thống)
đó là mô hình hoạt động (Behaviour) hay mô tả theo mô hình cấu trúc (Structure).
Tuy nhiên một hệ thống có thể bao gồm cả mô tả theo mô hình hoạt động và mô tả
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 11
theo mô hình cấu trúc.
+ Mô tả kiến trúc theo mô hình hoạt động
Mô hình hoạt động mô tả các hoạt động của hệ thống (hệ thống đáp ứng với các
tín hiệu vào như thế nào và đưa ra kết quả gì ở đầu ra) dưới dạng các cấu trúc ngôn
ngữ lập trình bậc cao. Cấu trúc đó có thể là PROCESS, WAIT, IF, CASE, FOR-
LOOP…
+ Mô tả kiến trúc theo mô hình cấu trúc
Mô hình cấu trúc của một phần tử (hoặc hệ thống) có thể bao gồm nhiều cấp cấu
trúc bắt đầu từ một cổng logic đơn giản đến xây dựng mô tả cho một hệ thống hoàn
thiện. Thực chất của việc mô tả theo mô hình cấu trúc là mô tả các phần tử con bên
trong hệ thống và sự kết nối của các phần tử con đó. Như với ví dụ mô tả mô hình cấu
trúc một flip-flop RS gồm hai cổng NAND có thể mô tả cổng NAND được định nghĩa
tương tự như ví dụ với cổng NOT, sau đó mô tả sơ đồ móc nối các phần tử NAND tạo
thành trigơ RS.
+ Cấu trúc process
Process là khối cơ bản của việc mô tả theo hoạt động. Process được
xét đến như là một chuỗi các hành động đơn trong suốt quá trình dịch.
Hình 4: Cấu trúc process
S: Mô hình cấu trúc
B: Mô hình hoạt động
S/B: Mô hình kết hợp
Cấu trúc tổng quát
[Process label]
Process [(sensitive_list )]
Process declarative part
Begin
S
S B
S S/B S
B B B B B B
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 12
….
End process
Trong đó các phần đặt trong dấu [ ] thì có thể có hoặc không.
- process_label: (nhãn lệnh) là tuỳ thuộc người lập trình đặt tên
- sensitivity_list: Danh sách các yếu tố kích thích hoạt động.
+ Môi trường kiểm tra (testbench)
Một trong các nhiệm vụ rất quan trọng là kiểm tra bản mô tả thiết kế. Kiểm tra
một mô hình VHDL được thực hiện bằng cách quan sát hoạt động của nó trong khi mô
phỏng và các giá trị thu được có thể đem so sánh với yêu cầu thiết kế.
Môi trường kiểm tra có thể hiểu như một mạch kiểm tra ảo. Môi trường kiểm
tra sinh ra các tác động lên bản thiết kế và cho phép quan sát hoặc so sánh kết quả
hoạt động của bản mô tả thiết kế. Thông thường thì các bản mô tả đều cung cấp
chương trình thử. Nhưng ta cũng có thể tự xây dựng chương trình thử (testbench).
Mạch thử thực chất là sự kết hợp của tổng hợp nhiều thành phần. Nó gồm ba thành
phần. Mô hình VHDL đã qua kiểm tra, nguồn dữ liệu và bộ quan sát. Hoạt động của
mô hình VHDL được kích thích bởi các nguồn dữ liệu và kiểm tra tính đúng đắn thông
qua bộ quan sát.
Hình 5: Sơ đồ khối của Testbench
Trong đó: DUT: (device under test) mô hình VHDL cần kiểm tra.
Observer: khối quan sát kết quả.
Data source: nguồn dữ liệu (khối tạo ra các tín hiệu kích thích).
2.1.3. Giới thiệu khái quát về ngôn ngữ Verilog
Verilog HDL là một trong hai ngôn ngữ mô phỏng phần cứng thông dụng nhất
cùng với VHDL được dùng trong thiết kế IC. Verilog HDL cho phép mô phỏng các
thiết kế dễ dàng, sửa chữa lỗi, hoặc thực nghiệm bằng những cấu trúc khác nhau. Các
thiết kế được mô tả trong Verilog HDL là những kỹ thuật độc lập, dễ thiết kế, dễ tháo
gỡ và thường dễ đọc hơn ở dạng biểu đồ, đặc biệt là ở các mạch điện lớn.
Verilog thường được dùng để mô tả thiết kế ở bốn dạng
Data Source
(stimuli
Generator)
Observer
DUT
Generics
Testbench Entity
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 13
Thuật toán (một số lệnh giống ngôn ngữ C như: if, case, for,while…).
Chuyển đổi thanh ghi (kết nối bằng các biểu thức Boolean).
Các cổng kết nối (cổng: OR, AND, NOT…).
Chuyển mạch (BJT, MOSFET).
Ngôn ngữ này cũng chỉ rõ cách thức kết nối, điều khiển vào/ra trong mô phỏng.
Khai báo module
Một module là bản thiết kế chủ yếu tồn tại trong Verilog. Dòng đầu tiên của khai
báo module chỉ rõ danh sách tên và port (các đối số). Những dòng kế tiếp chỉ rõ dạng
I/O (input, output, hoặc inout) và chiều rộng của mỗi port. Mặc định chiều rộng port là
1 bit.
Sau đó, những biến port phải được khai báo wire, wand, …, reg. Mặc định là
wire. Những ngõ vào đặc trưng là wire khi dữ liệu được chốt bean ngoài module. Các
ngõ ra là dạng reg nếu những tín hiệu của chúng được chứa trong khối always hoặc
initial.
Chỉ thị liên tiếp
Các chỉ định liên tiếp được dùng để gán một giá trị lên trên một wire trong một
module. Đó là các chỉ định thông thường bên ngoài khối always hoặc khối initial. Các
chỉ định liên tiếp được thực hiện với một lệnh gán (assign) rõ ràng hoặc bằng sự chỉ
định một giá trị đến một wire trong lúc khai báo. Chú ý rằng, các lệnh chỉ định liên
tiếp thì tồn tại và được chạy liên tục trong suốt quá trình mô phỏng. Thứ tự các lệnh
gán không quan trọng. Mọi thay đổi bên phải của bất cứ ngõ vào sẽ lập tức thay đổi
bên trái của các ngõ ra.
Module instantiations
Những khai báo module là những khuôn mẫu mà nó được tạo nên từ các đối
tượng thực tế (instantiation). Các module đơn cử bên trong các module khác, và mỗi
dẫn chứng tạo một đối tượng độc nhất từ khuôn mẫu. Ngoại trừ đó là module mức trên
là những dẫn chứng từ chính chúng. Các port của module ví dụ phải thỏa những định
nghĩa trong khuôn mẫu. Đây là mặt lý thuyết: bằng tên, sử dụng dấu chấm (.) ”.tên
port khuôn mẫu (tên của wire kết nối đến port)”. Bằng vị trí, đặt những port ở những vị
trí giống nhau trong danh sách port của cả khuôn mẫu lẫn instance.
BEHAVIORAL
Verilog có 4 mức khuôn mẫu:
• Chuyển mạch.
• Cổng.
• Mức tràn dữ liệu.
• Hành vi hoặc thủ tục được đề cập ở bên dưới.
Các lệnh thủ tục Verilog được dùng tạo một mẫu thiết kế ở mức cao hơn. Chúng chỉ ra
những cách thức mạnh của vệc làm ra những thiết kế phức tạp. Tuy nhiên, những thay
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 14
đổi nhỏ n phương pháp mã hóa có thể gây ra biến đổi lớn trong phần cứng. Các lệnh
thủ tục chỉ có thể được dùng trong những thủ tục.
Những chỉ định theo thủ tục:
Là những chỉ định dùng trong phạm vi thủ tục Verilog (khối always và initial). Chỉ
biến reg và integers (hoặc chọn đơn bit/ nhóm bit của chúng hoặc kết nối thông tin) có
thể được đặt bên trái dấu ‘=’ trong thủ tục. Bên phải của chỉ định là một biểu thức mà
có thể dùng bất cứ dạng toán tử nào.
Delay trong chỉ định:
Trong chỉ định trễ ∆t là khoảng thời gian trải qua trước khi một lệnh được thực thi và
bên trái lệnh gán được tạo ra. Với nhiều chỉ định trễ (intra-assignment delay), bên phải
được định giá trị trực tiếp nhưng có một delay của ∆t trước khi kết quả được đặt bên
trái lệnh gán. Nếu thêm một quá trình thay đổi nữa cạnh bên phải tín hiệu trong
khoảng thơi gian ∆t, thì không cho kết quả ở ngõ ra. Delay không được hỗ trợ bởi các
công cụ.
Cấu trúc chương trình dùng ngôn ngữ Verilog
// Khai báo module
Module tên chương trình (tên biến I/O); // tên chương trình trùng tên file.v.
Input [msb:lsb] biến;
Output [msb:lsb] biến;
Reg [msb:lsb] biến reg;
Wire [msb: lsb] biến wire;
// Khai báo khối always, hoặc khối initial.
… các lệnh …
2.2. Môi trường lập trình cho FPGA
Hiện nay, có nhiều nhà cung cấp sản phẩm FPGA trên thị trường như Altera,
Xilinx, Actel… Sản phẩm của môi nhà cung cấp lại có những ưu, nhược điểm riêng do
các hãng đều sản xuất theo công nghệ riêng của mình. Chính vì vậy mỗi hãng lại đưa
ra một sản phẩm phần mềm riêng đi kèm làm môi trường thiết kế và nạp cho chip
FPGA của hãng đó như của Altera là Quartus II, Actel có Actel Libero còn Xilinx có
ISE. Trong khóa luận này em chỉ xin giới thiệu về ISE – phần mềm hỗ trợ cho Kit
Virtex 4 của Xilinx mà em đã sử dụng để thực hiện khóa luận này.
2.2.1. ISE
Hệ thống phần mềm ISE của Xilinx là một môi trường thiết kế tích hợp bao gồm
thiết kế chương trình, mô phỏng và thực hiện các thiết kế trên các thiết bị FPGA hay
CPLD. ISE có thể tham gia vào việc điều khiển mọi giai đoạn trong quy trình thiết
kế.Thông qua giao diện của ISE, người dùng có thể can thiệp vào các thiết kế và sử
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 15
dụng các công cụ thực hiện thiết kế. Ngoài ra người dùng còn có thể can thiệp vào các
file hay tài liệu có liên quan đến project đang thiết kế.
Giao diện phần mềm ISE
Hình 6: Giao diện phần mềm ISE
Cửa sổ nguồn
Cửa sổ này bao gồm các file nguồn của 1 project (gồm các file được viết hoặc
các file có sẵn được đưa vào project). Trong cửa sổ này có một danh sách mà qua đó
người dùng có thể chọn các file nguồn cho các mục đích thiết kế cụ thể như tổng hợp,
thực thi hay mô phỏng.
Cửa sổ xử lí
Cửa sổ này cho ta biết các thiết kế đã sẵn sàng để chạy (bao gồm cả mô phỏng
và thực thi) hay chưa (ví dụ khi bạn muốn chạy một thiết kế trong file nguồn đã chọn).
Để chạy một thiết kế, ta click đúp vào thiết kế đó, khi thiết kế đã được thực thi thành
công, một dấu tích xanh sẽ xuất hiện bên cạnh thiết kế đó. Khi chạy một thiết kế, ISE
sẽ tự động chạy các thiết kế nhỏ hỗ trợ cho thiết kế đó.
2.2.2. Các bước để tạo ra một thiết kế với ISE
2.2.2.1. Tạo một Project
Chọn File > New Project…xuất hiện thuật sĩ tạo Project mới.
Gõ tên Project trong trường Project Name field.
Chọn đến thư mục muốn chứa Project rồi chọn Next.
Chú ý rằng HDL phải được lựa chọn từ danh sách Top-Level Source Type, các
thông số khác chọn như trong hình 7.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 16
Hình 7: Các lựa chọn tạo project với Virtex 4.
2.2.2.2. Tạo mã nguồn VHDL
Để tạo ra file mã nguồn VHDL cho Project ta làm như sau:
Chọn New Source trong New Project Wizard.
Chọn kiểu mã nguồn VHDL Module.
Gõ từ bàn phím tên của file mã nguồn là counter (ví dụ là tạo ra mã nguồn cho
counter).
Quan sát thấy rằng hô kiểm tra Add to project được lựa chọn.
Kích Next.
Khai báo các cổng cho bộ counter bằng cách điền các thông tin như hình dưới
đây:
Hình 8: Khai báo các cổng cho một ví dụ tạo một counter 4 bit.
Kich Next cho tới khi kết thúc và một file VHDL được tạo ra với các khai báo
ban đầu là các cổng in, out…
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 17
Từ đây ta có thể viết mã nguồn VHDL cho bộ counter nhưng ta cũng có thể lấy
counter trong ví dụ có sẵn của ISE. Để sử dụng ví dụ này ta làm như sau:
Mở ví dụ bằng cách: Edit > Language Template…
Dùng biểu tượng “+” duyệt đến mã nguồn của ví dụ như sau: VHDL >
Synthesis Constructs >Coding Examples>Counters>Binary>Up/Down Couter>Simple
Counter.
Để dùng lựa chọn Simple Counter ta chọn Edit > Use in File hoặc chọn nút Use
Template in File trên Toolbar.
Đóng cửa sổ Language Template.
Như vậy mã VHDL trong ví dụ đã được chèn vào file mã nguồn mà ta muốn tạo.
Để chương trình này có thể chạy đúng được ta phải quan sát và sửa lại một số
chỗ cho phù hợp với khai báo ban đầu. Đó là những vị trí mà chương trình đã đánh dấu
trong dấu “” để cuối cùng ta được file mã nguồn có nội dung như sau:
entity counter is
Port ( Clock : in STD_LOGIC;
Direction : in STD_LOGIC;
c : out STD_LOGIC_VECTOR (3 downto 0));
end counter;
architecture Behavioral of counter is
begin
process (Clock)
begin
if Clock='1' and Clock'event then
if Direction ='1' then
c <= c + 1;
else
c <= c - 1;
end if;
end if;
end process;
end Behavioral;
2.2.2.3. Mô phỏng
Ta có thể dùng chức năng mô phỏng của ISE để kiểm tra chức năng của thiết kế vừa
được tạo ra:
Tạo dạng sóng muốn kiểm tra ta làm như sau:
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 18
Chọn file Counter từ cửa sổ Source.
Tạo một test bench từ Project > New Source.
Trong cửa sổ New Source Wizard chọn Test Bench WaveForm và gõ từ bàn phím
counter_tbw trong trường tên file rồi kick Next cho đến khi xuất hiện cửa sổ:
Hình 9: Thiết lập các tham số mô phỏng.
Đặt các thông số như hình 9 và kích Finish:
Để chạy mô phỏng ta thiết lập các thông số như khoảng thời gian đếm tiến, thời gian
đếm lùi bằng cách kích chuột vào vị trí mà ta muốn cho kết thúc đếm tiến khi đó dạng
xung bắt đầu từ đó sẽ ở vị trí logic 0 và bắt đầu đếm lùi. Ta có thể tùy chọn các khoảng
đếm tiến hoặc lùi theo ý muốn.
Hình 10: Thiết lập thời gian đếm tiến, lùi cho counter.
Sau đó đóng cửa sổ này lại và chuyển sang bước mô phỏng.
Mô phỏng
Tại cửa sổ Source ta chọn Behavioral Simulation và chọn counter_tbw.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 19
Tại cửa sổ Process ta kích chuột vào dấu “+” rồi kích đúp vào Generate Expected
Simulation Results để thực hiện mô phỏng. Ta được kết quả như sau:
Hình 11: Kết quả mô phỏng của counter.
2.2.2.4. Tạo ràng buộc thời gian
Bước này sẽ tạo ra ràng buộc về thời gian, là thời gian mà ta ràng buộc khi chạy
trong FPGA.
Chọn Synthesis/Implementatorn.
Chọn file nguồn counter HDL.
Kích vào dấu “+” ở User Constraints và chọn Create Timing Constraints.
Sau bước này sẽ tạo ra cho bạn file.UCF và ta có thể thiết lập các thông số theo
tính toán mà thiết kế sẽ phải đáp ứng.
2.2.2.5. Gán chân
Chọn file nguồn là counter trên cửa sổ Source.
Chọn Assign Package Pins trong cửa sổ Process.
Từ đây ta có thể gắn chân để có thể đưa thiết kế vào phần cứng thật. Tùy từng
dòng cụ thể mà ta đặt chân căn cứ vào bảng chân được cung cấp bởi nhà sản xuất.
Kết thúc bước này ta có thể đưa thiết kế vào phần cứng và quan sát trên các lối vào ra
của phần cứng bằng những thiết bị hỗ trợ quan sát như giao động ký hay đèn LED.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 20
CHƯƠNG 3: CÁC ĐẶC ĐIỂM CƠ BẢN CỦA VIRTEX 4 VÀ CÁC PHẦN
MỀM HỖ TRỢ
3.1. Những đặc điểm cơ bản của XtremeDSP Development Kit Pro (Virtex IV)
3.1.1. Giới thiệu chung
Là công ty đầu tiên nghiên cứu ra FPGA, Xilinx luôn là một hãng đi đầu trong
việc nghiên cứu và cho ra những dòng sản phẩm hỗ trợ cho giáo dục cũng như các bộ
Kit chuyên dụng sử dụng trong nhiều ứng dụng cụ thể. The XtremeDSP Development
Kit là bộ Kit có khả năng cung cấp một nền tảng phát triển cao cho Công Nghệ FPGA.
Đây là một công cụ rất mạnh được sử dụng trong nhiều ứng dụng đặc biệt là các ứng
dụng về DSP. Virtex 4 có hai bộ ADC và hai bộ DAC với độ phân giải là 14 bit với
tốc độ xung nhịp cao cho phép người dùng có thể lập trình và xử lý cho nhiều ứng
dụng không chỉ riêng trong DSP như các ứng dụng Software Defined Radio, 3G
Wireless, Networking, HDTV hoặc hình ảnh Video. Bộ KIT có chứa một bo mạch chủ
nối với một module nằm trên một board màu xanh. Bo mạch chủ được gọi là
BenONE-Kit Motherboard và module trên được gọi là BenADDA DIME-II module.
BenONE-Kit là một đế dùng để gắn lên đó các module hỗ trợ cho các tính năng khác.
Dưới đây là một số hỗ trợ của BenONE-Kit:
• Hỗ trợ cho module BenADDA DIME-II.
• Hỗ trợ giao diện USB hoặc 3.3V/5V PCI.
• Hỗ trợ giao diện PCI 3.3V/5V 32 bit/33-MHz và giao diện USB 1.1.
• Các LED hiên thị.
• Mạch tạo cấu hình JTAG.
• Các chân cắm nối trực tiếp với người dùng có thể lập trình được (FPGA I/O).
• Module BenADDA DIME-II.
• Chíp FPGA: XC4VSX35-10FF668.
• Hai kênh DAC độc lập: AD6645 ADC (14-bits 105 MSPS).
• Hai kênh ADC độc lập: AD9772 DAC (14-bits 160MSPS).
• Hỗ trợ clock ngoài, bộ dao động onboard và clock có thể lập trình.
• Hai bộ nhớ SRAM (133MHz, 512Kx32 bits mỗi bên).
• Các LED hiển thị.
Dưới đây là một số hình ảnh mô tả về Kit Virtex 4.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 21
Hình 12: Giao diện ngoài của XtremeDSP Development Kit Pro.
Hình 13: Giao diện phía trong và các thành phần của Virtex IV Pro.
3.1.2. Các thành phần chính của Virtex 4
Chíp FPGA (XC4VSX35-10FF668)
Các đặc điểm chính của XC4VSX35-10FF668:
- Rocket IO Transceiver Blocks: 8
- PowerPC Processor Blocks: 2
- LogicCells: 30,816
- Slices: 13,696
- Max DistrRAM (Kb): 428
- 18 X 18 Bit Multiplier Blocks: 136
- 18 Kb Blocks: 136
- Max Block RAM (Kb): 2,448
- DCMs: 8
- Maximum User I/ O Pads: 644
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 22
Các bộ ADC
Module BenADDA DIME-II sử dụng trong XtremeDSP Development Kit Pro
có hai kênh vào tương tự, mỗi kênh có dữ liệu và tín hiệu điều khiển độc lập tới
FPGA.Hai ADC (AD6645) cho phép thực hiện hai thiết lập dữ liệu với độ rộng 14 bit.
Tín hiệu đưa vào ADC và tín hiệu ra thông qua chuẩn kết nối MCX. Sơ đồ khối thể
hiện kết nối giữa các bộ ADC được thể hiện như hình 14. Với kit Virtex 4 hay một số
dòng kit của Xilinx có hỗ trợ XC2V80-4CS114 có nhiệm vụ điều khiển xung Clock
cho ADC. Như vậy, ta có thể lựa chọn được tốc độ lấy mẫu phù hợp với yêu cầu thiết
kế với từng bài toán cụ thể.
Hình 14: Sơ đồ tín hiệu qua ADC vào FPGA.
Các đặc điểm chính của khối ADC (AD6645)
• Cung cấp ADC 14-bit, kiểu mã bù 2.
• Tốc độ lấy mẫu 105MSPS.
• Trở kháng vào 50 Ω cho tín hiệu tỷ lệ hay lối vào thay đổi vi phân.
• Bộ lọc bậc 3 ở lối vào.
• Clock ADC có thể thay đổi được.
Hình 15: Sơ đồ khối của bộ ADC (AD6645).
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 23
ADC clock
Mỗi ADC có thể được thiết lập clock trực tiếp bằng tín hiệu LVPECL một cách
độc lập. Tín hiệu LVPECL có thể được điều khiển bằng Virtex-II XC2V80-4CS144
FPGA (Clock FPGA). Một số các clock có thể dùng trong FPGA:
- Clock 105 MHZ on board bằng tinh thể.
- Clock ngoài đưa vào thông qua chuẩn kết nối MCX.
- Clock lập trình qua bộ dao động trên KIT.
Chú ý rằng bộ ADC (AD6645) chỉ có thể hỗ trợ clock vào lớn nhất lên tới 105
MHZ. Điều này rất quan trọng nếu muốn sử dụng một trong các clock DIME (Ví dụ
như CLKA, CLKB, CLKC), vì những clock có thể lớn hơn 105 MHz.
Hình 16: Sơ đồ của ADC clock.
Các bộ DAC (AD9772A)
Module BenADDA DIME-II sử dụng trong XtremeDSP Development Kit Pro có
hai kênh lối ra tương tự, mỗi kênh có dữ liệu và tín hiệu điều khiển độc lâp tới FPGA.
Hai bộ DAC (AD9772A) cung cấp hai đường dữ liệu mỗi đường 14 bit. Tín hiệu vào
và tín hiệu ra thông qua kết qủa kết nối MCX.
Hình 17: Sơ đồ giao tiếp bộ DAC với GPGA.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 24
Các đặc điểm chính của DAC (AD9772A)
• Cung cấp DAC 14-bit.
• Tốc độ dữ liệu lối ra tối đa 160MSPS.
• Sử dụng clock LVPECL lối vào lấy từ XC2V80-4CS144 Clock FPGA.
• Bộ nhân đồng hồ có vòng khóa pha trong.
• Trở kháng lối ra 50 Ω thông qua chuẩn kết nối MCX.
Hình 18: Sơ đồ khối tiếp bộ DAC.
DAC clock
Mỗi DAC có thể được clock trực tiếp, độc lập thông qua tín hiệu LVPECL. Tín
hiệu LVPECL có thể được điều khiển bởi Virtex-II XC2V80-4CS144 FPGA (Clock
FPGA). Một số các clock có thể sử dụng thông qua clock FPGA:
- Clock 105 MHZ on board bằng tinh thể.
- Clock ngoài đưa vào thông qua chuẩn kết nối MCX.
- Clock lập trình qua bộ dao động trên KIT.
Bộ nhớ ZBT SRAM
Bộ KIT cung cấp 2 bộ nhớ độc lập ZBT SRAM. Mỗi bộ có thể cấu hình 512k x
32. Bộ nhớ này có khả năng lưu dữ liệu trên board thông qua bus dữ liệu 32-bit tới mỗi
bộ nhớ.
Đặc điểm chính của ZBT SRAM
Thời gian chu kỳ nhanh: 6ns, 7.5ns và 10ns.
100% bus được tận dụng.
Điều khiển qua giao diện tín hiệu tối thiểu.
Có các chân điều khiển đọc/viết riêng.
Sử dụng tín hiệu điều khiển, địa chỉ thanh ghi, dữ liệu vào ra, có thể thiết lập
được clock.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 25
Cho phép dữ liệu vào ra thông thường.
Có mode tuyến tính hoặc ghép xen.
Hình 19: Sơ đồ ZBT SRAM.
ZBT SRAM Clocking
Hai bộ nhớ ZBT SRAM trên bộ KIT có thể được gõ nhịp độc lập thông qua việc
chèn thêm tín hiệu xung nhịp phản hồi. Mỗi bộ nhớ có một tín hiệu có thể được hiệu
chỉnh trong FPGA đảm bảo cho xung nhịp giữa ZBT SRAM và chân phản hồi có xung
nhịp cùng nhau với độ sai khác nhỏ nhất. Quá trính này đảm bảo cho logic trong được
khóa pha với dữ liệu đưa vào.
Bảng1: Ký hiệu chân của ZBT SRAM clocking.
Vào ra số
Một số đặc điểm vào ra của bộ KIT:
• Một đầu bus 14 chân trên bo mạch chủ. Nó cho phép 12 kết nối trực tiếp hai
chiều tới FPGA với hai chân nối đất.
• Một đầu bus 34 chân hiệu chỉnh trên bo mạch chủ. Nó cho phép 28 kết nối trực
tiếp hai chiều tới chip FPGA. Các phần còn lại cho các kết nối 3,3V, nối đất và 'không
được nối'.
• Hai đầu vào ra 2 chân cung cấp 2 kết nối hai chiều tới chip FPGA.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 26
Clock
Bộ KIT XtremeDSP Development Kit có một hệ thống quản lý clock toàn diện
và linh hoạt. Sau đây là một số đặc điểm của hệ thống clock:
- Bộ KIT có một nguồn phát tinh thể 105 MHz trên module chính cung cấp clock
cho các thiết bị tương tự.
- Một lối vào cho clock ngoài trên bo mạch chủ có thể thiết lập được tần số
- Một khe cắm cho bộ dao động trên bo mạch chủ. Chú ý rằng trên bo mạch chủ
không có bộ dao động mà chỉ có socket để người dùng sử dụng các bộ dao động cho
các ứng dụng riêng biệt.
DIME-II System Clocks
Module BenADDA DIME-II có thể tạo ra ba hệ thống clock cho FPGA, các
clock đó được gọi là CLKA, CLKB và CLKC. Các tín hiệu clock được tạo ra trên bo
mạch chủ DIME-II và được đưa vào vùng module nơi đặt module BenADDA DIME-
II.Các clock này có thể được điều khiển bởi người dùng và được đưa đến các chân
Global Clock cung cấp một cách linh hoạt nhất cho FPGA. Tuy nhiên cần chú ý rằng
chức năng của các DIME-II clock này được xác định bởi bo mạch chủ. Khi module
BenADDA DIME-II được đặt vào bo mạch chủ BenONE-Kit, khi đó trong cấu hình
KIT XtremeDSP Development Kit, các clock của DIME-II là :
- CLKA: clock do bộ tạo dao động có thể lập trình trên bo mạch chủ BenONE-
Kit
- CLKB: clock do bộ tạo dao động có thể lập trình trên bo mạch chủ BenONE-
Kit
- CLKC: kết nối tới một socket để hỗ trợ bộ tạo dao động tinh thể.
Hình 20: Sơ đồ hệ thống clock.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 27
LED hiển thị
XtremeDSP Development Kit có một số user-definable và các LED hiển thị cho
phép người dùng kiểm tra trạng thái hoạt động của bộ KIT. Có các LED kiểm tra cấu
hình người dùng và các LED hiển thị trạng thái hệ thống, cấu hình các giao diện và
nguồn (Interface LEDs). Các LED sử dụng bộ KIT có ba màu. Mỗi LED hiển thị tổng
cộng ba màu khác nhau: Đỏ, Xanh và Vàng/Dacam. Với sự trợ giúp của các LED hiển
thị này người thiết kế có thể kiểm tra một cách trực quan phản ứng của phần cứng đối
với các yêu cầu thiết kế. Tuy chỉ là một ứng dụng nhỏ nhưng đôi khi nó có ý nghĩa rất
quan trọng đặc biệt cho những người bắt đầu tiếp cận với FPGA hay làm chức năng
báo hiệu kể cả trong các project lớn.
Hình 21: Sơ đồ các LED trạng thái nhìn từ ngoài.
Hình 22: Các LED bên trong Kit Virtex 4.
Trên đây chỉ là những nét giới thiệu rất sơ lược về một số đặc tính của Kit Virtex
4. Để có thể sử dụng Virtex 4 như một công cụ hỗ trợ đắc lực cho việc nghiên cứu, xây
dựng các mô hình thử nghiệm thì còn cần phải đi sâu vào tìm hiểu, nghiên cứu từng
đặc tính nhỏ như sơ đồ chân giao tiếp với các tín hiệu bên ngoài và các chân tín hiệu
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 28
giao tiếp giữa các modul trong Kit... Ngoài ra việc sử dụng clock trong Virtex-IV cũng
rất phức tạp đòi hỏi người nghiên cứu phải có một thời gian tìm hiểu và làm thực tập.
3.2. Các phần mềm chuyên dụng hỗ trợ kit Virtex 4
3.2.1. FUSE
Phần mềm FUSE của hãng Nallatech cho phép người dùng có thể cấu hình, điều
khiển và thực hiện giao tiếp giữa hệ thống chủ và các phần cứng máy tính FPGA của
Nallatech. Phần mềm này được phát triển để có thể thiết kế các hệ thống xử lý phức
tạp như 1 khối thống nhất giữa phần mềm, phần cứng và các ứng dụng FPGA.
FUSE cung cấp một số giao diện, bao gồm ngôn ngữ lập trình DIMEscrip. FUSE
Probe Tool; FUSE còn được phát triển cho các ngôn ngữ bậc cao như C/C++, Java
hoặc Matlab. FUSE có thể cài đặt được trong các hệ điều hành Windows hoặc Linux.
Các đặc điểm cơ bản nhất của FUSE có thể kể ra như sau:
* Cấu hình thiết bị nhanh chóng và đơn giản.
* Hỗ trợ nhiều Card.
* Hỗ trợ nhiều giao diện.
* Hỗ trợ các giao diện và điều khiển cho các thiết bị phần cứng của
Nallatech.
Hình 23: Mô tả giao tiếp giữa FUSE với Computer và FPGA.
3.2.2. Matlab và các gói công cụ Xilinx hỗ trợ cho Matlab
System Generator
System generator là một công cụ thiết kế hệ thống giúp cho việc thiết kế các ứng
dụng phần cứng trong FPGA và mô phỏng Simulink. Đó là một môi trường thiết kế rất
mạnh trong việc thiết kế phần cứng. Systerm Generator có khả năng mô hình hóa cao
và có thể dịch các thiết kế của người dùng sang ngôn ngữ phần cứng trong FPGA một
cách tự động chỉ với một thao tác đơn giản như ấn một nút. Thêm vào đó System
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 29
Generator còn cho phép xâm nhập vào các tài nguyên trong FPGA ở mức thấp hơn,
qua đó cho phép người sử dụng thực hiện các thiết kế có hiệu suất cao.
Việc lập trình một bộ FPGA bằng System Generator bao gồm các bước sau: Mô
phỏng thiết kế, tạo ra một bản thiết kế theo ngôn ngữ bậc thấp có thể đưa các thiết bị
phần cứng như FPGA từ thiết kế mô phỏng này, sau đó đưa bản thiết kế mới tạo ra này
vào trong file cấu hình của FPGA gọi là bitsream. Bước cuối cùng, đưa thiết kế phần
cứng vào trong bitstream có thể thực hiện bằng các phần mềm khác.
Một trong những mặt vượt trội của System Generator so với các phần mềm khác
là chức năng chạy mô phỏng phần cứng Co-Simulation, chức năng này sẽ được nói rõ
thêm trong phần sau.
Các khối Block Set DSP Xilinx
System Generator đã xây dựng khoảng hơn 90 khối xử lí tín hiệu số (DSP) để hỗ
trợ người dùng trong việc mô phỏng các thiết kế. Các khối này gồm các khối DSP phổ
biến như khối cộng, nhân, thanh ghi...Ngoài ra, nó còn bao gồm các khối DSP phức
tạp hơn như khối sửa lỗi tiến, FFT, các bộ lọc và bộ nhớ. Các khối này làm cho việc
thiết kế mô phỏng trở nên đơn giản và thuận tiện hơn nhiều.
Hình 24: Một số khối cơ bản hỗ trợ Matlab cung cấp bởi Xilinx.
Các thuật toán trong Matlab có thể kết hợp chặt chẽ vào trong System Generator
thông qua AccelDSP. AccelDSP bao gồm các thuật toán mạnh có thể chuyển các thiết
kế dùng dấu chấm động (floating-point) trong Matlab sang dạng dấu chấm cố định
(fix-point) là loại hay được dùng trong System Generator. Ngoài ra System generator
còn bao gồm khối Mcode cho phép người dùng sử dụng các thuật toán không có trong
Matlab để thiết kế và thực hiện các hoạt động điều khiển đơn giản.
Đánh giá, ước lượng tài nguyên hệ thống
System Generator cung cấp khối ước lượng tài nguyên cho phép đánh giá một
cách nhanh chóng các tài nguyên dùng cho thiết kế trước khi thực hiện nó trong thực
tế. Điều này có lợi ích rất lớn đối với cả việc thiết kế phần mềm lẫn phần cứng giúp
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 30
cho các nhà thiết kế có thể tận dụng tối đa các tài nguyên trong FPGA (lên đến 550 bộ
nhân trong thiết bị Virtex 5).
Hình 25: Cửa sổ ước lượng tài nguyên.
Mô phỏng phần cứng Co-Simulation
Các khối blocksets được hỗ trợ trong System Generator cho phép người dùng xây
dựng các thiết kế mô phỏng với độ chính xác cao. Tuy nhiên các kỹ sư thiết kế vẫn
muốn xem xét một cách chi tiết việc thiết kế của mình chạy trong phần cứng như thế
nào. System Generator cung cấp giao diện mô phỏng Cosimulation giúp kết hợp chặt
chẽ và trực tiếp việc chạy thực tế trên FPGA vào mô phỏng simulink. Để thực hiện mô
phỏng Cosimulation, trước hết ta đưa thiết kế vào bitstream, sau đó System Generator
tự động hợp nhất cấu hình phần cứng FPGA với bitstream trở lại thiết kế mô phỏng
gọi là khối run-time. Khi thiết kế được mô phỏng trong môi trường Simulink, kết quả
của thiết kế cũng được tính toán trong phần cứng. Điều này cho phép chạy thử các
thiết kế trong phần cứng thật sự và làm tăng tính thực tế cho các mô phỏng.
Khả năng kết hợp các môi trường thiết kế
System Generator cung cấp 1 môi trường thống nhất cho các thiết kế DSP
FPGAs, cho phép các thành phần nhỏ được viết bởi các ngôn ngữ khác nhau như RTL,
Simulink, Matlab và C/C++ có thể làm việc cùng nhau trong cùng một thiết kế.
System Generator hỗ trợ khối black box cho phép đưa RTL vào thực hiện mô phỏng
phần mềm và phần cứng bằng cả ModelSim hoặc Xilinx ISE Simulator.
Như vậy, với công cụ là Kit Virtex 4 ta không chỉ có một phần cứng hiện đại,
chuyên dụng với lượng tài nguyên FPGA lớn mà còn kèm theo đó là nhiều công cụ hỗ
trợ rất mạnh như System Generator, Co-Simulation …cho phép ta dễ dàng triển khai
các nghiên cứu, thiết kế.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 31
Hình 26: Sơ đồ mô tả khả năng kết hợp giữa các môi trường thiết kế.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 32
CHƯƠNG 4: THỰC HIỆN MÔ HÌNH THIẾT KẾ VỚI KIT VIRTEX-4
(Thiết kế bộ phát mã Walsh cho hệ đo kênh MIMO)
4.1. Giới thiệu
Việc thiết kế FPGA để thực hiện các chức năng theo một yêu cầu nào đó bằng
ngôn ngữ VHDL để tiết kiệm tài nguyên FPGA đã trở lên rất phổ biến và mang lại
những lợi ích rõ rệt. Tuy nhiên trong thực tế có những mô hình lớn như trong các mô
hình thu phát tín hiệu MIMO (Multiple Input, Multiple Output) đòi hỏi người thực
hiện phải thực hiện một khối lượng công việc rất lớn với việc viết câu lệnh VHDL mà
đôi khi mục đích chỉ là kiểm tra tính khả thi của mô hình nêu ra. Hơn nữa, với công
nghệ FPGA phát triển như ngày nay thì tài nguyên trong chip FPGA đối với các mô
hình như thế không còn là vấn đề quá quan trọng. Xilinx là hãng đi tiên phong trong
lĩnh vực phát triển các công cụ bổ trợ cho các kit chuyên dụng với công cụ System
Generator như đã giới thiệu ở chương 3 nhằm giảm nhẹ công việc cho người thiết kế
hệ thống, đồng thời giúp người thiết kế biến những mô hình mô phỏng trở thành mã
nguồn có thể nhúng trực tiếp vào trong phần cứng (FPGA) – Tất nhiên điều này có thể
khiến mã nguồn của thiết kế dài hơn và tốn tài nguyên phần cứng hơn nhưng nó lại
mang lại giá trị rất lớn là rút ngắn thời gian trong qui trình thiết kế. Chương này sẽ giới
thiệu về cách sử dụng công cụ hỗ trợ system generator để thực hiện một mô hình thiết
kế thông qua việc thực hiện một mô hình phát tín hiệu đã qua mã hóa Walsh.
4.2. Hai khối chức năng chính trong sơ đồ
4.2.1. Khối tạo mã Walsh
Hình 27: Khối tạo dữ liệu Walsh.
4.2.1.1. Lý thuyết về mã Walsh
Mã Walsh có chiều dài n =2 k là một tập các từ mã trực giao hoàn toàn có thể
được định nghĩa bởi ma trận hàng 2k x 2k . Với ma trận ban đầu 1 x 1 là H1 = [0],
các ma trận Hadamard thứ tự cao hơn có thể lấy từ ma trận trước nó theo công thức
tổng quát sau:
H k2 =
11
11
22
22
kk
kk
HH
HH
Ví dụ:
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 33
H 1 =[0]
H 2 =
10
00
H 4 =
0110
1100
1010
0000
Do vậy các từ mã Walsh biểu diễn mã lưỡng cực ( 1 ) là
1
2
4
1
1 1
1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
H
H
H
* Đặc điểm
+ Ưu điểm
Tất cả các từ mã đều trực giao lẫn nhau hay các cặp từ mã bất kỳ đều bằng 0.
+ Nhược điểm
- Các mã không đơn, đỉnh tự tương quan hẹp.
- Trải không bao trùm hết dải thông tuy nhiên bao trùm hết thành phần tần số
rời rạc.
- Tương quan chéo không luôn luôn bằng 0 cho các ứng dụng không đồng bộ.
- Vì cấu trúc đặc biệt có sẵn trong mã Walsh nó được biết như tương quan của
tập hợp với 2k từ mã Walsh tính toán kết quả với độ phức tạp O(n.logn) sử dụng
biến đổi Hadamard nhanh (FHT). FHT có cấu trúc “cánh bướm” (butterfly) tương
tự biến đổi Fourier nhanh (FFT). Nhưng FHTcó các hệ số là 1 tốt hơn hàm luỹ
thừa phức.
Giải mã (mã phụ cơ bản giải mã Walsh)
Mã Walsh được giải mã tốt nhất bằng bộ giải mã Walsh với việc tính toán cố
định, phức tạp. Trong phần này em xin giới thiệu phương pháp hiệu quả tương ứng
tính toán phức và BER dựa trên cấu trúc toán học của mã Walsh.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 34
Một ma trận tổng quát cho mã nhị phân tuyến tính C là ma trận G có các hàng
là cơ sở của C. Do vậy các từ mã trong cấu trúc nhị phân có thể được tính toán tổng
quát như sau:
C = xG với mọi ma trận hàng nhị phân x có dạng 1 x k.
Ma tận tổng quát mã Walsh (6,64) được sử dụng trong IS-95 là 6 x 64, gồm
có 6 hàng và 64 cột.
G=
1101010
1001100
1...110000
1000000
1000000
1000000
Từ ma trận tổng quát này ta có thể giải mã hoá Walsh mà không kiểm tra toàn
bộ các từ mã.
Giải mã cục bộ (Local Decoding)
Cấu trúc đặc biệt của mã Walsh cho phép đánh giá 6 bit lối vào mà chỉ cần
quan sát duy nhất hai trong 64 Symbol của từ mã Walsh được nhận, thông qua bộ
xử lý gọi là Local Decoding, ở đó tính toán phức và truyền từ mã tốt.
Để hiểu công nghệ này ta đặt nhãn Symbol của các từ mã là c= [c0, c1, c2, ….,
c63 ]. Các giá trị là giá trị thập phân của đáp ứng nhị phân vectơ cột trong ma trận
G. Mục đích chúng ta giải mã các vị trí 0 của vectơ x = [x0, x1, x2, x3, x4, x5 ] ở nơi
nhận khi không có nhiễu. Ta có thể thu được giá trị của x0 bằng cách cộng module
2 với bất kì thành phần từ mã ci và cj mà i, j là các đáp ứng cột trong G khác duy
nhất ở vị trí các bít 0.
5 5 5
0 0 0
i j s si t tj s si sj
s t s
c c x G x G x G G
5
0 0 0 0
1
=x i i s si si
s
G G x G G x
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 35
4.2.1.2. Thực hiện trong thiết kế
Ma trận Hadamard dùng trong sơ đồ là:
0110100110010110
1100001100111100
1010010101011010
0000111111110000
1001100101100110
0011001111001100
0101010110101010
1111111100000000
1001011010010110
0011110000111100
0101101001011010
1111000011110000
0110011001100110
1100110011001100
1010101010101010
0000000000000000
Bộ tạo mã Walsh trong sơ đồ là bộ tạo mã Walsh (4,16) và (3,16) (đây chỉ là một
lựa chọn ngẫu nhiên và có thể thay đổi dễ dàng trong thiết kế) tức là dùng hàng thứ 4
và thứ trong ma trận Hadamard 16. Khi biểu diễn dưới dạng lưỡng cực thì ta được:
[-1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1]
và [-1 -1 1 1 -1 -1 1 1 -1 -1 1 1-1 -1 1 1]
Các giá trị được nạp vào khối ROM thể hiện một chuỗi Walsh sẽ là chuỗi liên tiếp các
bit 0 và 1. Với yêu cầu thiết kế cho kênh MIMO với hai đường tín hiệu qua bộ mã
Walsh thì ta chọn hai chuỗi Walsh (4,16) và (3,16) như sau:
H(4,16): [0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0]
H(3,16): [0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1]
4.2.1.3. Sơ đồ và kết quả mô phỏng bộ tạo 2 dãy Walsh (4,16) và (3,16)
Hình 28: Sơ đồ mô phỏng bộ tạo Walsh.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 36
Kết quả mô phỏng:
Hình 29: Kết quả mô phỏng bộ tạo Walsh (4,16) và (3,16).
4.2.2. Khối mã hóa cosin tăng (Raised-Cosine)
4.2.2.1. Lý thuyết
Trong các hệ thống truyền dẫn, tín hiệu dải nền cơ bản (baseband) được điều chế
lên sóng mang để truyền đi. Việc lọc tín hiệu xảy ra ở một số giai đoạn trong quá trình
truyền dẫn. Bản thân tín hiệu baseband bị hạn chế băng thông bởi việc lọc để ngăn
việc tạo ra các tín hiệu dải bên (sideband) vượt quá trong quá trình điều chế. Tín hiệu
đã điều chế được lọc băng thông tiếp theo trong quá trình khuếch đại của máy phát. Ở
nơi mà các tuyến truyền (hữu tuyến, vô tuyến) tạo thành kênh truyền thì đáp tuyến tần
số của kênh truyền cũng phải được tính tới. Ở phía thu, việc lọc băng thông tín hiệu tới
là cần thiết để loại bỏ nhiễu (noise) được đưa vào ở giai đoạn này. Như vậy tín hiệu đi
qua một số giai đoạn lọc và ảnh hưởng của chúng tới dạng sóng số phải được tính tới.
Trên toàn bộ tuyến truyền dẫn từ máy phát tới máy thu phổ của xung đầu ra ở máy thu
V(f) được xác định bởi phổ của xung đầu vào Vi(f), đáp tuyến bộ lọc của máy phát
HT(f), đáp tuyến tần số của kênh HCH(f), và đáp tuyến bộ lọc máy thu HR(f). Hình 30
minh họa điều này, và ta có phương trình:
V(f) = Vi(f) HT (f) HCH(f) HR(f) (4.1)
Hình 30: Các thành phần phổ tần số của phương trình 8.
HT(f) HCH(f)
HR(f)
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 37
Các thành phần điện cảm và điện dung là các thành phần vốn có của quá trình
lọc. Chúng không tiêu hao năng lượng tín hiệu, nhưng năng lượng được tuần hoàn theo
chu kỳ giữa điện trường, từ trường và tín hiệu. Thời gian cần thiết cho quá trình trao
đổi năng lượng này làm cho một phần của tín hiệu bị trễ, do vậy các xung hình vuông
đi vào ở phía máy phát có thể có dạng "hình chuông" và dao động khi nó đi ra ở phía
máy thu. Hình 31a minh họa điều đã nêu. Vì thông tin được mã hóa số dưới dạng sóng
nên méo xuất hiện trong dạng xung là không quan trọng cho tới khi máy thu còn phân
biệt được các xung nhị phân 1 với các xung nhị phân 0. Việc này đòi hỏi dạng sóng
phải được lấy mẫu ở các khoảng cách đúng để xác định đúng cực tính của nó. Với
dạng sóng liên tục, các đuôi tạo thành từ hình chuông từ tất cả các xung trước đó có
thể kết hợp để can nhiễu với xung riêng cần lấy mẫu. Hiện tượng đó gọi là can nhiễu
giữa các symbol (Intersymbol Interference – ISI) và nó có thể gây lỗi trong xác định
cực tính của tín hiệu. Không thể loại bỏ các hình chuông nhưng có thể tạo dạng các
xung sao cho việc lấy mẫu xung đã cho xảy ra khi các đuôi ở các điểm cắt chéo bằng
không như minh họa ở hình 31b. Đó cũng là nội dung của các định luật Nyquist về loại
bỏ ảnh hưởng của can nhiễu giữa các symbol. Trong thực tế không thể tạo dạng xung
hoàn thiện, do vậy sẽ có ISI, nhưng nó có thể được giảm đến mức nhỏ có thể bỏ qua.
Việc tạo dạng xung được thực hiện bằng cách kiểm soát phổ của xung thu được qua
điều chỉnh các thành phần có liên quan như trình bày trong công thức (4.1). Một mô
hình lý thuyết của phổ thích ứng với việc đó là đáp tuyến (hoặc bộ lọc) cosin tăng:
Bộ lọc cosin tăng là một bộ lọc điện tử đặc thù, thường được sử dụng để tạo dạng xung
trong điều chế số do khả năng tối thiểu hóa ISI của nó. Tên của bộ lọc bắt nguồn từ
một thực tế là phần khác không của phổ tần số trong dạng đơn giản nhất của nó (β=1)
là hàm cosin, tăng lên ở phía trên của trục ngang f.
A
A
f
f
(a
(b
Hình 31: a, Dạng hình chuông của xung
b, Lấy mẫu để tránh ISI
Mô tả toán học:
Bộ lọc cosin tăng là một thực hiện của bộ lọc Nyquist thông thấp, có tính chất đối
xứng theo trục đứng. Phổ của nó biểu hiện đối xứng lẻ xung quanh giá trị (1/2T), với T
là chu kỳ symbol của hệ thống thông tin. Trong miền tần số bộ lọc được mô tả bởi
t
t
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 38
1/2T
công thức (4.2), là hàm hình chuông (hình 32). Nó được đặc trưng bởi hai giá trị: hệ số
roll-off β, và chu kỳ lặp của symbol T (T=1/Rs với Rs là tần số symbol).
Hình 32: Đáp tuyến biên độ (tần số) của bộ lọc cosin tăng với các hệ số roll-off khác
nhau
10
2
1
2
1,
___,0
)
2
1(cos1
2
1
2
1,0.1
)(
T
f
T
laiconhoptruong
T
fT
T
f
fH
(4.2)
Đáp ứng xung (đáp tuyến thời gian) của bộ lọc được cho bởi công thức (4.3), là
hàm sin chuẩn hóa (hình 33).
2
2241
cos(
)(sin)(
T
t
T
t
T
tcth
(4.3)
A
f
Hình 33: Đáp tuyến xung của bộ lọc cosin tăng với các hệ số roll-off khác nhau.
β =0
β =0.35
β =0.25
β =1
H(f)
1/T f
t
h(t)
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 39
Hệ số roll-off
Hệ số roll-off, β, là phép đo băng thông vượt quá của bộ lọc, có nghĩa là băng
thông bị chiếm ngoài băng thông Nyquist (1/2T).
Nếu ký hiệu băng thông Nyquist là Δf thì:
fTR
f
T
f
s
2
22
1
(4.4)
với Rs = 1/T là tần số symbol.
Các đồ thị chỉ ra sự thay đổi của đáp tuyến biên độ khi β thay đổi giữa 0 và 1, và
sự thay đổi tương ứng với đáp tuyến xung. Ta thấy mức gợn sóng miền thời gian tăng
khi β giảm. Từ các đồ thị ta cũng thấy có thể giảm băng thông vượt quá của bộ lọc khi
giảm β (hình 32) nhưng ở giá đắt của việc kéo dài đáp tuyến xung, có nghĩa là kéo dài
khoảng thời gian gây can nhiễu giữa các symbol kề nhau (hình 33).
β = 0
Khi β tiến tới không miền roll-off trở nên vô cùng hẹp, vì vậy khi β→0 lim H(f)
= rect (fT), với rect(.) là hàm chữ nhật, đáp ứng xung có dạng sinc(t/T). Điều này có
nghĩa là nó hội tụ tới bộ lọc lý tưởng có các vách dựng đứng.
β = 1
Khi β=1 phần khác không của phổ là cosin tăng thuần túy, dẫn đến công thức
đơn giản (4.5).
laiconhoptruong
T
ffT
fH
___,0
1,)cos(1
2
1
|)( 1
(4.5)
Băng thông
Băng thông của bộ lọc cosin tăng được định nghĩa như phần khác không của phổ
của nó, có nghĩa là:
BW = (1/2) Rs (1 + β) (4.6)
Ứng dụng
Hình 34 biểu diễn dãy các xung cosin tăng liên tiếp với ISI = 0. Khi được sử
dụng để lọc symbol stream, bộ lọc Nyquist có tính chất loại bỏ ISI vì đáp tuyến xung
của nó bằng không ở tất cả các giá trị nT (với n là số nguyên), trừ giá trị n=0. Do vậy
nếu dạng sóng phát được lấy mẫu chính xác ở máy thu thì các giá trị symbol gốc được
khôi phục hoàn toàn. Tuy nhiên hầu hết các hệ thống thông tin thực tế phải sử dụng bộ
lọc phối hợp để loại bỏ ảnh hưởng của nhiễu trắng. Có nghĩa là phải tuân theo điều
kiện:
)()()(),()( * fHfHfHhayfHfH TRTR (4.7)
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 40
t
T 2T 3T -T -2T -3T
h(t)
Để thỏa mãn điều kiện (4.7) trong khi vẫn đảm bảo ISI bằng không, bộ lọc căn
bậc hai cosin tăng thường được sử dụng ở hai phía phát và thu của hệ thống thông tin.
Khi đó đáp tuyến toàn bộ của hệ thống sẽ là cosin tăng.
Hình 34: Các xung cosin tăng liên tiếp biểu thị ISI bằng 0.
Tóm lại, bộ lọc cosin tăng là một dạng bộ lọc điện tử đặc thù, được thiết kế để
khắc phục can nhiễu giữa các symbol (ISI), giúp cho hệ thống số tránh nhầm lẫn khi
xác định symbol. Thông số quan trọng nhất của bộ lọc là hệ số roll-off , β, và chu kỳ
symbol, T. Khi β thay đổi thì băng thông vượt quá của bộ lọc cũng thay đổi… Về ý
nghĩa vật lý có thể hiểu như sau: khi miền rol-off càng hẹp (β → 0) thì băng thông
vượt quá giảm, băng thông thực tế của toàn tuyến truyền giảm, nhiều thành phần phổ
của xung vuông đi qua tuyến sẽ bị cắt dẫn đến dạng xung bị méo tương ứng với dao
động nhiều chu kỳ trong đáp tuyến xung, dễ gây can nhiễu giữa các xung liền kề. Khi
miền roll-off tăng thì quá trình xảy ra ngược lại, đáp tuyến xung gọn hơn, khả năng ISI
ít hơn nhưng băng thông bị chiếm là lớn hơn, hiệu suất sử dụng băng thông về mặt
tổng thể sẽ kém hơn. Tùy theo phương thức truyền dẫn (vệ tinh, cáp, mặt đất…) cũng
như sự trưởng thành của công nghệ mà β sẽ có các giá trị khác nhau, khi đó hiệu suất
sử dụng băng thông cũng khác nhau.
4.2.2.2. Thực hiện trong thiết kế
Trong thiết kế bộ lọc Raised – Cosine được tạo nên bởi khối FIR Compiler
v1_0. Khối này có chức năng cấu trúc một bộ lọc FIR trong FPGA hoặc có thể cấu
trúc một bộ lọc FIR từ các slices có vùng tài nguyên DSP đó là các khối DSP48. Để có
thể thiết kế được một bộ lọc theo ý muốn ta phải cần thêm khối FDATool trong
blockset của Xilinx (không phải khối FDATool trong blockset của Simulink).
Hình 35: Hai khối FIR Compiler v1_0 và FDATool của Xilinx.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 41
Để cấu hình cho bộ lọc ta nháy đúp vào khối FDATool và lựa chọn các tham
số: Bộ lọc Raised-Cosine, tần số Fs, tần số cắt Fc, và hệ số Roll-off trên cửa sổ giao
diện của FDATool như hình 36:
Hình 36: Cửa sổ giao diện FDATool.
Sau đó chọn Design Filter để có được các hệ số của bộ lọc. Để các hệ số này
được đẩy vào cấu hình trong khối FIR Compiler v1_0 có hai cách
Cách thứ nhất: Xuất các hệ số này ra Workspace với các hệ số là một biến
mảng với một tên nào đó (VD là Num như hình 37).
Hình 37: Đưa hệ số bộ lọc FIR từ FDATool.
Đóng cửa sổ FDATool lại.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 42
Tiếp đó, để FIR Compiler v1_0 nhận được các hệ số này ta nháy đúp vào bộ lọc FIR
Compiler v1_0 sẽ xuất hộp thoại sau:
Hình 38: Các lựa chọn trong properties của FIR Compiler để có được hệ số từ
Workspace.
Ta lựa chọn các tham số phù hợp như đã được khoanh trên hình rồi đóng cửa sổ này
lại.
Như vậy ta đã có được một bộ lọc Cosin tăng với các hệ số được thiết kế từ
công cụ FDATool.
Cách thứ 2: Với cách này ta cũng thiết kế bộ lọc từ FDATool nhưng không đẩy các hệ
số ra Workspace mà đặt lệnh “xlfda_numerator(‘Ten_cua_khoi_FDATool’)” trong
properties của khối FIR Compiler v1_0 sau đó lựa chọn Filter type là interpolation như
hình 39 dưới đây:
Hình 39: Các lựa chọn trong properties của FIR Compiler để có được hệ số trực tiếp
từ FDATool.
Sau đó đóng cửa sổ này lại và một bộ lọc Cosin tăng đã được cấu hình từ các hệ
số được thiết kế từ FDATool. Ngoài ra, ta cũng có thể cấu hình bộ lọc bằng nguồn tài
nguyên DSP48 có sẵn trong Kit dùng cho các ứng dụng DSP với nhiều lợi ích. Tuy
nhiên trong bài khóa luận này sẽ không đề cập đến phương pháp này.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 43
4.2.3. Khối tạo dữ liệu
Trong thực tế dữ liệu này phải được đưa từ ngoài vào thông qua bộ ADC của
Kit Virtex 4. Tuy nhiên do đây chưa phải là một thiết kế với một mục đích thực hiện
trong một ứng dụng cụ thể nên dữ liệu sẽ được tạo tùy ý bên trong Kit Virtex 4. Dữ
liệu này là dữ liệu số được chọn tùy ý được xây dựng từ các khối Counter, ROM, và
các bộ Time Division. Trong đó, dữ liệu tùy ý được nạp vào ROM, khối Counter dùng
để cấp xung nhịp cho ROM đẩy dữ liệu ra, các bộ Time Division để hạ tần số của dữ
liệu phối hợp với chuỗi Walsh phát ra từ bộ tạo Walsh. Trong thiết kế này dùng Walsh
16 nên tốc độ dữ liệu sẽ chậm hơn tốc độ Walsh 16 lần. Mỗi bộ Time Division sẽ chia
đôi tần số của dữ liệu nên trong thiết kế này cần dùng 4 bộ Time Division (Bộ tạo dữ
liệu này cũng có thể được tạo bằng nhiều cách khác nhau).
Hình 40: Sơ đồ khối bộ tạo dữ liệu.
4.2.4. Các khối khác
Trong sơ còn dùng một số khối khác như bộ DAC, XOR. Ngoải ra quan trọng
nhất là khối System Generator dùng để quản lý cấp tín hiệu cho toàn bộ các khối trong
sơ đồ.
Hình 41: Khối XOR và System Generator.
Cách cấu hình cho khối System Generator sẽ được nói chi tiết hơn ở phần thực
hiện mô hình thiết kế sẽ đề cập dưới đây.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 44
4.3. Mô hình thiết kế và kết quả thu được
4.3.1. Mô hình mô phỏng với các khối trong gói cung cấp bới Xilinx và trong
System Generator
Hình 42: Mô hình thiết kế bộ tạo ra 2 dãy tín hiệu.
Cấu hình trong System Generator được chỉ ra như hình 37 dưới đây:
Hình 43: Các tham số cấu hình trong System Generator.
Dạng xuất ra (HDL Netlist, Bitfile…)
Tên Kit
Đường dẫn lưu các file sẽ xuất ra
Ngôn ngữ mô tả phần cứng sẽ xuất ra
Chu kì mô phỏng.
Chân Clock dùng trong thiết kế
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 45
4.3.2. Kết quả mô phỏng
Hình 44: Kết quả mô phỏng 1 chuỗi tín hiệu được mã hóa với 2 dãy Walsh khác nhau.
Tín hiệu phía trên là chuỗi tín hiệu 0101… được mã hóa với dãy Walsh (4,16)
và được lọc qua bộ lọc Cosin tăng.
Tín hiệu phía bên dưới là chuỗi tín hiệu 0101… được mã hóa với dãy Walsh
(3,16) và được đưa qua bộ lọc Cosin tăng.
4.3.3. Thực hiện chương trình trên Kit Virtex 4 và kết quả thu được
4.3.3.1. Thực hiện trên Kit Virtex 4
Để thực hiện được trên Kit Virtex 4 từ sơ đồ mô phỏng đã được xây dựng ta cần
làm các bước sau:
- Cấu hình cho System Generator như đã chỉ ra ở phần 4.3.1.
- Tạo ra mã nguồn từ sơ đồ mô phỏng.
- Dùng phần mềm ISE của Xilinx để biên dịch chương trình và gắn chân cho các tín
hiệu vào ra.
- Tạo ra bitfile từ ISE (file này sẽ được nạp vào FPGA).
- Dùng phần mềm hỗ trợ FUSE để mở card (mở giao tiếp giữa máy tính và FPGA).
- Cấu hình clock cho Kit thông qua thao tác nạp file định nghĩa clock FPGA sẽ thực
hiện trong thiết kế.
- Nạp thiết kế vào trong FPGA.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 46
4.3.3.2. Kết quả thu được
Hình 45: Quan sát tín hiệu mã hóa Walsh phát ra từ Kit Virtex 4.
Đánh giá kết quả
Kết quả mô phỏng và kết quả quan sát được khi thực thực hiện trên Kit thực
phù hợp với kết quả tính toán lý thuyết.
Việc thiết kế và thực hiện thành công bộ phát ra hai dòng mã Walsh cho kênh
MIMO dùng công nghệ FPGA hoàn toàn có thể áp dụng trong những mô hình khác.
Sử dụng Kit Virtex 4 cùng với các công cụ hỗ trợ đi kèm để thiết kế FPGA là
một phương pháp thiết kế đơn giản, linh hoạt và hiệu quả.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 47
KẾT LUẬN
Kỹ thuật MIMO với những ưu điểm của nó đang ngày càng được ứng dụng
rộng rãi cùng với đó các nhược điểm của kỹ thuật này cũng dần dần được khắc phục
trong quá trình nghiên cứu và thực hiện. Với việc sử dụng FPGA để xây dựng một hệ
Testbed đã làm giảm đáng kể cho quá trình thực hiện mạch điện tử đồng thời tính khả
thi cũng tăng lên rất nhiều. Với khả năng tái lập trình của FPGA ta có thể dễ dàng thay
đổi và triển khai các thuật toán xử lý mà không cần nghĩ đến việc thay đổi phần cứng.
Đề tài khóa luận này tuy mới chỉ thực hiện được một phần nhỏ trong mô hình
xây dựng một hệ Testbed MIMO nhưng nó sẽ là tiền đề cho việc nghiên cứu và hoàn
thành tiếp những chức năng còn lại trong hệ.
Với việc thực hiện thiết kế thành công bộ mã hóa Walsh trong kênh truyền
MIMO với hai đường tín hiệu ta có thể hoàn toàn áp dụng được với các hệ MIMO có
số lượng kênh truyền lớn hơn. Với thành công này thì nhiệm vụ xây dựng hoàn thiện
một bộ Testbed MIMO hoàn chỉnh sẽ sớm thực hiện được.
Đặc biệt qua quá trình tìm hiểu và làm thực nghiệm em đã thu được nhiều kiến
thức về công nghệ FPGA, cách sử dụng Kit chuyên dụng Virtex 4 là những kiến thức
mà không phải bất kì sinh viên nào trong trường cũng được tiếp cận.
Một lần nữa em xin được cảm ơn TS Trịnh Anh Vũ và anh CN.Vũ Xuân Thắng
đã tận tình chỉ bảo em về kiến thức cũng như tạo mọi điều kiện thuận lợi để em hoàn
thành đề tài khóa luận này.
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 48
TÀI LIỆU THAM KHẢO
[1] Mani B. Srivastava. VHDL tutorial. UCLA – EE.
[2] System Generator for DSP (Getting started Guide, Reference Guide, User Guide).
Xilinx.
[3] Nguyễn Trọng Hải. Bài giảng Verilog. ĐH Kỹ thuật công nghệ TPHCM.
[4] Nguyễn Viết Kính, Trịnh Anh Vũ. Thông tin số. NXBGD.
[5] Vũ Xuân Thắng Kênh truyền MIMO và bộ thu phát cho hệ đo thử kênh. Khóa luận
tốt nghiệp, trường ĐH Công nghệ - ĐHQGHN.
[6] Website:
www.xilinx.com
www.VNeEpress.com
www.wikipedia.org
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 49
MỤC LỤC
MỞ ĐẦU .................................................................................................................... 1
CHƯƠNG 1: GIỚI THIỆU VỀ KĨ THUẬT MIMO VÀ FPGA.............................. 2
1.1. Giới thiệu về MIMO. ........................................................................................ 2
1.1.1. Khái niệm. .................................................................................................. 2
1.1.2. Lịch sử phát triển. ...................................................................................... 2
1.1.3. Phân loại. ................................................................................................... 3
1.1.4. Ứng dụng của MIMO. ................................................................................ 4
1.2. Giới thiệu về FPGA. ......................................................................................... 4
1.2.1. Khái niệm. .................................................................................................. 4
1.2.2. Ứng dụng. .................................................................................................. 6
1.2.3. Hệ thống mạch liên kết. .............................................................................. 7
1.2.4. Các phần tử tích hợp sẵn. ........................................................................... 7
CHƯƠNG 2: NGÔN NGỮ VÀ MÔI TRƯỜNG LẬP TRÌNH CHO FPGA ......... 9
2.1. Ngôn ngữ lập trình cho FPGA. .......................................................................... 9
2.1.1 Giới thiệu. ................................................................................................... 9
2.1.2. Ngôn ngữ VHDL......................................................................................... 9
2.1.2.1. Khái niệm. ........................................................................................... 9
2.1.2.2. Cấu trúc một mô hình hệ thống mô tả bằng VHDL. ........................... 10
2.1.3. Giới thiệu khái quát về ngôn ngữ Verilog. ................................................ 12
2.2. Môi trường lập trình cho FPGA. ..................................................................... 14
2.2.1. ISE. .......................................................................................................... 14
2.2.2. Các bước để tạo ra một thiết kế với ISE.................................................... 15
2.2.2.1. Tạo một Project. ................................................................................ 15
2.2.2.2. Tạo mã nguồn VHDL. ....................................................................... 16
2.2.2.3. Mô phỏng. ......................................................................................... 17
2.2.2.4. Tạo ràng buộc thời gian. .................................................................... 19
2.2.2.5. Gán chân. .......................................................................................... 19
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 50
CHƯƠNG 3: CÁC ĐẶC ĐIỂM CƠ BẢN CỦA VIRTEX 4 VÀ CÁC PHẦN MỀM
HỖ TRỢ ................................................................................................................... 20
3.1. Những đặc điểm cơ bản của XtremeDSP Development Kit Pro (Virtex IV). .. 20
3.1.1. Giới thiệu chung. ...................................................................................... 20
3.1.2. Các thành phần chính của Virtex 4. .......................................................... 21
3.2. Các phần mềm chuyên dụng hỗ trợ kit Virtex 4. .............................................. 28
3.2.1. FUSE. ...................................................................................................... 28
3.2.2. Matlab và các gói công cụ Xilinx hỗ trợ cho Matlab. ............................... 28
CHƯƠNG 4: THỰC HIỆN MÔ HÌNH THIẾT KẾ VỚI KIT VIRTEX-4 ........... 32
4.1. Giới thiệu. ....................................................................................................... 32
4.2. Hai khối chức năng chính trong sơ đồ. ............................................................ 32
4.2.1. Khối tạo mã Walsh. .................................................................................. 32
4.2.1.1. Lý thuyết về mã Walsh. ..................................................................... 32
4.2.1.2. Thực hiện trong thiết kế. .................................................................... 35
4.2.1.3. Sơ đồ và kết quả mô phỏng bộ tạo 2 dãy Walsh (4,16) và (3,16)........ 35
4.2.2. Khối mã hóa cosin tăng (Raised-Cosine). ................................................. 36
4.2.2.1. Lý thuyết. .......................................................................................... 36
4.2.2.2. Thực hiện trong thiết kế. .................................................................... 40
4.2.3. Khối tạo dữ liệu. ....................................................................................... 43
4.2.4. Các khối khác. .......................................................................................... 43
4.3. Mô hình thiết kế và kết quả thu được. ............................................................. 44
4.3.1. Mô hình mô phỏng với các khối trong gói cung cấp bới Xilinx và trong
System Generator. .............................................................................................. 44
4.3.2. Kết quả mô phỏng. ................................................................................... 45
4.3.3. Thực hiện chương trình trên Kit Virtex 4 và kết quả thu được. ................. 45
4.3.3.1. Thực hiện trên Kit Virtex 4. ............................................................... 45
4.3.3.2. Kết quả thu được. .............................................................................. 46
KẾT LUẬN .............................................................................................................. 47
TÀI LIỆU THAM KHẢO ....................................................................................... 48
Khoa §iÖn tö – ViÔn th«ng §HCN - §HQGHN
Khãa luËn tèt nghiÖp §µo V¨n Qu©n – K49§B 51
Các file đính kèm theo tài liệu này:
- ki_thuat_mimo_va_fpga_3391.pdf