Verilog hỗ trợ coding với hai phép gán trong khố always, tùy theo mục đích sữ dụng khác nhau.non-blocking assignment, ký hiệu là “<=”, sẽ dụng để tạo mạch tuần tự (sequential logic – Flip Flop)blocking assignment, ký hiệu là “=”, sư dụng để tạo mạch tổ hợp (combination logic, AND, OR, ..)
Do đó, cần phải hiểu và sử dụng hai phép gán này đúng mục đích để tạo ra mạch mong muốn.
Xem xét các ví dụ sau:
Ví dụ 1 (Non-blocking assignment): Ví dụ coding đúng
always @ (posedge clk) begin
q1 <= in;
q2 <= q1;
out <= q2;
end
Tại thời điểm cạnh lên của clk, các hoạt động sau diễn ra đồng thời
giá trị in sẽ được đưa vào q1.
giá trị q1 sẽ được đưa vào q2
giá trị q2 sẽ được dưa vào out
–> Điều này đồng nghĩa với việc tại sự kiện cạnh lên của clk, giá trị CŨ của in, q1 và q2 sẽ được gán vào q1, q2 và out. Mạch hoạt động như một shift register với LSB là in và MSB là out
Mạch khi được tổng hợp sẽ có hình dạng sau:

Mạch mô tả đúng theo hoạt động tuần tự của phần cứng.
Kết luận:
Sữ dụng nonblocking assignment “<=” cho mạch tuần tự với always
Ví dụ 2 (Blocking assignment): Ví dụ coding sai
always @ (posedge clk) begin
q1 = in;
q2 = q1;
out = q2;
end
Tại thời điểm cạnh lên của clock, các hoạt động sẽ diễn ra như sau:
in sẽ được đưa vào q1 (q1 = in), sau đó,
q1 sẽ được đưa vào q2 (q2 = q1 = in), và cuối cùng
q2 sẽ được đưa vào out (out = q2 = q1 = in)
–> Vậy kết quả cuối cùng sau sự kiện cạnh lên của clk là out = q2 = q1 = in
Mạch khi được tổng hợp sẽ có hình dạng sau:

Cách viết này là sai về mặt nguyên tắc do mạch không thể hiện đúng được việc chuyển trạng thái của in, q1, q2 và out. Cách viết sau được sử dụng cho blocking assignment
Ví dụ 3: (blocking for combination logic): Ví dụ coding đúng
always @ (a or b or c) begin
x = a & b;
y = x | c;
end
Kết quả sau quá trình tổng hợp:

Do đó, để viết mạch tổ hợp, sử dụng blocking assignment trong khối always.
Ghi nhớ:
- non-blocking assignment, ký hiệu là “<=”, sẽ dụng để tạo mạch tuần tự (sequential logic – Flip Flop)
- blocking assignment, ký hiệu là “=”, sư dụng để tạo mạch tổ hợp (combination logic, AND, OR, ..)
Bạn Có Đam Mê Với Vi Mạch hay Nhúng - Bạn Muốn Trau Dồi Thêm Kĩ Năng
Mong Muốn Có Thêm Cơ Hội Trong Công Việc
Và Trở Thành Một Người Có Giá Trị Hơn
Bạn Chưa Biết Phương Thức Nào Nhanh Chóng Để Đạt Được Chúng
Hãy Để Chúng Tôi Hỗ Trợ Cho Bạn. SEMICON
Hotline: 0972.800.931 - 0938.838.404 (Mr Long)