2015-03-16 6 views
0

У меня есть серия из 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. ??

Благодаря

Том

ответ

3

The XNOR expression работает просто отлично:

'0' XNOR '0' XNOR ... XNOR '0' = '0' -- For 25 XNOR '0's 
'1' XNOR '1' XNOR ... XNOR '1' = '1' -- For 25 XNOR '1's 

Таким образом, выражение возвращает вектор аргумент, если же вектор дается 25 раз в XNOR.

Чтобы проверить, если все векторы идентичны вы можете сделать:

or_all <= mt1_op OR mt2_op OR ... OR mt25_op;  
and_all <= mt1_op AND mt2_op AND ... AND mt25_op; 
identical <= or_all = and_all; -- Boolean as resulting type 

И для полученного типа, как std_logic

identical_std_logic <= '1' when (and_all = or_all) else '0'; 
+0

несомненно, '0' XNOR '0' = '1', что не правильно? –

+0

'0' XOR '0' = '0' и XNOR должна быть бесплатной функцией? –

+0

Да ''0' XNOR '0' = '1'' и'' 0 'XOR' 0 '=' 0''; ответ обновляется со ссылкой на описание Wikipedia XNOR. Обратите внимание, что '0 'XNOR' 0 'XNOR ... XNOR' 0 '=' 0'' относится только к нечетному числу' '0's'. –

Смежные вопросы