Phần 1. Verilog là gì ? Khái niệm về Verilog.
Verilog, được tiêu chuẩn hóa thành IEEE 1364, là ngôn ngữ mô tả phần cứng (hardware description language, viết tắt: HDL) được sử dụng để mô hình hóa các hệ thống điện tử. Nó được sử dụng phổ biến nhất trong thiết kế và xác minh các mạch số ở mức thanh ghi (Register Transfer Level – RTL). Nó cũng được sử dụng trong việc xác minh các mạch tương tự (analog) va mạch tín hiệu hỗn hợp (mixed signal). Vào năm 2009, tiêu chuẩn Verilog (IEEE 1364-2005) đã được hợp nhất vào tiêu chuẩn System Verilog, tạo ra tiêu chuẩn IEEE 1800-2009. Kể từ đó, Verilog chính thức là một phần của ngôn ngữ System Verilog. Phiên bản hiện tại là tiêu chuẩn IEEE 1800-2017.
Một loại ngôn ngữ HDL phổ biến khác bên cạnh Verilog là VHDL (Very high speed integrated citcuit HDL). Trước đây VHDL thường được sử dụng ở các nước phương Tây, đặc việt là châu Âu, còn Verilog phổ biến hơn ở các nước châu Á. Nhưng hiện nay, với sự nổi lên của System Verilog, Verilog có vẻ như đang chiếm ưu thế hơn so với VHDL bởi sự tương thích của nó với System Verilog.
Phần 2. Chức năng của Verilog. Sự khác nhau giữa Verilog cho thiết kế và Verilog cho kiểm tra, xác minh
Trong phạm vi bài viết này, tác giả chỉ đề cập đến mạch số (digital).
Như đã trình bày ở trên, Verilog là ngôn ngữ mô tả phần cứng HDL và được dùng để mô ta các hệ thống điện tử. Đối với mạch số, Verilog có 2 chứng năng chính
- Thiết kế mạch số, dùng trong khâu RTL Design
- Kiểm tra xác minh mạch số, dùng trong khâu Design Verification.
Chi tiết về hai khâu này, các bạn có thể tham khảo bài viết.
CÔNG VIỆC CỦA KỸ SƯ THIẾT KẾ RTL (RTL DESIGN) – THÍCH LẬP TRÌNH CÓ NÊN LÀM RTL DESIGN? – Trung Tâm Đào Tạo Thiết Kế Vi Mạch ICTC
CÔNG VIỆC CỦA KỸ SƯ KIỂM TRA RTL (DESIGN VERIFICATION) – BÍ MẬT ĐẰNG SAU VIỆC ĐẢM BẢO THÀNH CÔNG CHO SILICON. – Trung Tâm Đào Tạo Thiết Kế Vi Mạch ICTC
Có sự khác nhau giữa hai mục đích này như sau:
Khi được dùng để thiết kế mạch số, người thiết kế phải tuân theo một số nguyên tắc chặt chẽ để RTL code của mình có thể được tổng hợp (synthesis) thành cổng logic.
Tổng hợp logic là quá trình được thực hiện bởi EDA tool (phần mềm chuyên dụng dùng cho quá trình thiết kế chip), nhằm chuyển RTL code thành các cổng logic AND, OR, NOT…, latch, flip-flop… Nhưng không phải mã RTL nào cũng tổng hợp được, chỉ các mã RTL tuân thủ các quy tắc thiết kế mới có thể tổng hợp thành cổng logic (synthesizable – khả tổng hợp).
Dưới đây là ví dụ về một đoạn code Verilog được tổng hợp thành cổng logic.
Mục đích chính thứ hai của Verilog là dùng trong việc kiểm tra, xác minh thiết kế (Design Verification). Các kĩ sư DV sẽ dùng Verilog để xây dựng môi trường mô phỏng (simulation environment), viết các model, test cases … để kiểm tra thiết kế. Verilog phục vụ cho mục đích này không cần thiết phải tổng hợp thành cổng logic, nên các kĩ sư DV có thể tận dụng được mọi tính năng của nó mà không cần quan tâm đến các quy tắc ràng buộc như các kĩ sư thiết kế.
Phần 3. Sự khác nhau cơ bản giữa Verilog dành cho thiết kế RTL và các ngôn ngữ lập trình khác.
Quay lại ví dụ về thiết kế trên, ta sẽ thấy mạch được tổng hợp sẽ có 3 cổng AND cùng mức level, và ngõ ra Z được tạo thành từ ngõ ra của 3 cổng AND trên.
Đối với các ngôn ngữ lập trình thông thường, việc viết các dòng code tuần tự sẽ dẫn đến thực thi một cách tuần tự từ trên xuống, nhưng đối với Verilog thì khác, ngõ ra sẽ phụ thuộc vào các ngõ vào, nên nếu ta đảo thứ tự code của ví dụ trên, mạch được sinh ra sau quá trình tổng hợp không có gì thay đổi.
Sự khác nhau cơ bản này có thể làm cho một số bạn cảm thấy hơi rối và khó hiểu lúc ban đầu. Những gì chúng ta cần làm là nẵm rõ cấu trúc mạch để biết đâu là ngõ ra, đâu là ngõ vào và sự phụ thuộc lẫn nhau giữa chúng để viết code cho đúng.
Phần 4. Học Verilog như thế nào ?
Để học được Verilog, các bạn phải có kiến thức cơ bản về hệ thống số, các kiến thức cơ bản về cổng logic, mạch tổ hợp, mạch tuần tự … Những kiến thức này có thể được học trong môn kỹ thuật số trong các trường đại học.
Sau khi nắm được kiến thức nền tảng, chúng bắt đầu học các syntax của Verilog, cách mô tả các mạch logic để có thể áp dụng và thiết kế các module cơ bản từ dễ đến khó. Sau đó tiếp tục nghiên cứu cách xây dựng môi trường mô phỏng, cách viết testbench, testcase để kiểm tra thiết kế. Tất cả các tính năng của Verilog sẽ được vận dụng vào công việc này.
Một điểm khó của Verilog khiến nó khó tiếp cận hơn chính là cần công cụ biên dịch, tổng hợp, mô phỏng đặc biệt. Nếu học trong trường đại học các bạn có thể liên hệ với thầy cô, phòng lab để được cung cấp công cụ.
Ngoài ra các bạn có thể tham gia khóa học thiết kế vi mạch cơ bản của ICTC. Khóa học sẽ cung cấp cho bạn tất cả các kiến thức nền tảng cần thiết, sau đó đi sâu vào cách thiết kế và kiểm tra mạch tích hợp dùng ngôn ngữ Verilog. Tất cả các công việc trên đều được thực hành trên server đã tích hợp sẵn EDA tool cần thiết cho việc thiết kế, biên dịch, mô phỏng, hoàn toàn giống với môi trường server của công ty mà sau này các bạn sẽ đi làm.
Chi tiết khóa học các bạn có thể tham khảo tại:
Khóa Học Thiết Kế Vi Mạch Cơ Bản – Trung Tâm Đào Tạo Thiết Kế Vi Mạch ICTC
Phần 5: Lời kết
Verilog là ngôn ngữ thiết kế và kiểm tra RTL phổ biến nhất hiện nay. Hiện tại System Verilog cũng ngày càng trở nên thông dụng nhưng Verilog vẫn giữ vị trí quan trọng trong nền công nghiệp vi mạch. Sự so sánh giữa Verilog và System Verilog cũng giống như so sánh hai ngôn ngữ C và C++ trong lập trình phần mềm. Tiếp cận và hiểu rõ Verilog sẽ giúp cho việc sử dụng System Verilog trở nên đơn giản và hiệu quả hơn. Dĩ nhiên, đây là quan điểm cá nhân của tác giả, chúng ta vẫn có thể học và khám phá các tính năng System Verilog một cách thoải mái mà không cần học Verilog. Cũng giống như bạn có thể học C++ mà không cần học qua ngôn ngữ C vậy.