4.1.1 KIT DE2 của Altera
4.1.1.1 Tổng quan kit DE2
KIT DE2 có rất nhiều tài nguyên cho phép người sử dụng thực thi rất nhiều mạch ứng dụng từ các mạch đơn giản cho tới các dự án lớn có độ phức tạp cao.
Hình 4.1 KIT DE2 của Altera Một số tài nguyên trên Kit DE2:
Chip FPGA Cyclone II 2C35. Thiết bị cấu hình nối tiếp EPCS16.
Cổng USB cho lập trình và điều khiển, hỗ trợ cả 2 chế độ JTAG và nối tiếp (AS).
8 Mbyte SDRAM. 4 Mbyte bộ nhớ Flash. 4 nút nhấn và 18 Switch. 18 Led đỏ và 9 led xanh.
2 bộ tạo dao động 50Mhz và 27 Mhz.
Chip codec Audio 24 bit và chip DAC video 10 bit, cổng ethernet 10/100
Cổng RS232 9 chân và cổng PS/2 cho kết nối chuột và bàn phím. Bộ nhận tín hiệu hồng ngoại.
Và một số chức năng khác...
Sơ đồ khối
Hình 4.2 Sơ đồ khối KIT DE2 Chip Cyclone EPCS16:
33,216 Logic Elements 105 M4K RAM blocks
4 PLLs 475 chân I/O
4.1.1.2 Sử dụng nút nhấn và Switch
KIT DE2 có 4 nút nhấn, mỗi nút nhấn được chống dội bằng mạch Smith trigger như hình 4.3. Các ngõ ra của mạch Smith Trigger được gọi là KEY0,...,KEY3 được kết nối trực tiếp đến Cyclone II FPGA. Các nút nhấn cung cấp mức logic cao (3.3V) khi không nhấn và cung cấp logic thấp (0V) khi được nhấn.
Hình 4.3: Chống dội phím nhấn
Có tổng cộng 18 Switch gạt trên kit DE2, mỗi switch được kết nối trực tiếp đến chân của Cyclone II FPGA. Khi switch ở vị trí DOWN (gần cạnh của board), nó cung cấp mức logic thấp (0V) đến FPGA, và khi nó được gạt đến vị trí UP thì cho ra mức logic cao (3.3 V).
Có 27 led đơn trên board, 18 led đỏ và 9 led xanh, mỗi led cũng được kết nối trực tiếp đến 1 chân của FPGA. Led sáng khi nhận được mức logic cao từ FPGA, ngược lại led tắt.
Có 8 Led 7 đoạn trên Kit chia làm 2 cặp và một nhóm 4 led, led sáng mức thấp. Mỗi đoạn của led được kết nối trực tiếp đến 1 chân của FPGA.
4.1.1.3 Sử dụng LCD
LCD có phông chữ cài sẵn có thể dùng để hiển thị các văn bản bằng cách gởi các lệnh đến bộ điều khiển hiển thị (HD44780).
Bảng 4.2: Gán chân FPGA cho màn hình LCD
4.1.2 Phần mềm lập trình Quatus II
Quartus II là công cụ phần mềm phát triển của hãng Altera, cung cấp môi trường thiết kế toàn diện cho các thiết kế SOPC (hệ thống trên 1 chip khả trình - system on a programmable chip).
Đây là phần mềm đóng gói tích hợp đầy đủ phục vụ cho thiết kế logic với các linh kiện logic khả trình PLD của Altera, gồm các dòng APEX, Cyclone, FLEX, MAX, Stratix... Quartus cung cấp các khả năng thiết kế logic sau:
Môi trường thiết kế gồm các bản vẽ, sơ đồ khối, công cụ soạn thảo các ngôn ngữ: AHDL, VHDL, và Verilog HDL.
Thiết kế LogicLock.
Là công cụ mạnh để tổng hợp logic.
Khả năng mô phỏng chức năng và thời gian. Phân tích thời gian.
Cho phép xuất, tạo và kết nối các file nguồn để tạo ra các file chương trình. Tự động định vị lỗi.
Khả năng lập trình và nhận diện linh kiện.
Phần mềm Quartus II sử dụng bộ tích hợp NativeLink@ với các công cụ thiết kế cung cấp việc truyền thông tin liền mạch giữa Quartus với các công cụ thiết kế phần cứng EDA khác.
Quartus II cũng có thể đọc các file mạch (netlist) EDIF chuẩn, VHDL và Verilog HDL cũng như tạo ra các file netlist này.
Quartus II có môi trường thiết kế đồ họa giúp nhà thiết kế dễ dàng viết mã, biên dịch, soát lỗi, mô phỏng...
Với Quartus có thể kết hợp nhiều kiểu file trong 1 dự án thiết kế phân cấp. Có thể dùng bộ công cụ tạo sơ đồ khối (Quartus Block Editor) để tạo ra sơ đồ khối mô tả thiết kế ở mức cao, sau đó dùng các sơ đồ khối khác, các bản vẽ như: AHDL Text Design Files (.tdf), EDIF Input Files (.edf), VHDL Design Files (.vhd), và Verilog HDL Design Files (.v) để tạo ra thành phần thiết kế mức thấp.
Quartus II cho phép làm việc với nhiều file ở cùng thời điểm, soạn thảo file thiết kế trong khi vẫn có thể biên dịch hay chạy mô phỏng các dự án khác. Công cụ biên dịch Quartus II nằm ở trung tâm hệ thống, cung cấp quy trình thiết kế mạnh cho phép tùy biến để đạt được thiết kế tối ưu trong dự án. Công cụ định vị lỗi tự động và các bản tin cảnh báo khiến việc phát hiện và sửa lỗi trở nên đơn giản hơn.
4.2 Giải quyết vấn đề
4.2.1 Giải mã viterbi quyết định cứng
Giờ ta sẽ đi giải quyết thuật toán việc giải mã Viterbi (quyết định cứng) cho bộ mã tốc độ ½ với K= 3 và bộ phát mã (hay đa thức sinh) là (5,7)8 đã nhắc đến trong chương 4 về thuật toán Viterbi.
Ta đã biết rằng, với trường hợp bộ mã này thì nếu có N bit mã hóa ngõ vào thì sẽ phải tìm từ 2N
sự kết hợp có thể (tương ứng một bit vào sẽ có 2 bit ra). Điều này trở nên vô cùng phức tạp nếu N càng lớn. Tuy nhiên, ông Andrew J Viterbi trong một ghi chép về “Error bounds for convolutional codes and an asymptotically optimum decoding algorithm”, IEEE Transactions on Information Theory 13(2):260–269, tháng 4 năm 1967 đã mô tả một sơ đồ để kéo giảm tính phức tạp đó đến mức có thể điều khiển được. Một vài giả thuyết quan trọng được đưa ra như sau:
- Như chúng ta thấy trong bảng 4.1 và hình 4.2 thì bất kì một trạng thái nào cũng đều đến từ chỉ 2 trạng thái có thể trước đó.
- Trong 2 trạng thái đó thì chỉ có một trạng thái đúng là trạng thái trước đó. Chúng ta có thể tìm ra trạng thái đó dựa trên bit mã hóa nhận được và bỏ qua trạng thái còn lại.
- Lỗi xuất hiện trong chuỗi bit mã hóa nhận được là một phân bố ngẫu nhiên và xác xuất của lỗi là nhỏ.
Dựa theo các giả thuyết như trên, Lưu đồ giải mã được tiến hành như sau: Giả sử là có N bit được mã hóa, lấy 2 bit mã hóa ở cùng một thời điểm để xử lí và tính toán khoảng cách Hamming, metric nhánh, metric đường, và thông số đường tồn tại cho N/2 +K-1 lần, lấy i là biến chạy từ 1 đến N/2 + K -1.
Tính toán khoảng cách Hamming
Để giải mã, ta hãy xem xét 2 bit mã hóa nhận được ở thời điểm yi và tính toán khoảng cách hamming giữa tất cả những sự kết hợp có thể của 2 bit này. Số bit khác nhau có thể được tính toán bằng thuật toán XOR giữa yi với 00, 01, 10, 11 và sau đó tính toán số bit 1.
là số bit 1 thu được sau phép tính là số bit 1 thu được sau phép tính là số bit 1 thu được sau phép tính là số bit 1 thu được sau phép tính
Tính toán metric nhánh và metric đƣờng
Như đã đề cập trước đó, mỗi trạng thái chỉ có thể đến từ 2 trạng thái có thể trước đó (thể hiện bằng 2 đường màu đỏ và xanh tương ứng trong hình 4.4). Thông số metric nhánh chính là tổng của metric đường của trạng thái trước đó và khoảng cách hamming trong sự chuyển đổi giữa 2 trạng thái. Trong 2 metric nhánh có được, thông số metric nhánh nhỏ hơn sẽ được chọn để giữ lại. Đây chính là nhiệm vụ chính của bộ ACS (Add Compare and Select).
Ghi chú:
1. Theo quy ước thì mã hóa chập luôn bắt đầu từ trạng thái 00, và bộ giải mã Viterbi cũng tương tự.
2. Khi i = 1, metric nhánh cho trạng thái 00 (từ trạng thái 00_dịch bit 0 vào) và trạng thái 10 (từ trạng thái 00_ dịch bit 1 vào) có thể được tính toán. Trong trường hợp này, metric đường cho mỗi trạng thái là chính bằng với metric nhánh khi các nhánh còn lại là không hợp lệ (không tồn tại).
3. Khi i = 2, metric nhánh cho trạng thái 00 (từ trạng thái 00), trạng thái 01 (từ trạng thái 10), trạng thái 10 (từ trạng thái 00), và trạng thái 11 (từ trạng thái 10) có thể được tính toán. Trong trường hợp này cũng vậy, metric đường cho mỗi trạng thái chính bằng metric nhánh khi các nhánh khác là không hợp lệ.
4. Bắt đầu từ thời điểm i = 3, mỗi trạng thái có 2 nhánh và chúng ta cần tiến hành thuật toán ACS đã nói ở trên.
5. Trong trường hợp 2 metric nhánh có cùng giá trị, chúng ta chọn ngẫu nhiên 1 trạng thái để tiến hành xử lí tiếp
Hình 4.4 Tính toán metric nhánh và metric đường cho bộ giải mã Viterbi
Trạng thái 00 có thể đến từ 2 nhánh
(a) Trạng thái 00 với ngõ ra 00. Metric nhánh cho sự chuyển đổi này,
(4.1) (b) Trạng thái 01 với ngõ ra 11. Metric nhánh cho sự chuyển đổi này,
(4.2) Metric đường cho trạng thái 00 được chọn dựa trên giá trị nhỏ hơn trong 2 metric nhánh ở trên.
( ) (4.3) Đường tồn tại cho trạng thái 00 được lưu trữ trong biến “metric đường tồn tại”
Trạng thái 01 có thể đến từ 2 nhánh
(c) Trạng thái 10 với ngõ ra 10. Metric nhánh cho sự chuyển đổi này,
(4.4) (d) Trạng thái 11 với ngõ ra 01. Metric nhánh cho sự chuyển đổi này,
Metric đường cho trạng thái 01 được chọn dựa trên giá trị nhỏ hơn trong 2 metric nhánh ở trên.
( ) (4.6) Đường tồn tại cho trạng thái 01 được lưu trữ trong biến “metric đường tồn tại”
Trạng thái 10 có thể đến từ 2 nhánh
(e) Trạng thái 00 với ngõ ra 11. Metric nhánh cho sự chuyển đổi này,
(4.7) (f) Trạng thái 01 với ngõ ra 00. Metric nhánh cho sự chuyển đổi này,
(4.8) Metric đường cho trạng thái 10 được chọn dựa trên giá trị nhỏ hơn trong 2 metric nhánh ở trên.
( ). (4.9) Đường tồn tại cho trạng thái 10 được lưu trữ trong biến “metric đường tồn tại”
Trạng thái 11 có thể đến từ 2 nhánh
(g) Trạng thái 10 với ngõ ra 01. Metric nhánh cho sự chuyển đổi này,
(4.10) (h) Trạng thái 11 với ngõ ra 10. Metric nhánh cho sự chuyển đổi này,
(4.11) Metric đường cho trạng thái 11 được chọn dựa trên giá trị nhỏ hơn trong 2 metric nhánh ở trên.
( ). (4.12) Đường tồn tại cho trạng thái 11 được lưu trữ trong biến “metric đường tồn tại”
Khối truy hồi
Khi đường tồn tại được tính toán N/2 + K – 1 lần, thuật toán giải mã có thể bắt đầu ước lượng chuỗi ngõ vào. Nhờ vào sự có mặt của các bit tận cùng (K-1 bit 0 thêm vào), thì trạng thái cuối cùng của chuỗi bit theo bộ mã hóa chập là trạng thái 00.
Vì vậy, bắt đầu từ metric đường cuối cùng được tính toán ở thời điểm N/2 + K -1 cho trạng thái 00, từ đường tồn tại, ta tìm ra trạng thái trước đó tương ứng với trạng thái hiện tại. Từ kiến thức về trạng thái hiện tại và trạng thái trước, chuỗi ngõ vào có thể được quyết định (xem bảng 4.3 về trạng thái ngõ vào và trạng thái ngõ ra). Tiếp tục truy hồi dựa theo đường tồn tại và ước lượng chuỗi ngõ vào cho đến thời điểm i = 1.
Bảng 4.3: Trạng thái hiện tại và trạng thái trước của nó Input, if previous state Current state 00 01 10 11 00 0 0 x x 01 x x 0 0 10 1 1 x x 11 x x 1 1
4.2.2 Giải mã viterbi quyết định mềm
Ở trên chúng ta đã bàn về thuật toán lập trình giải mã Viterbi quyết định cứng, giờ chúng ta tiến hành phân tích thuật toán giải mã viterbi quyết định mềm. Điều chế được sử dụng là BPSK và kênh truyền được giả sử là kênh AWGN.
Mô hình hệ thống
Chuỗi mã nhận được là
, trong đó c là chuỗi mã hóa đã được điều chế sẽ có giá trị √ nếu bit được mã hóa là bit 1 và √ nếu bit được mã hóa là bit 0, n là nhiễu Gauss trắng cộng tính với hàm phân phối xác xuất là,
√ với giá trị trung bình và phương sai . Hàm phân bố xác xuất (PDF) có điều kiện của y nếu bit được mã hóa là bit 0 là,
√
( √ )
(4.13)
Hàm phân bố xác xuất (PDF) có điều kiện của y nếu bit được mã hóa là bit 1 là,
√
( √ )
(4.14)
Khoảng cách Euclidean
Trong giải mã Viterbi quyết định mềm, dựa trên vị trí của ký hiệu đã được mã hóa nhận được, bit đã mã hóa được ước lượng; nếu ký hiệu nhận được là lớn hơn 0, bit
đã mã hóa nhận được sẽ là 1; nếu ký hiệu nhận được là bé hơn hoặc bằng 0, bit đã mã hóa nhận được sẽ là bit 0.
Trong giải mã quyết định mềm, thay vì ước lượng bit đã được mã hóa và tìm khoảng cách Hamming, ta sẽ tìm khoảng cách giữa ký hiệu nhận được và ký hiệu có thể đã được phát đi.
Khoảng cách Euclidean nếu bit đã mã hóa được truyền đi là bit 0 là,
( √ ) ( √ ) (4.15)
Khoảng cách Euclidean nếu bit đã mã hóa được truyền đi là bit 1 là,
( √ ) ( √ ) (4.16)
Các thành phần , y2
, √ và là chung cho cả 2 biểu thức nên chúng có thể được bỏ đi. Khoảng cách Euclidean sau khi đơn giản biểu thức là,
và (4.17)
Khi thuật toán Viterbi nhận được 2 bit mã hóa ở cùng một thời điểm để xử lí, chúng ta cần phải tìm ra khoảng cách Euclidean từ cả 2 bit.
( √ ) ( √ ) ( ) (4.18)
( √ ) ( √ ) ( ) ( √ ) ( √ ) ( ) ( √ ) ( √ ) ( )
4.3 Lưu dồ thuật toán lập trình
Lưu đồ giải thuật chính của chương trình
Bắt đầu Cài đặt ban đầu
Dữ liệu vào
Tính 4 khoảng cách nhánh Liên kết với các khoảng
cách nhánh trước đó Cộng-So sánh-Lựa chọn Lưu trữ thông tin đường
Trellis cuối ? Truy hồi Dữ liệu ra Kết thúc Đ S
Khối cài đặt ban đầu thiết lập những thông số cho bộ mã giống như bên phần mã chập, đồng thời nhận các bit ngõ vào từ kênh truyền. Bảng trạng thái tiếp theo cũng được tính toán trước và lưu vào bộ nhớ ở khối này.
Sau đó, với mỗi xung bộ giải mã sẽ tính toán 4 khoảng cách nhánh Hamming hoặc Euclidean (gọi chung là khoảng cách), phụ thuộc vào chế độ quyết định cứng hay mềm đã lựa chọn ban đầu. Với mỗi trạng thái, khối Cộng-So sánh-Lựa chọn (ACS) tính toán hai khoảng cách đường, so sánh và lựa chọn ra đường có khoảng cách bé nhất. Tại thời điểm này, bộ giải mã cũng lưu lại các thông số tích lũy cho trạng thái.
Giống như mã chập, sơ đồ trellis được xây dựng, trên sơ đồ này, các điểm truyền được đánh dấu với các thông số tương tứng như thông số đường và trạng thái trước đó. Khi tất cả các bit vào đã được nhận, sơ đồ trellis đã xây dựng xong, tính toán tất cả các thông số tích lũy, dựa vào bẳng tích lũy bộ giữa mã tìm đường tồn tại, kết hợp giữa đường tồn tại và bảng trạng thái tiếp theo bộ giải mã sẽ tìm ra chuỗi bit ban đầu.
Hình 4.6: Lưu đồ giải thuật bộ giải mã Sau đây là lưu đồ chi tiết hơn cho bộ giải mã Viterbi
Tính Thông số nhánh Dữ liệu vào Cộng So sánh Lựa chọn Lưu trữ thông số đường
Truy hồi - Tìm đường tối ưu nhất
Vào 3 bit Quyết định cứng / mềm Tính khoảng cách Euclidean 3 bit 3 bit Chọn chế độ Mềm Cứng Vào 1 bit Tính khoảng cách Hamming 1 bit 1 bit
input0 input1 input0 input1
Quyết định cứng / mềm Chọn chế độ
Các khoảng cách
Dist_00 Dist_01 Dist_10 Dist_11
So Sánh
+ +
Lưu trữ thông số tích lũy
Trellits Cuối ?
Bộ nhớ lưu trữ trạng thái tiếp theo và ngõ ra Dữ liệu ra
Dữ liệu ra Truy hồi tìm đường tồn tại
S
Đ S
Trước khi thực hiện giải mã, bộ giải mã phải được cài đặt chế độ quyết định cho giải mã từ bên ngoài. Với mỗi chế độ, sẽ có cách tính khoảng cách nhánh khác nhau, Hamming (tương ứng với quyết định cứng) hay Euclidean (tương ứng với quyết định mềm).
Khối tính khoảng cách Hamming
Lượng tử 1bit 1 bit vào Lượng tử 1bit 1 bit vào 1 b it Bit chuẩn
Giống nhau ? Giống nhau ?
Khoảng cách = 0 Đ Khoảng cách = 1 S Khoảng cách = 0 Khoảng cách = 1 Đ S + Khoảng cách Hamming 1 b it