VHDL підписали доповнення не дає правильного результату

D

design_engineer

Guest
Здравствуйте,

У мене є шматок VHDL код, який підписали доповнення в беззнаковое число і підписаний номер.Однак результатом завжди є сумою двох величин, незалежно від знаку другого операндів (я сподіваюся, різниця, якщо знак 1)

Не могли б ви сказати мені, що я роблю неправильно.Ось мій код:

включити IEEE.numeric_std.all;
op1: беззнаковое (7 downto 0);
OP2: підписано (7 downto 0);
OP3: підписано (6 downto 0);
Результат: підписана (41 downto 0);
Сума: підписано (7 downto 0);

результат <= mult3 mult2 T1 (результат негативного числа представляються у вигляді доповнення 2 в)

OP2 <= розмір (результат, "8") - повинен принести негативне число (ігнорувати лапки, я повинен був покласти, що для перемоги над Smiley показ)
OP3 <= shift_right (OP2, 1); - повинні принести негативне число
Сума <= op1 (7)
І (підпис (op1 (6 downto 0)) OP3);

Якщо op1 = 'h0C і OP3 =' h62, я отримую сума = 'h6E який не правильно, оскільки OP3 є негативним.

Спасибо большое за вашу допомогу.

 
На додачу до півдня, і немає різниці між підписаних та непідписані операції.Я не розумію, що ви очікували тут різні.
0x0c 0x62 = 0x6e правильно, або, якщо тлумачення 0x62 і 0x6e як позитивних чи негативних чисел.
У першому випадку: 12 98 = 110, у другому 12 (-30) = -18

Якщо результат буде підписувати продовжений до 8-розрядний номер, є різниця, але ви concenated нульовий біт в лівій.

Перші приклади не понятно из-за отсутствия визначень в першому рядку.

 
FvM, спасибо за ответ.Так.Я згоден з Вами, що в результаті правильно у обох підписав / непідписані ситуацій.

Думаю, моя плутанина виникає з того факту, що я намагаюся передати результат на інший модуль наступним чином:

output_1: з std_logic_vector (7 downto 0);
output_1 <= std_logic_vector (сума);

Але в інший модуль, дані розглядаються як позитивні (позитивні 110), тому що я не можу пройти по знаку інформації через порти.

Як я можу впоратися з цією ситуацією?Чи можу я підписав портів в VHDL з numeric_std бібліотеки?

Спасибо.

 
Ви можете підписали портів.Але у вашому прикладі,
то це явно MSB нульовим.Ви повинні підписати продовжити результаті отримати негативні 8-бітні значення.

І знову жодних ознак інформація передається або відхилено, використовуючи той чи інший тип даних.Знак кодується в потік бітів, вам доведеться
обслуговування, що правильна бітний вектор монтується при призначенні даних різних бітної ширини.

Багато постачальника IP-адреси використовуються для передачі std_logic_vector усіх підписаних та непідписані даних.Це лише питання про те, як interprete біт векторів.

 
FvM, ще раз спасибі за вашу відповідь.Я видалив 0 конкатенаціі з кодом, і намагався пройти по підписали дані, але зіткнулися з іншою проблемою.

Коли я намагаюся визначити масив підписаних номерів, я отримую повідомлення про помилку:

Тип matrix_2_5 є масив (1 downto 0) підписали (4 downto 0);
output_1: з matrix_2_5;

output_1 (0) <= розмір (сума, 5);

Тренажер не може присвоїти підписали суму до output_1 хоча обидва вони підписали.Я отримую повідомлення про помилку сказав "В очікуванні вирази типу SIGNED 87".
Чи VHDL 87 не підтримує масиви підписали?Як передати дані в цьому випадку?Чи потрібно мати invidual даних сигналів замість масиву?

Спасибо.

 

Welcome to EDABoard.com

Sponsor

Back
Top