バスを監視するテスト ベンチがあります。バス内の一部の信号は 1'bx です。さまざまな理由から、バス内のいずれかの信号が 1'bx であるかどうかを知る必要があります。バスに x が含まれているかどうかをテストする最良の方法は何ですか (合成用ではなく、シミュレーション目的のみ)。リダクションを使用するか、または === を使用できることを望んでいましたが、これはうまくいかないようです。ありがとう、
D
バスを監視するテスト ベンチがあります。バス内の一部の信号は 1'bx です。さまざまな理由から、バス内のいずれかの信号が 1'bx であるかどうかを知る必要があります。バスに x が含まれているかどうかをテストする最良の方法は何ですか (合成用ではなく、シミュレーション目的のみ)。リダクションを使用するか、または === を使用できることを望んでいましたが、これはうまくいかないようです。ありがとう、
D
(^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
以下を使用できます$isunknown
(IEEE Std 1800-2017 のセクション 20.9 Bit vector system functionsを参照):
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
。