включил счетчик битов

Предположим, у меня есть черный ящик с 3 входами (каждый вход — 1 бит) и 2 бита на выходе. Черный ящик подсчитывает количество включенных входных битов. Используя только такие черные ящики, нужно реализовать счетчик включенных битов на входе, который имеет 7 бит. Реализация должна использовать минимально возможное количество черных ящиков.

//Это вопрос собеседования


person Yakov    schedule 01.09.2013    source источник
comment
Потребуется 4 черных ящика.   -  person Egor Skriptunoff    schedule 01.09.2013
comment
@EgorSkriptunoff - можете ли вы указать, как это реализовать с помощью 4 черных ящиков?   -  person Yakov    schedule 01.09.2013
comment
вам нужно только количество или также, какие биты включены? Поскольку у каждого поля есть три входных бита, не будет ли это просто три поля, чтобы покрыть семь входных битов, или я что-то упустил?   -  person גלעד ברקן    schedule 01.09.2013
comment
@groovy Я предполагаю, что OP хочет вывести двоичное представление количества битов на входе, что займет 4 черных ящика.   -  person beaker    schedule 01.09.2013


Ответы (2)


Вы делаете двоичный сумматор. Попробуйте это...
Два черных ящика для ввода с одним оставшимся вводом:

 7 6 5      4 3 2      1
 | | |      | | |      | 
-------    -------     |
|     |    |     |     |
| H L |    | H L |     |
-------    -------     |
  | |        | |       |

Возьмите два низких выхода и оставшийся вход (1) и направьте их на другой черный ящик:

            L L 1
            | | |
           -------
           |     |
           | C L |
           -------
             | |

Низкий выход этого черного ящика будет младшим битом результата. Высокий выход - это бит переноса. Передайте этот бит переноса вместе со старшими битами из первых двух черных ящиков в четвертый черный ящик:

 H H C   L
 | | |   |
-------  |
|     |  |
| H M |  |
-------  |
  | |    |

Результатом должно быть количество «включенных» битов на входе, выраженное в двоичном виде с помощью старшего, среднего и младшего битов.

person beaker    schedule 01.09.2013

Предположим, что каждый BB выводит 2-битный двоичный счет 00, 01, 10 или 11, когда 0, 1, 2 или 3 его входа включены. Также предположим, что желаемый конечный результат O₄O₂O₁ представляет собой 3-битный двоичный счет 000 ... 111, когда 0, 1, ... 7 из 7 входных битов i₁...i₇ включены. Для подобных проблем в целом вы можете написать логическое выражение для того, что делает BB, и логическое выражение для желаемого вывода, а затем синтезировать вывод. В этом конкретном случае, однако, попробуйте очевидный подход, поместив i₁, i₂, i₃ в первый ящик B₁, i₄, i₅, i₆ во второй ящик B₂ и i₇ на один из входов третьего ящика B₃. Глядя на это, становится ясно, что если вы запустите единицы, выходящие из B₁ и B₂, в два других входа B₃, тогда единицы, выходящие из B₃, будут равны желаемому значению O₁. Вы можете получить сумму двух выходов из B₁, B₂, B₃ через ящик B₄, и эта сумма равна искомым значениям O₄O₂.

person James Waldby - jwpat7    schedule 01.09.2013