🧠 Gán Blocking và Non-Blocking trong Verilog: Hiểu rõ để thiết kế đúng

Thứ Năm, 22 tháng 05, 2025

Trong hành trình học và làm việc với thiết kế số, đặc biệt là khi viết mô tả phần cứng bằng ngôn ngữ Verilog, một trong những điểm cơ bản nhưng gây nhiều nhầm lẫn nhất chính là sự khác biệt giữa hai kiểu gán: blockingnon-blocking. Đây không chỉ là chuyện cú pháp đơn thuần, mà là sự lựa chọn ảnh hưởng trực tiếp đến logic hoạt độngtính đúng đắn của thiết kế phần cứng.

Gán blocking là kiểu gán theo thứ tự – dòng trước thực hiện xong thì dòng sau mới bắt đầu. Nó mô phỏng hành vi như các ngôn ngữ lập trình truyền thống, nơi một phép gán hoàn tất thì chương trình mới tiếp tục. Do đó, kiểu gán này rất phù hợp để mô tả logic tổ hợp – tức những mạch không có xung nhịp, nơi đầu ra thay đổi tức thời theo đầu vào. Trong logic tổ hợp, việc tính toán theo thứ tự rõ ràng giúp tránh sai lệch kết quả và tạo nên một sơ đồ tín hiệu dễ dự đoán.

Ngược lại, gán non-blocking hoạt động theo cơ chế song song – tất cả các phép gán trong cùng một khối được “lên lịch” và cập nhật đồng thời sau khi toàn bộ quá trình đánh giá kết thúc. Điều này giúp mô phỏng chính xác hành vi của các phần tử tuần tự như flip-flop – nơi dữ liệu không thay đổi ngay lập tức mà được lưu lại sau một cạnh xung đồng hồ. Việc sử dụng non-blocking là cách duy nhất để mô tả đúng các khối mạch tuần tự có trạng thái, chẳng hạn như bộ đếm, thanh ghi, hoặc các FSM (Finite State Machine). Nếu dùng sai kiểu gán trong những tình huống này, kết quả mô phỏng có thể vẫn đúng… nhưng mạch thật thì không hề vận hành như mong đợi – đây chính là cái bẫy nguy hiểm nhất của việc lập trình RTL.

Một trong những lý do quan trọng khiến non-blocking được ưu tiên trong mạch tuần tự là để tránh hiện tượng race condition – khi hai hoặc nhiều tín hiệu phụ thuộc nhau được cập nhật trong cùng một chu kỳ nhưng không rõ cái nào chạy trước. Đây là nguyên nhân dẫn đến các lỗi khó truy vết, làm cho mô phỏng và phần cứng không “giống nhau”, khiến kỹ sư rất khó khăn khi debug.

Tóm lại, hiểu và phân biệt đúng giữa gán blocking và non-blocking không chỉ là kỹ năng lập trình, mà là kiến thức nền tảng của kỹ sư thiết kế phần cứng. Blocking nên dùng cho logic tổ hợp, nơi thứ tự đánh giá quan trọng và không có xung clock can thiệp. Non-blocking nên dùng cho logic tuần tự, nơi các phép gán cần xảy ra đồng thời để phản ánh đúng hành vi phần cứng. Nắm vững nguyên tắc này là bước đầu tiên để bạn có thể viết ra các mô tả phần cứng chính xác, tối ưu và đáng tin cậy.

——————————————————

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 các bài viết sau nhé:

 

Truy cập Server EDA Miễn Phí của ICTC để thực hành thiết kế vi mạch:
Truy cập Server EDA Miễn Phí

 

Thứ Năm, 22 tháng 05, 2025

Đội Ngũ Giảng Viên Đến Từ Các Công ty vi mạch hàng đầu với NHiều năm kinh nghiệm

Khóa học thiết kế vi mạch ICTC giảng viên từ Ampere
Khóa học thiết kế vi mạch ICTC giảng viên từ Renesas
Khóa học thiết kế vi mạch ICTC giảng viên từ MediaTek Singapore
Khóa học thiết kế vi mạch ICTC giảng viên từ BOS
Khóa học thiết kế vi mạch ICTC giảng viên từ Marvell
Khóa học thiết kế vi mạch ICTC giảng viên từ Renesas
Khóa học thiết kế vi mạch ICTC giảng viên từ NSING

Nổi Bật

Final Project Của Lớp Thiết Kế Vi Mạch Cơ Bản

Final Project Của Lớp Thiết Kế Vi Mạch Cơ Bản

Boom!  Cảm giác vỡ òa khi màn hình hiện kết quả design của bạn đã "pass" golden model – cửa ải cuối cùng trước khi “tốt nghiệp”!À quên, còn một điều kiện là coverage phải đủ nữa nha  Nhưng mà... cái cảm giác được thông báo ALL_PASSED vẫn là một điều gì đó thật đặc...

TỔNG KẾT OFFLINE VI MẠCH 07/2024

TỔNG KẾT OFFLINE VI MẠCH 07/2024

Vậy là sau hơn 4 tiếng đồng hồ giao lưu và chia sẻ các kiến thức về tổng quan ngành vi mạch, các vị trí việc làm, tuyển dụng, các kinh nghiệm học tập, phỏng vấn, ... buổi offline ngày hôm nay đã kết thúc thành công tốt đẹp.Rất cảm ơn các bạn đã không ngại đường xá xa...

Bài Viết Mới

TÍNH CHỦ ĐỘNG – CHÌA KHÓA ĐỂ THÀNH CÔNG TRONG NGÀNH VI MẠCH

TÍNH CHỦ ĐỘNG – CHÌA KHÓA ĐỂ THÀNH CÔNG TRONG NGÀNH VI MẠCH

Một điểm chung tụi mình thường thấy ở các bạn đậu phỏng vấn intern hoặc fresher ngành vi mạch là: Không chỉ giỏi kỹ thuật, mà còn rất chủ động và linh hoạt trong cách học và giao tiếp. Trong ngành này, kỹ năng trình bày vấn đề rõ ràng, biết hỏi đúng lúc, tự tìm câu...

BÀI 2: QUY TRÌNH THIẾT KẾ VẬT LÝ – PHYSICAL DESIGN FLOW

BÀI 2: QUY TRÌNH THIẾT KẾ VẬT LÝ – PHYSICAL DESIGN FLOW

Ở bài 1, chúng ta đã biết rằng Physical Design (PD) là công đoạn thiết kế trong khâu backend giúp biến thiết kế logic thành bản vẽ vật lý, sẵn sàng để mang đi chế tạo trên silicon. Vậy công đoạn này cụ thể gồm những bước nào? Làm sao để các khối logic, dây nối, và...

Chuỗi bài viết về Physical Design

Chuỗi bài viết về Physical Design

Khi nói đến việc tạo ra một con chip điện tử – từ vi xử lý trong điện thoại, GPU trong card đồ họa cho đến các SoC phức tạp dùng trong xe tự lái – nhiều người thường hình dung đến việc lập trình hay thiết kế logic. Tuy nhiên, một bước cực kỳ quan trọng nhưng ít được...

BẠN CHƯA BIẾT BẮT ĐẦU TỪ ĐÂU?

Sau nhiều năm tư vấn và đào tạo vi mạch cho hàng trăm bạn sinh viên, học sinh và phụ huynh, kết hợp với kinh nghiệm từ các anh chị kỹ sư vi mạch có nhiều năm kinh nghiệm, đây là tất cả những kinh nghiệm và tài liệu mà mình đúc kết, tổng hợp lại được thành một quy trình tìm hiểu ngành vi mạch để các bạn mình mới tham gia vào ngành có thể bắt đầu một cách hiệu quả nhất.

 

Bấm nút bên dưới để tìm hiểu về ngành, về nghề nghiệp cũng như những thứ bản thân cần chuẩn bị để tham gia vào hành trình trở thành kỹ sư vi mạch tuy có phần gian nan nhưng vô cùng thú vị bạn nhé!

LỘ TRÌNH TỰ HỌC VI MẠCHGROUP CHAT HỌC TẬP VI MẠCH