Подтвердить что ты не робот

В чем разница между == и === в Verilog?

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

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

и

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

В Verilog:

  • == проверяет логическое равенство (тесты для 1 и 0, все остальные приводят к x)
  • === проверяет логическое равенство 4 состояний (тесты для 1, 0, z и x)

Ответ 3

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

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

Ответ 4

Как я могу написать кодовую схему Verilog на основе модулей Реализация данных пути и контроллера для этой схемы:

x ==> Форма ввода Серии схемы:

соз (х) = 1 -x ^ 2/2! +x ^ 4/4! -x ^ 6/6! +... + ((-1) ^) я * (х ^ 2i)/(2 * я)!

Выход должен быть рассчитан с точностью до 8 бит.