Sau bài 6, các bạn đã có thể tạo một testbench đơn giản để kiểm tra model code. Bài viết này hướng dẫn tạo project và kiểm tra khả năng tổng hợp của model code trên phần mềm Vivado Design Suite HLS Edition, một phần mềm của hãng Xilinx dành cho FPGA.
1) Tạo project
Tại sao lại dùng Vivado? Đơn giản là vì phần mềm này thỏa mãn hai tiêu chí sau đây:
- Hỗ trợ tổng hợp SystemC code
- Dễ tải và cài đặt trên Windows
Các bạn có thể tải và cài đặt ở đây. Nhóm tác giả dùng bản Vivado 2017.04, các bạn có thể tải và sử dụng bản mới hơn. Trước tiên hãy tải model code và chuẩn bị một thư mục để làm việc. Ví dụ như:
D:\20.Project\1.ModelBaseDesign\scpu_source\scpu_final
Sau khi cài đặt Vivado thành công, mở phần mềm, tại cửa sổ đầu tiên "Vivado HLS Welcome Page" chọn một trong các mục sau:
- Create New Project: để tạo project mới
- Open Project: Mở một project đã tạo trước đó
- Recent Project: Danh sách các project đã tạo và sử dụng gần nhất. Các bạn hãy tận dụng cửa sổ này đề mở nhanh một project đã tạo
Hình 1: Tạo project mới |
Chọn "Create New Project", chúng ta chuyển đến cửa sổ "New Vivado HLS prject", bước "Project Confifuration":
- Project name: đặt tên project trùng với module TOP, ví dụ này là scpu_top
- Location: Đường dẫn đến thư mục chứa project sẽ tạo, ví dụ này là thư mục chứa model code đã chuẩn bị phía trên.
Hình 2: Tên project và đường dẫn đến thư mục tạo project |
Hình 3: Thêm file thiết kế (model code) vào project |
Hình 4: Các file body được thêm và TOp Function được gán |
Hình 5: Thêm các file dành cho việc mô phỏng nếu có |
- Solution Name: đặt tên mục lưu các file cấu hình synthesis, ví dụ như "scpu_syn"
- Clock" Cấu hình clock
- Part selection: Chọn linh kiện FPGA sẽ sử dụng. Mục tiêu bài viết này không phải là nạp trên FPGA nên bạn chọn linh kiện bất kỳ để thử nghiệm.
Hình 6: Một số cấu hình cho synthesis |
- Includes: Tất cả các file thư viện liên quan đến biên dịch và mô phỏng SystemC như gcc, systemc và cả các file header của thiết kế
- Source: Chứa các file .cpp mà bạn đã thêm khi tạo project
- Test Bench: Chứa các file dùng cho việc chạy mô phỏng nếu có
- scpu_syn: Chứa các file constraint và các lệnh mà Vivado sẽ chạy khi biên dịch. Trong mục này, script.tcl là file chứa các lệnh chạy được tạo tự động bởi Vivado dựa trên những cấu hình đã thực hiện khi tạo project
Nội dung file script.tcl:
############################################################
## This file is generated automatically by Vivado HLS.
## Please DO NOT edit it.
## Copyright (C) 1986-2017 Xilinx, Inc. All Rights Reserved.
############################################################
open_project scpu_top
set_top scpu_top
add_files scpu_decoder.cpp
add_files scpu_execute.cpp
add_files scpu_fetch.cpp
add_files scpu_top.cpp
add_files -tb scpu_testbench.cpp
add_files -tb test_top.cpp
open_solution "scpu_syn"
set_part {xc7s75fgga676-1} -tool vivado
create_clock -period 10 -name default
set_clock_uncertainty 0
#source "./scpu_top/scpu_syn/directives.tcl"
csim_design
csynth_design
cosim_design
export_design -format ip_catalog
Các lệnh như open_project, set_top, add_files, ... là các lệnh hỗ trợ bởi Vivado. Các bạn có thể đọc thêm User manual để hiểu rõ hơn, tuy nhiên tên lệnh cũng khá gợi nhớ giúp chúng ta dễ đoán được chức năng lệnh.
Tiếp theo, hai mục hay thao tác trên thanh công cụ cần chú ý là:
- Project: Cấu hình lại thông tin project
- Solution: Cấu hình lại thông tin synthesis, chạy synthesis và xem các báo cáo synthesis
2) Tổng hợp SystemC code
Tổng hợp SystemC code để tạo ra RTL code gọi là tổng hợp mức cao (High Level Synthesis). Đây là quá trình chuyển đổi code từ ngôn ngữ này (SystemC) sang ngôn ngữ khác (Verilog hoặc VHDL). Thư viện tổng hợp là các đoạn RTL code mẫu được xây dựng sẵn dùng để thay thế tương ứng cho model code.
Sau khi đã tạo xong project, bạn hãy bấm "Run C Synthesis".
Sau khi đã tạo xong project, bạn hãy bấm "Run C Synthesis".
Hình 8: Run C Synthesis |
Hình 9: Quá trình synthesis thể hiện trên cửa sổ Console |
- systemc: một cách mô tả systemc code khác nhưng chức năng như model code ban đầu
- verilog: code verilog HDL
- VHDL: code VHDL
Hình 10: Quá trình synthesis thành công |
Đối với RTL code (Verilog hoặc VHDL):
- Mỗi process (SC_METHOD) là một module Verilog hoặc một entity VHDL trong một file RTL độc lập
- Mỗi module (SC_MODULE) là một module Verilog hoặc entity VHDL gọi các module/entity mô tả các process
- module/entity TOP là một module/entity gọi các sub-module như cấu trúc hierarchy mô tả trong model code
Hình 11: Verilog được tạo ra sau khi synthesis |
3) Kiểm tra lại Verilog code
Toàn bộ Verilog code được biên dịch với phần mềm Quartus II của Altera để kiểm tra lại syntax cũng như khả năng tổng hợp. Các bạn có thể lấy code này từ thư mục:
D:\20.Project\1.ModelBaseDesign\scpu_source\scpu_final\scpu_top\scpu_syn\syn\verilog
Kết quả là OK với nhiều warning vì RTL code được tạo theo mẫu với nhiều thành phần dư và khó tối ưu về "code style" như chúng ta viết code thông thường.
Hình 12: Biên dịch lại Verilog code được tạo ra từ Vivado trên Quartus II |
Hình 13: Cấu trúc hierarchy của scpu_top |
Trên đây là một hướng dẫn ngắn về việc tổng hợp mức cao trên phần mềm Vivado và kiểm chứng lại RTL code với Quartus II.
Lịch sử cập nhật:
1. 2019.May.02 - Tạo lần đầu
Danh sách tác giả:
1. Trương Công Hoàng Việt
2. Lê Hoàng Vân
3. Nguyễn Hùng Quân
3. Nguyễn Hùng Quân
0 bình luận:
Đăng nhận xét