我有一个监控公交车的测试台。总线内的一些信号可以是1'bx。由于各种原因,我需要知道总线内的任何信号是否为1'bx。如果总线包含任何x,那么测试的最佳方法是什么(不是用于综合 - 仅用于模拟目的)?我原本希望我可以使用减少或然后使用===,但这似乎不起作用。谢谢,
d
答案 0 :(得分:9)
(^bus === 1'bX)
按位xor总线然后检查结果是否为X.如果任何位是X或Z,那么结果将是X.
要知道总线中的哪个位有错误:
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
答案 1 :(得分:6)
您可以使用$isunknown
(在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
*/
请注意,这也会将z
视为x
。