Thông báo

Collapse
No announcement yet.

SystemVerilog và SystemC

Collapse
This is a sticky topic.
X
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #46
    Chào Hithere,

    DSP, CPU hay MPU cũng là hardware nhưng có tính cách linh động được thay đổi bằng software (RAM contents). Những khối này giao động với những khối hardware khác trong cùng một hệ thống. Khi không tiếp xúc với những khối ngoài, nó có thể hoạt động và thử nghiệm dưới một ngôn ngữ nào đó. Ngôn ngữ đó sẽ được compile qua hex (binary) để điều khiển sự liên kết của những phần tử hardware trong khối này. Ví dụ như loop chạy bao nhiêu lần, khi nào dùng nhân, chia, cộng trừ và vân vân.

    Những phần tử hardware khác, digital hay analog, cũng có những ngôn ngữ riêng để mô tả. Phần digital thì được tổng hợp (synthesize) qua ASIC/FPGA. Phần analog thì cũng có công cụ nào đó để chuyển qua phần cứng.

    Khi những khối này nói chuyện với nhau cần phải có phiên dịch nếu không ở cùng một ngôn ngữ. Vì vậy hiện nay người ta đang chọn một ngôn ngữ chuẩn (standard) để tránh phải phiên dịch vì phiên dịch dễ đưa tới sai lầm. VHDL hoặc Verilog thì chuyên cho hardware. C thì chuyên cho software nhưng cũng đã được dùng để mô tả hardware tuy không hoàn hảo lắm. SystemC cũng là C (extension) được đưa ra để bổ túc phần thiếu xót của C để mô tả hardware đó là hoạt động đồng bộ (concurrent) và thời gian

    Hy vọng những giải thích trên trả lời được những thắc mắc của Hithere. Đi sâu vào vấn đề này thì rất phức tạp nên khó có thể đưa ra trên diễn đàn
    Chúc một ngày vui vẻ
    Tony
    email : dientu_vip@yahoo.com

    Comment


    • #47
      Chào anh Tony,

      Cảm ơn anh đã trả lời, thì ra ý anh nói systemC lợi cho hardware và software là chuyện bất đồng ngôn ngữ này:

      Nguyên văn bởi tonyvandinh Xem bài viết
      Khi những khối này nói chuyện với nhau cần phải có phiên dịch nếu không ở cùng một ngôn ngữ. Vì vậy hiện nay người ta đang chọn một ngôn ngữ chuẩn (standard) để tránh phải phiên dịch vì phiên dịch dễ đưa tới sai lầm. VHDL hoặc Verilog thì chuyên cho hardware. C thì chuyên cho software nhưng cũng đã được dùng để mô tả hardware tuy không hoàn hảo lắm. SystemC cũng là C (extension) được đưa ra để bổ túc phần thiếu xót của C để mô tả hardware đó là hoạt động đồng bộ (concurrent) và thời gian
      Bây giờ thì em hiểu vấn đề em đang băn khoăn nó nằm ở khía cạnh xây dựng cấu trúc một test-bench hơn là khía cạnh dùng ngôn ngữ nào để xây dựng. Khi xây dựng test-bench cho một SoC, nếu tất cả test-case đều pass thì không nói làm gì, khi fail mới là vấn đề. Các test cases hiện nay thường được mô tả ở mức độ trừu tượng cao trong khi bug lại xảy ra ở mức RTL thấp nhất, với một SoC tương đối phức tạp việc xác định bug thuộc software, RTL hay schematic không đơn giản tẹo nào. Anh nói đúng, vấn đề này phức tạp, trao đổi trên diễn đàn như thế này không phù hợp. Sắp tới, em định viết một vài ý tổng quan về verification ở mục thiết kế IC số, anh ghé qua nhé!

      Chúc anh cuối tuần vui vẻ!

      Comment


      • #48
        Khi tổng hợp RTL ra gate, nếu bug ở gate level thì cũng phức tạp để tìm ra nếu chỉ dùng simulation. LEC (Logic Equivalent Check) thường hay được dùng để giải quyết vấn đề này. Tương tự như ở RTL, C/C++/systemC cũng có SLEC (Sequential Logic Equivalent Check). SLEC thì phức tạp hơn vì phải liên hệ giữa untime (C/C++) hoặc loosely time (systemC) với time (RTL). Khó hơn không có nghĩa là không thể làm được.
        Chúc một ngày vui vẻ
        Tony
        email : dientu_vip@yahoo.com

        Comment


        • #49
          cho mình hỏi 1 chút , có ai biết sự khác nhau giửa C và system C không ????

          Comment


          • #50
            SystemC là extension của C dùng để mô tả đồng khởi và chu kỳ chính xác (cycle accurate)

            Sent from my MB865 using Tapatalk
            Chúc một ngày vui vẻ
            Tony
            email : dientu_vip@yahoo.com

            Comment


            • #51
              Thấy mọi người bàn tán sôi nổi về SystemC, nên em cũng bon chen 1 tí. Trước đây (và đến tận bây h) em vẫn phải làm việc liên quan đến SystemC nên cũng có biết chút chút.

              1. Đơn giản có thể hiểu SystemC là một thư viện C++ (down về biên dịch thành file libsystemc.a và libsystemc.so). C++ chỉ có 1 phần của C (support subset chứ ko phải tất cả cú pháp của C) và C hoàn toàn không phải C++. SystemC là một thư viện viết theo kiểu hướng đối tượng sử dụng công cụ của lập trình hướng đối tượng và generic programming như kế thừa, template class v.v... Tuy nhiên, SystemC đã được chuẩn hóa bởi IEEE (IEEE 1666-2011 (mới nhất, download miễn phí)) cả về cú pháp lẫn các hành xử. Và cái standard có tên là SystemC Language hay Ngôn ngữ SystemC. Và một trong những proof-of-concept implementation được cung cấp bởi accellera system initiative dưới dạng C++ template class library như đã nói ở đầu .
              2. SystemC hỗ trợ nhiều mức trừu tượng (mức tổng quát) hay tiếng anh gọi là abstraction level từ hoàn toàn không có thông tin về thời gian (như tần số, clock, cycle), đến cycle accuracy. Nói thêm về mức trừu tượng hay abstraction level đó là càng trừu tượng (high-level abstraction) thì mức độ chi tiết của thiết kế càng thấp và càng ít chi tiết thì chạy càng nhanh, mô phỏng càng nhanh và càng tốt ít bộ nhớ. Mức RTL thường là cycle accuracy chạy mô phỏng các thiết kế phức tạp đã rất mất thời gian rồi. Chạy post synthesis hay post place-and-route cả một hệ thống lớn như SoC thì các bạn biết sẽ mất thời gian như thế nào.
              3. Vì sao lại phải có SystemC? (chưa nói vội đến SystemVerilog) Vì mấy ông đầu to thấy C/C++ được dùng hết sức phổ biến, ai học qua Điện tử Viễn thông, Công nghệ thông tin gì gì cũng phải học C/C++, các giả thuật/chương trình lớn muốn chạy nhanh đều sử dụng C/C++ để viết (vừa viết nhanh lại còn chạy nhanh) -> nghĩ ra là sao ko dùng C/C++ để miêu tả phần cứng, dùng đc cái này thì tận dụng được 1 rổ các chương trình/giả thuật/hệ thống đã được thiết kế sẵn bằng C/C++. Tuy nhiên, phần cứng nó không như phần mềm chạy lệnh này qua lệnh khác một cách tuần tự. Các tín hiệu và thiết bị trong phần cứng thường chạy song song (cùng diễn ra hay tiếng anh là concurrent) -> phải sửa lại C/C++ làm sao đó để miêu tả được hành vi của phần cứng nhưng vẫn phải tận dụng lợi thế về tốc độ của C/C++. Từ đó có SystemC (C++ template class library), với một simulation kernel (giúp schedule các task song song (concurrent) như với các HDL simulator và các kiểu dữ liệu và các phương thức tương ứng như bản chất của phần cứng).
              4. SystemC dùng để làm gì? Đầu tiên là thiết kế hệ thống. Đặc tả của hệ thống có thể được xây dựng và thử nghiệm nhanh chóng bằng SystemC và SystemC platform. Đến thời điểm này đã có khá nhiều platform dạng này, các bạn có thể tận dụng để ko phải bắt đầu lại từ đầu. Việc chuyển các chương trình/giả thuật C/C++ thành một module system cũng không phải quá khó. Ở mức đơn giản chúng ta chỉ cần quan tâm đúng hành vi trước còn các mức trừu tượng thấp thì dần dần thiết kế tiếp. Sau bước này, người thiết kế có thể làm tiếp hw/software partitioning, tức là quyết định phần nào làm trên HW, phần nào thực thi bằng SW. SystemC module hoặc method (code C++) cũng có thể được chuyển thành code C để chạy như là embedded software còn đội hardware sẽ làm tiếp RTL module.
              SystemC nhấn mạnh vào verification vì sao? vì sau khi có thiết kế ở mức hệ thống, chúng ta có 1 cái proof-of-concept và có thể bước đầu đánh giá hiệu năng hệ thống. Sau đó model này không vất đi mà được tiếp tục refine. Khi viết RTL, người thiết kế có thể kiểm tra lại chức năng (funtional) của thiết kế RTL của mình bằng các thay thế SystemC model của RTL code này bằng RTL model mới và chạy co-simulation để kiểm tra xem có đúng chức năng hay ko (còn như bác Tony nói là formal checking hoặc equivalent checking thì rất phức tạp và tiêu tốn thời gian, dễ nhất là check cùng input ra output khác nhau giữa HW và reference design). Nếu không đúng chức năng (hay có lỗi: bug) thì tất nhiên là phải xem lại cả hai xem lỗi ở đâu do đâu vì đâu để đưa ra phương án triệt để. Riêng cái này thì em thấy dùng ngôn ngữ nào cũng phải làm thế. Ví dụ như với 1 hệ thống SoC có nhiều khối chức năng IP core, nếu thiết kế hết các khối này dùng HDL (low abstraction level) rất mất thời gian và sau khi tất cả các khối thiết kế xong mới biết được hiệu năng thế nào có dùng được không lỗi của HDL thì còn khó debug gấp vạn lần C/C++. Với SystemC người ta có thể xây dựng nhanh chức năng của các khối này ở dạng ko có thông tin về thời gian, chay ok, thì refine để tìm ra các tham số tối ưu sau đó dựa trên model này để làm RTL. Khi verification sẽ không phải chạy HDL cho cả hệ thống, chỉ test/verif khối nào thì viết SystemC wrapper (để đồng bộ tín hiệu giữa SystemC với HDL trong trường hợp interface quá abstract) và chạy đồng mô phỏng SystemC + RTL của khối đó. Như thế này thời gian mô phỏng sẽ nhanh hơn rất nhiều so với chạy cả 1 hệ thống rất lớn là HDL (em chạy cái hệ thống bé tí chỉ có DDR2, + VIP + IP trên hệ bus đã mất có khi đến vài h mới xong 1 cái mô phỏng nhỏ xíu) Với SystemC thì có thể chạy tốc độ như tốc độ ở hệ thống thực (vài trăm MHz thì thoải mái). Như vậy giảm được thời gian thiết kế IP, và giảm khả năng gây lỗi do được chạy simulation nhiều và thường xuyên. Tất nhiên đến cuối cùng thì vẫn phải chạy cả hệ thống 1 lần cuối cho nó chắc trước khi sản xuất . Nhưng có reference model rồi thì debug cũng dễ dàng hơn rất nhiều.
              SystemC không chỉ hỗ trợ điện tử số (event-driven simulation) nó có thể hỗ trợ chạy mô phỏng cả analog/mixed signal và thậm chí nhiều cái nữa (như MEM chẳng hạn), miễn là có simulation kernel phù hợp và một cách nào đó để đồng bộ hóa với SystemC simulation kernel. Em cũng từng nghe có bác kể, do VHDL/verilog không tốt cho việc mô tả các mạch điện không đồng bộ (asynchronous), nên họ đã phải viết thêm code SystemC để miêu tả được hệ thống GALS này. Sau đó thay vì dùng VHDL viết RTL, những người làm phần không đồng bộ phải ngồi vẽ mạch điện (dùng gate) và chạy co-simulation với SystemC model để làm verif.
              -> Các sách viết về SystemC hay Transaction Level Modeling đều nhấn mạnh về ý tưởng này để đẩy nhanh tốc độ thiết kế (cả phần cứng lẫn phần mềm) cũng tức là đẩy nhanh thời gian đưa sản phẩm ra thị trường hay nói cách khách, ai ra nhanh + nhiều + tốt + rẻ sẽ là người chiếm lĩnh thị trường trước và chiếm phần to của miếng bánh thị trường.

              Chúc các bác ngủ ngon
              P/s: em viết nhanh không có thời gian review kỹ nên có chỗ nào sai sót thì xin các bác bỏ qua cho.

              Comment

              Về tác giả

              Collapse

              jefflieu Email minh trực tiếp nếu bạn cần download tài liệu gấp Tìm hiểu thêm về jefflieu

              Bài viết mới nhất

              Collapse

              Đang tải...
              X