Xử lý tín hiệu số với FPGA GVHD TH S Trịnh Vũ Đăng Nguyên 2 TP Hồ Chí Minh, Tháng 3/1/2022 ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA ĐIỆN – ĐIỆN TỬ BÁO CÁO XỬ LÝ TÍN HIỆ[.]
GVHD: TH.S Trịnh Vũ Đăng Nguyên Xử lý tín hiệu số với FPGA ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA ĐIỆN – ĐIỆN TỬ - - BÁO CÁO XỬ LÝ TÍN HIỆU SỐ VỚI FPGA BÀI TẬP LỚN Giáo viên hướng dẫn : Th.s Trịnh Vũ Đăng Nguyên Nhóm : Thành viên: Nguyễn Văn Khoa_1913818 TP Hồ Chí Minh, Tháng 3/1/2022 h GVHD: TH.S Trịnh Vũ Đăng Nguyên Xử lý tín hiệu số với FPGA Danh sách thành viên STT Họ & tên MSSV Email Nguyễn Văn Khoa 1913818 khoa.nguyenvankhoa12@hcmut.edu.vn Cao Văn Lên 1910301 len.cao4901@hcmut.edu.vn Phan Đình Đạt 1811890 dat.phandaniel@hcmut.edu.vn h GVHD: TH.S Trịnh Vũ Đăng Nguyên Xử lý tín hiệu số với FPGA MỤC LỤC A Phần chung 1 Bài .2 B Phần riêng 14 Bài 14 Bài 15 h GVHD: TH.S Trịnh Vũ Đăng Nguyên Xử lý tín hiệu số với FPGA A Phần chung Bài Đề bài: Cho số M N, số bit không dấu Thực phép toán cộng: M + N cách: Cách 1: cộng nối tiếp bit Cách 2: cộng song song (nhiều bit lúc) Viết code SystemVerilog mô tả cách Sử dụng phần mềm mô kiểm tra chức hệ thống (chụp lại hình kết mơ phỏng) So sánh tài nguyên phần cứng cách thực thi FPGA Cyclone II EP2C35F672C6 1.1 Lý thuyết Các mạch cộng xây dựng dựa cộng toàn phần (full-adder) Mạch cộng full-adder: m-i, n_i hai đầu vào bit cin_i bit nhớ đầu vào Tổng s_o tổng m_i n_i, bit cout_o tạo cộng cin, m_i, n_i Bảng thật để triển khai full_adder là: m_i n_i cin_i s_o cout_o 0 0 0 1 0 1 0 1 1 0 Từ bảng chân trị, ta kết luận biểu thức ngõ với ngõ vào: s_o = m_i n_i cin_i; cout_o = m_i * n_i + n_i * cin_i + m_i * cin_i; h GVHD: TH.S Trịnh Vũ Đăng Nguyên Xử lý tín hiệu số với FPGA 1 1 0 1 1 1 1.2 Giải thuật - Cộng nối tiếp bit Bộ cộng số nhị phân dạng nối tiếp thực phép cộng bit Sử dụng ghi dịch chuyển để lưu số nhị phân thêm vào Sử dụng full_adder để thêm cặp bit thời điểm với bit nhớ Bộ full_adder mạch tổ hợp lấy đầu vào cho đầu tổng bit nhớ Bit nhớ ngõ từ full_adder dùng cho Flip-Flop Đầu flipflop D sử dụng làm đầu vào bit nhớ cho cặp bit Đề yêu cầu ngõ vào số bit khơng dấu ngõ số bit không dấu, bit MSB bit nhớ cuối phép cộng Sơ đồ khối: h GVHD: TH.S Trịnh Vũ Đăng Nguyên Xử lý tín hiệu số với FPGA Mô tả cách thực hiện: B1: ghi dịch chuyển M N sử dụng để lưu trữ số thêm vào B2: Bộ full_adder cộng cặp bit lúc với bit nhớ B3: Nội dung ghi dịch chuyển từ trái sang phải đầu bit LSB đưa vào cộng với đầu bit nhớ FF có xung clock B4: Đầu tổng full_adder đưa vào bit MSB B5: Nội dung ghi tổng dịch chuyển sang phải có xung clock B6: Sau xung clock, việc cộng nội dung ghi M N lưu vào ghi tổng - Cộng song song Bộ cộng song song mạch tổ hợp sử dụng để cộng hai số nhị phân Nbit Sử dụng mô-đun full-adder để cộng hai số nhị phân bit với bit nhớ ban đầu Sử dụng mô-đun full-adder lần để triển khai cộng song song 8-bit 1.3 Thực Cộng song song Code giải thuật h GVHD: TH.S Trịnh Vũ Đăng Nguyên Xử lý tín hiệu số với FPGA module full_adder ( input logic m_i, input logic n_i, input logic cin_i, output logic s_o, output logic cout_o ); assign s_o = m_i ^ n_i ^ cin_i; assign cout_o = (m_i & n_i) | (cin_i & (m_i ^ n_i)); endmodule : full_adder module adder_parallel_8bit ( input logic [7:0] m_i, input logic [7:0] n_i, input logic cin_i, output logic [7:0] s_o, output logic cout_o ); logic [7:0] c; h GVHD: TH.S Trịnh Vũ Đăng Nguyên Xử lý tín hiệu số với FPGA full_adder fa0 (m_i[0], n_i[0], cin_i, s_o[0], c[1]); full_adder fa1 (m_i[1], n_i[1], c[1], s_o[1], c[2]); full_adder fa2 (m_i[2], n_i[2], c[2], s_o[2], c[3]); full_adder fa3 (m_i[3], n_i[3], c[3], s_o[3], c[4]); full_adder fa4 (m_i[4], n_i[4], c[4], s_o[4], c[5]); full_adder fa5 (m_i[5], n_i[5], c[5], s_o[5], c[6]); full_adder fa6 (m_i[6], n_i[6], c[6], s_o[6], c[7]); full_adder fa7 (m_i[7], n_i[7], c[7], s_o[7], cout_o); endmodule : adder_parallel_8bit Code testbench module testParallel; logic [7:0] m_i, n_i; logic [7:0] s_o; logic cout; adder_parallel_8bit parallel (m_i, n_i, 1'b0, s_o, cout_o); initial begin m_i = 8'd20; n_i = 8'd5; #100 m_i = 8'd12; n_i = 8'd8; #100 h GVHD: TH.S Trịnh Vũ Đăng Nguyên Xử lý tín hiệu số với FPGA m_i = 8'd254; n_i = 8'd166; #100 m_i = 8'd2; n_i = 8'd201; end endmodule : testParallel - Kết mơ dạng sóng cộng song song - Đánh giá phần cứng Quatus Cộng nối tiếp: Code giải thuật module dff ( input logic d_i, input logic clk_i, output logic q_o ); initial begin q_o = 1'b0; end endmodule : dff h GVHD: TH.S Trịnh Vũ Đăng Nguyên Xử lý tín hiệu số với FPGA always @(posedge clk_i) begin : proc_dff q_o = d_i; end endmodule : dff //thanh ghi dịch bit lưu giá trị M N module reg_shift ( input logic [7:0] data_i, input logic clk_i, output logic [7:0] y_o ); initial begin assign y_o = data_i; end always @(posedge clk_i) begin : proc_reg_shift assign y_o = y_o >> 1; end endmodule : reg_shift 10 h GVHD: TH.S Trịnh Vũ Đăng Nguyên Xử lý tín hiệu số với FPGA //thanh ghi lưu bit ngõ module reg_shift_s ( input logic s_i, input logic clk_i, output logic [7:0] sum_o ); always @(posedge clk_i) begin : proc_reg_shift_s assign sum_o = {s_i, sum_o[6:1]}; end module adder_serial_8bit ( endmodule : reg_shift_s input logic [7:0] m_i, n_i, input logic clk_i, output logic [7:0] sum_o ); logic [7:0] m, n; logic cin; logic cout; logic s; 11 h GVHD: TH.S Trịnh Vũ Đăng Nguyên Xử lý tín hiệu số với FPGA full_adder fa (m[0], n[0], cin, s, cout); //1 bit ful adder dff dff (cout, clk, cin); //d flipflop to store the cout reg_shift_s sum (s, clk_i, sum_o); //serial sum(s) reg_shift dut_m (m_i, clk, m); //register shift bit m reg_shift dut_n (n_i, clk, n); //register shift bit n endmodule : adder_serial_8bit - Code testbench module testSerial; logic [7:0] m_i, n_i; logic [7:0] s_o; logic cout; adder_serial_8bit serial (m_i, n_i, clk_i, s_o); initial begin m_i = 8'd60; n_i = 8'd34; #100 m_i = 8'd19; n_i = 8'd45; #100 m_i = 8'd24; n_i = 8'd166; 12 h GVHD: TH.S Trịnh Vũ Đăng Nguyên Xử lý tín hiệu số với FPGA #100 m_i = 8'd2; n_i = 8'd16; end endmodule : testSerial - Kết mơ dạng sóng - Đánh giá phần cứng 13 h GVHD: TH.S Trịnh Vũ Đăng Nguyên Xử lý tín hiệu số với FPGA B Phần riêng (Nhóm 2) Bài 1: Cho sơ đồ DFG mạch lọc số hình bên Chỉ (các) đường tới hạn thời gian tính tốn tới hạn Tcritical? Tìm sơ đồ DFG sau tái định mạch lọc trên, biết giá trị tái định nút sau: 𝑟(1) = 0, 𝑟(2) = 0, 𝑟(3) = -1, 𝑟(4) = -2, 𝑟(5) = -1, 𝑟(6) = 0, 𝑟(7) = 𝑟(8) = Chỉ (các) đường tới hạn thời gian tính toán tới hạn T’critical? 14 h GVHD: TH.S Trịnh Vũ Đăng Nguyên Xử lý tín hiệu số với FPGA Bài 2: Cho sơ đồ DFG mạch lọc IIR bậc hình bên Giả sử thời gian tính toán nhân TM = 2u.t., thời gian tính tốn cộng TA = 1u.t 15 h GVHD: TH.S Trịnh Vũ Đăng Nguyên Xử lý tín hiệu số với FPGA Tái định hệ thống với số ghi nhỏ đạt chu kỳ xung clock nhỏ 4u.t 16 h GVHD: TH.S Trịnh Vũ Đăng Nguyên Xử lý tín hiệu số với FPGA - Kết luận: Sau retiming chu kì xung clock đạt giá trị nhỏ 4ut 17 h