THIẾT KẾ BỘ FFT VÀ MÔ PHỎNG TRÊN QUARTUS (có code)................... THIẾT KẾ BỘ FFT VÀ MÔ PHỎNG TRÊN QUARTUS (có code)................... THIẾT KẾ BỘ FFT VÀ MÔ PHỎNG TRÊN QUARTUS (có code)................... THIẾT KẾ BỘ FFT VÀ MÔ PHỎNG TRÊN QUARTUS (có code)................... THIẾT KẾ BỘ FFT VÀ MÔ PHỎNG TRÊN QUARTUS (có code)................... THIẾT KẾ BỘ FFT VÀ MÔ PHỎNG TRÊN QUARTUS (có code)...................
Trang 1THIẾT KẾ BỘ FFT VÀ MÔ PHỎNG
TRÊN QUARTUS
Trang 5ASIC Application-specific Integrated Circuit
CPLD Complex Programmable Logic Device
DFT Dicrete Fourier Transform
DSP Digital Signal Processor
DTFT Dicrete-Time Fourier Transform
EDA Electronic Design Automation
EDIF Electronic Design Interchange Format
FFT Fast Fourier Transform
FPGA Field-programmable gate array
HDL Hardware Description Language
IDFT Inverse Discrete Fourier Transform
IFFT Inverse Fast Fourier Transform
O Order
PAL Programmable Array Logic
PLA Programmable Logic Array
PLD Programmable Logic Device
RAM Random-access Memory
ROM Read-only Memory
SDF Single-path Delay Feedback
SOPC System On a Programmable Chip
SPLD Simple Programmable Logic Device
VHDL VHSIC Hardware Description Language
VHSIC Very High Speed Integrated Circuit
Trang 6CHƯƠNG 1 TỔNG QUAN VỀ FPGA
• Các khối xuất/nhập (I/O Pads)
• Các phần tử được thiết kế sẵn như RAM, ROM, nhân vi xử lý, DSP Slice…
1.1.1 Lịch sử
Trang 7FPGA được thiết kế đầu tiên bởi nhà sáng lập công ty Xilinx,Ross Freeman, vàonăm 1984, kiến trúc mới của FPGA đã cho phép tích hợp một lượng rất lớn cácphần tử bán dẫn vào 1 vi mạch so với CPLD Số lượng cổng logic mà FPGA có khảnăng chứa là từ 100.000 đến hàng tỷ cổng, trong khi đó, con số mà CPLD có là10.000 - 100.000 cổng logic Ngoài ra PAL, PLA còn thấp hơn nữa với chỉ từ thấphơn 10.000 cổng.
CPLD được cấu trúc từ một lượng cố định các khối SPLD (thuật ngữ chỉ chungcho PLA, PAL) SPLD là một mảng logic AND/OR lập trình được có kích thướcxác định và chứa một lượng hạn chế các phần tử nhớ đồng bộ (clocked register) Kiến trúc FPGA là kiến trúc mảng các khối logic, nó nhỏ hơn nhiều so với một khốiSPLD, ưu điểm này đã giúp FPGA có thể chứa các phần tử logic nhiều hơn và 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 được phát huy tối đa,kiến trúc của FPGA phức tạp hơn nhiều so với CPLD để có thể đạt được các mụctiêu trên
1.1.2 Sự khác biệt của FPGA với ASIC
ASIC là một vi mạch IC được thiết kế một ứng dụng cụ thể
FPGA cũng được xem như một loại vi mạch bán dẫn chuyên dụng giống ASICnhưng nếu ASIC đặc chế hoàn toàn hay ASIC thiết kế trên thư viện logic thì FPGAkhông thể giống như những loại trên là đạt mức độ tối ưu, và hạn chế trong việcthực hiện các chức năng với những tác vụ đặc biệt phức tạp
Tuy nhiên, FPGA lại có ưu thế hơn là có thể cấu trúc lại khi đang sử dụng, chiphí giảm do công đoạn thiết kế đơn giản hơn, nhờ vậy mà thời gian đưa sản phẩmvào cũng được rút ngắn
Trang 8Ngoài ra, nhờ số lượng mật độ các cổng logic trong FPGA tương đối lớn có thểthực hiện các bài toán với độ phức tạp cao cần khối lượng bước tính toán lớn vàdùng trong các thực hiện trong thời gian thực.
Trang 9
CHƯƠNG 2 TỔNG QUAN VỀ BỘ BIẾN ĐỔI FFT
1.2 DFT & FFT
1.1.4 Ứng dụng
- Tính toán phổ tần của tín hiệu
- Thuật toán tính chập vòng hiểu quả bằng FFT
- Mã hóa dạng sóng, như là tiếng nói hay hình ảnh, cho việc truyền dẫn và dữ liệuhiệu quả
1.1.5 DFT (Discrete Fourier Transform)DFT là bộ biến đổi 1 chuỗi N số điểm trên miền thời gian thành 1 chuỗi số trênmiền tần số IDFT (Inverse Discrete Fourier Transform) là bộ DFT đảo
X(ωk) = ( DFT N điểm của tín hiệu chiều dài L) (1)
DFT N – điểm của một tín hiệu dài – L được định nghĩa bằng DTFT được tínhtoán tại N tần số phân bố đều trên toàn khoảng Nyquist, 0 ≤ ω ≤ 2π
Trang 10(6)Hoặc: X= Wx
có phần tiết kiệm tài nguyên nhờ chính sự đơn giản của nó Nhưng bù lại cho việc
đó, thuật toán này sẽ không có độ chính xác cao và tốc độ kém hơn các thiết kếRadix-mix (trộn cơ số) Ý tưởng thiết kế Radix-2 FFT dựa trên việc chia chuỗi N –điểm x(n) ra thành hai chuỗi N/2 điểm chẵn, được đặt: x(2m), và N/2 điểm lẻ, x(2m+ 1), được tính độc lập
Trang 11Từ đó, gộp lại và tính X(k) với k = 0, 1, …, N – 1:
X(k) = X0(k) + X1(k) Với k = 0, 1, …,N/2 – 1 (14)
X(k + ) = X0(k) – X1(k) Với k = 0, 1, …, N/2 – 1 (15)Sau đây là các ví dụ về thuật toán Radix-2:
• 8-point (8 điểm): N = 8
Vì N = 2L , nên ta sẽ có L – 1 số bước chia cơ số 2
Ta thực hiện 2 lần FFT cơ số 2
Trang 12Hình 2-1: DFT 8 điểm từ 2 bộ DFT 4 điểm [4]
Lưu ý: ở phần này thứ tự các x(n) sẽ có phần bị thay đổi Ví dụ ở bài 8 điểm, 8 =
23 nên ta có 3 bit Trường hợp x(4), 1002 ta sẽ đảo vị trí của chúng => 0012 = 1 =>x(4) sẽ nằm vị trí của x(1) và tương tự cho x(1),x(3),x(6), x(2) = 0102 đảo vị trí vẫnnhư ban đầu, tương tự cho x(0), x(5), x(7)
• Tương tự với 16 điểm, 16 =24 => có 4 bit Trường hợp 10002 = x(8) => 00012 =x(1) 2 vị trí này sẽ thay đổi cho nhau và tương tự cho các x khác
X(k) = X10(k) + X11(k) Wmk
N
Trang 13Hình 2-2: Ví dụ cho mô hình 8-điểm FFT Radix-2 [6]
1.1.8 Kiến trúc SDF (Single-path-Delay-Feedback)
Hình 2-3: Kiến trúc SDF Radix-2 [2]
Sau đây là các bước thực hiện của 1 tầng SDF:
Bước 1: N/2 dữ liệu đầu ở ngõ vào bộ mux và được ghi vào thanh ghi dịch (shiftregs) Không có dữ liệu ở ngõ ra
Bước 2: N/2 dữ liệu đầu ở thanh ghi dịch sẽ thực hiện bộ cộng (+), trừ (–) với dữliệu sau ở ngõ vào Sau đó, dữ liệu ở bộ cộng (+) sẽ xuất ở ngõ ra Dữ liệu ở bộ trừ(–) được hồi tiếp trở lại và vào thanh ghi dịch
Bước 3: N/2 dữ liệu ở thanh ghi dịch sau bước 2 sẽ được xuất ở ngõ ra và kếtthúc quá trình
Trang 14Hình 2-4: Sơ đồ khối 2 tầng kề nhau [2]
Mỗi tầng SDF sẽ có một bộ đệm dữ liệu hồi tiếp Dung lượng bộ đệm của tầng
sau sẽ bằng nửa dung lượng bộ đệm của tầng trước Bộ nhân số phức W sẽ nằm trên
đường đi dữ liệu giữa hai tầng kế tiếp Việc thay đổi cơ số Radix chỉ làm thay đổicấu trúc và cách điều khiển bộ nhân W, chứ không làm thay đổi cấu trúc của mộttầng trong SDF
Trang 15CHƯƠNG 3 TỔNG QUAN VỀ PHẦN MỀM MÔ PHỎNG
FPGA có nhiều loại phần mềm hỗ trợ để tích hợp và mô phỏng như: Quartus II,ModelSim, Xilinx…
1.3 Phần mềm Quartus II
Hình 3-1: Giao diện Quartus II
Quartus II là phần mềm được phát triển bởi hãng Altera, cung cấp và hỗ trợ môitrường thiết kế các SOPC (hệ thống trên Chip khả trình)
Phần mềm còn giúp người sử dụng tích hợp và mô phỏng các thiết kế logic vớicác linh kiện khả trình PLD của Altera, bao gồm các dòng Chip như: Cyclone,APEC, MAX, Stratix…
Các công dụng của Quartus bao gồm:
Thiết kế các bản vẽ, sơ đồ khối, các ngôn ngữ lập trình như: AHDL,VHDL, VerilogHDL
Thực hiện các mô phỏng với các linh kiện khả trình người dùng thiết kế trongQuartus bằng Vector Waveform
Cho phép xuất, tạo và các file nguồn, thư viện để tạo các file chương trình
Trang 16 Kiểm tra và định vị lỗi đoạn mã (code).
Khả năng lập trình và nhận diện linh kiện
Phần mềm sự dụng bộ tích hợp NativeLink@ với các công cụ thiết kế cung cấpthông tin để kết nối Quartus với các công cụ thiết kế phần cứng EDA khác
Phân tích logic nhúng nhờ có công cụ phân tích SignalTap@ II
Ngoài ra, Quartus II còn có thể cho phép kết hợp nhiều kiểu file trong 1 dự án(Project) thiết kế phân cấp Có thể dùng bộ tạo sơ đồ khối (Quartus Block Editor) đểtạo ra sơ đồ khối mô tả thiết kế ở mức cao, rồi dùng các file thiết kế khác như:AHDL Text Design Files (.tdf), EDIF Input Files (.edf), VHDL Design Files (.vhd),Verilog HDL Design Files (.v) để tạo ra thành phần thiết kế mức thấp
1.4 Phần mềm ModelSim
Hình 3-2: Giao diện ModelSim
Cũng như Quartus II, ModelSim cũng được hãng Altera phát triển ModelSim làchương trình mô phỏng hỗ trợ cho các thiết kế ASIC hay FPGA một cách mạnh mẽ
và hiệu quả cao Công dụng của ModelSim là mô phỏng, kiểm tra và test chươngtrình một cách hiệu quả hơn chương trình Quartus II và có thể mô phỏng các kiểu
dữ liệu cao hơn
Trang 17 Hỗ trợ riêng cho các ngôn ngữ verilog, VHDL, systemC để kiểm tra 1 cách hiệu quảcác môi trường thiết kế tối tân nhất.
Hiệu suất cao, trọng tải cao phục vụ cho thông số hồi quy nhanh nhất
Thời gian gỡ lỗi nhanh chóng theo nhân quả và gỡ lỗi trong môi trường đa ngônngữ
Công cụ phân tích và quét mã nâng cao để kết thúc quá trình quét một cách nhanhchóng
Trang 18CHƯƠNG 4 KẾT QUẢ VÀ ĐÁNH GIÁ
Phần mềm Quartus II chỉ có thể mô phỏng và tổng hợp được nhị phân (có dấu vàkhông dấu), thập lục phân, và thập phân phần số nguyên (integer) Nhưng điều đó làkhông thể với số thực và số phức Nên việc có thể mô phỏng phần số thực và sốphức, ta cần dùng đến phần mềm khác có thể hỗ trợ Quartus II là phần mềmModelSim
Kết quả dưới đây là kết quả của bộ FFT 4 điểm và 8 điểm từ phương pháp cơ số
2 và kiến trúc SDF và được sử dụng ngôn ngữ lập trình VHDL cho chương trình.ModelSim được sử dụng để mô phỏng kết quả ngõ ra là các số thực được chia thành
2 phần thực và ảo từ ngõ vào là các số nguyên
1.5 Kết quả mô phỏng
Hình 4-1: FFT 4-point (nhị phân)
Trang 19Hình 4-2: FFT 8-point (nhị phân)
Hình 4-3: FFT 8-point (MATLAB)
Trang 20Hình 4-4: FFT 8-point (thập phân)
1.6 Đánh giá kết quả
Bảng dưới đây sẽ đánh giá kết quả giữa mô phỏng trên Quartus II + ModelSimvới MATLAB
Bảng 4-1: Kết quả đánh giá giữa Quartus II + ModelSim với MATLAB (4-point).
Ngõ vào (x) Quartus II + ModelSim (y) MATLAB (y)
x0 = 1 y0 = 4 y0 = 4x1 = 1 y1 = 0 y1 = 0x2 = 1 y2 = 0 y2 = 0x3 = 1 y3 = 0 y3 = 0
Kết quả ra giống với MATLAB
Trang 21Bảng 4-2: Kết quả đánh giá giữa Quartus II + ModelSim với MATLAB (8-point).
Ngõ vào (x) Quartus II + ModelSim (y) MATLAB (y)
x0 = 0 y0 = 28 y0 = 28x1 = 1 y1 = – 4 + 9.625i y1 = – 4 + 9.6563ix2 = 2 y2 = – 4 + 4i y2 = – 4 + 4ix3 = 3 y3 = – 4 + 1.625i y3 = – 4 + 1.6563ix4 = 4 y4 = – 4 y4 = – 4
x5 = 5 y5 = – 4 – 1.625i y5 = – 4 – 1.6563ix6 = 6 y6 = – 4 – 4i y6 = – 4 – 4ix7 = 7 y7 = – 4 – 9.625i y7 = – 4 – 9.6563i
Kết quả chỉ gần giống với MATLAB
Như vậy, kết quả mô phỏng của Quartus II + ModelSim chỉ hoàn toàn giống với
mô phỏng khi ngõ vào và ra là kiểu số nguyên Còn với kiểu số thực, Quartus II +ModelSim có chuỗi bit sau dấu chấm càng dài thì kết quả càng gần giống với kếtquả của MATLAB
Trang 22CHƯƠNG 5 KẾT LUẬN
1.7 Kết luận
Việc lập trình và mô phỏng xử lý số trên phần mềm Quartus II cho ra kết quảgần giống với kết quả MATLAB Ta có thể thực hiện ứng dụng xử lý số trên nềnFPGA 1 cách dễ dàng
1.8 Hướng phát triển
Từ việc thực hiện FFT 8 điểm trên nền FPGA 1 cách dễ dàng và chính xác tươngđối cao, người lập trình còn có thể nâng lên 1 bậc cao hơn như 16, 32, 64 đến 1024điểm và cao hơn nữa Ngoài ra, FFT có thể sử dụng các phương thức khác nhưRadix-4, Radix-mix… để thực hiện việc xử lý có các ưu nhược điểm khác nhau vàcũng có thể so sánh giữa các phương thức để chọn lọc
Trang 23TÀI LIỆU THAM KHẢO
[5] Richard G.Lyons “Understanding Digital Signal Processing (2nd Edition)” Chapter 4, 2004.
[6] https://cnx.org/
Trang 24y0_r, y0_i, y1_r, y1_i, y2_r, y2_i, y3_r, y3_i,
y4_r, y4_i, y5_r, y5_i, y6_r, y6_i, y7_r, y7_i: out real);
end component;
component bin_to_dec1 is
Port (outp_comp: in sfixed (8 downto -7);
outp_real: out real);
end component;
component butterfly is
Trang 25w: in complex; phase factor
g1, g2: out complex outputs
Real Input value transformed in complex value
sixteen_bits_complex_transform: real_to_complex port map (x0, x1 , x2, x3, x4,x5, x6, x7, s);
first stage of butterfly's
bf11: butterfly port map (s(0), s(4), w(0), g(0), g(4));
bf12: butterfly port map (s(2), s(6), w(2), g(2), g(6));
bf13: butterfly port map (s(1), s(5), w(1), g(1), g(5));
bf14: butterfly port map (s(3), s(7), w(3), g(3), g(7));
seconds stage of butterfly's
bf21: butterfly port map (g(0), g(2), w(0), f(0), f(2));
bf22: butterfly port map (g(1), g(3), w(2), f(1), f(3));
bf23: butterfly port map (g(4), g(6), w(0), f(4), f(6));
bf24: butterfly port map (g(5), g(7), w(2), f(5), f(7));
thirds stage of butterfly's
bf31: butterfly port map (f(0), f(1), w(0), y(0), y(4));
Trang 26bf32: butterfly port map (f(2), f(3), w(0), y(2), y(6));bf33: butterfly port map (f(4), f(5), w(0), y(1), y(5));bf34: butterfly port map (f(6), f(7), w(0), y(3), y(7)); bien doi binary - decimal
btd0r: bin_to_dec1 port map (y(0).r, y0_r);
btd0i: bin_to_dec1 port map (y(0).i, y0_i);
btd1r: bin_to_dec1 port map (y(1).r, y1_r);
btd1i: bin_to_dec1 port map (y(1).i, y1_i);
btd2r: bin_to_dec1 port map (y(2).r, y2_r);
btd2i: bin_to_dec1 port map (y(2).i, y2_i);
btd3r: bin_to_dec1 port map (y(3).r, y3_r);
btd3i: bin_to_dec1 port map (y(3).i, y3_i);
btd4r: bin_to_dec1 port map (y(4).r, y4_r);
btd4i: bin_to_dec1 port map (y(4).i, y4_i);
btd5r: bin_to_dec1 port map (y(5).r, y5_r);
btd5i: bin_to_dec1 port map (y(5).i, y5_i);
btd6r: bin_to_dec1 port map (y(6).r, y6_r);
btd6i: bin_to_dec1 port map (y(6).i, y6_i);
btd7r: bin_to_dec1 port map (y(7).r, y7_r);
btd7i: bin_to_dec1 port map (y(7).i, y7_i);
Trang 27port (
c1, c2: in complex; inputs
w: in complex; phase factor
g1, g2: out complex outputs