FPGA Baitaplon v10 [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

ĐẠ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