Bài viết này dành cho các bạn sinh viên chuyên ngành điện tử, khoa học máy tính, hệ thống nhúng hoặc viễn thông mong muốn hiểu cơ bản về ngành “thiết kế vi mạch. “Cần phải học những môn nào để có thể làm về lĩnh vực thiết kế vi mạch nói chung và thiết kế vi mạch số nói riêng?” là câu hỏi mà nhiều bạn sinh viên băn khoăn. Trong bài viết này, tác giả cố gắng trình bày những kinh nghiệm bản thân để các bạn sinh viên quan tâm đến ngành thiết kế vi mạch hoặc thiết kế mạch tích hợp ( Integrated Circuit Design, VLSI design) có thể tham khảo và định hướng nghề nghiệp sớm.
1) Tổng quan về ngành thiết kế vi mạch?
Thiết kế vi mạch (Integrated circuit design hay VLSI design) là một ngành chuyên nghiên cứu, phát triển và chế tạo các chip điện tử, còn gọi là mạch tích hợp (IC – Integrated Circuit).
Để tạo ra một chip (vi mạch) cần rất nhiều công đoạn khác nhau. Các công đoạn này có thể được phân làm hai nhóm lớn là thiết kế/phát triển (design/development) và sản xuất (manufacturing). Hai nhóm lớn này bao gồm rất nhiều bước khác nhau, mỗi bước yêu cầu một lượng kiến thức và kỹ năng nhất định khác các bước còn lại, từ đó định nghĩa “vị trí công việc” (job) của các bạn.
Hiện tại, ở Việt Nam, các công ty về lĩnh vực vi mạch đều chỉ làm về thiết kế/phát triển, chưa có bất kỳ công ty sản xuất vi mạch nào. Nguyên nhân chính là vì các nhà máy sản xuất vi mạch cần có sự đầu tư ban đầu rất lớn với rất nhiều máy móc, thiết bị đắt tiền; thiết kế xây dựng nhà máy phức tạp và nguồn nhân lực có kỹ thuật, kinh nghiệm cao vận hành. Các nhà máy sản xuất vi mạch hiện này tập trung ở một số nước phát triển như Đài Loan (TSMC, UMC), Mỹ (GlobalFoundries), Nhật Bản (Toshiba, Hitachi), Hàn Quốc (Samsung, SK Hynix), Trung Quốc (SMIC, CSMC), …
Trong khi đó, công ty thiết kế/phát triển chỉ cần giải quyết hai yếu tố quan trọng là bản quyền phần mềm và nguồn nhân lực nên chi phí đầu tư ban đầu thấp hơn. Công ty chỉ thiết kế và phát triển không sản xuất gọi là Fabless (Fabrication-less).
Công ty chỉ chuyên sản xuất vi mạch gọi là Foundry. Foundry chia làm 2 loại:
- Công ty chủ yếu dựa trên đơn đặt hàng sản xuất từ các công ty khác, hầu như không tự thiết kế chip, gọi là Pure-play Foundry.
- Công ty vừa sản xuất chip cho các công ty khác lại vừa thiết kế/phát triển chip của riêng mình gọi là công ty IDM (Integrated Device Manufacturer) Foundy hoặc IDM.
Công ty liên doanh giữa công ty fabless và foundry gọi là mô hình công ty fabless-foundry. Mục đích liên doanh của các công ty này là tận dụng lợi thế của hai bên để phát triển sản phẩm tốt nhất.
2) Những công việc (job) chính khi làm về lĩnh vực thiết kế vi mạch ở Việt Nam
Như đã nói ở trên, ở Việt Nam hiện tại chỉ có các công ty về nghiên cứu/phát triển (Fabless) nên công việc chủ yếu dành cho các bạn cũng nằm ở các khâu nghiên cứu/phát triển.
Font-End designer:
1. IC Designer:
- Phân tích kiến trúc hệ thống, lõi IP. Ở đây, hệ thống được hiểu là một SoC hoặc một chip hoàn chỉnh gồm nhiều lõi IP kết nối với nhau.
- Làm tài liệu mô tả kiến trúc, tài liệu mô tả thiết kế (specification)
- Làm tài liệu hướng dẫn sử dụng thiết kế (User guide or User Manual)
- Mô tả (viết) RTL code dùng ngôn ngữ mô tả phần cứng Verilog, VHDL hoặc ngôn ngữ mô tả hệ thống System Verilog, SystemC
- Kiểm tra thiết kế mức cơ bản bằng các phần mềm chuyên dụng
- Kiểm tra cú pháp (syntax)
- Kiểm tra luật thiết kế (design rule)
- Mô phỏng thiết kế khi chưa gắn với hệ thống (unit test)
2. IC Verifier:
- Phân tích chiến lược kiểm tra một thiết kế hoặc hệ thống (verification strategy): Các chức năng của thiết kế sẽ được kiểm tra bằng cách nào? phương pháp kiểm tra? Làm sao để đảm bảo toàn bộ thiết kế được kiểm tra đầy đủ (coverage)?
- Xây dựng môi trường kiểm tra thiết kế hoặc hệ thống
- Viết các testcase, testbench để kiểm tra
- Debug (gỡ lỗi) trong quá trình kiểm tra thiết kế
- Kiểm tra kết quả, phân tích kết quả
Back-End Designer:
1. Synthesis engineer (Công việc này thường chia làm nhiều công đoạn và có thể được thực hiện một phần bởi Front-End designer và một phần bởi Back-End designer)
- Xây dựng môi trường tổng hợp
- Tổng hợp thiết kế tạo ra netlist từ RTL code
- Kiểm tra tính tương đồng giữa RTL và gate sau khi synthesis (Equivalence Checking)
- Phân tích timing (STA)
- Phân tích, debug các lỗi về timing, design rule
2. DFT (Design For Testing) engineer
- Phân tích, thiết kế logic DFT cho chip như MBIST/LBIST/SCAN/BS
- Tạo test plan và test pattern
- Tạo các DFT constraint
- Phân tích và debug lỗi DFT
3. Layout engineer
- Thiết kế planning tạo ra floorplan
- Placement
- Tổng hợp cây clock CTS (Clock Tree Synthesis)
- Routing
- Kiểm tra DRC và LVS
3) Những kiến thức nào cần phải học?
Hiện nay nhiều trường đại học có khoa điện-điện tử, điện tử viễn thông hoặc khoa công nghệ đều giảng dạy các kiến thức cơ bản liên quan đến công nghệ vi mạch, mạch tích hợp (integrated circuit) hoặc bán dẫn (semiconductor). Các bạn có thể tham khảo thông tin ở một số trường sau:
- Một số trường ở miền Nam:
- Đại học Bách Khoa TP. HCM
- Đại học Khoa học Tự nhiên TP. HCM
- Đại học Công nghệ Thông tin TP. HCM
- Đại học Sư phạm Kỹ thuật TP. HCM
- Đại học Tôn Đức Thắng
- Đại học Cần Thơ
- Đại học công nghiệp thực phẩm (khoa điện-điện tử có dạy về lập trình nhúng FPGA và Verilog HDL)
- Một số trường ở miền Trung:
- Đại học Bách khoa Đà Nẵng
- Đại học Duy Tân
- Một số trường ở miền Bắc
- Đại học Bách khoa Hà Nội
- Đại học Công nghiệp Hà Nội
- Đại học Lê Quý Đôn (Học viện kỹ thuật quân sự)
- Đại học Công nghệ, Đại học Quốc gia Hà Nội
Các môn học và kiến thức cung cấp tại mỗi trường cũng có sự khác biệt và khối lượng môn học nhiều làm nhiều bạn khó hình dung nên học gì? học như thế nào? hoặc mất nhiều thời gian để tìm hiểu. Ở đây, tác chia làm 4 nhóm kiến thức các bạn cần tập trung đầu tư học để nhanh chóng hòa nhập với công việc sau khi ra trường. Mới mỗi nhóm kiến thức, tác giả sẽ giải thích tại sao phải học? và học để làm gì? từ đó cạn bạn hãy so sánh với đề cương các môn học trong trường để lựa chọn học tập.
- Nhóm kiến thức cơ bản: làm nhóm kiến thức chung của ngành điện tử
- Kiến thức về mạch điện và mạch điện tử: Những nguyên lý và hoạt động cơ bản của mạch điện là kiến thức nền tảng hỗ trợ bạn hiểu, phân tích các hiện tượng, thông số điện.
- Kiến thức về linh kiện điện tử: Chip cũng chỉ là một loại linh kiện điện tử. Việc hiểu về các linh kiện điện tử sẽ hỗ trợ tốt trước khi học sâu hơn về vi mạch.
- Kiến thức về vi điều khiển, vi xử lý: Các chip SoC hiện nay đều có lõi vi xử lý bên trong nên kiến thức này thường rất liên quan đến nhiều job trong lĩnh vực vi mạch. Việc học về vi xử lý nào không quan trọng khi bạn mới bắt đầu nên đừng hoang mang tại sao thế giới hay dùng ARM mà trường lại dạy về 8051? Cái bạn cần là hiểu về cấu trúc, hoạt động và sử dụng. Sau đó, việc mở rộng tìm hiểu các lõi vi xử lý khác là dễ dàng.
- Kiến thức về lập trình với ngôn ngữ Assembly và C cho vi điều khiển và vi xử lý: Các chip SoC đều có lõi vi xử lý bên trong thì nếu bạn làm công việc kiểm tra hệ thống hay lõi IP trong hệ thống thì cần sử dụng kiến thức này để tạo ra các test kiểm tra. Bên cạnh đó, bạn sẽ có được cái nhìn của một user (người dùng chip) để khi thiết kế một lõi IP hay chip SoC, bạn sẽ phải nghĩ nên làm thế nào để user có thể sử dụng hiệu quả và dễ dàng nhất.
- Nhóm kiến thức chuyên môn chung: là những kiến thức phục vụ trực tiếp cho công việc thiết kế vi mạch. Dù bạn làm công việc chuyên môn nào cũng cần phải biết.
- Kiến thức về quy trình thiết kế vi mạch (design flow): Tuy bạn không làm hết tất cả nhưng tổng quan cần phải nắm để biết công việc mình làm liên quan như thế nào các công việc khác.
- Kiến thức về các thành phần logic (logic component) như AND, OR, XOR, NOT, AOI, OAI, Flip-Flop, Latch, … để bạn có thể mô tả specification của thiết kế, hiểu hoạt động của thiết kế, netlist của thiết kế, …
- Kiến thức về thiết kế mạch số (digital logic circuit design):
- Mạch tổ hợp (combinaltional circuit)
- Mạch tuần tự (sequential circuit)
- Máy trạng thái (FSM – Finite State Machine)
- Đại số Boolean, bìa Karnaugh
- Kiến thức về CMOS
- Hoạt động của CMOS
- Cấu tạo của các cổng logic theo mô hình CMOS
- Kiến thức về ngôn ngữ lập trình
- Ngôn ngữ mô tả phần cứng Verilog, VHDL, System Verilog để đọc hiểu và mô tả RTL code của thiết kế
- Ngôn ngữ thiết kế phần cứng mức cao SystemC
- Nhóm kiến thức chuyên sâu đối với từng công việc cụ thể
- IC Designer
- Cấu trúc các mạch loại mạch số cơ bản và thường dùng như encoder, decoder, MUX, DE-MUX, mạch cộng, mạch nhân, FIFO, LIFO, mạch đồng bộ, mạch phát hiện cạnh, …
- Cấu trúc cơ bản của SoC
- Cấu trúc BUS hệ thống và các giao thức BUS phổ biến
- Các kỹ thuật thiết kế như thiết kế đồng bộ, thiết kế bất đồng bộ, thiết kế nhiều miền xung clock, thiết kế tần số cao, thiết kế công suất thấp, …
- IC Verifier
- Kiến thức về các phương pháp kiểm tra thiết kế như mô phỏng (simulation) hay kiểm tra formal (formal verification)
- Ngôn ngữ thiết kế và mô phỏng System Verilog (đã bao gồm Verilog) hoặc SystemC để xây dựng môi trường mô phỏng và mô tả RTL code của thiết kế
- Phương pháp mô phỏng UVM (Universal Verification Methodology) – Có nhiều phương pháp mô phỏng khác nhau nhưng phương pháp này là phương pháp phổ biến và mới nhất. Thư viện UVM được xây dựng trên ngôn ngữ System Verilog.
- Hiểu về VIP (Verification IP) – VIP là những mô hình được xây dựng sẵn bởi nhiều nhà cung cấp khác nhau để hỗ trợ mô phỏng thiết kế.
- Phân tích waveform – là kỹ năng cần thiết và quan trọng phục vụ cho debug
- Back-End Designer
- Kiến thức về quy trình thiết kế vật lý (physical design flow) và custom design
- Thư viện công nghệ (technology library)
- Kiến thức về phân tích timing tĩnh (STA – Static Timing Analysis)
- Kiến thức về DFT (Design For Test)
- Sử dụng phần mềm công nghệ: Đối với Back-End Designer việc hiểu, cấu hình đúng phần mền; thiết lập các constraint đúng và đủ là rất quan trọng vì nó ảnh hưởng trực tiếp đến chất lượng của bản thiết kế Back-end như netlist, Layout.
- IC Designer
- Nhóm kiến thức hỗ trợ
- Ngôn ngữ thiết kế và mô phỏng hệ thống SystemC để xây dựng môi trường mô phỏng và mô tả thiết kế. Hiện nay, với ưu điểm giúp quá trình thiết kế và mô phỏng nhanh hơn, SystemC đang được sử dụng ngày càng phổ biến. Code mô tả thiết kế bằng SystemC có thể chuyển đổi được thành RTL code (Verilog hoặc VHDL) bằng phần mềm chuyên dụng.
- Kiến thức về nền tảng Linux vì các phần mềm chuyên dụng chạy trên nền tảng này việc hiểu một chút về Linux, như cài đặt phần mềm, cấu trúc sắp xếp thư mục, nguyên lý gọi và chạy phần mềm, sử dụng lệnh và thao tác trên terminal, … sẽ là các kỹ năng gắn liền với công việc của bạn mỗi ngày
- Kiến thức về các editor như VI, VIM vì khi sử dụng Linux, các bạn sẽ thao tác chính trên các editor này
- Ngôn ngữ script như Perl, C-shell vì bạn sẽ sử dụng chủ yếu các công cụ viết bằng các ngôn ngữ này để làm việc. Mục đích chính của các script là giúp bạn rút ngắn thời gian làm việc bằng cách tự động hóa các công việc “tay chân”.
- Kiến thức về FPGA: FPGA thì liên quan gì đến vi mạch? Khi sử dụng FPGA bạn cũng sẽ làm các công việc như thiết kế, RTL coding, mô phỏng, tổng hợp, phân tích timing, … Tuy thiết kế trên FPGA có khác với thiết kế ASIC nhưng các bạn sẽ học được nhiều khái niệm thuật ngữ, kỹ năng chung như bên thiết kế ASIC.
- Kiến thức về các phần mềm dùng trong thiết kế vi mạch: có thể bạn khó tiếp cận được các phần mềm này vì chúng không free và giá bản quyền rất cao nhưng có thể đọc để biết, phần mềm nào dùng để làm gì và tìm các phần mềm open source để thực hành.