Verilog побитовый XOR для 1-битного сигнала

#verilog

#verilog

Вопрос:

Что произойдет, если побитовая операция XOR будет выполнена для 1-битного сигнала в Verilog.

Например:

 input A;
wire B;
B = ^A;
  

Если A равно 1, будет B 1? или это будет X или что-то в этом роде?

Ответ №1:

Код, который вы показываете, известен как сокращение XOR. Обратитесь к стандарту IEEE Std 1800-2017, раздел 11.4.9 Операторы сокращения. Эти операторы предназначены для использования с сигналами длиной более 1 бита, например, если A они имеют ширину 4 бита. В вашем случае (1-бит) поведение четко не определено. Какое аппаратное обеспечение вы пытаетесь описать с помощью этого кода? XOR используется для сравнения 2 сигналов.

 module tb;

reg A;
wire B = ^A;

initial begin
    $monitor($time, " A=%b  B=%b", A, B);
    #5 A = 0;
    #5 A = 1;
    #5 A = 0;
    #5 $finish;
end

endmodule
  

Это результат, который я получаю на 2 разных симуляторах:

                0 A=x  B=x
               5 A=0  B=0
              10 A=1  B=1
              15 A=0  B=0
  

Однако, поскольку это поведение четко не определено, вам не следует полагаться на эти результаты. Вам следует избегать написания кода таким образом.

Комментарии:

1. Спасибо за ответ. Я хотел добавить утверждение, чтобы убедиться, что сигнал «A» никогда не является сигналом степени 2, и поэтому я хотел использовать ^A, чтобы убедиться, что он не является степенью 2, но потом я подумал, что, если A, как вход, равен 1-битный сигнал, тогда из вашего ответа мне кажется, что это не должно быть проблемой.