Второй этап был связан с устранением ошибок на промежутке от
регистров 1,2 до памяти Х, У. На этом
участке находится декодер из 2(10) в 2 код. Принцип его работы заключается в
присвоении определенных значений 2(10) коду.
Например, для первой цифры это будет:
8*=80=64+16
4*=40+32+8
2*=20=16+4
1*=10=8+2
Для второй цифры это:
8*=8
4*=4
2*=2
1*=1
Если забыли, то напоминаю: когда мы вводим цифру, то ввод
начинается с десятков, а заканчивается единицами. Что происходит с регистрами в
моменты, когда мы вводим цифры:
1) По
умолчанию счетчик стоит на положении У2, но когда он получает сигнал о том, что
была введена первая цифра то переключается на Х1 и следовательно введенная нами
цифра запишется в регистр 1.
2) При
вводе второй цифры счетчик переключается в положение Х2, значит и цифра будет
записана в регистр 2
3) После
полной записи в регистры 1,2 происходит автоматические чтение из них.
4) Сигнал
проходит через декодер из 2(10) в 2 с разной скоростью, поэтому чтобы
сигнал правильно записался в память Х, У необходимо удержать сигнал так долго,
чтобы ушли все помехи.
5) После
этого таймер разрешает запись в ячейки памяти Х или У.
6) Т.к.
счетчик находится в положении Х, то запись осуществляется именно в ячейки Х 7) С цифрами числа У аналогично.
У меня такой алгоритм начал правильно работать только за
полторы недели до защиты МАН. Самую большую трудность представляла
синхронизация задержки этих элементов. Разобравшись с этим вопросом, я к нему больше не
возвращался, т.к. знал, что все исправно работает.
Следующим вопросом было АЛУ. Я считал, что написанные мной
формулы для вычитания верны и достаточно просты в реализации, но как всегда я
не учел все факторы. Формулы имеют такой вид:
1) если
Х>У и Х+inУ=Z, то +1 бит
2) если
Х<У и Х+inУ=Z, то inZ
3) если
Х>У и inХ+У=Z, то inZ
4) если
Х<У и inХ+У=Z, то +1 бит
где in – инвертирование числа
Z – сумма двоичного кода Х и У
То есть были готовы формулы для Х+(-У) и (-Х)+У, но не было
для (-Х)+(-У). Об этом будет подробно рассказано в дальнейших выпусках.
Общий вид системы:
Первая правильная попытка сделать декодер из 2 в 2(10):
Управление плюсом и минусом:
Управление АЛУ для минуса (не достроено) :
Таймер перед регистрами Х,У:
Участок от регистров 1,2 до памяти Х,У:
Нововведения: закончена синзронизация регистров, что дает возможномть получать правильный результат в двоичном коде; начало проектирования декодера из 2 в 2(10) код.
Следите за появлением новых новостей! Ваш iBorjomi.
18.12.12
|