МАСТЕР LO
Участник-
Постов
33 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о МАСТЕР LO
-
Звание
Участник
Посетители профиля
Блок последних пользователей отключён и не показывается другим пользователям.
-
Огромное спасибо. Вы совершенно правы. Да, этот перенос в данном случае не реализован. Однако реализован выход "err", на котором при переполнении появляется "1" и некорректный результат отсекается, отдавая "нули" в разрядную сетку. Причина по которой это не сделано проста, мне некуда отдавать знак переполнения. А за книжку - ещё раз СПАСИБО! :) Ваше замечание будет учтено :) , но на следующем этапе. a-b, a+b - не нравится, так как в случае перехода с одной плис на другую не могу быть уверен, что при большом числе таких операций гарантированно будет хватать объёма кристалла. Могу быть в чём то не прав, т к занимаюсь ПЛИСами пока совсем не долго. Запустил Вашу программку, интересно. Обязательно погоняю.
-
Понимаю, тяжело, ну извините, пишу как умею. Но глаза портить конечно же не надо, если глазки устали - просто пройдите мимо.
-
Уважаемые господа и дамы. Я очень благодарен всем, кто был со мной в это не простое для меня время написания этого модуля, за советы, подсказки, книжки и всё остальное. Всё написанное вами было в тему и требовало осмысления. Осмысление наступило, равно как и тупиковый путь, рождённый блужданием глупой мысли. И вот у меня всё получилось. 12 битные + знак числа прекрасно складываются. (считай и вычитаются), по ходу пьесы, родился ещё блок сравнения чисел по модулю, который в проекте не пригодился, однако я решил его оставить, ибо полезная в будущем получилась доп. функция. Для всех кто помогал, а так же тех кому интересно прикрепляю здесь этот модуль. В модуле полно комментариев, что бы не запутаться в этом рабоче-крестьянском тексте. (модуль не 14, а 12 битовый) Буду рад отзывам. А ещё буду рад, если кто-то подскажет, что почитать и где посмотреть, как можно посчитать или промоделировать на нём задержки, (так вот сразу расписываюсь в беспомощности, т к ПЛИСами занимаюсь не так долго). full_sum.v
-
В современном мире у меня такая ситуация: есть АЦП, выходной сигнал которого является заданием (он считывает напряжение с ручки задания), есть полная шкала времени, вычитание задания полученного с АЦП даст искомый результат. Искомый результат тоже время, на которое будет открываться тиристор. Вот так устроен для меня современный мир. А логика такая, чем больше задание, тем раньше нужно открывать тиристор, а значит нужно высчитать время паузы перед его открытием после прохода фазового напряжения через ноль. Заодно бывает неплохо что то прибавить или отнять по ходу пьесы..
-
Спасибо и за код и за советы и подсказки. Однако всё дело в том, что в связи с санкциями не понятно, на каких ПЛИС в итоге придётся делать устройство и в итоге аппаратных сумматоров может просто не хватить. А сама проблема выросла из необходимости сделать вычитание, а потом захотелось сделать блок, который складывал бы числа, а видя что числа отрицательные, автоматом вычислял бы их дополнительный код, и снова складывал, у получившегося результата если он получался бы в дополнительном коде вычислялось бы обычное число. Хотелось сделать один раз один блок и навсегда о проблеме забыть. Как действовать я примерно понял, всем огромное спасибо, ещё раз спасибо за "умную книжку", а то учился давно и с этой темой после учёбы не пересекался.
-
Всё не так однозначно, берём число с "запасным" разрядом и получаем из него дополнительный код, в котором в "запасной" разряд мы должны по всем правилам записать инвертированное число, т е "1 единицу" и она "автоматом" начинает участвовать в расчёте, при сложении двух дополнительных кодов, этот "запасной разряд" ещё и переполняется, плюс при сложении знаковых разрядов теряется признак отрицательного числа, т е ещё и знаковый разряд уходит в переполнение... но это же не правильно, но в чём не правильно от меня ускользает... и бумажек исписан уже целый ворох и копиться этот ворох начал раньше, чем я обратился за помощью к вам, уважаемые форумчане..
-
Тогда вот такой пример: берём 5 + 5 = 10, знаковый разряд 0 числовые разряды 101, получаем 0101 + 0101 = 1010, в знаковом разряде переполнение, результат ошибка, его пропускать нельзя. Другой пример, -7 + 2 = 5, считаем снова : 7 в знаковом разряде 1 числовые разряды 001, 1001 + 0101 = 1110, здесь в знаковом разряде присутствует 1, которая является знаком минус.... вот и получается, что в одном случае у нас переполнение, в другом отрицательное число и получается, что ветки расчёта необходимо на начальном этапе разделять... за примеры спасибо, хочу сказать, что мне необходимо реализовать это действие не на аппаратном сумматоре в плис, а булевой "на рассыпухе", в виде побитового сложения с переносом. module module_summ_1_bit // модуль сумматора 2х двоичных чисел / вычисление суммы нулевых (1) разрядов / вычисление переноса суммы нулевых (1) разрядов ( input a, // вход разряда a input b, // вход разряда b input p_in, // вход переноса предыдущего разряда p_in output c, // выход разряда с output p_out // выход переноса предыдущего разряда output p_out ); wire k, l, m, n, o, p, r; // вот так // вычисление суммы разрядов assign k = ~ a & ~ b & p_in; assign l = b & ~ a & ~ p_in; assign m = ~ b & a & ~ p_in; assign n = b & a & p_in; assign c = k | l | m | n; // вычисление переноса суммы разрядов assign o = a & b; assign p = a & p_in; assign r = b & p_in; assign p_out = o | p | r; endmodule
-
Книжка в целом хорошая и замечательная, но там не написано ничего, чего бы я не изучал в институте... Ответа на главный вопрос, как складывать два отрицательных числа там увы нет. И чёткой логики, когда отбрасываем старший, он же знаковый, он же разряд переполнения там нет. И получается в итоге, что единого алгоритма сложения двух знаковых чисел нет. Точнее, получается нужно делать несколько сумматоров, для положительных чисел, для положительных и отрицательных, а для сложения собственно отрицательных чисел, те чисел представленных в дополнительных кодах ещё один. И в каждом сумматоре необходимо учитывать, когда перенос работает, а когда перенос не работает. И в дополнение к этому ещё лепить блоки определения положительное число или отрицательное, естественно с конвертацией в дополнительный код и запуском соответствующей ветки... Ну не ужели нету другого какого-то алгоритма попроще. Или я смотрел в книгу и видел фигу? Ну очень хочется попроще.....
-
ещё раз спасибо, вообще всё отлично написано, а то я весь гугл перерыл, а толку не было
-
спасибо, уже скачиваю....
-
Зачем Quartus покупать, он бесплатно скачивался, да и на RU-трекере есть версии.
-
Спасибо, буду смотреть. Спасибо за рекомендации, буду смотреть. А купить Xilinx разве возможно? Мне кажется он под такими же санкциями.
-
да, книжка по компьютерной математике мне бы не помешала, если порекомендуете такую буду благодарен, а то я весь запутался с этими знаками и переполнениями в целом всё понятно, поэтому конечно спасибо за подробное объяснение, всё логично
-
Тогда получается для сложения 12 разрядов чисел необходимо, собственно 12 разрядов, то 13й разряд это переполнение 12 разрядных вычислений, 14й разряд - это сам знак. 15й разряд признак того, что число в дополнительном коде. Только при такой конфигурации переполнение не "лезет в знаковый разряд". Правильно я понял?
-
опечатка, принято Спасибо, а под знак необходимо теперь тоже два бита?