Thứ Hai, 15 tháng 4, 2019

[SystemC][High Level Design]Bài 1 - HLD là gì?

Bài viết này là bài mở đầu cho chuỗi bài viết hướng dẫn thiết kế và mô phỏng cơ bản mức cao sử dụng thư viện SystemC. Bài viết dành cho các bạn mới bắt đầu tìm hiểu về High Level Design (HLD) hoặc SystemC nhưng chưa biết bắt đầu từ đâu. Chuỗi bài viết sẽ tập trung vào việc giúp bạn nhanh chóng sử dụng ngay SystemC cho thiết kế của mình. 

1) High Level Design là gì?
HLD là phương pháp thiết kế phần cứng sử dụng ngôn ngữ cấp cao như C/C++, SystemC thay vì sử dụng ngôn ngữ mô tả phần cứng Verilog hoặc VHDL. Phần cứng ở đây là vi mạch (chip).
2) Tại sao cần phải có HLD?
Một hệ thống, gồm phần cứng và phần mềm, được phát triển theo phương pháp truyền thống sẽ tốn nhiều thời gian. Bên cạnh đó, hiệu năng hệ thống chỉ có thể được đánh giá khi phần cứng phải được phát triển hoàn chỉnh. Tối thiểu, RTL code của phần cứng phải hoàn chỉnh. Sau đó, phần mềm được tích hợp, hoạt động thử nghiệm để đánh giá hiệu năng. Nếu kết quả không đạt được như mong muốn, phần cứng hoặc phần mềm phải được thiết kế lại. Nếu phần cứng phải thiết kế lại, thời gian để thực hiện có thể kéo dài đáng kể.
Hình 1(a) minh họa quy trình phát triển một hệ thống theo phương pháp truyền thống. Phần mềm phát triển trên nền tảng C/C++. Phần cứng phát triển trên nền tảng Verilog/VHDL. Hai nhánh phát triển thực hiện song song và độc lập nên hệ thống chỉ có thể được tích hợp và đánh giá chính xác ở giai đoạn cuối của quy trình khi phần cứng đã hoàn thiện. Nếu phần cứng không thể đáp ứng được yêu cầu đặt ra của hệ thống thì việc thiết kế lại rất mất thời gian.
Hình 1: (a) Phát triển hệ thống theo phương pháp truyền thống (b) phát triển hệ thống theo phương pháp HLD
Với HLD, phần cứng được mô hình hóa bằng chính ngôn ngữ dùng để phát triển phần mềm như C/C++ hay SystemC. Điều này giúp phần mềm và phần cứng có thể được tích hợp sớm để thử nghiệm và đánh giá hiệu quả và tính khả thi. Sau khi hệ thống được tối ưu như yêu cầu, phần cứng mới bắt đầu được thiết kế trùng khớp với mô hình đã phát triển. Với cách này, phần cứng được đảm bảo tương thích phần mềm và đáp ứng tốt cho hệ thống mong muốn. Bên cạnh đó, phần mềm có thể tiếp tục được thử nghiệm và hoàn chỉnh song song với việc phát triển phần cứng. 
Hình 1(b) minh họa quy trình phát triển hệ thống theo phương pháp HLD. Với mô hình này, phần cứng được mô hình hóa bằng C/C++ hoặc SystemC. Sau đó, nó được tích hợp với phần mềm để tạo thành một hệ thống hoàn chỉnh ở bước Pre-integration. Mô hình hệ thống này được sử dụng để đánh giá tính khả thi, chức năng, hiệu năng và các yêu cầu khác mà hệ thống phải đạt được. Nếu mọi yêu cầu đều đáp ứng ở bước này, phần cứng mới được thiết kế. Điều này đảm bảo khả năng thành công rất cao của hệ thống thực tế. Bạn có thể thắc mắc rằng, nếu sử dụng phương pháp HLD để thiết kế phần cứng thì thời gian thiết kế sẽ tăng đáng kể do phải làm hai bước là “thiết kế mô hình sử dụng C/C++ hoặc SystemC” và “thiết kế mức thấp sử dụng Verilog/VHDL”. Trên thực tế, thời gian thiết kế phần cứng sẽ tăng nhưng không đáng kể nếu mô hình phần cứng sử dụng ngôn ngữ cấp cao như C/C++ hoặc SystemC có thể tổng hợp được. “Tổng hợp được” nghĩa là có thể dùng phần mềm để chuyển đổi từ HLD code thành RTL code. Sau đó, chúng ta chỉ cần dùng phần mềm chuyên dụng để kiểm tra “tính tương đồng” giữa HLD code và RTL code.
3) Ngôn ngữ SystemC là gì?
SystemC là một thư viện được xây dựng trên nền tảng ngôn ngữ C++ hỗ trợ việc mô hình hóa hệ thống và phần cứng. Thư viện này chứa các class được xây dựng bằng C++. Việc mô hình hệ thống hay phần cứng là gọi và sử dụng các class C++ đã được xây dựng sẵn trong thư viện SystemC.
SystemC được chuẩn hóa trong tài liệu chuẩn IEEE Std 1666™-2011.
SystemC hỗ trợ rất nhiều các class khác nhau nhưng chỉ một phần trong số này là có thể tổng hợp được. Các phần mềm tổng hợp SystemC cũng có các giới hạn, quy định khác nhau về khả năng tổng hợp. Chính vì vậy, người viết model code theo định hướng tổng hợp cần cố gắng sử dụng các mô tả đơn giản để có thể phù hợp với càng nhiều phần mềm khác nhau. Điều này giúp cho model code tạo ra có tầm sử dụng rộng. Tuy nhiên, nó phụ thuộc vào kinh nghiệm và hiểu biết của người thiết kế nên việc viết model code tương thích với phần mềm mà bạn sẽ sử dụng là ưu tiên hàng đầu.
4) Quy trình thiết kế theo phương pháp HLD 
Quy trình HLD gồm các bước cơ bản như sau, Hình 2:
1. Input requirement: Tổng hợp và phân tích các yêu cầu của hệ thống và phần cứng. Kết quả của bước này là một tài liệu mô tả chi tiết các phân tích. 
2. Logic specification: Phân tích thiết kế từ tổng quan đến chi tiết tới mức cổng logic. Kết quả của bước này là một tài liệu phân tích chi tiết thiết kế. 
3. Model specification: Phân tích chi tiết mô hình phần cứng dựa trên logic specification đã có. Ở bước này, người thiết kế cần xác định rõ các process và các tín hiệu kết nối giữa các method. Kết quả của bước này là một tài liệu phân tích chi tiết mô hình phần cứng.
4. Model coding: Mô hình phần cứng dựa trên model specification. Trong tài liệu này, SystemC được sử dụng để mô hình phần cứng. Việc mô hình phần cứng phải tạo ra model code có thể tổng hợp được. Kết quả của bước này là các file model code.
5. Model verification: Kiểm tra các file model code. Model code được kiểm tra về cú pháp, luật thiết kế, khả năng tổng hợp và chức năng. Kết quả của bước này là các file model code đã được kiểm tra hoàn chỉnh.
6. Model synthesis: Tổng hợp model code. Model code được chuyển đổi thành RTL code (Verilog/VHDL). Kết quả của bước này là các file RTL code.
7. Consistency check: Kiểm tra tính tương đồng giữa RTL code với model code. Kết quả của bước này là các file RTL code đã được đảm bảo chức năng tương đương như model code.
Hình 2: Quy trình HLD
Các bước thực hiện sẽ được nhóm tác giả trình bày chi tiết với một ví dụ cụ thể trong những bài sau. Để có thể nhanh chóng hiểu và thử nghiệm các bạn hãy chuẩn bị những nội dung sau đây:
1. Ví dụ dùng để minh họa cho loạt bài này là thiết kế SCPU. Các bạn hãy đọc loạt bài sau để hiểu thiết kế này.
2. Tải và cài đặt phần mềm Xilinx Design Tool - Vivado HL Design để kiểm tra cú pháp và tổng hợp. Tuy đây là phần mềm biên dịch dành cho FPGA nhưng là một công cụ dễ tìm và cài đặt trên Windows.
3. Bên cạnh đó, SystemC là một thư viện của C++ nên bạn có thể tải và dùng gcc để kiểm tra cú pháp. Tuy nhiên, gcc không kiểm tra được khả năng tổng hợp của model code.

Lịch sử cập nhật:
1. 2019.Apr.15 - 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