В чем разница между == и === в Verilog? - PullRequest
26 голосов
/ 08 мая 2011

В чем разница между:

if (dataoutput[7:0] == 8'bx) begin

и

if (dataoutput[7:0] === 8'bx) begin 

После выполнения dataoutput = 52'bx второй дает 1, а первый дает 0. Почему?(0 или 1 - результат сравнения.)

Ответы [ 3 ]

24 голосов
/ 08 мая 2011

Некоторые типы данных в Verilog, такие как reg, имеют 4 состояния. Это означает, что каждый бит может иметь одно из 4 значений: 0,1, x, z.

С оператором "case равенство" ===, x сравниваются, и результат равен 1.

При == результат сравнения не равен 0, как вы указали; скорее, результат равен x, согласно стандарту IEEE (1800-2009), раздел 11.4.5 «Операторы равенства»:

За логическое равенство и логическое операторы неравенства (== и! =), если, из-за неизвестных или высокоимпедансных бит в операндах отношение неоднозначный, то результатом будет 1-битное неизвестное значение (x).

18 голосов
/ 08 мая 2011

В Verilog:

  • == тестирует логическое равенство (тесты для 1 и 0, все остальные приведут к x)
  • === тестирует логическое равенство в 4 состояниях (тесты для 1, 0, z и x)
5 голосов
/ 09 декабря 2014

== Для сравнения битов (0 или 1) === Для сравнения всех 4 состояний (0, 1, x, z)

== может быть синтезировано в аппаратное обеспечение (x-nor gate), но === не может быть синтезирован, так как x не является допустимым логическим уровнем в цифровом формате, он фактически имеет напряжения в диапазоне от 0 до 1. И z сам по себе не является какой-либо логикой, он показывает разрыв цепи.

...