NEW
Font size
WorksheetsSystemVerilog-Non-blocking Assignment
Total questions: 15
Worksheet time: 8mins
Trong SystemVerilog, phép gán non-blocking sử dụng ký hiệu nào ?
->
<-
<=
=>
Phép gán non-blocking thực thi theo cơ chế nào?
Thực thi ngay lập tức theo thứ tự.
Lên lịch và cập nhật giá trị đồng thời sau chu kỳ clock.
Cập nhật tín hiệu ngay sau khi hoàn thành lệnh trước.
Đồng thời với tất cả các tín hiệu đầu ra.
Phép gán non-blocking được sử dụng chủ yếu trong loại thiết kế nào?
Logic tổ hợp.
Logic tuần tự (flip-flop).
Thiết kế mạch điều khiển tín hiệu không đồng bộ.
Mạch tổ hợp và mạch đồng bộ.
Phép gán non-blocking không nên sử dụng trong trường hợp nào sau đây?
Trong logic tuần tự.
Trong logic tổ hợp.
Trong thiết kế thanh ghi.
Khi cần đảm bảo đồng bộ tín hiệu.
Trong khối always_ff, phép gán non-blocking đảm bảo điều gì?
Các giá trị được cập nhật ngay lập tức.
Tín hiệu đầu ra không bị ảnh hưởng bởi trạng thái metastability.
Tất cả các câu lệnh được thực thi đồng thời nhưng giá trị được cập nhật sau chu kỳ clock.
Logic tổ hợp được thực thi tuần tự.
Sử dụng phép gán non-blocking trong khối nào là hợp lý nhất?
always_ff.
always_comb.
initial.
always_latch.
Trong đoạn mã dưới đây, giá trị của b tại cạnh đồng hồ tiếp theo là gì?
always_ff @(posedge clk) begin
a <= 1; b <= a;
end
1
0
Giá trị cũ của a.
Không xác định.
Phép gán non-blocking được sử dụng để tránh lỗi nào sau đây trong thiết kế tuần tự?
Lỗi lặp tín hiệu không mong muốn.
Lỗi race condition giữa các tín hiệu.
Lỗi cập nhật tín hiệu đồng thời trong logic tổ hợp.
Lỗi tín hiệu metastability trong đồng bộ hóa tín hiệu
Trong đoạn mã dưới đây, giá trị cuối cùng của a là gì?
always_ff @(posedge clk) begin
a <= b + 1; b <= a + 2;
end
Không xác định (do phụ thuộc lẫn nhau).
a = b + 1
a = a + 3
Giá trị cũ của a
Đoạn mã sau cho kết quả gì?
logic a, b;
always_ff @(posedge clk) begin
a = b + 1; // Blocking
b = a + 2; // Blocking
end
a = 2, b = 4
Lỗi tổng hợp do sử dụng blocking assignment trong logic tuần tự.
Lặp tín hiệu không mong muốn.
Kết quả không xác định do race condition.
Khi nào tín hiệu gán bởi phép gán non-blocking được cập nhật?
Ngay lập tức sau khi câu lệnh trước hoàn thành.
Khi tất cả tín hiệu khác đã ổn định.
Sau chu kỳ clock.
Đồng thời với tất cả tín hiệu khác.
Trong đoạn mã dưới đây, x, y, và z sẽ nhận giá trị như thế nào nếu ban đầu x = 0, y = 0 và z = 0?
always_ff @(posedge clk) begin
x <= 1;
y <= x;
z <= y;
end
x=1, y=0, z=0 tại sườn lên clock tiếp theo.
x=1, y=1, z=1 tại sườn lên clock tiếp theo.
x=1, y=x, z=y.
Giá trị không xác định.
Khi nào phép gán non-blocking gây ra lỗi logic?
Khi tín hiệu được sử dụng ngay sau khi gán.
Khi trộn lẫn với phép gán blocking.
Khi sử dụng trong khối always_ff.
Khi sử dụng trong khối initial.
Xét đoạn mã sau:
logic a, b, c;
always_ff @(posedge clk) begin
a <= b + 1;
b <= a - 1;
end
Nếu a = 0 và b = 1 trước sườn lên clock, giá trị của a sườn lên clock tiếp theo sẽ là:
a=1.
a=2.
a=0.
Không xác định.
Xét đoạn mã sau:
logic a, b, c;
always_comb begin
a = b + 1;
b = c + 2;
c = a + 3;
end
Lỗi nào xảy ra trong đoạn mã trên?
Metastability.
Lặp tín hiệu không mong muốn.
Race condition.
Lỗi tổng hợp.
