2013-07-01 13 views
6

Tôi có một băng ghế thử nghiệm giám sát xe buýt. Một số tín hiệu trong xe buýt có thể là 1'bx. Vì nhiều lý do tôi cần phải biết nếu bất kỳ tín hiệu nào trong xe buýt là 1'bx. Cách tốt nhất để kiểm tra (không phải cho tổng hợp - chỉ cho mục đích mô phỏng) nếu một xe buýt chứa bất kỳ x's là gì? Tôi đã hy vọng rằng tôi có thể sử dụng một giảm hoặc sau đó sử dụng ===, nhưng điều này dường như không hoạt động. Cảm ơn,Cách tốt nhất để biết liệu một xe buýt có chứa một x duy nhất trong Verilog?

D

+0

Tại sao câu hỏi này lại bị bỏ phiếu? – Doov

Trả lời

7

(^bus === 1'bX)

Bit-khôn ngoan xor xe buýt sau đó kiểm tra nếu kết quả là X. Nếu bất kỳ bit là X hoặc Z thì kết quả sẽ là X.

Để biết được chút trong xe buýt có lỗi:

always @* begin 
    for(integer i=0; i<$size(bus); i++) begin 
    if(bus[i]===1'bX) $display("bus[%0d] is X",bus[i]); 
    if(bus[i]===1'bZ) $display("bus[%0d] is Z",bus[i]); 
    end 
end 
+0

Ah, hiểu rồi. Tôi thích nó. Cảm ơn! – Doov

+0

Xor bit-khôn ngoan sẽ kiểm tra toàn bộ xe buýt, nhưng nó sẽ không nói nơi trong xe buýt X hoặc Z tồn tại. Nó rất hữu ích nếu bạn không quan tâm để biết vị trí của X hoặc Z. – Greg

5

Bạn có thể sử dụng $isunknown (được giới thiệu trong IEEE Std 1800-2005):

module tb; 

reg [3:0] data; 

initial begin 
    #5 data = 4'b0101; 
    #5 data = 4'b000x; 
    #5 data = 4'b1111; 
    #5 data = 4'b0x0x; 
    #5 data = 4'b0x1x; 
    #5 data = 4'bzzzz; 
    #5 $finish; 
end 

always @(data) begin 
    if ($isunknown(data)) $display($time, " data=%b has x's", data); 
end 

endmodule 

/* 

        10 data=000x has x's 
        20 data=0x0x has x's 
        25 data=0x1x has x's 
        30 data=zzzz has x's 

*/ 

Lưu ý rằng điều này cũng đối xử với z như x.

+1

bit-wise 'hoặc' sẽ không phát hiện X nếu bit là 1 – Greg

+0

@Greg: Bạn là chính xác. Tôi đã sửa đổi Câu trả lời của mình. Quá xấu OP không cung cấp một số dữ liệu đầu vào. – toolic

+0

Việc giảm hoặc hoạt động iff bạn không có bất kỳ 1s và xs hỗn hợp. Nếu bạn thử một cái gì đó như 4'b010x nó sẽ thất bại. – Doov