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

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

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

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

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

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

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

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

цифра: 0 1 2 3 4 5 6 7
0 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 и декодер 3-к-8. Потому что вам дали ФАС для работы с этим не смысл задания.

Сначала нам нужно определить, как работает кодировщик и декодер. Итак, мы строим таблицу истинности:

кодировщик:

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

и дешифратор обратное этому.

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

Итак, для цифры 1s у нас есть, если входной бит 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 или Гейтс и назвать это днем.

давайте запишем это в 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-to-8 decoder


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

преобразование из восьмеричной в двоичную:

преобразовать восьмеричное в двоичное, необходимо заменить каждую восьмеричную цифру ее двоичным представлением. Пример: преобразование 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.