Thứ Năm, 2 tháng 5, 2019

[SystemC][High Level Design]Bài 7 - Tổng hợp model code

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. 
Các bài viết trước: bài 1, bài 2, bài 3, bài 4, bài 5bài 6.
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
"Next" đến bước tiếp theo "Add/Remove Files" cho các file thiết kế, chọn "Add Files" và thêm tất cả các file model code (.cpp) liên quan đến thiết kế (không bao gồm các file dùng cho testbench và file .h). Tại ô "Top Function", điền tên module TOP là "scpu_top". Chú ý, hãy điền đúng tên module TOP, nếu điền sai lỗi không tìm thấy top function sẽ tạo ra khi biên dịch nhưng bạn vẫn có thể sửa lại sau khi đã tạo project bằng các vào Project/Project Settings/Synthesis.

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
"Next" đến bước tiếp theo "Add/Remove Files" cho các file testbench, chúng ta không mô phỏng nên bỏ qua bước này.
Hình 5: Thêm các file dành cho việc mô phỏng nếu có
"Next" đến bước tiếp theo "Solution Configuration":
  • 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
Nhấn "Finish" và chờ đợi. Chú ý, sau khi nhấn "Finish", quá trình tạo project khá lâu nên các bạn bĩnh tĩnh chờ đợi, tránh nhấn "Finish" nhiều lần sinh ra những cảnh báo lỗi không cần thiết.
Hình 7: Kết quả quá trình tạo project
Trong cửa sổ Explore, các bạn chú ý đến các phần sau:
  • 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".
Hình 8: Run C Synthesis
Bạn hãy quan sát cửa sổ Console để thấy quá trình synthesis diễn ra và trạng thái synthesis.
Hình 9: Quá trình synthesis thể hiện trên cửa sổ Console
Kết quả synthesis, thư mục "syn" được tạo ra trong "scpu_syn" chứa tất cả các code được biên dịch từ model code ban đầu gồm:
  • 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
Một quá trình synthesis thành công sẽ không có bất kỳ lỗi nào được báo trên cửa sổ Console và trong thẻ Errors.
Đố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

0 bình luận:

Đăng nhận xét