После выполнения 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 на основе модулей Реализация данных пути и контроллера для этой схемы: