реклама на сайте
подробности

 
 
> Когда появляется знак, я использую бибиотеки..., "Жизнь диктует свои законы"..Подскажите выход
Мур
сообщение Jul 26 2017, 14:59
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Столкнулся с проблемой, когда потребовалось изменить ТЗ и беззнаковой математики (к которой привык) оказалось не достаточно.

Суть в том, что нужен переход в знаковую математику(когда из входного сигнала вычитаю средний уровень).
Заявил в начале
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all;

В интернете посмотрел,- применяют тип signed(15 downto 0) вместо std_logic_vector(15 downto 0). Да не тут-то было!... анализатор кричит, что не понимает этот самый signed - сигнал...

Народ! Ткните носом, какой инструментарий взять, примеры посмотреть..... ,чтобы потом полученный знаковый код еще и откалибровать... tort.gif

Дома сооружу пробный бенч для прогона вариантов, чтобы закрепить в голове новые знания....

Спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Jul 26 2017, 16:12
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



сложите 1 и -1 в тех же 8 битах, знаково
0000_0001 + 1111_1111 -> 1_0000_0000 переполняемый, девятый бит отбрасывается и получается верный результат 0. То есть бит переполнения при знаковой арифметике всегда есть, и его всегда надо отбросить, чтобы правильно обработать сложение с отрицательными числами. Этот бит не несет достоверной информации и его сохранения искажает результат. Знаковая арифметика при сложении 8 битных чисел не предполагает получение 9 битного числа. 9 битное число можно получить только после принудительного и правильного расширения изначальных 8 битных чисел до 9 битных.
Go to the top of the page
 
+Quote Post
Tausinov
сообщение Jul 26 2017, 17:15
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 135
Регистрация: 19-10-13
Пользователь №: 78 795



Цитата(Golikov A. @ Jul 26 2017, 19:12) *
Знаковая арифметика при сложении 8 битных чисел не предполагает получение 9 битного числа. 9 битное число можно получить только после принудительного и правильного расширения изначальных 8 битных чисел до 9 битных.


Понял, что вы имели в виду. Но, имхо, это не совсем так. При знаковом сложении положительных чисел этот бит как раз адекватно показывает переполнение. На счет остальных случаев точно уже не помню, но, вроде, как-то тоже его можно использовать для определения того же самого переполнения. Это я и имел в виду под

Цитата(Tausinov)
Разница лишь в трактовке этого самого результата и отлавливании переполнений.


P.S. Пока домой ехал понял, что бред написал. Все, что написано выше верно для знакового разряда, а не для "нового".

Сообщение отредактировал Tausinov - Jul 26 2017, 20:54
Go to the top of the page
 
+Quote Post
sazh
сообщение Jul 26 2017, 17:37
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(Tausinov @ Jul 26 2017, 20:15) *
Это я и имел в виду под


А зачем вам ловить переполнения. Расширяйте разрядную сетку.
module sum_signed_unsigned
(
input add,
input [3:0] a, b, // unsigned
input [3:0] aa, bb, // signed
output [4:0] s, // unsigned
output [4:0] ss // signed
);

assign s = add ? {1'b0, a} + {1'b0, b} : {1'b0, a} - {1'b0, b};
assign ss = add ? {aa[3], aa} + {bb[3], bb} : {aa[3], aa} - {bb[3], bb};

endmodule
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 16:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01381 секунд с 7
ELECTRONIX ©2004-2016