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

  • cation_h
    replied
    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.

    Leave a comment:


  • tonyvandinh
    replied
    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

    Leave a comment:


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

    Leave a comment:


  • tonyvandinh
    replied
    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.

    Leave a comment:


  • hithere123
    replied
    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ẻ!

    Leave a comment:


  • tonyvandinh
    replied
    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

    Leave a comment:


  • hithere123
    replied
    Chào anh Tony,

    Nguyên văn bởi tonyvandinh Xem bài viết
    SystemC thì tiện cho thử cả hai lãnh vực hardware và software. Tiện cho hardware và software partitioning.
    Anh có thể nói rõ hơn về vấn đề này được không? Giả thiết thế này: ta đang thiết kế một hệ thống SoC có tích hợp DSP, kỹ sư software có viết một vài chương trình như decoder/encoder video và muốn mô phỏng xem chạy như thế nào. Nếu ta xây dựng môi trường kiểm tra dựa trên SystemVerilog thì chỉ có thể kiểm tra được nếu chương trình software đó đã được biên dịch thành mã "01.." dưới định dạng của bộ nhớ ROM hay RAM. Điều đó có nghĩa là kỹ sư software phải dùng một bộ công cụ riêng để biên dịch phần mềm xuống dạng binary rồi mới có thể mô phỏng được trên hệ thống kiểm tra SoC đó; trong khi nếu môi trường kiểm tra được xây dựng dựa trên SystemC thì kỹ sư software có thể trực tiếp dùng hệ thống kiểm tra đó để mô phòng software của họ. Em hiểu như vậy có đúng không?

    Hoặc đơn giản như viết firmware, thì các kỹ sư firmware có thể dùng trực tiếp hệ thống kiểm tra xây dựng dựa trên systemC để kiểm tra firmware của họ không? Hiện tại em chỉ có thể kiểm tra firmware dưới dạng mã hex của ROM/SRAM với hệ thống kiểm tra xây dựng dựa trên SystemVerilog. (tức là phải cần một trình biên dịch như keil để dịch xuống mã hex của ROM sau đó mới mô phỏng được nên đôi khi communication giữa kỹ sư thiết kế và kỹ sư viết firmware không được thông cho lắm.)

    Rât mong được trao đổi thêm với anh về vấn đề này!
    Thân mến,

    Leave a comment:


  • tonyvandinh
    replied
    Tớ thì không biết về SystemC lắm (dù hồi xưa cũng có học 1 môn về nó!), nhưng nếu Tony "khởi động" thì tớ sẽ tham gia.
    Để tôi mở một đề tài về căn bản của systemC. Hy vọng sẽ được nhiều bạn hưởng ứng.

    Leave a comment:


  • bully
    replied
    Chào buổi tối Tony,

    Nhật bản là quốc gia đi sâu nhất về systemC. Chắc công ty của bạn có sự liên hệ với những đối tác ở Nhật Bản?
    Yep, đối tác của tớ ở Nhật Bản.
    (Hiện tại thì nhóm SLD mà tớ nói đang triển khai mảng High-Level Synthesis thì phải).
    Tớ có nói chuyện với bạn Leader nhóm đó sáng nay, bạn ấy nói về kỹ thuật bên VN mình nắm khá tốt, chỉ sau các bác Nhật khoảng 6 tháng (PR cho bạn bè tí :-).


    Tôi muốn mở một đề tài về systemC nhưng ngại là nó không thích hợp với các bạn. Bully nghĩ sao?
    Tại sao không nhỉ?

    Tuy nhiên tớ nghĩ cân nhắc chọn đề tài nào cũng là một vấn đề.
    Theo ý tớ, mình có thể bắt đầu từ những ví dụ đi kèm của các EDA tools.
    Tớ thì khoái bên Synopsys hơn (vì mới cài được VCS trên Ubuntu nhờ sự giúp đỡ của bác Rommel :-),
    Tool của Mentor thì tớ mới biết có Modelsim. Nghe nói Questasim hỗ trợ SystemC và SystemVerilog khá tốt.
    Nếu khởi đầu thuận lợi thì mình có thể chọn một đề tài khó hơn hoặc có thể đưa những ví dụ sẵn có trên opencores để phân tích ... blah blah blah.

    Tớ thì không biết về SystemC lắm (dù hồi xưa cũng có học 1 môn về nó!), nhưng nếu Tony "khởi động" thì tớ sẽ tham gia.

    (Thông tin thêm: bạn Rommel cũng up lên tool Coware của Synopsys, khá là hay :-)

    Chúc các bạn vui vẻ,
    Bully

    Leave a comment:


  • tonyvandinh
    replied
    Nguyên văn bởi bully Xem bài viết
    Công ty tớ đã làm về mảng này cách đây 3,4 năm rồi, có hẳn một đội về System Level Design, cũng khá mạnh
    Nhật bản là quốc gia đi sâu nhất về systemC. Chắc công ty của bạn có sự liên hệ với những đối tác ở Nhật Bản?

    Tôi muốn mở một đề tài về systemC nhưng ngại là nó không thích hợp với các bạn. Bully nghĩ sao?

    Leave a comment:


  • bully
    replied
    Chào bác Tony,

    Tớ không làm về SystemC nhưng cũng xin đính chính một chút ạ:
    Những kỹ thuật này còn khá mới mẻ với những nước đã phát triển cho nên có thể rất xa vời với VN.
    Công ty tớ đã làm về mảng này cách đây 3,4 năm rồi, có hẳn một đội về System Level Design, cũng khá mạnh. Ý tớ là những kĩ thuật nêu trên không hẳn là xa vời với VN đâu :-),

    Thân,
    Bully.

    Leave a comment:


  • tonyvandinh
    replied
    Nguyên văn bởi stupid1102 Xem bài viết
    anh ơi, link failed rồi á, up lại đi

    Tôi đã up lên diễn đàn rồi, chắc đọc chưa tới

    http://www.dientuvietnam.net/forums/...9&d=1270835214

    Nguyên văn bởi stupid1102 Xem bài viết
    Có bác nào biết thầy Nguyễn Đức Minh ở khoa ĐTVT - ĐHBKHN ko ạ. thấy bảo đây là 1 chuyên gia formal verification.
    Sao có nhiều người hiểu lầm về Formal Verification thế nhỉ. Chắc vì nhiều bài hay dùng chữ tắt là FV. Nhưng chính ra là được viết tắt cho Functional Verification. SystemV và systemC hay được dùng cho Functional Verification. SystemV có lợi điểm hơn nếu chỉ dùng để thử hardware, dễ dùng cho RTL designers hơn vi chỉ là extension của Verilog. SystemC thì tiện cho thử cả hai lãnh vực hardware và software. Tiện cho hardware và software partitioning. systemC 2.0 đi thêm một bước mới về TLM (transaction level modeling). Giúp làm modeling dễ và nhanh hơn (higher abstraction). Những kỹ thuật này còn khá mới mẻ với những nước đã phát triển cho nên có thể rất xa vời với VN.

    Leave a comment:


  • stupid1102
    replied
    Nguyên văn bởi tonyvandinh Xem bài viết
    Tôi không biết vì sao không up được nên diễn đàn này cho nên tôi up lên megaupload. Các bạn theo cái link ở dưới để lấy xuống nhé

    http://www.megaupload.com/?d=N279HY4Z
    anh ơi, link failed rồi á, up lại đi

    Có bác nào biết thầy Nguyễn Đức Minh ở khoa ĐTVT - ĐHBKHN ko ạ. thấy bảo đây là 1 chuyên gia formal verification.

    Leave a comment:


  • tonyvandinh
    replied
    Nguyên văn bởi jefflieu Xem bài viết
    Cảnh cáo ban matranlogic vì câu hỏi off-topic (Anh F xúi là phải cảnh cáo những bài viết kiểu này ). Có gì mời bạn mở một thread khác, và nếu thật sự quan tâm và muốn học hỏi, bạn phải nêu câu hỏi một cách chi tiết (Để nêu câu hỏi được chi tiết cần không ít những nghiên cứu ban đầu).
    Cám ơn bạn Jeff đã nhắc nhở về nghi lệ của thread

    matranlogic, mình đã đi khá xa ngoài đề tài của thread này và có thể tạo khó khăn cho những bạn muốn theo dõi. Thôi thì bạn cố gắng mở một thread mới nhé. Tiện đây tôi xin gửi bạn cái link này để bạn nghiên cứu thêm và hy vọng nhờ đó bạn có thể tạo một thread thích thú hơn

    http://en.m.wikipedia.org/wiki/Analo...edirected=true

    chúc bạn thành công
    Tony

    Leave a comment:


  • jefflieu
    replied
    Nguyên văn bởi matranlogic Xem bài viết
    cảm ơn bác Tony về những kinh nghiệm của bác em xin lắng nghe ạ.do em không được học về cái này( vhdl) chỉ mới nghiên cứu về nó thôi ạ nên em chưa hiểu rõ về nó. có gì mong bác và mọi người trong diễn đàn giúp đỡ thêm ạ. thế có thể làm được bộ chuyển đổi DAC không ạ?
    Cảnh cáo ban matranlogic vì câu hỏi off-topic (Anh F xúi là phải cảnh cáo những bài viết kiểu này ). Có gì mời bạn mở một thread khác, và nếu thật sự quan tâm và muốn học hỏi, bạn phải nêu câu hỏi một cách chi tiết (Để nêu câu hỏi được chi tiết cần không ít những nghiên cứu ban đầu).

    Leave a 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