Bài Tập Lớn: Xử Lý Tín Hiệu Số với FPGA - ĐH Bách Khoa TP.HCM

Chuyên khảo phân tích Xử lý số tín hiệu với fpga bài tâp lớn, đánh giá các khía cạnh quan trọng, đề xuất hướng nghiên cứu tiếp theo.

Chuyên ngành

Điện - Điện Tử

Người đăng

Ẩn danh

Thể loại

báo cáo bài tập lớn

2022-2023

64
5
0

Phí lưu trữ

30 Point

Mục lục chi tiết

MỤC LỤC

1. PHẦN A – CHUNG CHO CÁC NHÓM

1.1. Yêu cầu

1.1.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)

1.2. Viết code Verilog mô tả 2 giải thuậ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 kết quả mô phỏng)

1.3. Đánh giá tài nguyên phần cứng khi thực thi trên FPGA Cyclone V 5CGXFC7F23C8

1.3.1. Giải thuật

1.3.1.1. Giải thuật 1
1.3.1.2. Giải thuật 2

1.4. Code Verilog

1.4.1. Giải thuật 1

1.4.2. Giải thuật 2

1.5. Kết quả và đánh giá

1.5.1. Kết quả mô phỏng với phần mềm Modelsim

1.5.1.1. Giải thuật 1
1.5.1.2. Giải thuật 2

1.5.2. Đánh giá tài nguyên phần cứng

1.6. Yêu cầu

1.6.1. Sử dụng phần mềm mô phỏng kiểm tra chức năng hệ thống (chụp lại kết quả mô phỏng). Đánh giá sai số giữa kết quả mô phỏng này với kết quả dùng phần mềm Matlab

1.6.2. Đánh giá tài nguyên phần cứng khi thực thi trên FPGA Cyclone V 5CGXFC7C7F23C8

1.7. Giải thuật

1.7.1. Giải thuật 1

1.7.2. Giải thuật 2

1.8. Code

1.8.1. Giải thuật 1

1.8.2. Giải thuật 2

1.9. Kết quả và đánh giá

1.9.1. Kết quả mô phỏng trên Modelsim

1.9.1.1. Giải thuật 1
1.9.1.2. Giải thuật 2

1.9.2. So sánh kết quả thực hiện bằng Matlab

1.9.2.1. Giải thuật 1
1.9.2.2. Giải thuật 2

1.9.3. Đánh giá thực thi phần cứng

1.9.3.1. Giải thuật 1
1.9.3.2. Giải thuật 2

1.10. Yêu cầu

1.10.1. Sử dụng phần mềm mô phỏng (VD: Modelsim) kiểm tra chức năng hệ thống (chụp lại kết quả mô phỏng). Đánh giá sai số kết quả mô phỏng này với kết quả dùng phần mềm Matlab. SV kiểm tra với ít nhất 10 giá trị

1.10.2. Đánh giá tài nguyên phần cứng khi thực thi trên FPGA Cyclone V 5CGXFC7C7F23C8

1.11. Giải thuật

1.12. Code

1.13. Chương trình tính bình phương

1.14. Chương trình tính căn bậc 2

1.15. Lưu ý

1.16. Chương trình chính

1.17. Kết quả và đánh giá

1.18. Kết quả mô phỏng Modelsim và Matlab

1.19. Nhận xét

1.20. Đánh giá tài nguyên phần cứng

1.21. Yêu cầu

1.21.1. Viết Code Verilog mô tả 2 cách trên. Sử dụng phần mềm mô phỏng (VD: Modelsim) kiểm tra chức năng hệ thống (chụp lại hình kết quả mô phỏng). SV kiểm tra với ít nhất 10 giá trị

1.21.2. So sánh tài nguyên phần cứng của 2 cách trên khi thực hiện trên FPGA Cyclone V 5CGXFC7C7F23C8

1.22. Giải thuật

1.22.1. Cộng nối tiếp từng bit

1.22.2. Cộng song song

1.23. Code

1.23.1. Cộng nối tiếp

1.23.2. Cộng song song

1.24. Kết quả và đánh giá

1.25. Mô phỏng với 5 trường hợp cộng nối tiếp và 5 trường hợp cộng song song

1.25.1. Cộng nối tiếp

1.25.2. Cộng song song

1.26. Đánh giá phần cứng trong 2 trường hợp

1.26.1. Cộng nối tiếp

1.26.2. Cộng song song

1.27. Yêu cầu

1.27.1. 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). SV kiểm tra với ít nhất 10 giá trị

1.27.2. Đánh giá tài nguyên phần cứng khi thực thi trên FPGA Cyclone V 5CGXFC7C7F23C8

1.28. Giải thuật

1.29. Code

1.30. Kết quả và đánh giá

1.30.1. Kết quả mô phỏng với 10 giá trị cơ số 10

1.30.2. Kết quả mô phỏng với 5 giá trị cơ số 2 (nhị phân)

2. PHẦN B – RIÊNG CỦA MỖI NHÓM

Tóm tắt

I. Tổng Quan Bài Tập Lớn FPGA Xử Lý Tín Hiệu Số Cơ Bản

Bài tập lớn về FPGA xử lý tín hiệu số là một phần quan trọng trong chương trình đào tạo kỹ sư điện tử, viễn thông. Mục tiêu chính là trang bị cho sinh viên kiến thức và kỹ năng thực tế trong việc thiết kế, mô phỏng và triển khai các hệ thống xử lý tín hiệu số trên FPGA. Nội dung thường bao gồm các thuật toán cơ bản như lọc số, biến đổi Fourier, và các ứng dụng cụ thể như xử lý âm thanh, hình ảnh, hay tín hiệu viễn thông. Sinh viên sẽ được làm quen với các công cụ thiết kế phần cứng như Vivado, Quartus Prime, và ngôn ngữ mô tả phần cứng như VHDL, Verilog. Báo cáo thường yêu cầu trình bày chi tiết giải thuật, code, kết quả mô phỏng, và đánh giá tài nguyên phần cứng. Một ví dụ điển hình là bài toán tìm số nhỏ nhất thứ nhất và thứ hai trong một mảng số, cùng với vị trí của số nhỏ nhất, và hiện thực nó trên FPGA sử dụng Verilog. Bài tập này không chỉ củng cố kiến thức lý thuyết mà còn rèn luyện kỹ năng giải quyết vấn đề, làm việc nhóm, và trình bày kết quả nghiên cứu. Việc sử dụng kit phát triển FPGA xử lý tín hiệu giúp sinh viên tiếp cận với môi trường thực tế, từ đó nâng cao khả năng sáng tạo và ứng dụng kiến thức vào thực tiễn.

1.1. Giới Thiệu Tổng Quan Về Xử Lý Tín Hiệu Số Trên FPGA

Xử lý tín hiệu số (DSP) trên FPGA là một lĩnh vực ngày càng quan trọng, kết hợp ưu điểm của cả phần mềm và phần cứng. So với bộ xử lý tín hiệu số chuyên dụng (DSP chip), FPGA mang lại sự linh hoạt cao hơn trong việc tùy chỉnh kiến trúc và thuật toán. Điều này cho phép tối ưu hóa hiệu năng, giảm độ trễ và tiết kiệm năng lượng cho các ứng dụng cụ thể. Bên cạnh đó, FPGA có khả năng xử lý song song mạnh mẽ, cho phép thực hiện các phép toán phức tạp như biến đổi Fourier nhanh (FFT) hay lọc FIR với tốc độ cao. Các công cụ thiết kế hiện đại như Vivado và Quartus Prime cung cấp các thư viện IP (Intellectual Property) được tối ưu hóa cho DSP, giúp đơn giản hóa quá trình phát triển. Các ứng dụng tiêu biểu của FPGA DSP bao gồm xử lý ảnh, xử lý âm thanh, viễn thông, và điều khiển công nghiệp. “Thực thi hệ thống trên với n = 16. Các số I0, I1,…,In-1 là các số nhị phân 4bits không dấu” thể hiện một ứng dụng cụ thể, từ đó sinh viên có thể hiểu rõ hơn về cách thức hoạt động cũng như cách thiết kế một mạch DSP trên FPGA.

1.2. Tại Sao Chọn FPGA Thay Vì Các Nền Tảng Xử Lý Khác

FPGA mang lại nhiều ưu điểm so với các nền tảng xử lý khác như CPU, GPU, hay DSP chip. CPU có tính linh hoạt cao nhưng hiệu năng xử lý song song hạn chế. GPU mạnh về xử lý song song nhưng lại kém linh hoạt trong việc tùy chỉnh kiến trúc. DSP chip được thiết kế chuyên dụng cho DSP nhưng lại có độ linh hoạt hạn chế hơn FPGA. FPGA kết hợp được ưu điểm của cả ba nền tảng: tính linh hoạt cao, khả năng xử lý song song mạnh mẽ, và khả năng tùy chỉnh kiến trúc để tối ưu hóa hiệu năng cho các ứng dụng cụ thể. Điều này đặc biệt quan trọng trong các ứng dụng đòi hỏi hiệu năng cao, độ trễ thấp, và tiết kiệm năng lượng, chẳng hạn như xử lý ảnh trên FPGA, xử lý âm thanh trên FPGA, hay các hệ thống viễn thông tốc độ cao. Ngoài ra, FPGA có thể được tái cấu hình (reconfigurable) sau khi triển khai, cho phép cập nhật và cải tiến hệ thống một cách dễ dàng.

II. Vấn Đề Thường Gặp Khi Thiết Kế FPGA Xử Lý Tín Hiệu Số

Thiết kế hệ thống xử lý tín hiệu số trên FPGA không phải là một nhiệm vụ dễ dàng. Sinh viên và kỹ sư thường gặp phải nhiều thách thức, từ việc lựa chọn thuật toán phù hợp, tối ưu hóa code Verilog/VHDL, đến việc đảm bảo hệ thống đáp ứng các yêu cầu về hiệu năng, độ trễ, và tài nguyên phần cứng. Một trong những vấn đề phổ biến là thiết kế hệ thống có độ trễ thấp, đặc biệt trong các ứng dụng thời gian thực. Việc tối ưu hóa code để giảm số lượng logic và bộ nhớ sử dụng cũng là một thách thức lớn. Ngoài ra, việc gỡ lỗi và kiểm tra tính đúng đắn của thiết kế cũng đòi hỏi kỹ năng và kinh nghiệm. “Trường hợp ngõ vào có nhiều hơn giá trị min1, thì ngõ ra index_min1 chỉ vị trí ngõ vào có chỉ số nhỏ hơn” là một ví dụ về việc xử lý các trường hợp đặc biệt cần được xem xét kỹ lưỡng trong quá trình thiết kế. Việc không xử lý đúng các trường hợp này có thể dẫn đến sai sót trong kết quả.

2.1. Thách Thức Về Hiệu Năng Và Tài Nguyên Khi Thiết Kế FPGA

Một trong những thách thức lớn nhất khi thiết kế thiết kế FPGA xử lý tín hiệu là cân bằng giữa hiệu năng và tài nguyên. Các thuật toán DSP thường đòi hỏi nhiều phép toán phức tạp, dẫn đến việc sử dụng nhiều tài nguyên phần cứng như logic, bộ nhớ, và bộ nhân. Việc tăng hiệu năng thường đi kèm với việc tăng sử dụng tài nguyên, và ngược lại. Do đó, việc tối ưu hóa thiết kế để đạt được hiệu năng mong muốn mà vẫn đảm bảo sử dụng tài nguyên hợp lý là một nhiệm vụ quan trọng. Các kỹ thuật như pipelining, parallel processing, và resource sharing có thể được sử dụng để cải thiện hiệu năng và giảm sử dụng tài nguyên. Việc lựa chọn kiến trúc phù hợp cũng đóng vai trò quan trọng. Các báo cáo cần trình bày rõ kết quả đánh giá tài nguyên phần cứng để người đọc có thể đánh giá được tính hiệu quả của giải pháp.

2.2. Các Lỗi Thường Gặp Trong Code Verilog VHDL Và Cách Khắc Phục

Viết code Verilog/VHDL đúng và hiệu quả không phải là điều dễ dàng. Các lỗi cú pháp, lỗi logic, và lỗi thời gian là những vấn đề thường gặp. Các lỗi cú pháp thường dễ phát hiện và sửa chữa bằng cách sử dụng các công cụ kiểm tra cú pháp. Tuy nhiên, các lỗi logic và lỗi thời gian thường khó phát hiện hơn và đòi hỏi kỹ năng gỡ lỗi cao. Các lỗi logic có thể dẫn đến sai sót trong kết quả, trong khi các lỗi thời gian có thể dẫn đến việc hệ thống hoạt động không ổn định hoặc không đáp ứng yêu cầu về hiệu năng. Việc sử dụng các công cụ mô phỏng và kiểm tra tính đúng đắn là rất quan trọng để phát hiện và sửa chữa các lỗi này. Ngoài ra, việc tuân thủ các quy tắc viết code tốt và sử dụng các kỹ thuật debug hiệu quả cũng giúp giảm thiểu số lượng lỗi.

III. Phương Pháp Thiết Kế Bài Tập Lớn FPGA Xử Lý Tín Hiệu Hiệu Quả

Để hoàn thành bài tập lớn FPGA xử lý tín hiệu số một cách hiệu quả, sinh viên cần có một phương pháp làm việc khoa học và bài bản. Điều này bao gồm việc xác định rõ yêu cầu bài toán, nghiên cứu các giải thuật phù hợp, thiết kế hệ thống, viết code, mô phỏng, kiểm tra, và đánh giá kết quả. Việc chia nhỏ bài toán thành các phần nhỏ hơn và giải quyết từng phần cũng giúp đơn giản hóa quá trình. Việc sử dụng các công cụ hỗ trợ thiết kế và mô phỏng cũng giúp tiết kiệm thời gian và công sức. Ngoài ra, việc tham khảo các tài liệu tham khảo, ví dụ mẫu, và kinh nghiệm của người đi trước cũng rất hữu ích. “Đề 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)” yêu cầu sinh viên phải thể hiện khả năng sáng tạo và giải quyết vấn đề, từ đó nâng cao trình độ chuyên môn.

3.1. Hướng Dẫn Lựa Chọn Giải Thuật Xử Lý Tín Hiệu Phù Hợp Cho FPGA

Việc lựa chọn giải thuật xử lý tín hiệu phù hợp cho FPGA là một bước quan trọng trong quá trình thiết kế. Các yếu tố cần xem xét bao gồm yêu cầu về hiệu năng, độ trễ, tài nguyên, và độ phức tạp của thuật toán. Một số thuật toán có thể phù hợp với FPGA hơn các thuật toán khác. Ví dụ, các thuật toán có tính song song cao thường phù hợp với FPGA hơn các thuật toán tuần tự. Việc đánh giá và so sánh các giải thuật khác nhau trước khi lựa chọn cũng là một bước quan trọng. Các tiêu chí so sánh có thể bao gồm hiệu năng, độ trễ, tài nguyên, và độ phức tạp của thuật toán. Cần cân nhắc kỹ lưỡng các yếu tố này để lựa chọn giải thuật phù hợp nhất với yêu cầu bài toán.

3.2. Cách Tối Ưu Code Verilog VHDL Cho Hiệu Năng Cao Trên FPGA

Viết code Verilog/VHDL hiệu quả là rất quan trọng để đạt được hiệu năng cao trên FPGA. Các kỹ thuật như pipelining, parallel processing, và resource sharing có thể được sử dụng để cải thiện hiệu năng. Ngoài ra, việc sử dụng các thư viện IP được tối ưu hóa cho FPGA cũng giúp tiết kiệm thời gian và công sức. Việc tránh các cấu trúc code không hiệu quả cũng là một yếu tố quan trọng. Ví dụ, việc sử dụng các vòng lặp phức tạp có thể làm chậm quá trình tổng hợp và dẫn đến việc sử dụng nhiều tài nguyên. Việc sử dụng các kỹ thuật debug hiệu quả cũng giúp phát hiện và sửa chữa các lỗi trong code.

3.3. Sử dụng Vivado Quartus Prime để mô phỏng FPGA xử lý tín hiệu

Vivado xử lý tín hiệu số (Xilinx) và Quartus Prime xử lý tín hiệu số (Intel) là hai công cụ hàng đầu trong lĩnh vực thiết kế FPGA. Cả hai đều cung cấp môi trường phát triển tích hợp (IDE) mạnh mẽ với các tính năng mô phỏng, tổng hợp, và triển khai. Sử dụng các công cụ mô phỏng tích hợp trong Vivado và Quartus Prime giúp kiểm tra chức năng của thiết kế trước khi triển khai trên phần cứng thực tế. Điều này giúp giảm thiểu rủi ro và tiết kiệm thời gian gỡ lỗi. Ngoài ra, cả hai công cụ còn hỗ trợ các kỹ thuật mô phỏng nâng cao như co-simulation với Matlab và SystemVerilog, cho phép kiểm tra hệ thống phức tạp với độ chính xác cao.

IV. Ứng Dụng Thực Tế Của FPGA Trong Xử Lý Tín Hiệu Số Hiện Nay

FPGA được sử dụng rộng rãi trong nhiều lĩnh vực ứng dụng FPGA trong xử lý tín hiệu, từ viễn thông, y tế, đến công nghiệp và quân sự. Khả năng tùy chỉnh, hiệu năng cao, và độ trễ thấp khiến FPGA trở thành một lựa chọn hấp dẫn cho các ứng dụng đòi hỏi khắt khe về hiệu năng. Trong viễn thông, FPGA được sử dụng để xử lý tín hiệu trong các hệ thống truyền dẫn tốc độ cao, các trạm gốc di động, và các thiết bị mạng. Trong y tế, FPGA được sử dụng trong các thiết bị chẩn đoán hình ảnh, các hệ thống theo dõi bệnh nhân, và các thiết bị trợ thính. Trong công nghiệp, FPGA được sử dụng trong các hệ thống điều khiển tự động, các hệ thống giám sát, và các hệ thống robot. Trong quân sự, FPGA được sử dụng trong các hệ thống radar, các hệ thống liên lạc, và các hệ thống vũ khí.

4.1. Ứng Dụng FPGA Trong Xử Lý Ảnh Và Video Chất Lượng Cao

FPGA đóng vai trò quan trọng trong các ứng dụng xử lý ảnh trên FPGA và video chất lượng cao, từ các hệ thống giám sát an ninh đến các thiết bị giải trí gia đình. Khả năng xử lý song song mạnh mẽ của FPGA cho phép thực hiện các phép toán phức tạp như lọc ảnh, nhận dạng đối tượng, và nén video với tốc độ cao. Các ứng dụng tiêu biểu bao gồm xử lý ảnh y tế, xử lý video trong các hệ thống truyền hình, và xử lý ảnh trong các hệ thống lái xe tự động. Việc sử dụng FPGA giúp cải thiện chất lượng ảnh và video, giảm độ trễ, và tiết kiệm năng lượng.

4.2. Ứng Dụng FPGA Trong Xử Lý Âm Thanh Và Nhận Dạng Tiếng Nói

FPGA cũng được sử dụng rộng rãi trong các ứng dụng xử lý âm thanh trên FPGA và nhận dạng tiếng nói. Khả năng xử lý tín hiệu số thời gian thực của FPGA cho phép thực hiện các phép toán như lọc âm thanh, giảm tiếng ồn, và nhận dạng tiếng nói với độ chính xác cao. Các ứng dụng tiêu biểu bao gồm các thiết bị trợ thính, các hệ thống nhận dạng tiếng nói, và các hệ thống âm thanh vòm. Việc sử dụng FPGA giúp cải thiện chất lượng âm thanh, giảm độ trễ, và tiết kiệm năng lượng.

V. Kết Luận và Hướng Phát Triển Bài Tập Lớn FPGA Xử Lý Số

Bài tập lớn FPGA xử lý tín hiệu số là một cơ hội tuyệt vời để sinh viên áp dụng kiến thức lý thuyết vào thực tế và rèn luyện các kỹ năng thiết kế, mô phỏng, và triển khai hệ thống. Việc hoàn thành bài tập lớn một cách thành công không chỉ giúp sinh viên củng cố kiến thức mà còn mở ra nhiều cơ hội nghề nghiệp trong lĩnh vực điện tử, viễn thông, và công nghệ thông tin. Việc liên tục cập nhật kiến thức và kỹ năng mới là rất quan trọng để đáp ứng yêu cầu ngày càng cao của thị trường lao động. Cần bám sát các xu hướng mới trong lĩnh vực DSP và FPGA để có thể phát triển các giải pháp sáng tạo và hiệu quả.

5.1. Tổng Kết Các Kết Quả Đạt Được Và Bài Học Kinh Nghiệm

Sau khi hoàn thành bài tập lớn, việc tổng kết các kết quả đạt được và rút ra các bài học kinh nghiệm là rất quan trọng. Cần đánh giá xem hệ thống đã đáp ứng các yêu cầu đặt ra hay chưa, những khó khăn gặp phải trong quá trình thiết kế và triển khai, và những giải pháp đã được áp dụng để vượt qua các khó khăn đó. Việc chia sẻ kinh nghiệm với các bạn cùng lớp và với giảng viên cũng rất hữu ích.

5.2. Hướng Nghiên Cứu Và Phát Triển Trong Tương Lai Cho FPGA

Lĩnh vực FPGA đang phát triển rất nhanh chóng, với nhiều xu hướng mới xuất hiện liên tục. Các xu hướng tiêu biểu bao gồm việc tích hợp các bộ xử lý nhúng vào FPGA, việc sử dụng các ngôn ngữ lập trình cấp cao để thiết kế FPGA, và việc phát triển các kiến trúc FPGA chuyên dụng cho các ứng dụng cụ thể. Việc theo đuổi các hướng nghiên cứu và phát triển này sẽ giúp sinh viên và kỹ sư nâng cao trình độ chuyên môn và đóng góp vào sự phát triển của lĩnh vực FPGA.

22/09/2025

Trích đoạn nội dung tài liệu

ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ ---------------o0o--------------- BÁO CÁO BÀI TẬP LỚN XỬ LÝ SỐ TÍN HIỆU VỚI FPGA GVHD: Nguyễn Lý Thiên Trường HỌC KỲ 221, NĂM HỌC 2022 - 2023 TP. HỒ CHÍ MINH, THÁNG 12 NĂM 2022 MỤC LỤC I. PHẦN A – CHUNG CHO CÁC NHÓM. Kết quả và đánh giá.

Kết quả và đánh giá. Kết quả và đánh giá. Kết quả và đánh giá. Kết quả và đánh giá.

PHẦN B – RIÊNG CỦA MỖI NHÓM. PHẦN A – CHUNG CHO CÁC NHÓM 1. Yêu cầu  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 n số không dấu ngõ vào như hình bên dưới  Lưu ý  Thực thi hệ thống trên với n = 16  Các số I0, I1,…,In-1 là các số nhị phân 4bits không dấu  Trường hợp ngõ vào có nhiều hơn 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 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 kết quả mô phỏng) 3. Đánh giá tài nguyên phần cứng khi thực thi trên FPGA Cyclone V 5CGXFC7F23C8 1. Giải thuật  Đề xuất 2 giải thuật 3  Giải thuật 1  Sơ đồ khối  Giải thích chi tiết  Nhập các giá trị ngõ vào ở phần Waveform của Quartus II  Chương trình  Khai báo các giá trị trong chương trình  Tạo 2 khối so sánh o So sánh giá trị ban đầu của 2 ngõ vào o Ứng với giá trị đầu ra của khối so sánh ban đầu ta so sánh lần lượt từng ngõ vào tiếp theo  Sau khi có được kết quả so sánh ta gán giá trị thu được vào min1 và min2  Tiếp theo, tìm giá vị trí của giá trị nhỏ nhất (dùng biến min1 để xét)  Sau khi xét xong thì gán giá trị phù hợp vào index_min1 và kết thúc chương trình 4  Giải thuật 2  Sơ đồ khối  Giải thích chi tiết  Cho 16 ngõ vào với mỗi ngõ vào là 4bits, nên ta gán 16 ngõ vào này và vào thanh ghi 64bits  Gán các giá trị đầu vào i = 0, min1 và min2 giá trị cao nhất trong số 4bits (4’b1111) là 15, index_min1 = 0 và 1 biến chạy là run = 0  Tạo vòng lặp với biến đếm là i = 0 và đếm dần về 15.

Trong vòng lặp ta có  So sánh giá trị ngõ vào tại vị trí thứ nhất với min1, nếu nhỏ hơn thì giá trị hiện tại của min1 gán vào min2. Sau đó giá trị của ngõ vào đó sẽ gán vào min1 và index_min1 sẽ cập nhật vị trí ngõ vào đó  Nếu lớn hơn thì ngõ vào đó tiếp so sánh với giá trị min2, nếu nhỏ hơn thì gán giá trị ngõ vào đó vào min2 và nếu lớn hơn thì bỏ qua  Ta dịch thanh ghi sang 4bits để tới ngõ ra tiếp theo và tăng biến đếm lên 1 đơn vị. Và thực hiện lại vòng lặp 5  Nếu biến đếm tới vị trí thứ 16 thì nghĩa là đã xét hết giá trị ngõ vào và kết thúc chương trình 1. Code Verilog  Giải thuật 1 module gt1( input [3:0] i0,i10,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14,i15,i16, output [3:0] min1,min2, output reg [3:0] index_min1); //thay i1=i10, vì i1 bị lỗi wire [3:0] v1, v2, v3, v4, v5, v6, v7, v8, v9, v11, v12, v13, v14, v15; wire [3:0] u1, u2, u3, u4, u5, u6, u7, u8, u9, u11, u12, u13, u14, u15; // So sánh giá trị ngõ vào batdau cap1(.min_bd2(v1)); sosanh cap2(.out2(v2)); sosanh cap3(.out2(v3)); sosanh cap4(.out2(v4)); sosanh cap5(.out2(v5)); sosanh cap6(.out2(v6)); sosanh cap7(.out2(v7)); sosanh cap8(.out2(v8)); sosanh cap9(.out2(v9)); sosanh cap10(.out2(v11)); sosanh cap11(.out2(v12)); sosanh cap12(.out2(v13)); sosanh cap13(.out2(v14)); sosanh cap14(.out2(v15)); sosanh cap15(.out2(min2)); always@ (*) begin if (min1 == i0) index_min1 = 4'b0000; else if (min1 == i10) 6 index_min1 = 4'b0001; else if (min1 == i2) index_min1 = 4'b0010; else if (min1 == i3) index_min1 = 4'b0011; else if (min1 == i4) index_min1 = 4'b0100; else if (min1 == i5) index_min1 = 4'b0101; else if (min1 == i6) index_min1 = 4'b0110; else if (min1 == i7) index_min1 = 4'b0111; else if (min1 == i8) index_min1 = 4'b1000; else if (min1 == i9) index_min1 = 4'b1001; else if (min1 == i11 index_min1 = 4'b1010; else if (min1 == i12) index_min1 = 4'b1011; else if (min1 == i13) index_min1 = 4'b1100; else if (min1 == i14) index_min1 = 4'b1101; else if (min1 == i15) index_min1 = 4'b1110; else if (min1 == i16) index_min1 = 4'b1111; end endmodule //Khối bắt đầu module batdau(d,e,min_bd1,min_bd2); 7 input [3:0] d, e; output reg [3:0] min_bd1, min_bd2;// min_bd1,2 là giá trị min1, min2 ban đầu khi xét 2 ngõ vào đầu tiên always@ (*) begin if (d <= e) begin min_bd1 <= d; min_bd2 <= e; end if (d > e) begin min_bd1 <= e; min_bd2 <= d; end end endmodule //Khối so sánh module sosanh(a,b,c,out1,out2); input [3:0] a,b,c; output reg [3:0] out1,out2; always@ (*) begin if (c < a) begin out2 <= a; out1 <= c; end else if (c < b) begin out1 <= a; out2 <= c; end 8 else begin out1 <= a; out2 <= b; end end endmodule 9  Giải thuật 2 //Giai thuat 2: xet lan luot tu vi tri 0 den 15 //Xet gia tri tai vi tri 0 //So sanh gia tri da cho, neu phu hop //min2=min1, min1=gia tri do, luu vi tri min1 tai index_min1 //neu khong phu hop thi xet tiep, ket qua phu hop se luu vao min2 //Sau khi xet xong vi tri do thi xet vi tri ke tiep //Sau khi xet het 15 vi tri ct se ket thuc module cau1_gt1(in,min1,min2,index_min1,clk); input clk; //n=16 => 16x4bit = 64 bit input [63:0] in; output reg [3:0] min1,min2; output reg [3:0] index_min1; //a=in reg [63:0] a; //run la bien cho ct chay reg run = 0; //Gan gia tri always @(in) begin a = in; //Gan min1 va min2 gia tri cao nhat trong 4 bit min1 = 4'b1111; min2 = 4'b1111; index_min1 = 0; run = 1; end reg [4:0] compare1,compare2; integer i = 0; //Chuong trinh chinh 10 always @(posedge clk) begin if (run) for (i=0;i<16;i=i+1) begin //So sanh gia tri compare1 = {1'b0,a[3:0]}-{1'b0,min1}; compare2 = {1'b0,a[3:0]}-{1'b0,min2}; //Tim min1 va index_min1 (Xet bit nho) if (compare1[4]) begin min2 = min1; min1 = a[3:0]; index_min1 = i; end //Tim min2 (Xet bit nho) else if (compare2[4]) min2 = a[3:0]; a = a>>4; end //Ket thuc ct run = 0; end endmodule 11 1.

Kết quả và đánh giá  Kết quả mô phỏng với phần mềm Modelsim  Giải thuật 1  Giải thuật 2 12  Đánh giá tài nguyên phần cứng 13 2. Yêu cầu  Tìm hiểu ít nhất 1 giải thuật và viết code Verilog tính gần đúng giá trị log2(x), với x là số 16bits không dấu 1. Sử dụng phần mềm mô phỏng kiểm tra chức năng hệ thống (chụp lại kết quả mô phỏng). Đánh giá sai số giữa kết quả mô phỏng này với kết quả dùng phần mềm Matlab 2.

Đánh giá tài nguyên phần cứng khi thực thi trên FPGA Cyclone V 5CGXFC7C7F23C8 2. Giải thuật  Giải thuật 1  Sơ đồ khối 14  Giải thích ý tưởng  Tạo 1 mảng chứa 16 phần tử tương ứng với 16 lũy thừa của 2  Duyệt mảng mà so sánh với x và tìm lũy thừa lớn nhất sao cho bé hơn x  Tìm được số mũ là số thứ tự của phần tử trong mảng  Giải thuật 2  Sơ đồ khối  Giải thích ý tưởng  Sử dụng phép dịch phải bit để tìm lũy thừa của 2  Số cần tìm là số nhỏ hơn và gần nhất của x 15 2. Code  Giải thuật 1 module logarit2cl(x,log2x); input [15:0] x; output reg [5:0] log2x; reg [15:0] arr [0:15]; integer i; always @* begin //tạo mảng chứa các lũy thừa của 2 arr[0] = 1; for(i=1;i<=15;i+1) arr[i]=arr[i-1]<<1; //loại bỏ những trường hợp x = 0 if(x==0) log2x = 16’bz else //so sánh x với các phần tử trong mảng lũy thừa của 2 begin for(i=0;i<=15;i=i+1) if(arr[i]<=x) log2x = i; end end endmodule 16  Giải thuật 2 module logarit2cl(x,log2x); input [15:0] x; output reg [15:0] log2x; integer x1; always @* begin x1 = x; if (x==0) log2x = 16’bz; else for (log2x = -1; x1>0; log2x = log2x+1) x1 = x1>>1; end endmodule 17 2. Kết quả và đánh giá  Kết quả mô phỏng trên Modelsim  Giải thuật 1  Giải thuật 2  So sánh kết quả thực hiện bằng Matlab  Giải thuật 1 Log2(x) STT x Sai số (%) Modelsim Matlab 1 58679 15 15.69 Sai số trung bình (%) 2.91 18  Giải thuật 2 Log2(x) STT x Sai số (%) Modelsim Matlab 1 58679 15 15.69 Sai số trung bình (%) 2.91  Nhận xét  Do đoạn Code trên Verilog đã được làm tròn thành số tự nhiên nên có sai số so với Matlab  Cả 2 giải thuật đều cho kết quả như nhau  Đánh giá thực thi phần cứng  Giải thuật 1 19  Giải thuật 2 20 3.

Yêu cầu  Trình bày ít nhất 1 giải thuật và viết code Verilog tính giá trị của biểu thức √𝑥 2 + 𝑦 2 với x và y là các số 16bits có dấu bù 2 1. Sử dụng phần mềm mô phỏng (VD: Modelsim) kiểm tra chức năng hệ thống (chụp lại kết quả mô phỏng). Đánh giá sai số kết quả mô phỏng này với kết quả dùng phần mềm Matlab. SV kiểm tra với ít nhất 10 giá trị 2.

Đánh giá tài nguyên phần cứng khi thực thi trên FPGA Cyclone V 5CGXFC7C7F23C8 3. Giải thuật  Sơ đồ khối  Giải thích giải thuật Chương trình chính gồm 2 giải thuật con thực hiện những chức năng  Chương trình đầu tiên nhận số có dấu bù 2 16bits, đưa vào bộ bình phương  Kết quả là một số 32bits  Ngõ ra của bộ bình phương lại tiếp tục được đi qua bộ cộng (sử dụng flip – flop để lưu các số hạng đầu tiên và chờ số hạng thứ 2)  Chương trình thứ 2 nhận ngõ vào là kết quả của bộ cộng (𝑥 2 + 𝑦 2 )  Tổng bình phương này sẽ được đưa qua 1 bộ lấy căn bậc 2  Ngõ ra của bộ này là √𝑥 2 + 𝑦 2 có kích thước 20bits  Chương trình chính của Verilog sẽ bao gồm các input và output như sau o [15:0] X_in: biến đầu vào, có dấu bù 2 16bits o dtsig_in: tín hiệu để báo hiệu cho phép đọc X_in o conf: tín hiệu dùng cho flip – flop của bộ bình phương (bộ cộng) 21 o clk: xung clock cho chương trình o reset: tín hiệu reset o done: tín hiệu thông báo cập nhật kết quả o [19:0] X_out: biến ngõ ra, lưu kết quả của phép tính √𝑥 2 + 𝑦 2 gồm 20bits không dấu 22 3.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ