37 3 2MB
ĐẠ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 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
TP. Hồ Chí Minh, Tháng 05/2022
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..................................................................................................................15
1.2.2
Cơ sở lý thuyết....................................................................................................15
1.2.3
Giải thuật tính toán..............................................................................................17
1.2.4
Code mô phỏng...................................................................................................18
1.2.5
Kết quả mô phỏng...............................................................................................20
1.2.6
Đánh giá tài nguyên phần cứng khi thực thi trên FPGA Cyclone V
5CGXFC7C7F23C8..........................................................................................................22 1.3
Bài 3...........................................................................................................................23
1.3.1
Đề bài..................................................................................................................23
1.3.2
Giải thuật tính căn tính toán từng chữ số (Digit-by-digit calculation)................23
1.3.3
Code thực hiện và kết quả mô phỏng..................................................................25
1.3.4
Kết quả đánh giá tài nguyên phần cứng khi thực thi trên FPGA CycloneV
5CGXFC7C7F23C8..........................................................................................................29 1.4
Bài 4...........................................................................................................................30
1.4.1
Đề bài..................................................................................................................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 hiện và kết quả mô phỏng..................................................................32
1.4.5
Kết quả đánh giá tài nguyên phần cứng khi thực thi trên FPGA Cyclone II
EP2C35F672C6....................................................................................................43 1.5
Bài 5...........................................................................................................................44
Đại học Bách khoa TPHCM
Trang 1
1.5.1
Đề bài..................................................................................................................44
1.5.2
Cơ sở lý thuyết....................................................................................................44
1.5.3
Code thực hiện và kết quả mô phỏng..................................................................46
1.5.4
Kết quả đánh giá tài nguyên phần cứng khi thực thi trên FPGA Cyclone II
EP2C35F672C6..............................................................................................................44 2
Phần riêng cho từng nhóm..............................................................................................50
Đại học Bách khoa TPHCM
Trang 2
NỘI DUNG 1
Phần chung cho tất cả các nhóm
1.1 Bài 1 1.1.1
Đề bài
Cho sơ đồ khối của hệ thống tìm số nhỏ nhất thứ nhất (min1), số nhỏ nhất thứ 2 (min2) và vị trí của số nhỏ nhất thứ nhất (index_min1) trong 𝑛 số không dấu ngõ vào như hình bên dưới.
Hình 1.1. Bộ min_finder
Lưu ý:
Thực thi hệ thống trên với 𝑛 = 10
Các ngõ vào I0, I1,…, In-1 là các số nhị phân 4 bit không dấu.
Trường hợp ngõ vào có nhiều hơn 2 giá trị min1, thì ngõ ra index_min1 chỉ vị trí ngõ vào có chỉ số nhỏ hơn.
1. Đề xuất 2 giải thuật thực thi hệ thống trên (sơ đồ khối, giải thích chi tiết). 2. Viết code Verilog mô tả 2 giải thuật đã đề xuất ở trên. Sử dụng phần mềm mô phỏng kiểm tra chức năng hệ thống (chụp lại hình kết quả mô phỏng). 3. Đánh giá tài nguyên phần cứng khi thực thi 2 giải thuật đề xuất trên Cyclone V 5CGXFC7C7F23C8 . 1.1.1 Giải thuật thứ nhất
Đại học Bách khoa TPHCM
Trang 3
Hình 1.2. Sơ đồ giải thuật thứ nhất bộ min_finder
Đầu tiên, ta ghép 2 phần gồm giá trị của port và số thứ tự của port đó vào để thực hiện so sánh, gọi là IN[i]. Khi so sánh, nếu phần giá trị của 2 port bằng nhau, ta sẽ so sánh số thứ tự của port đó. Tiếp theo, ta lưu min_1 và index_min1 tương ứng với giá trị của port 0 và số thứ tự của nó: 0 và min_2 là giá trị của port 1. Ta lần lượt so sánh cặp min_1, index_min1 và giá trị min_2 với giá trị tương ứng (có hoặc không có số thứ tự) của các port từ 1 đến 9. Khi đó sẽ có 2 trường hợp xảy ra: Thứ nhất, cặp min_1, index_min1 lớn hơn IN[i]. Khi đó, ta thay min_1, index_min1 bởi các giá trị tương ứng của port thứ i và thay min_2 bởi min_1. Thứ hai, cặp min_1, index_min1 bé hơn IN[i]. Ta sẽ tiếp tục so sánh giá trị của port thứ i với min_2. Nếu min_2 lớn hơn giá trị của port thứ i thì ta cập nhật giá trị đó cho min_2 và ngược lại thì ta giữ nguyên min_2.
Code thực hiện:
Đại học Bách khoa TPHCM
Trang 4
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 5
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