TP Hồ Chí Minh, Tháng 052022 ĐẠ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 Giáo viên hướng dẫn Trịnh Vũ Đăng Nguyên Nhóm thực hiện 2 Danh sách thành viên Võ Quốc Hưng 1913656 Lê Bá Hiệp 1910185 Châu Trần Hồng Hà 1910146 Nguyễn Đặng Hoàng Quân 1914828 BÀI TẬP LỚN MỤC LỤC NỘI DUNG 3 1 Phần chung cho tất cả các nhóm 3 1 1 Bài 1 3 1 1 1 Đề bài 3 1 1 2 Giải thuật thứ nhất 3 1 1 3 Giải thuật thứ hai 9 1 2 Bài 2 15 1 2 1 Đề b.
ĐẠ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 : Trịnh Vũ Đăng Nguyên Nhóm thực : Danh sách thành viên : Võ Quốc Hưng 1913656 Lê Bá Hiệp 1910185 Châu Trần Hồng Hà 1910146 Nguyễn Đặng Hoàng Quân 1914828 TP Hồ Chí Minh, Tháng 05/2022 MỤC LỤC NỘI DUNG Phần chung cho tất nhóm 1.1 Bài 1.1.1 Đề 1.1.2 Giải thuật thứ 1.1.3 Giải thuật thứ hai 1.2 Bài 15 1.2.1 Đề 15 1.2.2 Cơ sở lý thuyết 15 1.2.3 Giải thuật tính tốn 17 1.2.4 Code mô 18 1.2.5 Kết mô .20 1.2.6 Đánh giá tài nguyên phần cứng thực thi FPGA Cyclone V 5CGXFC7C7F23C8 22 1.3 Bài 23 1.3.1 Đề 23 1.3.2 Giải thuật tính tính tốn chữ số (Digit-by-digit calculation) 23 1.3.3 Code thực kết mô 25 1.3.4 Kết đánh giá tài nguyên phần cứng thực thi FPGA CycloneV 5CGXFC7C7F23C8 29 1.4 Bài 30 1.4.1 Đề 30 1.4.2 Cơ sở lý thuyết 30 1.4.3 Chi tiết thiết kế 31 1.4.4 Code thực kết mô 32 1.4.5 Kết đánh giá tài nguyên phần cứng thực thi FPGA Cyclone II EP2C35F672C6 43 1.5 Bài 44 Đại học Bách khoa TPHCM Trang 1.5.1 Đề 44 1.5.2 Cơ sở lý thuyết 44 1.5.3 Code thực kết mô 46 1.5.4 Kết đánh giá tài nguyên phần cứng thực thi FPGA Cyclone II EP2C35F672C6 44 Phần riêng cho nhóm 50 Đại học Bách khoa TPHCM Trang NỘI DUNG Phần chung cho tất nhóm 1.1 Bài 1.1.1 Đề Cho sơ đồ khối hệ thống tìm số nhỏ thứ (min1), số nhỏ thứ (min2) vị trí số nhỏ thứ (index_min1) 𝑛 số không dấu ngõ vào hình bên Hình 1.1 Bộ min_finder Lưu ý: Thực thi hệ thống với 𝑛 = 10 Các ngõ vào I0, I1,…, In-1 số nhị phân bit không dấu Trường hợp ngõ vào có nhiều giá trị min1, ngõ index_min1 vị trí ngõ vào có số nhỏ Đề xuất giải thuật thực thi hệ thống (sơ đồ khối, giải thích chi tiết) Viết code Verilog mô tả giải thuật đề xuất 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) Đánh giá tài ngun phần cứng thực thi giải thuật đề xuất Cyclone V 5CGXFC7C7F23C8 1.1.1 Giải thuật thứ Đại học Bách khoa TPHCM Trang Hình 1.2 Sơ đồ giải thuật thứ min_finder Đầu tiên, ta ghép phần gồm giá trị port số thứ tự port vào để thực so sánh, gọi IN[i] Khi so sánh, phần giá trị port nhau, ta so sánh số thứ tự port Tiếp theo, ta lưu min_1 index_min1 tương ứng với giá trị port số thứ tự nó: min_2 giá trị port Ta so sánh cặp min_1, index_min1 giá trị min_2 với giá trị tương ứng (có khơng có số thứ tự) port từ đến Khi có trường hợp xảy ra: Thứ nhất, cặp min_1, index_min1 lớn IN[i] Khi đó, ta thay min_1, index_min1 giá trị tương ứng port thứ i thay min_2 min_1 Thứ hai, cặp min_1, index_min1 bé IN[i] Ta tiếp tục so sánh giá trị port thứ i với min_2 Nếu min_2 lớn giá trị port thứ i ta cập nhật giá trị cho min_2 ngược lại ta giữ nguyên min_2 Code thực hiện: Đại học Bách khoa TPHCM Trang module min_finder(rst,clk,in0,in1,in2,in3,in4,in5,in6,in7,in8,in9,min1,min2,index_ min1,nflag); localparam n = 10; input rst,clk; input[3:0] in0,in1,in2,in3,in4,in5,in6,in7,in8,in9; output reg[3:0] min1,min2; output reg[3:0] index_min1; output reg nflag; reg[7:0] reg_in0,reg_in1,reg_in2,reg_in3,reg_in4,reg_in5,reg_in6,reg_in7,reg_in8,reg _in9,temp; reg[7:0] reg_min1; reg[3:0] reg_min2; wire cp1,cp2,flag_0; reg[3:0] count; mf_compare CP1 (reg_min1,reg_in1,cp1); cp CP2 (reg_min2,reg_in1[3:0],,cp2); assign flag_0 = |(count); always @(posedge clk) begin if(rst||(~flag_0)) begin reg_in0 = {4'b0000,in0}; reg_in1 = {4'b0001,in1}; reg_in2 = {4'b0010,in2}; reg_in3 = {4'b0011,in3}; reg_in4 = {4'b0100,in4}; reg_in5 = {4'b0101,in5}; reg_in6 = {4'b0110,in6}; reg_in7 = {4'b0111,in7}; reg_in8 = {4'b1000,in8}; reg_in9 = {4'b1001,in9}; end else begin temp = reg_in0; reg_in0 = reg_in1; reg_in1 = reg_in2; reg_in2 = reg_in3; reg_in3 = reg_in4; reg_in4 = reg_in5; reg_in5 = reg_in6; reg_in6 = reg_in7; reg_in7 = reg_in8; reg_in8 = reg_in9; reg_in9 = temp; end end always @(posedge clk) begin if(rst) begin count = 4'b1001; nflag = 1'b1; end else if(flag_0) count = count - 1; else begin {index_min1,min1} = reg_min1; min2 = reg_min2; nflag = 1'b0; end end always @(negedge clk) begin Đại học Bách khoa TPHCM Trang if (rst) begin reg_min1 = {4'b0000,in0}; reg_min2 = in1; end else if(cp1&flag_0) begin reg_min2 = reg_min1[3:0]; reg_min1 = reg_in1; end else if(cp2&flag_0) reg_min2 = reg_in1[3:0]; end endmodule module mf_compare(in0,in1,out); input[7:0] in0,in1; output reg out; wire[1:0] eq, grt; cp COMP0 (in0[3:0],in1[3:0],eq[0],grt[0]); cp COMP1 (in0[7:4],in1[7:4],eq[1],grt[1]); always @* begin if(eq[0]) out