Восьмеричный полный сумматор как сделать


у меня есть этот проект слушайте ниже, и я не уверен, с чего начать может быть, кто-то может дать мне несколько советов или, возможно, указать мне в правильном направлении, чтобы начать это? Спасибо!!

Входные данные: A, B = восьмеричные цифры (см. представление ниже); Cin = двоичная цифра

Вывод: S = восьмеричная цифра (см. представление ниже); Cout = двоичная цифра

Задача: Используя двоичный FAs, разработайте схему, которая действует как восьмеричный FA. Точнее, эта схема вводит две восьмеричные цифры A, B, преобразует их в двоичные числа, добавляет они используют только двоичный FAs, преобразуют двоичный результат обратно в восьмеричный и выводят сумму в виде восьмеричную цифру, а двоичную выполняют.

Вход / выход двоичное представление восьмеричных цифр

Каждая восьмеричная цифра будет представлена следующим 8-битным двоичным представлением:

Восьмеричные 8-битные входные строки:

Цифра: 0 1 2 3 4 5 6 7
Ноль       1 0 0 0 0 0 0 0
1 0 1 0 0 0 0 0 0
2 0 0 1 0 0 0 0 0
3 0 0 0 1 0 0 0 0
4 0 0 0 0 1 0 0 0
5 0 0 0 0 0 1 0 0
6 0 0 0 0 0 0 1 0
7 0 0 0 0 0 0 0 1

Вы должны спроектировать схему структурированным образом.

3 8

3 ответа:

Итак, по существу вас просят разработать кодер 8-к-3 и декодер 3-к-8. Потому что у вас есть ФАС, чтобы работать с этим не является смыслом задания.

Сначала нам нужно определить, как функционируют кодер и декодер. Таким образом, мы строим таблицу истинности:

Шифратор:

Input    | Output
01234567 | 421
-----------------
10000000 | 000
01000000 | 001
00100000 | 010
00010000 | 011
00001000 | 100
00000100 | 101
00000010 | 110
00000001 | 111

, а декодер-это всего лишь обратная, что.

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

Итак, для 1-й цифры мы имейте, если входной бит 1, 3, 5 или 7 установлен, то это 1, в противном случае это 0. Поэтому нам просто нужен гигант или с 4 входами, подключенными к 1, 3, 5 и 7.

Для цифры 2s нам нужен элемент или, соединенный с 2, 3, 6, 7. Наконец, для ворот 4s соедините их с 4, 5, 6, 7. Это не делает никакой проверки ошибок, чтобы убедиться, что дополнительные биты не установлены. Хотя, поведение в этом случае, кажется, не определено спецификацией, так что, вероятно, все в порядке.

Затем вы берете свои три строки и скармливаете их своим сумматорам. Это легко, так что я не буду вдаваться в подробности. Наконец, вам нужен декодер, это немного сложнее, чем кодер. Давайте посмотрим на таблицу истинности декодера:
Input | Output
421   | 01234567 
----------------
000   | 10000000
001   | 01000000
010   | 00100000
011   | 00010000
100   | 00001000
101   | 00000100
110   | 00000010
111   | 00000001
На этот раз мы не можем просто использовать 3 или gates и назвать это днем.

Запишем это в C-образном коде:

if (!input[0] && !input[1] && !input[2])
  output[0] = 1
if (input[0]  && !input[1] && !input[2])
  output[1] = 1
if (!input[0] && input[1]  && !input[2])
  output[2] = 1
if (input[0]  && input[1]  && !input[2])
  output[3] = 1
if (!input[0] && !input[1] && input[2])
  output[4] = 1
if (input[0]  && !input[1] && input[2])
  output[5] = 1
if (!input[0] && input[1]  && input[2])
  output[6] = 1
if (input[0]  && input[1]  && input[2])
  output[7] = 1

Итак, похоже, что мы будем использовать 8 3 входа и ворота, и три не ворота!

Этот немного сложнее, поэтому я привел пример реализация:

Декодер от 3 до 8

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

Преобразование Восьмеричного числа в двоичное:

Чтобы преобразовать восьмеричную цифру в двоичную, замените каждую восьмеричную цифру ее двоичным представлением. Пример: преобразование 518 в двоичный код: 58 = 1012 18 = 0012 Следовательно, 518 = 101 0012.

Преобразование двоичного числа в восьмеричное:

Процесс является обратным предыдущему алгоритму. Двоичные цифры сгруппированы по тройкам, начиная с десятичной точка (если есть) или последняя цифра и переходим налево и направо. Добавьте начальные 0 (или конечные нули справа от десятичной точки), чтобы заполнить последнюю группу из трех, если это необходимо. Затем замените каждую тройку эквивалентной восьмеричной цифрой.

Пример преобразования двоичного числа 1010111100 в восьмеричное: (Добавляя два ведущих нуля, число 001010111100) 001 = 1, 010 = 2, 111 = 7, 100 = 4 Следовательно, 1010111100 = 1274

Для преобразования в восьмеричную и обратно можно использовать пару кодер-декодер (http://www.asic-world.com/digital/combo3.html ). 3-битный сумматор может быть сделан из цепочки 3 FAs.