Перейти к содержанию
    

МАСТЕР LO

Участник
  • Постов

    33
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о МАСТЕР LO

  • Звание
    Участник
    Участник

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

  1. Огромное спасибо. Вы совершенно правы. Да, этот перенос в данном случае не реализован. Однако реализован выход "err", на котором при переполнении появляется "1" и некорректный результат отсекается, отдавая "нули" в разрядную сетку. Причина по которой это не сделано проста, мне некуда отдавать знак переполнения. А за книжку - ещё раз СПАСИБО! :) Ваше замечание будет учтено :) , но на следующем этапе. a-b, a+b - не нравится, так как в случае перехода с одной плис на другую не могу быть уверен, что при большом числе таких операций гарантированно будет хватать объёма кристалла. Могу быть в чём то не прав, т к занимаюсь ПЛИСами пока совсем не долго. Запустил Вашу программку, интересно. Обязательно погоняю.
  2. Понимаю, тяжело, ну извините, пишу как умею. Но глаза портить конечно же не надо, если глазки устали - просто пройдите мимо.
  3. Уважаемые господа и дамы. Я очень благодарен всем, кто был со мной в это не простое для меня время написания этого модуля, за советы, подсказки, книжки и всё остальное. Всё написанное вами было в тему и требовало осмысления. Осмысление наступило, равно как и тупиковый путь, рождённый блужданием глупой мысли. И вот у меня всё получилось. 12 битные + знак числа прекрасно складываются. (считай и вычитаются), по ходу пьесы, родился ещё блок сравнения чисел по модулю, который в проекте не пригодился, однако я решил его оставить, ибо полезная в будущем получилась доп. функция. Для всех кто помогал, а так же тех кому интересно прикрепляю здесь этот модуль. В модуле полно комментариев, что бы не запутаться в этом рабоче-крестьянском тексте. (модуль не 14, а 12 битовый) Буду рад отзывам. А ещё буду рад, если кто-то подскажет, что почитать и где посмотреть, как можно посчитать или промоделировать на нём задержки, (так вот сразу расписываюсь в беспомощности, т к ПЛИСами занимаюсь не так долго). full_sum.v
  4. В современном мире у меня такая ситуация: есть АЦП, выходной сигнал которого является заданием (он считывает напряжение с ручки задания), есть полная шкала времени, вычитание задания полученного с АЦП даст искомый результат. Искомый результат тоже время, на которое будет открываться тиристор. Вот так устроен для меня современный мир. А логика такая, чем больше задание, тем раньше нужно открывать тиристор, а значит нужно высчитать время паузы перед его открытием после прохода фазового напряжения через ноль. Заодно бывает неплохо что то прибавить или отнять по ходу пьесы..
  5. Спасибо и за код и за советы и подсказки. Однако всё дело в том, что в связи с санкциями не понятно, на каких ПЛИС в итоге придётся делать устройство и в итоге аппаратных сумматоров может просто не хватить. А сама проблема выросла из необходимости сделать вычитание, а потом захотелось сделать блок, который складывал бы числа, а видя что числа отрицательные, автоматом вычислял бы их дополнительный код, и снова складывал, у получившегося результата если он получался бы в дополнительном коде вычислялось бы обычное число. Хотелось сделать один раз один блок и навсегда о проблеме забыть. Как действовать я примерно понял, всем огромное спасибо, ещё раз спасибо за "умную книжку", а то учился давно и с этой темой после учёбы не пересекался.
  6. Всё не так однозначно, берём число с "запасным" разрядом и получаем из него дополнительный код, в котором в "запасной" разряд мы должны по всем правилам записать инвертированное число, т е "1 единицу" и она "автоматом" начинает участвовать в расчёте, при сложении двух дополнительных кодов, этот "запасной разряд" ещё и переполняется, плюс при сложении знаковых разрядов теряется признак отрицательного числа, т е ещё и знаковый разряд уходит в переполнение... но это же не правильно, но в чём не правильно от меня ускользает... и бумажек исписан уже целый ворох и копиться этот ворох начал раньше, чем я обратился за помощью к вам, уважаемые форумчане..
  7. Тогда вот такой пример: берём 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
  8. Книжка в целом хорошая и замечательная, но там не написано ничего, чего бы я не изучал в институте... Ответа на главный вопрос, как складывать два отрицательных числа там увы нет. И чёткой логики, когда отбрасываем старший, он же знаковый, он же разряд переполнения там нет. И получается в итоге, что единого алгоритма сложения двух знаковых чисел нет. Точнее, получается нужно делать несколько сумматоров, для положительных чисел, для положительных и отрицательных, а для сложения собственно отрицательных чисел, те чисел представленных в дополнительных кодах ещё один. И в каждом сумматоре необходимо учитывать, когда перенос работает, а когда перенос не работает. И в дополнение к этому ещё лепить блоки определения положительное число или отрицательное, естественно с конвертацией в дополнительный код и запуском соответствующей ветки... Ну не ужели нету другого какого-то алгоритма попроще. Или я смотрел в книгу и видел фигу? Ну очень хочется попроще.....
  9. ещё раз спасибо, вообще всё отлично написано, а то я весь гугл перерыл, а толку не было
  10. Зачем Quartus покупать, он бесплатно скачивался, да и на RU-трекере есть версии.
  11. Спасибо, буду смотреть. Спасибо за рекомендации, буду смотреть. А купить Xilinx разве возможно? Мне кажется он под такими же санкциями.
  12. да, книжка по компьютерной математике мне бы не помешала, если порекомендуете такую буду благодарен, а то я весь запутался с этими знаками и переполнениями в целом всё понятно, поэтому конечно спасибо за подробное объяснение, всё логично
  13. Тогда получается для сложения 12 разрядов чисел необходимо, собственно 12 разрядов, то 13й разряд это переполнение 12 разрядных вычислений, 14й разряд - это сам знак. 15й разряд признак того, что число в дополнительном коде. Только при такой конфигурации переполнение не "лезет в знаковый разряд". Правильно я понял?
  14. опечатка, принято Спасибо, а под знак необходимо теперь тоже два бита?
×
×
  • Создать...