CÁC NGuồn CODE DOWN TẠI ĐÂY
I. Sử dụng Solutions để thiết kế tối ưu hóa.
- Trong bài viết này chúng ta dùng lại lab1 và tối ưu hóa thiết kế của project lab1.
1. Tạo một dự án mới
- Bước 1. Mở Vivado HLS Command Prompt.
-- Trên Windows, đi tới Start > All Programs > Xilinx Design Tools > Vivado 2014.1 >Vivado HLS > Vivado HLS 2014.1 Command Prompt
- Bước 2. Thay đổi thư mục thành Lab 3: C: \Vivado_HLS_Tutorial\Introduction\ lab3
- Bước 3. Trong cửa sổ dấu nhắc lệnh, gõ: vivado_hls -f run_hls.tcl . Để thiết lập dự án.
- Bước 4. Trong cửa sổ lệnh, gõ vivado_hls –p fir_prj để mở dự án trong Vivado HLS GUI. Vivado HLS mở ra, như thể hiện trong hình 21, và sự tổng hợp cho solution1 đã hoàn thành.
- Như đã giới thiệu ở trên, mục tiêu thiết kế cho thiết kế này là:
• Tạo một phiên bản của thiết kế với thông lượng cao nhất.
• Thiết kế có thể xử lý dữ liệu được cung cấp với tín hiệu đầu vào hợp lệ.
• Tạo các dữ liệu đầu ra kèm theo một tín hiệu hợp lệ.
• Các hệ số bộ lọc được lưu trữ bên ngoài thiết kế FIR, trong bộ nhớ RAM có cổng đơn.
2. Tối ưu hóa các giao tiếp I/O
- Vì các đặc điểm kỹ thuật thiết kế bao gồm các giao thức I/O, để tối ưu hóa đầu tiên bạn tạo ra chính xác các giao thức I/O và cổng. Các loại giao I/O thức bạn chọn có thể ảnh hưởng đến tối ưu hóa thiết kế. Nếu có một yêu cầu giao thức I/O, bạn nên thiết lập các giao thức I/O càng sớm càng tốt trong chu trình thiết kế.
- Chúng ta đã có hướng dẫn sơ về các giao thức I/O cho thiết kế này trong lab1 (hình 14, bài trước), và bạn có thể xem lại các báo cáo tổng hợp bằng cách đi đến thư mục báo cáo bên trong thư mục solution1\syn. Các yêu cầu I/O là:
• Cổng C phải là một cổng đơn truy cập bộ nhớ RAM.
• Cổng X phải là một tín hiệu đầu vào hợp lệ.
• Cổng Y phải là một tín hiệu đầu ra hợp lệ.
- Cổng C là một truy cập single-port RAM. Tuy nhiên, nếu bạn không xác định rõ kiểu dữ liệu truy cập bộ nhớ RAM, High-Level Synthesis có thể sử dụng một giao tiếp dual-port. HLS sẽ tự tạo giao tiếp dual-port và thiết kế sẽ có thông lượng cao hơn.
- Cổng đầu vào x mặc định một cổng dữ liệu 32-bit đơn giản. Bạn có thể tạo một cổng có dữ liệu hợp lý bằng cách xác định giao thức I/O ap_vld.
- Đầu ra Y được tạo ra và có giá trị hợp lý khi tổng hợp. Đây là mặc định cho các đối số con trỏ. Bạn không cần phải chỉ định một giao thức cổng cho cổng này.
-- Tạo ra một Solution mới, Solution2.
- Bước 1. Nhấp vào nút New Solution trên thanh công cụ để tạo ra một Solution mới.
- Bước 2. Không thay đổi bất kỳ cài đặt clock.
- Bước 3. Nhấn Finish.
-- Điều này tạo ra Solution2 và thiết lập nó như là Solution mặc định.
-- Để tối ưu hóa cần xác định các giao tiếp I/O mong muốn cho Solution, thực hiện các bước sau đây.
- Bước 4. Trong cửa sổ Explorer, mở mục Source (như thể hiện trong hình 22).
- Bước 5. Kích đúp vào fir.c để mở tập tin trong Information pane.
- Bước 6. Chọn tab Directives trong Auxiliary pane và chọn hàm fir ở mức top-level và nhảy đến đầu hàm fir trong mã nguồn (hình 22).
-- Tab Directives, hiển thị trên bên phải của Hình 22, liệt kê tất cả các đối tượng trong thiết kế có thể tối ưu hóa. Trong tab Directives , bạn có thể thêm các chỉ thị tối ưu hóa cho các thiết kế. Áp dụng các chỉ thị tối ưu hóa cho các thiết kế.
- Bước 7. Trong tab Directives , chọn cổng C (chấm màu xanh lá cây).
- Bước 8. Nhấn chuột phải và chọn Insert Directives.
- Bước 9. Thực hiện giao tiếp RAM single-port bằng cách thực hiện như sau:
a. Chọn RESOURCE từ menu Directive drop-down.
b. Nhấp vào hộp core.
c. Chọn RAM_1P_BRAM, như thể hiện trong hình 23.
- Các bước trên chỉ định mảng C thực hiện bằng cách sử dụng khối bộ nhớ RAM single-port. Một thiết lập cổng dữ liệu sẽ tự động được tạo ra để truy cập vào một khối RAM single-port.
- Bước 10. Trong phần Destination của Directives Editor, chọn Source File.
- Bước 11. Nhấp OK.
- Bước 12. Tiếp theo, chỉ định cổng x là tín hiệu/cổng.
a. Trong tab Directives, chọn cổng đầu vào x (dấu chấm màu xanh lá cây).
b. Nhấn chuột phải và chọn Insert Directives.
c. Chọn Interface từ Directive Editor.
d. Chọn Source File từ phần Destination của hộp thoại.
e. Chọn ap_vld làm chế độ.
f. Nhấn OK để áp dụng chỉ thị.
- Bước 13. Cuối cùng, chỉ định cổng y là tín hiệu/cổng.
a. Trong tab Directives, chọn cổng đầu vào y (chấm màu xanh lá cây).
b. Nhấn chuột phải và chọn Insert Directives.
c. Chọn Source File từ phần Destination của hộp thoại.
d. Chọn Interface từ Directive Editor.
e. Chọn ap_vld.
f. Click OK.
-- Khi hoàn thành, kiểm tra rằng mã nguồn và các tab Chỉ thị được thể hiện trong hình 24. Nhấp chuột phải vào bất kỳ chỉ thị không chính xác để sửa đổi nó.
- Bước 14. Nhấp vào nút Run C Synthesis trên thanh công để tổng hợp các thiết kế.
- Bước 15. Khi được nhắc, bấm Yes để lưu nội dung của các tập tin mã nguồn C. Khi tổng hợp xong, các file báo cáo sẽ tự động mở.
- Bước 16. Nhấp vào tab Outline để xem kết quả giao tiếp hoặc chỉ đơn giản là di chuyển xuống phía dưới cùng của file báo cáo. Hình 25 cho thấy các cổng hiện tại có giao thức I/O đúng.
I. Sử dụng Solutions để thiết kế tối ưu hóa.
- Trong bài viết này chúng ta dùng lại lab1 và tối ưu hóa thiết kế của project lab1.
1. Tạo một dự án mới
- Bước 1. Mở Vivado HLS Command Prompt.
-- Trên Windows, đi tới Start > All Programs > Xilinx Design Tools > Vivado 2014.1 >Vivado HLS > Vivado HLS 2014.1 Command Prompt
- Bước 2. Thay đổi thư mục thành Lab 3: C: \Vivado_HLS_Tutorial\Introduction\ lab3
- Bước 3. Trong cửa sổ dấu nhắc lệnh, gõ: vivado_hls -f run_hls.tcl . Để thiết lập dự án.
- Bước 4. Trong cửa sổ lệnh, gõ vivado_hls –p fir_prj để mở dự án trong Vivado HLS GUI. Vivado HLS mở ra, như thể hiện trong hình 21, và sự tổng hợp cho solution1 đã hoàn thành.
- Như đã giới thiệu ở trên, mục tiêu thiết kế cho thiết kế này là:
• Tạo một phiên bản của thiết kế với thông lượng cao nhất.
• Thiết kế có thể xử lý dữ liệu được cung cấp với tín hiệu đầu vào hợp lệ.
• Tạo các dữ liệu đầu ra kèm theo một tín hiệu hợp lệ.
• Các hệ số bộ lọc được lưu trữ bên ngoài thiết kế FIR, trong bộ nhớ RAM có cổng đơn.
2. Tối ưu hóa các giao tiếp I/O
- Vì các đặc điểm kỹ thuật thiết kế bao gồm các giao thức I/O, để tối ưu hóa đầu tiên bạn tạo ra chính xác các giao thức I/O và cổng. Các loại giao I/O thức bạn chọn có thể ảnh hưởng đến tối ưu hóa thiết kế. Nếu có một yêu cầu giao thức I/O, bạn nên thiết lập các giao thức I/O càng sớm càng tốt trong chu trình thiết kế.
- Chúng ta đã có hướng dẫn sơ về các giao thức I/O cho thiết kế này trong lab1 (hình 14, bài trước), và bạn có thể xem lại các báo cáo tổng hợp bằng cách đi đến thư mục báo cáo bên trong thư mục solution1\syn. Các yêu cầu I/O là:
• Cổng C phải là một cổng đơn truy cập bộ nhớ RAM.
• Cổng X phải là một tín hiệu đầu vào hợp lệ.
• Cổng Y phải là một tín hiệu đầu ra hợp lệ.
- Cổng C là một truy cập single-port RAM. Tuy nhiên, nếu bạn không xác định rõ kiểu dữ liệu truy cập bộ nhớ RAM, High-Level Synthesis có thể sử dụng một giao tiếp dual-port. HLS sẽ tự tạo giao tiếp dual-port và thiết kế sẽ có thông lượng cao hơn.
- Cổng đầu vào x mặc định một cổng dữ liệu 32-bit đơn giản. Bạn có thể tạo một cổng có dữ liệu hợp lý bằng cách xác định giao thức I/O ap_vld.
- Đầu ra Y được tạo ra và có giá trị hợp lý khi tổng hợp. Đây là mặc định cho các đối số con trỏ. Bạn không cần phải chỉ định một giao thức cổng cho cổng này.
-- Tạo ra một Solution mới, Solution2.
- Bước 1. Nhấp vào nút New Solution trên thanh công cụ để tạo ra một Solution mới.
- Bước 2. Không thay đổi bất kỳ cài đặt clock.
- Bước 3. Nhấn Finish.
-- Điều này tạo ra Solution2 và thiết lập nó như là Solution mặc định.
-- Để tối ưu hóa cần xác định các giao tiếp I/O mong muốn cho Solution, thực hiện các bước sau đây.
- Bước 4. Trong cửa sổ Explorer, mở mục Source (như thể hiện trong hình 22).
- Bước 5. Kích đúp vào fir.c để mở tập tin trong Information pane.
- Bước 6. Chọn tab Directives trong Auxiliary pane và chọn hàm fir ở mức top-level và nhảy đến đầu hàm fir trong mã nguồn (hình 22).
-- Tab Directives, hiển thị trên bên phải của Hình 22, liệt kê tất cả các đối tượng trong thiết kế có thể tối ưu hóa. Trong tab Directives , bạn có thể thêm các chỉ thị tối ưu hóa cho các thiết kế. Áp dụng các chỉ thị tối ưu hóa cho các thiết kế.
- Bước 7. Trong tab Directives , chọn cổng C (chấm màu xanh lá cây).
- Bước 8. Nhấn chuột phải và chọn Insert Directives.
- Bước 9. Thực hiện giao tiếp RAM single-port bằng cách thực hiện như sau:
a. Chọn RESOURCE từ menu Directive drop-down.
b. Nhấp vào hộp core.
c. Chọn RAM_1P_BRAM, như thể hiện trong hình 23.
- Các bước trên chỉ định mảng C thực hiện bằng cách sử dụng khối bộ nhớ RAM single-port. Một thiết lập cổng dữ liệu sẽ tự động được tạo ra để truy cập vào một khối RAM single-port.
- Bước 10. Trong phần Destination của Directives Editor, chọn Source File.
- Bước 11. Nhấp OK.
- Bước 12. Tiếp theo, chỉ định cổng x là tín hiệu/cổng.
a. Trong tab Directives, chọn cổng đầu vào x (dấu chấm màu xanh lá cây).
b. Nhấn chuột phải và chọn Insert Directives.
c. Chọn Interface từ Directive Editor.
d. Chọn Source File từ phần Destination của hộp thoại.
e. Chọn ap_vld làm chế độ.
f. Nhấn OK để áp dụng chỉ thị.
- Bước 13. Cuối cùng, chỉ định cổng y là tín hiệu/cổng.
a. Trong tab Directives, chọn cổng đầu vào y (chấm màu xanh lá cây).
b. Nhấn chuột phải và chọn Insert Directives.
c. Chọn Source File từ phần Destination của hộp thoại.
d. Chọn Interface từ Directive Editor.
e. Chọn ap_vld.
f. Click OK.
-- Khi hoàn thành, kiểm tra rằng mã nguồn và các tab Chỉ thị được thể hiện trong hình 24. Nhấp chuột phải vào bất kỳ chỉ thị không chính xác để sửa đổi nó.
- Bước 14. Nhấp vào nút Run C Synthesis trên thanh công để tổng hợp các thiết kế.
- Bước 15. Khi được nhắc, bấm Yes để lưu nội dung của các tập tin mã nguồn C. Khi tổng hợp xong, các file báo cáo sẽ tự động mở.
- Bước 16. Nhấp vào tab Outline để xem kết quả giao tiếp hoặc chỉ đơn giản là di chuyển xuống phía dưới cùng của file báo cáo. Hình 25 cho thấy các cổng hiện tại có giao thức I/O đúng.