Кой е най-добрият начин да разберете дали автобусът съдържа едно x във Verilog?

Имам тестов стенд, който следи автобус. Някои от сигналите в шината могат да бъдат 1'bx. Поради различни причини трябва да знам дали някой от сигналите в шината е 1'bx. Кой е най-добрият начин да се тества (не за синтез - само за симулационни цели) дали автобусът съдържа някакви x? Надявах се, че мога да използвам намаление или и след това да използвам ===, но това изглежда не работи. Благодаря,

D


person Doov    schedule 01.07.2013    source източник


Отговори (2)


(^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
person Greg    schedule 01.07.2013
comment
Побитовият xor ще провери цялата шина, но няма да каже къде в шината съществува X или Z. Полезно е, ако не ви е грижа да знаете местоположението на X или Z. - person Greg; 02.07.2013

Можете да използвате $isunknown (вижте IEEE Std 1800-2017, раздел 20.9 Функции на битовата векторна система):

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.

person toolic    schedule 01.07.2013