Как интерпретировать это обсуждение реляционных операторов Verilog - PullRequest
0 голосов
/ 21 октября 2018

В этом обсуждении реляционных операторов Verilog в ASIC World явно есть по крайней мере одна ошибка:

  • Результатом является скалярное значение (пример a 0, если отношение ложно (а больше, чем b)
  • 1, если отношение истинно (а меньше, чем b)
  • x, если какой-либо из операндов имеетнеизвестные биты x (если a или b содержит X)

Примечание. Если какой-либо операнд равен x или z, то результат этого теста обрабатывается как false (0)

Ясно, что "a больше, чем b" должно быть "a больше , чем или равно b".

Есть что-то еще, что мне кажется неправильным, но я не знаю, если это только потому, что я новичок в Verilog.Последняя точка маркера, кажется, противоречит последующему примечанию, если только нет разницы между операндом, имеющим все неизвестные биты (в этом случае результатом реляционного оператора будет х), и операндом, являющимся х (в этом случае результат будет0).

Есть ли разница между операндом, являющимся x, и всеми его битами, являющимися X?Я знаю, что Verilog чувствителен к регистру.

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

verilog известен своим пессимизмом x-распространения.

Из lrm 11.4.4

Выражение, использующее эти реляционные операторы, должно давать скалярное значение 0, если указанное отношение ложно, или значение 1, если оно истинно.Если любой из операндов реляционного оператора содержит неизвестное значение (x) или значение высокого импеданса (z), то результатом будет 1-битное неизвестное значение (x).

, поэтому, если какой-либо иззначения содержат биты «x», результатом будет «x».

Теперь в случае, когда результат используется в качестве условного выражения, оператор if примет истинный бранч, если и только если результат'1'.В противном случае это займет ложную ветвь.Также в verilog есть правила преобразования, где значения x и z преобразуются в 0 в бинарных операциях, что является условной операцией.

Итак, комментарий на сайте верный, он говорит о результатах теста (как в операторе if)

Если любой операнд равен x или z, торезультат этого теста считается ложным (0)

0 голосов
/ 21 октября 2018

Я думаю, что вы должны передать свои комментарии автору этого сайта.

Я принимаю утверждение внутри () как пример

1, если отношениеЗначение true (если, например, a меньше, чем b)

В последующем примечании упоминается более общая проблема, не относящаяся к реляционным операторам.Если у вас есть

if (expression) true_statement; else false_statement;

Когда выражение оценивается как X или 0, берется ветвь false_statement.

Кроме того, Verilog не учитывает регистр числовых литералов.'habcxz и 'hABCXZ эквивалентны.

...