3.2.1. Phần mềm DSP Builder
Đề tài được thiết kế trên phần mềm DSP Builder. Đây là một tiện ích do Altera thiết kế nhằm hỗ trợ người sử dụng có thể thiết kế nhanh chóng các ứng dụng xử lý tín hiệu số. DSP Builder chạy trên nền Simulink của Matlab và thừa hưởng khả năng mô phỏng của Simulink. Vì vậy để sử dụng được DSP Builder người sử dụng cần biết về Matlab và Simulink trước.
DSP Builder tạo ra một môi trường thân thiện để thiết kế các hệ DSP. Nhờ những khối chức năng sẵn có, việc thiết kế trở nên dễ dàng. Người sử dụng có thể tạo ra ứng dụng mong muốn và mô phỏng bằng Simulink để kiểm tra kết quả. Quan trọng nhất là DSP Builder cung cấp công cụ chuyển đổi thiết kế thành dạng VHDL
cho phép biên dịch và tổng hợp thành các cấu hình phần cứng giúp rút ngắn thời gian biến ý tưởng thành hiện thực.
Đặc điểm của DSP Builder là nó có các khối chứa bit và chu kỳ chính xác nên thực hiện được các chức năng về số học, lưu trữ, ví dụ như các giải thuật về sửa lỗi, về lọc. Chúng ta có thể tích hợp những chức năng phức tạp bằng cách sử dụng các MegaCore Functions trong DSP Builder. Các Function này tăng cường sức mạnh cho DSP Builder và mở ra khả năng phát triển rộng lớn. Hình 3.2 trình bày các cách biên dịch để chuyển từ sơđồ thiết kế xuống phần cứng.
Hình 3.2: Qui trình thiết kế của DSP Builder [13]
Matlab Simulink: tạo ra một model, sử dụng kết hợp các các khối DSP Builder và các khối của Simulink.
Biểu diễn mô phỏng RTL (Register Transfer Level): DSP Builder hỗ trợ mô phỏng cho phần mềm ModelSim bằng các Tcl scripts. Có thể sử dụng VHDL đã được tạo ra để mô phỏng bằng các công cụ khác.
Sử dụng các file do khối DSP Builder SignalCompiler tạo ra để tổng hợp RTL. DSP Builder hỗ trợ các Tcl scripts dùng để tổng hợp tựđộng bằng các chương trình phần mềm khác như: Quartus II, Synplify, LeonardoSpectrum.
Biên dịch thiết kế bằng phần mềm Quartus II.
3.2.2. Thư viện DSP Builder
Hình 3.3: Thư viện của DSP Builder
Hình 3.3 trình bày các nhóm thư viện của DSP Builder. Các phiên bản của DSP Builder sẽ có các thư viện thay đổi. Nhìn chung, thư viện gồm các khối chức năng cơ bản sau:
Thư viện AltLab: Đây là thư viện chứa các khối hỗ trợ thiết kết như: khối chọn loại linh kiện lập trình, khối đưa một thiết kế VHDL hoặc Verilog HDL vào trong một subsystem, khối trả về các thông tin: chu kỳ lấy mẫu, số bit tối đa cần
trong quá trình mô phỏng và giá trị tối đa hoặc tối thiểu nhận khi mô phỏng. Trong thư viện có hai khối quan trọng là khối Khối SignalCompiler và Khối SignalTap II Analysis
Hình 3.4: Hoạt động của khối Signal Compiler
Khối SignalCompiler là khối quan trọng nhất của DSP Builder. Hình 3.4 trình bày giao diện khi chạy SignalCompiler. Khối này có các chức năng sau:
Chuyển đổi thiết kế Simulink sang ngôn ngữ RTL VHDL Tạo ra file kiểm tra bằng ngôn ngữ VHDL
Tạo ra file kiểm tra bằng ngôn ngữ Verilog
Tạo ra model mô phỏng bằng ngôn ngữ Verilog HDL (dùng phần mềm Quartus® II)
Tạo ra Tcl scripts cho Quartus II biên dịch
Tạo ra Tcl scripts cho các phần mềm khác: LeonardoSpectrum™, Precision RTL, Synplify, và ModelSim
Tạo ra một vector file (.vec) cho Quartus II mô phỏng Cho phép tạo ra file SignalTap II (.stp)
Khối SignalTap II Analysis dùng để kiểm tra các tín hiệu bên trong linh kiện khi hệ thống đang chạy. SignalTap II Analysis có thể dùng để triggers, cấu hình bộ nhớ, và hiển thị dạng sóng. Đề tài sử dụng công cụ này để kiểm tra từng khối chức năng và quá trình xử 1ý dữ liệu của cả hệ thống.
Thư viện Arithmetic: Thư viện gồm các khối dùng cho phép tính số học như so sánh, vi phân, tích phân, nhân, cộng, khai căn …
Thư viện Board: Board được sử dụng trong đề tài là Stratix DSP Board EP1S25. Thư viện chứa các khối phần cứng giao tiếp với linh kiện Stratix EP1S25 gồm 2 ADC, 2 DAC, các nút nhấn, các chân Debug, led, led 7 đoạn, giao tiếp RS232, và switch. Khi muốn kết nối với phần cứng nào của board, ta chỉ cần thêm khối này vào model thiết kế. Trong thư viện này có một khối rất quan trọng. Đó là khối cấu hình Board. Khối này cho phép ta gán clock cho ADC và DAC. Nếu trong model ta quên thiết lập các thông số này thì biên dịch và nạp xuống, ứng dụng sẽ không có clock, tức là mạch sẽ không chạy được như mong muốn.
Thư viện Complex Type: Thư viện cung cấp các hàm liên quan đến số phức như cộng trừ số phức, tính biên độ, pha …
Thư viện Gate and Control: Đây là thư viện cung cấp các khối về điều khiển đường đi của dữ liệu và các cổng logic nhưđa hợp, giải đa hợp, flip flop, cổng and, or, đảo…
Thư viện IO and Bus: Thư viện này cung cấp các khối vào / ra và bus như: chuyển đổi bus (ví dụ chuyển từ bus 20 bit sang bus 16 bit, bỏ đi 4 bit), tách bit, nguồn, mass, hằng số…
Thư viện Rate Change: Thư viện này cung cấp các khối để thay đổi tốc độ trong model, chủ yếu dùng khi ta muốn thiết kế chương trình có nhiều hơn 1 clock. Khối quan trọng nhất trong thư viện này là khối PLL, và khối này chỉ có thể sử dụng được khi đặt nó ở mức cao nhất của model. Đồng thời, các khối sử dụng kết quả của PLL phải là subsystem chứ không đồng mức với PLL.
Thư viện Storage: Thư viện Lưu trữ cung cấp các khối nhớ như ROM, FIFO, LUT (look-up table: lưu trữ dữ liệu trong bảng tìm kiếm)…
Thư viện MegaCore Functions: Các MegeCore Functions là những khối có một chức năng hoàn chỉnh riêng biệt, nhưng DSP Builder không cung cấp sẵn các MegaCore Functions này. Các MegaCore Functions này có thể cài đặt thêm và thường được điều khiển rất phức tạp.
3.3. PHẦN CỨNG THỰC NGHIỆM
3.3.1. Giới thiệu kit DSP Development Stratix EP1S25
Đây là kit thường dùng để thiết kế các ứng dụng trong xử lý tín hiệu bằng phần mềm DSP Builder hoặc ngôn ngữ phần cứng. Một bộ kit gồm có Stratix DSP Development Board, phần mềm QuartusII, DSP Builder, IP core MATLAB/ Simulink. Linh kiện chính được gắn trên kit là Stratix EP1S25. Đây là linh kiện có 25660 yếu tố logic (logic element) ở mức nhanh nhất, kiểu đóng gói FineLine BGA 780 chân và có tổng cộng 1944576 bit RAM. Hình 3.5 là kit DSP Development Stratix EP1S25. Các thông tin chi tiết về Stratix được liệt kê ở bảng 3.2.
Bảng 3.2: Đặc tính của Stratix EP1S25 Đặc tính EP1S25F780-5 Yếu tố logic (LEs) 25660 Các khối RAM 512 Mb (32 x18 bits) 224 Các khối RAM 4 Kb (128 x 36 bits) 138 Các khối RAM 2 Tổng cộng số bit nhớ 1944576 Khối DSP 10 Bộ nhân nhúng 80 PLLs 6 Số chân tối đa dành cho người sử
dụng
597
Loại đóng gói 780 chân FineLine BGA Điện thế Thế nội 1.5 V, Thế I/O 3.3 V
Hình 3.5: Kit DSP Development Stratix EP1S25 [13]
3.3.2. Các thành phần trên kit
Trên kit được tích hợp các linh kiện giao tiếp như hình 3.6. Giao tiếp gồm: 2 ADC 12 bit, tốc độ tối đa 125 M mẫu / giây, đổi dữ liệu ra dạng số bù 2, tần số sóng vào phải lớn hơn 1 MHz, biên độ vào 2 Vpp
2 DAC 14 bit, tốc độ 165 MHz, đổi sang tín hiệu tương tự từ dữ liệu vào dạng nhị phân không dấu, biên độ 1 Vpp. Lưu ý: nếu gắn JP9 / JP10 thì tín hiệu ra DAC1 / DAC2 là có DC, nếu không gắn jumper thì tín hiệu ra là AC.
2 Mbytes SRAM 7.5 ns đồng bộ, mỗi SRAM có 18 đường địa chỉ, 36 đường dữ liệu, dung lượng 1 MB 32 Mbit flash memory
Lựa chọn để cấu hình: cấu hình on-board bằng linh kiện EPM7064 của Altera với 32 Mbits flash memory; hoặc, nạp cấu hình thông qua cable ByteBlasterMV.
Ngoài ra, kit còn có giao tiếp với 2 LED 7 đoạn, 1 DIP Switch 8 chân, 3 nút nhấn, 2 led (dành cho người sử dùng lập trình), 1 ngõ ByteBlasterMV, 1 ngõ RS232, 1 bộ dao động 80 MHz onboard, cấp nguồn hoạt động: 5V DC, các chân dành cho debug gồm 2 connector loại Mictor dành cho nhà thiết kế logic Hewlett Packard (HP) và 1 số headers 0.1 inch. Bảng chi tiết các linh kiện được trình bày ở bảng 3.3.
Hình 3.6: Các linh kiện được trên kit DSP Development [13]
Bảng 3.3: Các linh kiện trên kit DSP Development [13]
Tên Loại Ký hiệu Ghi chú
Các linh kiện
ADC Vào / ra U10, U30 2 ADC
DAC Vào / ra U21, U23 2 DAC
2 Mbytes SRAM Bộ nhớ U34, U37 cấu hình bởi 2 bus, mỗi bus 36 bits
32 Mbit flash
Connector cho clock
vào (SMA) Vào JP1, JP3
2 SMA connector được nối với clock, trở kháng 50 Connector cho clock
ra (SMA) Ra JP2, JP4
2 SMA connector trở kháng nguồn 50
Led 7 đoạn Hiển thị D4 Board có 2 led 7 đoạn DIP Switch Vào / ra SW3 8 dipswitch, thường dùng
để xác định logic ngõ vào Nút nhấn Vào / ra SW0, SW1,
SW2 Board có 3 nút nhấn Led dành cho lập
trình Hiển thị D6, D7 Board có 2 led
Led nguồn Hiển thị D8 Board có 1 led sáng khi board được cấp nguồn. Led cấu hình Hiển thị D5 Board có 1 led sáng khi
Stratix đã được cấu hình. RS 232 connector Vào / ra J8 Thế được đổi sang tín hiệu
3.3 V cho Stratix Bộ dao động 80MHz Clock U1 1 bộ dao động onboard Cấp nguồn 5 V DC Vào J1 Có 1 adapter đi kèm Chân user I/O Vào / ra JP7, JP8
Board có 90 chân I/O thông qua JP8 (45 header), JP7 (45 header)
Phần dành cho Debug
Nối Mictor Vào / ra J9, J10 Được dùng cho phân tích logic mở rộng. Phần mở rộng Nối dành cho các linh kiện tương tự Mở rộng JP19, JP22 Nối dành cho các giao thức mở rộng của Altera Mở rộng JP20, JP21, JP24 74 chân Vùng giao thức Mở rộng N/A Có một mảng các lỗ xuyên board 0.1 inch, nối với 30 chân vào / ra của Stratix.
5CHƯƠNG 5: KẾT QUẢ
Chương này trình bày các kết quả thử nghiệm của hệ thống OFDM. Hầu hết các kết quả có được bằng công cụ Signal Tap. Đây là công cụ phổ biến để kiểm tra từng khối chức năng khi thiết kết trên FPGA. Kết quả sau được xử lý trên FPGA sẽ lưu trong RAM. Signal Tap cho phép đọc kết quả trong RAM về máy tính và hiển thị trên máy tính. Đồng thời, Signal Tap sẽ luôn cập nhật và hiển thị các kết quả mới. Board được kết nối với máy tính theo chuẩn chuẩn JTAG. Để tiện việc khảo sát khả năng hoạt động của từng khối, đề tài sẽ khảo sát kết quả trên từng bộ ngẫu nhiên hoá, bộ mã hoá kênh, quá trình xử lý dữ liệu bên phát, và quá trình xử lý dữ liệu bên thu. Các dữ liệu ở ngõ ra thường có thời gian trễ so với dữ liệu vào. Tuy từng khối cụ thể mà thời gian trễ sẽ khác nhau. Để tiện việc kiểm tra, dữ liệu ngõ vào được gắn thêm các bộ trễ cho đồng bộ với dữ liệu ngõ ra. Cuối cùng, chương này sẽ trình bày các kết quảđo đạc phổ tín hiệu OFDM của hệ thống.
5.1. BỘ NGẪU NHIÊN HOÁ
Dữ liệu sau khi qua bộ randomizer hai lần sẽ giống như dữ liệu ban đầu. Sau khi thực hiện giả ngẫu nhiên, dữ liệu sẽ tránh được trường hợp các các số ‘0’ (hoặc số ‘1’) xuất hiện liên tục. Hình 5.1 trình bày kết quả thử nghiệm bộ randomizer và derandomizer. Dữ liệu đưa vào bộ ngẫu nhiên hoá là chuỗi dữ liệu nhị phân có 10 giá trị ‘1’, 10 giá trị ‘0’ xuất hiện liên tục nhau. Dữ liệu sau bộ randomizer sẽ phân tán các các bit ‘1’ và ‘0’. Khi qua bộ derandomizer, ta thu được dữ liệu giống như ban đầu.
Hình 5.1: Kết quả kiểm tra bộ ngẫu nhiên hoá
(a) Dữ liệu gốc
(b) Dữ liệu sau khi gia ngẫu nhiên (c) Dữ liệu sau khi giải giả ngẫu nhiên
5.2. BỘ MÃ HOÁ KÊNH
Mô hình thử nghiệm gồm bộ tạo dữ liệu ngẫu nhiên. Dữ liệu đi qua bộ mã hoá convolutional code với tốc độ mã là ½. Dữ liệu sau khi mã hoá sẽ cộng nhiễu bằng phương pháp cho qua kênh truyền đảo bit nhị phân. Ở đây, xác suất lỗi là ¼ với dạng lỗi là ‘01000100’. Sau đó, thực hiện thuật toán Viterbi để giải mã. Kết quả chuỗi bit sau khi giải mã luôn giống với chuỗi bit dữ liệu ban đầu. Điều này cho thấy bộ mã hoá kênh hoạt động tốt và phương pháp mã hoá convolutional code có khả năng sửa sai tốt với các lỗi rời rạc. Với tốc độ mã là ½, khi có 1 bit đi vào bộ mã sẽ sinh ra 2 bit theo g1 và g2. Để tiện việc theo dõi, đề tài đã trình bày kết quả dưới dạng số 2 bit (g2g1), với g1 là MSB và g2 là LSB. Số chu kỳ clock cần để bộ
(a)
(b)
giả mã Viterbi là 4 lần chiều dài qui hồi. Chiều dài bộ mã là 7 nên chiều dài qui hồi được chọn là 42. Bộ giả mã có thời gian trễ là: 42x4=168 clock. Để tiện việc so sánh kết quả, dữ liệu ngõ vào cũng được cho qua bộ trễ bằng với thời gian trễ của bộ giải mã. Hình 5.2 trình bày kết quả thử nghiệm bộ mã hoá Convolutional Code. Chú ý rằng cứ 4 bit truyền sẽ xuất hiện 1 lỗi và các lỗi này được sửa sai hoàn toàn bằng thuật toán Viterbi.
Hình 5.2: Kết quả thử nghiệm bộ mã hoá kênh (a) Dữ liệu gốc, (b) Dữ liệu sau khi mã hoá
(c) Dữ liệu đã cộng nhiễu, (d) Dữ liệu sau khi giải mã (a)
(b)
(c)
5.3. XỬ LÝ DỮ LIỆU ĐẦU PHÁT
Quá trình xử lý dữ liệu ở đầu phát bắt đầu bằng bộ tạo dữ liệu ngẫu nhiên. Dữ liệu này sẽ lần lượt cho qua từng khối mã hoá kênh, ánh xạ chòm sao, ghép symbol OFDM, tạo tín hiệu OFDM, và thêm cyclic prefix. Ngoài ra, vì ngõ ra của bộ DAC là tín hiệu đơn cực nên phải thêm bộ chuyển tín hiệu đơn cực sang đa cực bằng cách cộng thêm thành phần DC. Do một symbol OFDM được truyền đi trong 320 xung clock nên phần lớn kết quảđược trình bày kéo dài trong 320 clock.
5.3.1. Bộ mã hoá kênh
Dữ liệu ngẫu nhiên gồm 192 bit nhị phân. Tuy nhiên, để đảm bảo khả năng sửa lỗi của bộ mã hoá sửa sai có chiều dài bộ mã là 7, ta chèn 7 bit ‘0’ trong phần cuối của dữ liệu. Hình 5.3 trình bày dữ liệu vào và ra khỏi bộ mã hoá kênh. Dữ liệu ngõ ra bộ mã hoá kênh được trình bày dạng số 2 bit (g2g1).
Hình 5.3: Dữ liệu qua bộ mã hoá kênh
(a) Dữ liệu truyền, (b) Dữ liệu sau khi mã hoá (a)
5.3.2. Ánh xạ chòm sao
Dữ liệu sau bộ mã hoá được đưa vào bộ ánh xạ chòm sao. Với phương pháp mã hoá là convolutional code ½, ngõ ra của bộ mã là 2 bit. Hai bit này tương thích dữ liệu với bộ phép ánh xạ QPSK. Hình 5.4 trình bày kết quả thử nghiệm bộ ánh xạ chòm sao. Dữ liệu ngõ ra phù hợp với chòm sao đã thiết kế. Các kết quả trên trục đồng pha (I) và vuông pha ở dạng dấu chấm cốđịnh 14 bit.
Hình 5.4: Dữ liệu vào và sau khi ánh xạ chòm sao theo phương pháp QPSK (a) Dữ liệu đi vào bộ mapper, (b) Ngõ ra trục I, (c) Ngõ ra trục Q
(a)
(b)
5.3.3. Ghép symbol OFDM
Hình 5.5: Cấu trúc symbol OFDM
(a) Dữ liệu được sắp xếp lại để bỏ qua các vị trí pilot ở trục I (b) Dữ liệu được sắp xếp lại để bỏ qua các vị trí pilot ở trục Q
(c) Symbol OFDM hoàn chỉnh ở trục I (d) Symbol OFDM hoàn chỉnh ở trục Q
(a)
(b)
(c)
Hình 5.5 trình bày kết quả việc ghép thành Symbol OFDM. Symbol OFDM gồm 256 điểm và có cấu trúc như sau {28 số zero,100 data, zero, 100 data, 27 số zero}. Trong đó, phần dữ liệu sẽ gồm 8 pilot ở các vị trí c-88, c-63, c-38, c-13, c13, c38, c63 và c88. Các pilot sẽ không chuẩn hoá. Vì vậy, các pilot sẽ có giá trị lớn hơn các data thông thường. Dữ liệu ngõ vào sẽ bỏ qua các vị trí của pilot và chèn pilot vào các vị trí này. Ngõ ra sau khi qua khối ghép symbol phù hợp với cấu trúc symbol.
5.3.4. Tạo tín hiệu OFDM
Sau khi tách thành Symbol OFDM, ta thực hiện biến đổi IFFT 256 điểm để