В чем разница между == и === в Verilog?
В чем разница между:
if (dataoutput[7:0] == 8'bx) begin
и
if (dataoutput[7:0] === 8'bx) begin
После выполнения dataoutput = 52'bx
второй дает 1, но первый дает 0. Почему? (0 или 1 - результат сравнения.)
Ответы
Ответ 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 бит.