#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-битный сигнал, тогда из вашего ответа мне кажется, что это не должно быть проблемой.