SystemC vs HDL


9

Tôi hiện đang tham gia vào một dự án đại học để thực hiện bộ xử lý của một bộ hướng dẫn hiện có. Ý tưởng là vào cuối dự án, tôi sẽ có thể tổng hợp thiết kế này và chạy nó trong một đồ họa. Mọi thứ đang diễn ra tốt đẹp cho đến nay, tôi đã bắt đầu triển khai thiết kế trong Verilog HDL vài ngày trước và có một phiên bản rất đơn giản hoạt động. Bây giờ vấn đề: Tôi đã liên lạc với một số người đã tham gia thiết kế phần cứng trong nhiều năm và họ đề nghị rằng trước khi tôi đi xa hơn, tôi nên chuyển sang sử dụng SystemC để thực hiện. Bây giờ, làm cho tôi rất rất bối rối bởi vì đây là suy nghĩ của tôi:

Verilog -> Là ngôn ngữ HDL đặc biệt nhắm đến thiết kế phần cứng. Có một số mức độ trừu tượng như Verilog cấu trúc và hành vi, nhưng nó là một hình thức rất gọn gàng trong việc chỉ định RTL của một thiết kế. Bạn chắc chắn có thể tổng hợp nó bằng cách sử dụng một loạt các công cụ tùy thuộc vào FPGA mà bạn chọn (trong trường hợp của tôi, tôi đang sử dụng bảng Xilinx Vivado 2014 và Zynq). Về phía bên dưới, Verilog không cung cấp đủ tính trừu tượng để xác minh và đó là lý do tại sao bạn có những thứ như System Verilog.

SystemC -> Đây là thư viện lớp C ++ giới thiệu hiệu quả khái niệm thời gian trong C ++ và cho phép bạn thực hiện mô phỏng theo hướng sự kiện. Rõ ràng nó là cấp cao hơn rất nhiều so với bất kỳ HDL nào và mọi thứ ở đây có thể được thực hiện nhanh hơn nhiều. Điều này làm cho nó trở thành một công cụ rất tốt cho các công cụ như xác minh và thậm chí triển khai các trình giả lập để mọi người có thể bắt đầu thiết kế trình điều khiển và mọi thứ cho một con chip trước khi thứ đó thực sự được sản xuất. Rõ ràng, cũng có một tập hợp con SystemC có thể tổng hợp được (tôi nghĩ ngay cả Xilinx Vivado cũng có thể làm điều này) và trong một số trường hợp, nó cho phép SystemC được sử dụng để thiết kế các hệ thống rất lớn, ở đó mức độ trừu tượng cao hơn rất tiện dụng.

Vì vậy, câu hỏi của tôi là:

  1. Những khái niệm này về những gì systemC và Verilog (hoặc ngôn ngữ HDL nếu bạn muốn) có đúng không?
  2. Khi nào tôi nên sử dụng SystemC và khi Verilog?
  3. Tôi được bảo rằng ngay cả trong Verilog, việc sử dụng nhiều mã hành vi có thể gây ra một chút vấn đề trong các phần quan trọng của việc triển khai vì về cơ bản bạn đang đưa ra ít ràng buộc hơn cho công cụ tổng hợp về cách tổng hợp nó. Với mức độ trừu tượng cao hơn, đây có phải là một vấn đề không? tức là nếu tôi sử dụng systemC, tôi có thể sẽ có một thiết kế lớn rất chậm, ngốn điện, ...
  4. Người đề xuất SystemC đã đề cập rằng có vẻ như tôi đang thực hiện "khám phá kiến ​​trúc" và đó là lý do tại sao anh ta thích Verilog hơn. Nó chính xác nghĩa là gì? Tôi có ấn tượng rằng kiến ​​trúc thường đề cập đến tập lệnh và vi kiến ​​trúc để thực hiện một tập lệnh (vì vậy kiến ​​trúc vi mô là rtl thực tế thực thi các lệnh). Vì vậy, thăm dò kiến ​​trúc có nghĩa là anh ta nghĩ rằng tôi đang thực hiện một bộ xử lý để xem một bộ hướng dẫn khả thi như thế nào?
  5. Ông nói rằng một lập luận cho việc sử dụng SystemC là nó dễ dàng hơn nhiều vì nó có mức độ trừu tượng cao hơn so với HDL. Ông cũng tuyên bố rằng nó dễ dàng hơn để có được thời gian của thiết kế đúng. Đến mức nào thì điều này đúng?

Trợ giúp sẽ được đánh giá rất cao, tôi hơi bối rối và cảm thấy khó khăn để có được thông tin rõ ràng về trực tuyến này. Cảm ơn!


Xin chào, tôi có thể hỏi đó là khóa học nào không?
Phản ánh

Xin chào, tôi đã học Khoa học Máy tính. Nói đúng ra, đây không phải là một phần của khóa học tiêu chuẩn, tôi đã chọn xây dựng bộ xử lý dựa trên Transputer cho luận án thạc sĩ của mình từ đầu.
Andrés AG

Câu trả lời:


3

Bạn của bạn đã hiểu nhầm những gì bạn đang làm hoặc đang nghĩ về SystemC là bước sơ bộ. HDL là lựa chọn duy nhất Trong mọi trường hợp và tôi khuyên bạn nên sử dụng SystemVerilog tổng hợp đủ mạnh để thực hiện nhiều khám phá về cơ bản giống như Verilog cho mọi thứ khác.

  1. Một phần. Bạn đã phân biệt giữa Verilog là HDL, SystemVerilog là ngôn ngữ xác minh và nói rằng SystemC có độ trừu tượng cao hơn nhưng cũng là tập hợp con tổng hợp. Có hai lỗi ở đây. Đầu tiên, SystemVerilog cũng là một HDL với một tập hợp con có thể tổng hợp đầy đủ có thể được nối lại dưới dạng Verilog với các bản sửa lỗi rõ ràng (ví dụ: một logicloại duy nhất cho dây) và nhiều cơ chế trừu tượng tổng hợp (ví dụ: Giao diện). Nó được hỗ trợ bởi nhiều công cụ bao gồm Vivado. Mặt khác, SystemC thì khôngtrực tiếp tổng hợp (thậm chí không có bất kỳ tập hợp con nào), nó có nghĩa là cho mô hình hóa và khám phá kiến ​​trúc ở cấp độ cao hơn mặc dù một số tập hợp con của nó có thể được cung cấp trong một công cụ Tổng hợp cấp cao như Vivado HLS sau đó chuyển nó thành Verilog tổng hợp (mặc dù không thể đọc được) .

  2. Verilog và tập hợp con tổng hợp của SystemVerilog là ngôn ngữ cho thiết kế CTNH, thường được sử dụng để mô tả CTNH ở mức chuyển đổi đăng ký, tức là một tập hợp các khối như thanh ghi, hàm kết hợp, máy trạng thái hữu hạn, v.v. Verilog-2001 cũng có thể mô tả một cách thích hợp hw như là một netlist cấp cổng, trong khi RAT cũng có thể được sử dụng ở mức độ trừu tượng cao hơn nhiều do đó khả năng xác minh của nó. Mặt khác, SystemC thích hợp cho việc mô hình hóa các hệ thống ở mức độ cao, trong đó toàn bộ các khối chỉ được mô tả theo kiểu hành vi cấp cao. Nó cũng rất mạnh để khám phá kiến ​​trúc, tức là thay đổi các thông số và đặc điểm của kiến ​​trúc và đánh giá các thay đổi trong hiệu suất tổng thể.

  3. Điều đó chỉ đúng nếu bạn cố gắng mô tả mọi thứ theo kiểu không phải RTL trong khi phát triển mô hình RTL. Ví dụ, cách đúng để mô tả một khối thực hiện tích lũy nhân lặp đi lặp lại là một máy trạng thái hữu hạn điều khiển một số nhân tổ hợp, một bộ cộng tổ hợp và một thanh ghi - nếu theo hành vi bạn có nghĩa là mô tả điều này như trong phần mềm (một vòng lặp for) vâng, mã hành vi sẽ không hoạt động. Nếu bạn muốn mô tả từng khối tôi đã mô tả (nhiều, thêm, reg và FSM) thông quaalwayscác khối, điều đó hoàn toàn tốt và sẽ hoạt động trong một netlist nhận ra chính xác những gì bạn đã chỉ định với kết quả tuyệt vời (thường tốt hơn so với cách tiếp cận cấu trúc quá mức làm hạn chế khả năng của công cụ tổng hợp để tối ưu hóa logic). Trên thực tế, tổng hợp cấp cao SystemC thường sẽ mang lại kết quả tốt chỉ khi bạn tuân theo các mẫu rất giống nhau, xóa sạch hiệu quả bất kỳ lợi thế nào trong việc sử dụng ngôn ngữ cấp cao hơn. Trong mọi trường hợp, SystemC là một lựa chọn kém để thực hiện bộ xử lý.

  4. Kiến trúc là một thuật ngữ rất rộng không giới hạn đối với ISA, trên thực tế trong các bộ xử lý hiện đại, thiết kế của ISA chỉ là một phần nhỏ của câu đố. Trong bối cảnh thiết kế hệ thống, kiến ​​trúc thường có nghĩa là tập hợp các lựa chọn cấp hệ thống (ví dụ: DMA có thể được điều khiển bởi bất kỳ lõi nào hay chỉ một đặc biệt không? Bộ đệm L1 có đầy đủ hoặc được đặt liên kết không? Bạn có bộ đệm không ở tất cả, hoặc quản lý bộ nhớ trong SW?), bao gồm cả ISA và kiến ​​trúc vi xử lý. Tôi nghĩ bạn của bạn muốn nói gì là bạn đang khám phá các cấu hình khác nhau của bộ xử lý, thực tế là thăm dò kiến ​​trúc (hoặc thăm dò kiến ​​trúc vi mô nếu bạn thích). Tuy nhiên, anh ta có thể đã bỏ lỡ thực tế là bạn sẽ thực hiện điều này trên một đồ họa, điều này làm cho tùy chọn SystemC trở nên vô nghĩa.

  5. Cái này sai. Nếu bạn đang thiết kế một trình tăng tốc rất đơn giản, chẳng hạn như bộ lọc phát trực tuyến, điều đó có thể đúng bởi vì các công cụ HLS cho phép dễ dàng chèn các giai đoạn đường ống, trong khi bạn sẽ phải thực hiện điều đó một cách thủ công trong RTL (hoặc sử dụng tính năng kiểm tra lại dữ liệu, nhưng tôi nghĩ rằng không phải vậy có thể trong Vivado). Trong tất cả các trường hợp khác, và đặc biệt là trong một đối tượng có cấu trúc và cấu trúc phức tạp cao như bộ xử lý, HLS sẽ dẫn đến việc Verilog bị sai lệch, không thể sửa chữa và thường đơn giản phải được tổng hợp - các công cụ đơn giản không được thiết kế cho công việc này.


Cảm ơn bạn vì sự giúp đỡ. Tôi đã bắt đầu dự án bằng Verilog, nhưng tôi vẫn học được rất nhiều từ câu trả lời của bạn!
Andrés AG

3

Bạn đang ở trường đại học và đang học (có lẽ) để trở thành một kỹ sư. Là một kỹ sư, bạn nên hiểu cách mọi thứ hoạt động ở mức độ thấp. Để đạt được điều này, bạn cần loại bỏ các lớp trừu tượng, không thêm chúng.

Vì lý do này, lời khuyên của tôi là bạn không sử dụng SystemC cho dự án này. Bạn có thể sẽ sử dụng nó trong sự nghiệp chuyên nghiệp của mình, nhưng đó là cho tương lai.

Nếu bạn chọn sử dụng nó bằng mọi giá thì bạn nên nói chuyện với giảng viên của bạn trước. Khi tôi làm một nhiệm vụ tương tự ở trường đại học, chúng tôi được thông báo rõ ràng không sử dụng SystemC vì lý do mà tôi đã nêu ở trên.


0

Hãy trung thực, đó là tất cả các chương trình. Những gì bạn có thể làm trong SystemC, bạn cũng có thể lập trình trong VHDL hoặc Verilog. Nó chỉ là một vấn đề hỗ trợ công cụ. Nó không mất SystemC hoặc SystemVerilog.

Nếu các nhà cung cấp giải pháp rõ ràng để chuyển đổi các nhà thiết kế RTL sang lập trình Hệ thống, họ chỉ cần cung cấp hỗ trợ ngôn ngữ phù hợp cho thiết kế FPGA. Theo khảo sát của Mentor 2012 Wilson, ngôn ngữ cho các GPU là VHDL. Xem http://bloss.mentor.com/verificationhorizons/blog/2013/08/05/part-8-the-2012-wilson-research-group-feftal-verification-study/


0

SystemC được sử dụng cho các thiết kế phức tạp. Ví dụ: Chỉ định một cái gì đó ở cấp độ kiến ​​trúc. Lợi thế là, ít dòng mã hơn so với thiết kế Verilog, thời gian mô phỏng nhanh hơn, Mô hình chính xác theo chu kỳ. Đừng tin người nói rằng SystemC "không" tổng hợp được. Tất nhiên là thế rồi. Để cho bạn một ý tưởng, Trong Verilog chúng tôi có mức độ trừu tượng, bạn có thể mô hình hóa với mức độ chuyển đổi / mức độ hành vi. Sự lựa chọn được thực hiện dựa trên sự phức tạp của thiết kế.

Cách quen thuộc hơn để mô tả phần cứng là sử dụng Verilog, tổng hợp được hỗ trợ trong nhiều công cụ EDA.

Thông thường cho các thiết kế lớn hơn Các mô hình SystemC và testbench được thiết kế bởi nhà thiết kế kiến ​​trúc. Những mô hình này sau đó được trao cho nhà thiết kế điện tử để chuyển đổi chúng thành RTL bằng Verilog / VHDL.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.