Сумматор-вычитатель

Печатные платы, программируемая логика, разработка и изготовление аппаратуры

Moderator: Shaos

Bill
Fanat
Posts: 92
Joined: 25 Jan 2014 21:54
Location: 37.113.169.14

Сумматор-вычитатель

Post by Bill »

Lavr wrote:
Lavr wrote:
Shaos wrote:ну просто видимо при сложении C должен быть прямой флаг, а при вычитании - инверсный

P.S. вот тут устами самого интела говорится, что после вычитания флаг инвертируется (стр.46 в PDF или 2-8 на бумаге):
http://www.tramm.li/i8080/Intel%208080-8085%20Assembly%20Language%20Programming%201977%20Intel.pdf
This is because the processors complement the carry flag at the end of a subtract operation so that it can be used as a 'borrow' flag in multibyte subtractions
Действительно...
Однако если такие операции проводятся микропроцессорами i8080 или i8085, флаг переноса будет СБРОШЕН в конце вычитания. Это происходит потому, что микропроцессоры инвертируют флаг переноса в конце операции вычитания, так чтобы он мог быть использован в дальнейшем в качестве флага «заёма» при многобайтном вычитании.
Опять я споткнулся об эти флаги, программируя 6502... :-?
Оказывается, есть просто разные подходы к интерпретации флага переноса C: от Intel и от MOS Technology
Image
Some architectures, namely MOS 6502 and all ARM CPUs, use "true carry" subtraction implementation that Carry flag from PSW is not inverted before and after subtraction, so, C = 1 means no borrow and C = 0 means borrow.
Тут всё зависит от реализации операции вычитания в АЛУ. В одних случаях выполняется именно вычитание, в других случаях вычитание заменяется сложением с дополнительным кодом вычитаемого. Например, операция 1-1 = 0.

Code: Select all

    00000001        00000001
  -                +
    00000001        11111111
 С  --------     С  ---------
 0  00000000     1  00000000
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 4-bit Processor

Post by Lavr »

Bill wrote:Тут всё зависит от реализации операции вычитания в АЛУ. В одних случаях выполняется именно вычитание,
А как "именно вычитание" выполняется в АЛУ аппаратно?
iLavr
Bill
Fanat
Posts: 92
Joined: 25 Jan 2014 21:54
Location: 37.113.169.14

Re: 4-bit Processor

Post by Bill »

Lavr wrote:
Bill wrote:Тут всё зависит от реализации операции вычитания в АЛУ. В одних случаях выполняется именно вычитание,
А как "именно вычитание" выполняется в АЛУ аппаратно?
С помощью аппаратного вычитателя. Пример - АЛУ 74181.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 4-bit Processor

Post by Lavr »

Bill wrote:
Lavr wrote:
Bill wrote:Тут всё зависит от реализации операции вычитания в АЛУ. В одних случаях выполняется именно вычитание,
А как "именно вычитание" выполняется в АЛУ аппаратно?
С помощью аппаратного вычитателя. Пример - АЛУ 74181.
Вот мне и интересно, как лично Вы представляете себе схемотехнику "аппаратного вычитателя"? :roll:
Я лично никак не представляю, как аппаратно выполняется именно вычитание, о чём вы поведали.
Именно поэтому и спрашиваю Вас о конкретной аппаратной реализации этого неизвестного мне узла цифровой техники. :-?

В рамках этого форума мы АЛУ 74181 aka К155ИП3 не раз подробно рассматривали:

Image

Где там в его структуре "аппаратный вычитатель"? Или хотя бы полувычитатель? :roll:
iLavr
Bill
Fanat
Posts: 92
Joined: 25 Jan 2014 21:54
Location: 37.113.169.14

Re: 4-bit Processor

Post by Bill »

Lavr wrote:
Bill wrote:
Lavr wrote:
Bill wrote:Тут всё зависит от реализации операции вычитания в АЛУ. В одних случаях выполняется именно вычитание,
А как "именно вычитание" выполняется в АЛУ аппаратно?
С помощью аппаратного вычитателя. Пример - АЛУ 74181.
Вот мне и интересно, как лично Вы представляете себе схемотехнику "аппаратного вычитателя"? :roll:
Я лично никак не представляю, как аппаратно выполняется именно вычитание, о чём вы поведали.
Именно поэтому и спрашиваю Вас о конкретной аппаратной реализации этого неизвестного мне узла цифровой техники. :-?

В рамках этого форума мы АЛУ 74181 aka К155ИП3 не раз подробно рассматривали:

Image

Где там в его структуре "аппаратный вычитатель"? Или хотя бы полувычитатель? :roll:
Если кратко, то вычитатель мало чем отличается от сумматора. Единственное отличие состоит в том, что для формирования переноса (заёма) используется инверсия уменьшаемого. Т.е. для выполнения операции D= A - B формула будет следующей:
Di = AiBi ^ Aibi ^ Bibi
bi+1 = ~AiBi | ~Aibi | Bibi

А вообще, всё это получается из таблицы истинности.
А что касается 74181, если верит таблице её функций, то при комбинации S3S2S1S0 = 0110 выполняется как раз операция вычитания F = A - B.
PS: Ещё одна ссылка по 74181: http://www.6502.org/users/dieter/a2/a2_4.htm
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 4-bit Processor

Post by Lavr »

Bill wrote:
Lavr wrote:
Bill wrote:
Lavr wrote:
Bill wrote:Тут всё зависит от реализации операции вычитания в АЛУ. В одних случаях выполняется именно вычитание,
А как "именно вычитание" выполняется в АЛУ аппаратно?
С помощью аппаратного вычитателя. Пример - АЛУ 74181.
Вот мне и интересно, как лично Вы представляете себе схемотехнику "аппаратного вычитателя"? :roll:
Если кратко, то вычитатель мало чем отличается от сумматора. Единственное отличие состоит в том, что для формирования переноса (заёма) используется инверсия уменьшаемого.
Если вы не разобрались в конкретно приведенной выше схемотехнике АЛУ, то хотя бы прочитайте
внимательно, как АЛУ 74181 выполняет вычитание: https://digteh.ru/proc/ALU/
74181.PNG
То есть, АЛУ 74181 выполняет вычитание суммированием с числом в дополнительном коде.

А вот это ваше высказывание весьма сомнительно, ибо, как видно выше, никакого специального
аппаратного именно вычитания в АЛУ даже на примере 74181 нет.
Bill wrote:Тут всё зависит от реализации операции вычитания в АЛУ. В одних случаях выполняется именно вычитание, в других случаях вычитание заменяется сложением с дополнительным кодом вычитаемого. Например, операция 1-1 = 0.

Code: Select all

    00000001        00000001
  -                +
    00000001        11111111
 С  --------     С  ---------
 0  00000000     1  00000000
You do not have the required permissions to view the files attached to this post.
iLavr
Bill
Fanat
Posts: 92
Joined: 25 Jan 2014 21:54
Location: 37.113.169.14

Re: 4-bit Processor

Post by Bill »

Lavr wrote:
Bill wrote:
Lavr wrote:
Bill wrote:
Lavr wrote:Вот мне и интересно, как лично Вы представляете себе схемотехнику "аппаратного вычитателя"? :roll:
Если кратко, то вычитатель мало чем отличается от сумматора. Единственное отличие состоит в том, что для формирования переноса (заёма) используется инверсия уменьшаемого.
Если вы не разобрались в конкретно приведенной выше схемотехнике АЛУ, то хотя бы прочитайте
внимательно, как АЛУ 74181 выполняет вычитание: https://digteh.ru/proc/ALU/
74181.PNG
То есть, АЛУ 74181 выполняет вычитание суммированием с числом в дополнительном коде.

А вот это ваше высказывание весьма сомнительно, ибо, как видно выше, никакого специального
аппаратного именно вычитания в АЛУ даже на примере 74181 нет.
Bill wrote:Тут всё зависит от реализации операции вычитания в АЛУ. В одних случаях выполняется именно вычитание, в других случаях вычитание заменяется сложением с дополнительным кодом вычитаемого. Например, операция 1-1 = 0.

Code: Select all

    00000001        00000001
  -                +
    00000001        11111111
 С  --------     С  ---------
 0  00000000     1  00000000
Всё это так, только по вашей ссылке вычитатель опять же строится на основе сумматора. В АЛУ 74181 операция вычитания выполняется по-другому. Посмотрите по ссылке, которую я привёл в своём предыдущем посте. Там всё хорошо показано.
Mixa64
Doomed
Posts: 481
Joined: 25 Aug 2009 07:02
Location: Москва

Re: 4-bit Processor

Post by Mixa64 »

Bill wrote:Всё это так, только по вашей ссылке вычитатель опять же строится на основе сумматора. В АЛУ 74181 операция вычитания выполняется по-другому. Посмотрите по ссылке, которую я привёл в своём предыдущем посте. Там всё хорошо показано.
Ну в АЛУ '181 вычитание делается за счет активации инверсного пути прохождения со входов Bn , сложение - активацией пути без инверсии, весь остальной бэкенд без изменений. Трактовки можно пытаться выбирать разные. Например, как сумматор с переключением одного входа между прямой-инверсный, или как все вместе, сумматор-вычитатель. Но если как сумматор-вычитатель, то трактовка переносов неудобная выходит. Их бы тоже инвертировать при вычитании, тогда будут прямые перенос-заем, или, что более универсально, беззнаковое переполнение. Хотя, цифровым пофиг, удобство, неудобство, лишь бы какую-то комбинационную функцию выполняло. В общем, либо сумматор с опцией внутренней инверсии одного из входов, либо сумматор-недовычитатель.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 4-bit Processor

Post by Lavr »

Mixa64 wrote:
Bill wrote:Всё это так, только по вашей ссылке вычитатель опять же строится на основе сумматора. В АЛУ 74181 операция вычитания выполняется по-другому. Посмотрите по ссылке, которую я привёл в своём предыдущем посте. Там всё хорошо показано.
Ну в АЛУ '181 вычитание делается за счет активации инверсного пути прохождения со входов Bn , сложение - активацией пути без инверсии, весь остальной бэкенд без изменений. Трактовки можно пытаться выбирать разные. Например, как сумматор с переключением одного входа между прямой-инверсный, или как все вместе, сумматор-вычитатель.
"Вычитатель", если в принципе применять это слово, дорогой Bill, ВСЕГДА строится на основе сумматора.
И других вариантов просто нет.
"Вычитателем" аппаратный сумматор становится благодаря принятой и распространённой кодировке
отрицательных чисел, которая обеспечивает нам единственность нуля. Хотя и не всегда так было...

Именно поэтому я столь настойчиво спрашивал вас, как вы представляете "вычитатель" аппаратно.
Получается, что вы и сами в этом не разобрались толком, и людей вводите в заблуждение... :-?

В системе команд PDP-8, к примеру, операции вычитания и вовсе нет, как нет и никакого аппаратного
именно вычитателя в составе её АЛУ.
Что ж, выходит, PDP-8 именно вычитание выполнять не умеет? :roll: Отнюдь... :wink:

Кстати говоря, насчёт "активации инверсного пути прохождения": когда я делал своё собственное АЛУ с ограничением "сугубо" на NAND, то именно этот метод и применил...
Но если присмотреться к таблице истинности этого метода, то получается, что это тот же XOR - управляемый
инвертор - но выполненный на рассыпухе. :lol:
iLavr
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 4-bit Processor

Post by Lavr »

Кстати, джентльмены, ни у кого случаем нет контактов некоего г-на Микушина А.В. -
автора вот этой учебной страницы в Интернете: https://digteh.ru/digital/counter.php

Я посмотрел поиском - вроде он даже автор весьма неглупых учебных книг...
Но на этой странице он явно вводит всех в заблуждение. :(

Счётчик по фронту:
Image

у него считает явно по спаду...
Image

Хотя даже нелюбимый многими Proteus подсказывает, что это не так. :wink:
CNT_F.PNG
Я бы и сам намекнул бы ему об этом, но, к сожалению, контактов кроме VK автор не оставил,
VK.PNG
а материал, выдаваемый за учебный, будут бездумно списывать все представители поколения ЕГЭ... :-?
You do not have the required permissions to view the files attached to this post.
iLavr
Bill
Fanat
Posts: 92
Joined: 25 Jan 2014 21:54
Location: 37.113.169.14

Re: 4-bit Processor

Post by Bill »

Lavr wrote:
Mixa64 wrote:
Bill wrote:Всё это так, только по вашей ссылке вычитатель опять же строится на основе сумматора. В АЛУ 74181 операция вычитания выполняется по-другому. Посмотрите по ссылке, которую я привёл в своём предыдущем посте. Там всё хорошо показано.
Ну в АЛУ '181 вычитание делается за счет активации инверсного пути прохождения со входов Bn , сложение - активацией пути без инверсии, весь остальной бэкенд без изменений. Трактовки можно пытаться выбирать разные. Например, как сумматор с переключением одного входа между прямой-инверсный, или как все вместе, сумматор-вычитатель.
"Вычитатель", если в принципе применять это слово, дорогой Bill, ВСЕГДА строится на основе сумматора.
И других вариантов просто нет.
"Вычитателем" аппаратный сумматор становится благодаря принятой и распространённой кодировке
отрицательных чисел, которая обеспечивает нам единственность нуля. Хотя и не всегда так было...

Именно поэтому я столь настойчиво спрашивал вас, как вы представляете "вычитатель" аппаратно.
Получается, что вы и сами в этом не разобрались толком, и людей вводите в заблуждение... :-?

В системе команд PDP-8, к примеру, операции вычитания и вовсе нет, как нет и никакого аппаратного
именно вычитателя в составе её АЛУ.
Что ж, выходит, PDP-8 именно вычитание выполнять не умеет? :roll: Отнюдь... :wink:

Кстати говоря, насчёт "активации инверсного пути прохождения": когда я делал своё собственное АЛУ с ограничением "сугубо" на NAND, то именно этот метод и применил...
Но если присмотреться к таблице истинности этого метода, то получается, что это тот же XOR - управляемый
инвертор - но выполненный на рассыпухе. :lol:
:) Ещё одна ссылочка: https://en.wikipedia.org/wiki/Subtractor
Mixa64
Doomed
Posts: 481
Joined: 25 Aug 2009 07:02
Location: Москва

Re: 4-bit Processor

Post by Mixa64 »

Bill wrote: :) Ещё одна ссылочка: https://en.wikipedia.org/wiki/Subtractor
Во, годная ссылочка :-)
Теперь - вычитатель как он есть, без колдовства над вычитаемым.
Тракт формирования разряда результата, что у сумматора, что у вычитателя, одинаков: X⊕Y⊕C или X⊕Y⊕B
Ну и, как ранее уже было отмечено, различаются они (сумматор и вычитатель) только схемой обработки переноса или заема. Переключением схемы переноса-заема можно превращать сумматор в вычитатель и обратно.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 4-bit Processor

Post by Lavr »

Bill wrote:Ещё одна ссылочка: https://en.wikipedia.org/wiki/Subtractor
Смотрим ссылочку:
DIF2.png
Bill wrote:...по вашей ссылке вычитатель опять же строится на основе сумматора. В АЛУ 74181 операция вычитания выполняется по-другому.
Ну и где в АЛУ 74181 такой каскад? :roll:

Image
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 4-bit Processor

Post by Lavr »

Mixa64 wrote:
Bill wrote: :) Ещё одна ссылочка: https://en.wikipedia.org/wiki/Subtractor
...
Переключением схемы переноса-заема можно превращать сумматор в вычитатель и обратно
Внизу по ссылке: Adder–subtractor
add-sub.png
Что-то Википедисты переключением схемы переноса-заема превращать сумматор в вычитатель и обратно не торопятся! :wink:
You do not have the required permissions to view the files attached to this post.
iLavr
Bill
Fanat
Posts: 92
Joined: 25 Jan 2014 21:54
Location: 37.113.169.14

Re: 4-bit Processor

Post by Bill »

Lavr wrote:
Bill wrote:Ещё одна ссылочка: https://en.wikipedia.org/wiki/Subtractor
Смотрим ссылочку:
DIF2.png
Bill wrote:...по вашей ссылке вычитатель опять же строится на основе сумматора. В АЛУ 74181 операция вычитания выполняется по-другому.
Ну и где в АЛУ 74181 такой каскад? :roll:

Image
Вы всё-таки ссылочку посмотрите http://www.6502.org/users/dieter/a2/a2_4.htm
Там всё чётко объясняется.
Q=A-B: S3..0 = 0110
The red marked ANDs are active.
Basically it's like A+B, with B inverted.
Note: borrow is low_active, like with the 6502.