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.
Thông báo
Collapse
No announcement yet.
SystemVerilog và SystemC
Collapse
This is a sticky topic.
X
X
-
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:
-
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:
-
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.
- 2 yêu thích
Leave a comment:
-
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ếtKhi 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
Chúc anh cuối tuần vui vẻ!
- 2 yêu thích
Leave a comment:
-
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:
-
Chào anh Tony,
Nguyên văn bởi tonyvandinh Xem bài viếtSystemC thì tiện cho thử cả hai lãnh vực hardware và software. Tiện cho hardware và software partitioning.
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:
-
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.
Leave a comment:
-
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?
(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?
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:
-
Nguyên văn bởi bully Xem bài viếtCô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ô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:
-
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.
Thân,
Bully.
Leave a comment:
-
Nguyên văn bởi stupid1102 Xem bài viếtanh ơ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ếtCó 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:
-
Nguyên văn bởi tonyvandinh Xem bài viếtTô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
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:
-
Nguyên văn bởi jefflieu Xem bài viếtCả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).
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:
-
Nguyên văn bởi matranlogic Xem bài viếtcả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 ạ?
Leave a comment:
Về tác giả
Collapse
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
-
bởi chinhnguyen9Mạch một cấp switching 4s sẽ có 7 tụ và 8 mosfet. Mạch 2 cấp switching 4s sẽ có 12 tụ và 16 mosfet (theo ảnh 1)
Mạch thứ nhất đã có 1 bài viết mô tả, mạch thứ 2 được giới thiệu trong bài viết này
Sơ đồ nguyên lý theo hình 2
Nhận xét: mạch switching 2 cấp rất hoàn...-
Channel: Điện tử dành cho người mới bắt đầu
hôm nay, 09:27 -
-
bởi FschoolvnTrong bối cảnh toàn cầu hóa giáo dục, ngày càng nhiều học sinh được gia đình chắp cánh để truy cầu kiến thức từ các quốc gia phát triển, đặc biệt là Hoa Kỳ. Từ ước mơ thụ hưởng nền giáo dục chất lượng, không ít học sinh nhìn...01-05-2024, 00:54
-
Trả lời cho Hỏi xin sơ đồ tivi các loạibởi Trân thànhCần các Bạn giúp sơ đồ Lcd Samsung UA40JU6400 và UA43ku6500k. Xin cảm ơn!...
-
Channel: Điện tử truyền hình
28-04-2024, 16:07 -
-
Trả lời cho Hỏi xin sơ đồ tivi các loạibởi Trân thànhCần các Bạn giúp sơ đồ Lcd Samsung UA40JU6400 và UA43ku6500k. Xin cảm ơn!...
-
Channel: Điện tử truyền hình
28-04-2024, 16:01 -
-
bởi chinhnguyen9Hoạt động của thế hệ mạch cân bằng trước đây dựa trên nguyên lý so áp giữa 2 string liền kề. Hoạt động cân bằng chỉ kích hoạt khi sự chênh lệch vượt ngưỡng 100mV và ngưng hoạt động khi mức chênh lệch giảm xuống còn 30mV. Bản...
-
Channel: Điện tử dành cho người mới bắt đầu
27-04-2024, 05:07 -
-
bởi chinhnguyen9Xem hình minh họa có phần thuyết minh bên trong tiện việc quan sát và đọc thuyết minh. Khi G1 high dòng điện chạy theo các đường màu đen khi G2 high dòng điện chạy theo các đường màu nâu đỏ.
Bổ sung một tính chất củng cố cho tên gọi tụ bay: Trong mạch đề cập chỉ...-
Channel: Điện tử dành cho người mới bắt đầu
26-04-2024, 21:02 -
-
bởi chinhnguyen9Sản phẩm này ghi version 2.0 01-2024 MADE IN CHINA nhưng không thấy thương hiệu hình 1
Do 8 chân G của 8 mosfet được đấu song song thành 2 nhóm nên có cùng biên độ xung kích 12V. Nhưng Q1 và Q2 nằm cuối dãy, chân S cùa chúng có điện áp DC cao đến...-
Channel: Điện tử dành cho người mới bắt đầu
26-04-2024, 20:37 -
-
bởi xuanthiettivi em bị mất remote lỡ vào chế độ usb giờ không chọn lại source được. ai có file nạp cho em xin với ạ. Model 32HD957T2
-
Channel: Điện tử truyền hình
26-04-2024, 10:53 -
-
Trả lời cho Giải thích nôm na từ "tụ bay"bởi chinhnguyen9Đa tạ lời cảm ơn của bạn. Mến!
-
Channel: Hướng dẫn sử dụng diễn đàn
26-04-2024, 05:06 -
-
Trả lời cho Xin tư vấn về mạch cầu H cho inverter 1000wbởi thebinhzChắc là không được đâu bạn ơi
Quán ăn Vĩnh Yên-
Channel: Điện tử công suất
25-04-2024, 21:56 -
Leave a comment: