Bài viết này được xây dựng với mục đích cung cấp một số kiến thức, khái niệm cơ bản của quá trình thiết kế RTL. Bằng cách này, các bạn học sinh sinh viên sẽ có cơ hội hiểu rõ hơn về công việc này, từ đó giúp các bạn tự tịn hơn trong việc đưa ra ra quyết định đúng đắn cho những bước tiến tiếp theo trong sự nghiệp của mình.
I. Thiết Kế RTL là gì?
RTL là viết tắt của “Register-Transfer Level”, đây là một cấp độ trừu tượng (abstraction level) trong quá trình thiết kế vi mạch số. RTL được dùng để mô tả chức năng của mạch thông qua sự chuyển đổi dữ liệu (transfer data) giữa các thanh ghi (register).
Việc sử dụng RTL giúp người thiết kế tập trung vào chức năng logic của mạch mà không quan tâm quá chi tiết về cấu trúc vật lý của nó.
Thông thường, mã RTL được viết bằng các ngôn ngữ mô tả phần cứng HDL (Hardware Description Language) như: VHDL, Verilog, System Verilog.
Sau khi thiết kế RTL, các công cụ tổng hợp (systhesis tool) có thể chuyển đổi mã này thành các cấu trúc cụ thể của mạch (netlist).
II. Vị trí của thiết kế RTL trong quy trình thiết kế IC
Thiết kế RTL (RTL Design) nằm ở bước thiết kế Front-End.
Sau khi kiến trúc của chip đã được thiết kế một cách rõ ràng cụ thể bởi các kĩ sư trưởng (Architect Engineer), các yêu cầu thiết kế của từng khối (block/module/IP) sẽ được được đưa về cho từng kĩ sư để bắt đầu công việc thiết kế. Đó chính là bắt đầu của khâu thiết kế RTL.
Khi mã RTL (RTL code) đã được viết hoàn chỉnh, các kĩ sư kiểm tra thiết kế (Design Verification Engineer) sẽ tiến hành các bước kiểm thử để đảm bảo tính đúng đắn của mã RTL đó. Nếu có phát hiện ra lỗi sai (defect/bug), các kĩ sư kiểm tra thiết kế sẽ phản hồi lại để các kĩ sư thiết kế sửa lỗi.
Sau khi hoàn tất quá trình kiểm tra, mã RTL sẽ được bàn giao cho các bộ phận khác để tiến hành các khâu tiếp theo trong qua trình thiết kế Back-End.
III. Các bước thiết kế RTL
Có 5 bước chính để thiết kế RTL.
- Bước 1: phân tích yêu cầu thiết kế
- Bước 2: viết tài liệu mô tả thiết kế
- Bước 3: viết mã RTL
- Bước 4: biên dịch, kiểm tra DRC và tự kiểm thử
- Bước 5: synthesis và design contraint
1. Phân tích yêu cầu thiết kế (design requirement analysis)
Khi nhận được danh sách yêu cầu thiết kế từ các kĩ sư trưởng hoặc các bộ phận cấp cao khác, kĩ sư thiết kế RTL sẽ tiến hành phân tích, ước lượng, đánh giá tính khả thi của yêu cầu thiết kế. Nếu có điểm nào bất hợp lý, các kĩ sư thiết kế sẽ phản hồi lại cho bộ phận làm sản phẩm (product team) để có thể hiệu chỉnh hoặc làm việc lại với khách hàng về yêu cầu này.
Đôi khi có những lỗi (bug) xảy ra do khách hàng muốn IP phải đạt được một chỉ tiêu nào đó nhưng cuối cùng chỉ đạt được một nửa hoặc 1/3 do các kĩ sư thiết kế không đánh giá đúng tính khả thi của yêu cầu, dẫn đến khách hàng có thể từ chối kí hợp đồng với công ty, hoặc bắt bồi thường một khoản tiền tương ứng. Đây là lỗi rất nghiêm trọng nên thường bộ phận product luôn nhắc nhở các kĩ sư phải luôn kiểm tra lại tất cả các yêu cầu thiết kế xem IP mình đã thỏa mãn hết được chưa.
Ngoài ra, việc phân tích và làm việc trực tiếp với product team giúp các kĩ sư hiểu rõ hơn về yêu cầu thiết kế, tránh hiểu sai dẫn đến thiết kế sai sau này.
2. Viết tài liệu mô tả thiết kế (design specification)
Tài liệu mô tả thiết kế (design specification) là một loại tài liệu kĩ thuật mô tả cách thức hoạt động mong muốn, thể hiện ý tưởng thiết kế của người kĩ sư thiết kế RTL. Đây là một bước bắt buộc trong quá trình thiết kế RTL và phải thực hiện trước khi bắt đầu quá trình viết mã RTL. Mục đích của tài liệu này nhằm:
- Giúp ý tưởng thiết kế trở nên rõ ràng: các ý tưởng thiết kế được viết chi tiết rõ ràng thành tài liệu, trong quá trình viết, các kĩ sư có thể phát hiện ra những điểm không hợp lý mà mình chưa tưởng tượng ra được.
- Tránh sai sót trong việc viết mã RTL: mã RTL được dùng để mô tả hành vi của mạch logic, chính vì vậy việc thể hiện sơ đồ nguyên lý hoạt động, sơ đồ logic rõ ràng giúp việc mô tả bằng RTL trở nên dễ dàng và tiết kiệm thời gian.
- Tăng khả năng phát hiện lỗi trong quá trình kiểm tra thiết kế (Design Verification – DV): các kĩ sư kiểm tra thiết kế sẽ dựa vào tài liệu này để lên danh sách các điểm cần kiểm tra (checklist) và các điểm cần kiểm tra (check point) cần thiết. Một tài liệu tốt sẽ giúp các kĩ sư DV hiểu được hoạt động của IP một cách rõ ràng, chi tiết hơn từ đó tránh bỏ sót lỗi trong quá trình kiểm tra.
- Tăng khả năng phát hiện lỗi trong quá trình xem xét (review) lại thiết kế: Thường quá trình review thiết kế sẽ được tiến hành trong team hoặc bởi các kĩ sư có kinh nghiệm, team leader để đảm bảo tính đúng đắn của thiết kế trước khi bàn giao (release). Một tài liệu thiết kế tốt sẽ giúp người review có thể dễ dàng nắm được ý tưởng của bạn, từ đó kiểm tra, đối chiếu để có thể phát hiện được lỗi.
Các thành phần cơ bản của một tài liệu thiết kế gồm:
- Phần 1: mô tả chức năng cơ bản của thiết kế. Ví dụ thiết kế dùng để làm gì, cho ứng dụng nào, thiết kế chạy với tần số bao nhiêu … Phần này như là mở bài giúp người đọc có thể hình dung ra những chức năng cơ bản của thiết kế.
- Phần 2: sơ đồ khối. Sơ đồ khối thể hiện kiến trúc của IP, các khối chức năng nhỏ bên trong và cách chúng kết nối với nhau.
- Phần 3: Mô tả các ngõ giao tiếp IO (IO interface). Phần này thể hiện tên gọi, số lượng, mô tả ý nghĩa các ngõ vào, ngõ ra của thiết kế.
- Phần 4: mô tả chi tiết các khối chức năng trong IP. Phần này thể hiện ý tưởng của người thiết kế đối với từng khối chức năng. Các kĩ sư sẽ dùng các phương pháp như thuyết minh bằng câu chữ, vẽ sơ đồ khối chi tiết, vẽ lưu đồ trạng thái, vẽ dạng sóng … để mô tả chức năng của mạch.
- Phần 5: những yêu cầu khác. Đây là phần liệt kê những yêu cầu đối với những bộ phận khác như DV (Design Verification), DFT(Design For Test) hoặc PD (Physical Design) nếu có những yêu cầu đặc biệt về contraint, timing, delay chain …
3. Viết mã RTL (RTL coding)
Với các bạn yêu thích lập trình thì đây có lẽ là phần thú vị nhất trong công đoạn thiết kế RTL, đó là dùng ngôn ngữ mô tả phần cứng (HDL) để mô tả thiết kế mình đã viết trong tài liệu kỹ thuật phía trên.
Thế nhưng, không giống như software programming, mã RTL để mô tả phần cứng cần tuân theo những quy tắc và ràng buộc chặt chẽ để có thể tổng hợp thành cổng logic được (synthesizable).
Tổng hợp mã RTL (synthesis) là quá trình dùng tool chuyên dụng (EDA tool) để dịch đoạn mã RTL thành cổng logic (gate netlist), đây là đầu vào của các khâu thiết kế Back-End . Nếu mã RTL không theo quy tắc đã định sẵn thì sẽ không thể tổng hợp được (non-synthesizable).
Một mã RTL code tốt sẽ hội đủ những yếu tố sau đây:
- Có thể tổng hợp được.
- Cụ thể, tường minh, rõ ràng.
- Tuân thủ những coding style của nhóm, công ty.
- Dễ debug khi có sự cố
- Dễ giải thích, kế thừa (inherit), duy trì (maintain) khi chuyển từ người này sang người khác (khi kĩ sư chịu trách nhiệm thiết kế thôi việc).
Vậy nên để có thể viết được mã RTL tốt đòi hỏi kinh nghiệm, kinh qua nhiều project, được tiếp xúc với những mã RTL tốt để có thể học hỏi và hoàn thiện khả năng của chính mình.
4. Biên dịch, kiểm tra quy tắc thiết kế và tự kiểm thử (compile, design rule check and self-test)
Giống như software programming, RTL coding cũng trải qua bước biên dịch (compile) để kiểm tra các lỗi cú pháp (syntax), lỗi kết nối (khi nối dây giữa các module), lỗi quên khai báo biến …
Sau khi RTL đã qua bước biên dịch, các kỹ sư sẽ sử dụng những công cụ chuyên sâu hơn để kiểm tra DRC (design rule check) để phát hiện thêm những lỗi về việc không tuân theo các quy tắc thiết kế có thể dẫn đến nguy cơ không tổng hợp được logic (un-synthesizable), hoặc những lỗi liên quan đến việc giao tiếp truyền nhận giữa các miền clock bất đồng bộ (CDC – Clock Domain Crossing), hoặc những lỗi liên quan đến thiết kế sẽ không phù hợp với các bước ở khâu tiếp theo như DFT (Design For Test) hay STA (Static Timing Analysis).
Ngoài các bước trên ra, kĩ sư thiết kế RTL còn phải tự kiểm tra (verify) thiết kế của mình để đảm bảo những tính năng cơ bản chạy đúng trước khi bàn giao cho bộ phận DV để kiểm tra chuyên sâu hơn. Công việc này sẽ giúp giảm tải công việc cho các kĩ sư DV, cũng như giúp output của bước RTL design trở nên chất lượng hơn, thể hiện trách nhiệm của các kĩ sư RTL design. Lúc này, các kĩ sư RTL design sẽ tiến hành viết những testbench đơn giản để kiểm tra một số trường hợp cơ bản của thiết kế. Vậy nên, kĩ sư RTL vẫn cần biết cách kiểm thử.
5. Synthesis và Design Contraint
Đôi khi các kĩ sư RTL design sẽ phải tiến hành synthesis và viết design contraint, tùy thuộc vào từng IP và quy trình thiết kế ở mỗi công ty.
Có một số công ty yêu cầu kỹ sư RTL design phải thực hiện quá trình synthesis để kiểm tra thiết kế của mình có gặp vấn đề gì khi chạy synthesis hay không. Hoặc có một số công ty khác dùng chính những netlist này (IP netlist) để bộ phận Back-End có thể tìm hiểu trước những khó khăn tiềm năng mà họ có thể gặp phải trong quá trình synthesis cho toàn bộ chip.
Đôi khi các IP đặc biệt cần những yêu cầu đặc biệt về thời gian (timing), xung clock, độ trễ đầu vào và đầu ra, và các thông số quan trọng khác để đạt được hiệu suất và chức năng mong muốn. Vậy nên các kĩ sư thiết kế phải viết những ràng buộc (design contraint) này để các kĩ sư Back-End có thể tiến hành tổng hợp và tối ưu, đảm bảo rằng netlist cuối cùng đáp ứng các tiêu chí thời gian và hiệu suất được xác định.
IV. Các yếu tố tạo nên một thiết kế tốt
Một thiết kế tốt sẽ có 3 yếu tố quan trọng nhất:
- Performance: chạy càng nhanh càng tốt, ví dụ: Mbps (Mega bit per second), fps (frame per second) …
- Timing: chạy được với tần số càng cao càng tốt, ví dụ design tốt sẽ chạy được với 1GHz trong khi design chưa tốt chỉ chạy được 720Mhz.
- Area: diện tích càng nhỏ càng tốt. Càng tốt ít diện tích, càng ít tốn tiền sản xuất.
Ngoài ra có 1 số yếu tố phụ:
- Document rõ ràng
- Code viết gọn gàng, dễ đọc, có tính reuse cao.
- Thời gian develop ngắn.
- Không vi phạm các quy tắt thiết kế
V. Làm sao biết được bạn có phù hợp với vị trí kĩ sư thiết kế RTL?
Hi vọng với những phần mô tả trên, các bạn có thể hình dung được công việc của một kĩ sư thiết kế RTL. Vậy câu hỏi được đặt ra là làm sao biết được bạn có phù hợp với vị trí này hay không ? Theo quan điểm của tác giả, các yếu tố để trở thành một kĩ sư RTL xuất sắc gồm có:
- Tính cẩn thận, tập trung vào chi tiết.
- Tính siêng năng, ham học hỏi, liên tục cập nhật những công nghệ mới
- Khả năng tư duy logic, giải quyết vấn đề
- Tính sáng tạo
- Khả năng tiếng Anh
Tính cẩn thận và tập trung vào chi tiết sẽ giúp các bạn tránh được những lỗi sai cơ bản (typo mistake/careless mistake).
Tính siêng năng, cần cù, ham học hỏi sẽ giúp các bạn ngày càng hoàn thiện về mặt kĩ năng, ngày càng có nhiều kinh nghiệm để trở nên tốt hơn sau mỗi dự án.
Khả năng tư duy logic giúp bạn có thể suy nghĩ một vấn đề và tiếp thu nhanh hơn, làm việc tránh được nhiều sai sót hơn, giải quyết sự cố nhanh hơn, giúp tăng hiệu suất làm việc.
Tính sáng tạo sẽ giúp bạn có thể nghĩ ra những ý tưởng thiết kế mới giúp tối ưu hiệu năng, giảm công suất tiêu thụ, giảm diện tích, từ đó đem lại giá trị cao hơn cho thiết kế
Khả năng tiếng Anh tốt sẽ giúp bạn giao tiếp tốt hơn với đồng nghiệp, sếp nước ngoài, đọc, viết tài liệu tiếng Anh tốt hơn từ đó sẽ giúp nâng cao kiến thức chuyên ngành nhanh hơn.
Đến đây hãy cùng giải đáp câu hỏi ở đề mục: liệu thích lập trình có nên làm vị trí kĩ sư thiết kế RTL ? Theo tác giả, câu trả lời là đúng nhưng chưa đủ.
Kĩ sư RTL cần mạnh về tư duy logic, nếu bạn lập trình tốt chứng tỏ tư duy logic của bạn rất tốt, rất phù hợp với vị trí này. Nhưng nếu bạn nghĩ rằng thiết kế RTL giống với lập trình thì đây là suy nghĩ sai lầm. Như đã phân tích ở trên, đây là công việc nặng về khâu “thiết kế”, vậy nên bạn phải luôn trả lời câu hỏi: “Làm sao tôi có thể thiết kế ra hệ thống phù hợp với yêu cầu này” chứ không phải: “Làm sao tôi có thể lập trình RTL code để phù hợp với yêu cầu này”. Viết mã RTL chỉ là một công đoạn trong quá trình thiết kế RTL. Theo tác giả đánh giá, viết mã RTL chỉ chiểm khoảng 20-30% khối lượng công việc của một kỹ sư thiết kế RTL.
Hi vọng những diễn giải trên có thể trả lời cho thắc mắc của bạn.
VI. Làm sao để trở thành một kĩ sư thiết kế RTL?
Để trở thành một kỹ sư thiết kế RTL bạn có thể thực hiện những cách sau:
- Học đại học chuyên ngày kỹ thuật điện tử, kỹ thuật máy tính và đăng ký chuyên ngành đào tạo thiết kế vi mạch.
- Hiểu rõ những kiến thức cơ bản về mạch số, hệ thống số, kiến trúc máy tình, kỹ thuật số.
- Nắm vững các ngôn ngữ mô tả phần cứng HDL.
- Tham gia vào các diễn đàn, hội nhóm về thiết kế vi mạch để học hỏi kinh nghiệm và cập nhật những kiến thức mới.
- Tham gia một số khóa học thiết kế vi mạch ngắn hạn và dài hạn tại các trung tâm uy tín, từ đó tích lũy kinh nghiệm thực chiến thông qua các dự án và bài tập thực tế.
Lời kết: Thiết kế RTL là một công việc rất thú vị và thử thách. Các kĩ sư thiết kế RTL xuất sắc có thể vươn lên trở thành những Architect Engineer (kiến trúc sư trưởng), quyết định đến thành bại của cả một dự án. Việc trở thành một kỹ sư thiết kế RTL đòi hỏi sự cam kết và kiên trì. Hãy liên tục cập nhật kiến thức, thực hành thường xuyên, và không ngần ngại đối mặt với thách thức để phát triển sự chuyên nghiệp của bạn trong lĩnh vực này.
Đăng kí tham gia talkshow hướng nghiệp, chia sẻ kinh nghiệm vi mạch Cùng ICTC để tìm hiểu về công việc, ngành nghề, đãi ngộ và những kiến thức cần thiết để học thiết kế vi mạch và tham gia vào thị trường vi mạch.
Đăng ký tại:
TalkShow Hướng Nghiệp và Chia Sẻ Về Vi Mạch – ICTC
Hiện tại ICTC đang mở các khóa học thiết kế vi mạch từ cơ bản đến nâng cao, các bạn có thể tìm hiểu tại bài viết IC Overview – ICTC nhé.