У меня есть серия из 25 64-битных std_logic_vectors в моем структурном коде VHDL. Они всегда должны быть одинаковыми, и я хочу проверить, есть ли какие-либо ошибки, которые слегка перевернуты. Мой код выглядит следующим образом:VHDL неожиданное поведение XNOR для std_logic_vector
outX <= mt1_op XNOR mr2_op XNOR mt3_op XNOR .... XNOR mt25_op;
Это не дает мне никаких ошибок и синтезирует хорошо, но когда я его имитации в Isim, кажется, не работает операция XNOR. Я ожидаю, что все 1 или случайные 0, если есть ошибка, но конечный выходной сигнал outX просто имеет то же значение, что и все входные сигналы. Я не буду утруждать себя заявлением всего 64-битного вектора, но как unsigned int он разрешает 7776. Все входные векторы одинаковы - 7776 - и когда я XNOR их всех вместе, я получаю ответ 7776.
Я подозреваю, что проблема может быть вызвана операциями XNOR применяется один на один раз, т.е.
OutX <= (mt1_op XNOR mt2_op XNOR(mt3_op XNOR(mt4_op XNOR(.....)))))))));
, который не даст желаемого поведения.
Есть ли у кого-нибудь идеи, как я могу получить такое поведение, которое я хочу? т. е. если все 25 векторов идентичны, дайте мне все 1s или где есть различия, дайте мне 0. ??
Благодаря
Том
несомненно, '0' XNOR '0' = '1', что не правильно? –
'0' XOR '0' = '0' и XNOR должна быть бесплатной функцией? –
Да ''0' XNOR '0' = '1'' и'' 0 'XOR' 0 '=' 0''; ответ обновляется со ссылкой на описание Wikipedia XNOR. Обратите внимание, что '0 'XNOR' 0 'XNOR ... XNOR' 0 '=' 0'' относится только к нечетному числу' '0's'. –