В чем разница между:
if (dataoutput[7:0] == 8'bx) begin
и
if (dataoutput[7:0] === 8'bx) begin
После выполнения dataoutput = 52'bx
второй дает 1, но первый дает 0. Почему? (0 или 1 - результат сравнения.)
В чем разница между:
if (dataoutput[7:0] == 8'bx) begin
и
if (dataoutput[7:0] === 8'bx) begin
После выполнения dataoutput = 52'bx
второй дает 1, но первый дает 0. Почему? (0 или 1 - результат сравнения.)
Некоторые типы данных в Verilog, такие как reg
, являются 4-состояниями. Это означает, что каждый бит может быть одним из 4 значений: 0,1, x, z.
С оператором равенства "случай", ===
, x сравниваются, а результат равен 1.
С ==
результат сравнения не равен 0, как вы сказали; скорее, результат x, согласно IEEE Std (1800-2009), раздел 11.4.5 "Операторы равенства":
Для логического равенства и логического операторы неравенства (== и! =), если, из-за неизвестных или высокоимпедансных битов в операндах отношение неоднозначный, то результатом будет 1-битное неизвестное значение (x).
В Verilog:
== Для сравнения бит (0 или 1) === Для сравнения всех 4 состояний (0, 1, x, z)
== может быть синтезирован в аппаратное обеспечение (x-nor gate), но === невозможно синтезировать, поскольку x не является допустимым логическим уровнем в цифровом, он имеет напряжение, имеющее напряжения между 0 и 1. И z сама по себе не является логикой, она показывает разъединение схемы.
Как я могу написать кодовую схему Verilog на основе модулей Реализация данных пути и контроллера для этой схемы:
x ==> Форма ввода Серии схемы:
соз (х) = 1 -x ^ 2/2! +x ^ 4/4! -x ^ 6/6! +... + ((-1) ^) я * (х ^ 2i)/(2 * я)!
Выход должен быть рассчитан с точностью до 8 бит.