April 8th, 2019

Мучаем 5576ХС4Т - часть 'h22 - Bin2Bcd с последовательной выдачей данных

Часть 0 - покупаем, паяем, ставим драйвера и софт
Часть 1 - что это вообще за зверь?
Часть 2 - наша первая схема!
Часть 3 - кнопочки и лампочки
Часть 4 - делитель частоты
Часть 5 - подавление дребезга кнопки
Часть 6 - заканчиваем кнопочки и лампочки
Часть 7 - счетчики и жаба
Часть 8 - передатчик UART
Часть 9 - Hello, wolf!
Часть 'hA - приёмник UART
Часть 'hB - UART и жаба
Часть 'hC - полудуплексный UART.
Часть 'hD - МКО (МКИО, Mil-Std 1553) для бедных, введение.
Часть 'hE - приёмопередатчик МКО "из подручных материалов" (в процессе)
Часть 'hF - модуль передатчика МКО
Часть 'h10 - передатчик сообщений МКО
Часть 'h20 - работа с АЦП ADC124s051
Часть 'h21 - преобразование двоичного кода в двоично-десятичный (BCD)
Часть 'h22 - Bin2Bcd с последовательной выдачей данных
Часть 'h23 - перемножитель беззнаковых чисел с округлением
Часть 'h24 - перемножитель беззнаковых чисел, реализация
Часть 'h25 - передаём показания АЦП на компьютер
Часть 'h26 - работа над ошибками (быстрый UART)
Часть 'h27 - PNG и коды коррекции ошибок CRC32
Часть 'h28 - передатчик изображения PNG
Часть 'h29 - принимаем с ПЛИС изображение PNG
Часть 'h2A - ZLIB и коды коррекции ошибок Adler32
Часть 'h2B - ускоряем Adler32
Часть 'h2C - формирователь потока Zlib
Часть 'h2D - передаём сгенерированное PNG-изображение
Часть 'h2E - делим отрезок на равные части
Часть 'h2F - знаковые умножители, тысячи их!
Часть 'h30 - вычислитель множества Мандельброта
Часть 'h31 - ускоренные сумматоры
Часть 'h32 - ускоренные счётчики (делаем часы)
Часть 'h33 - ускоряем ВСЁ
Часть 'h34 - ускоренные перемножители
Часть 'h35 - умножители совсем просто
Часть 'h36 - уравновешенный четверичный умножитель


В прошлой части мы разработали довольно компактный модуль для преобразования 16-битного целого беззнакового числа в двоично-десятичную (BCD) форму. Через 15 тактов работы, все 5 десятичных разрядов выдавались параллельно. Но ситуация, когда они нам действительно нужны "все сразу" - очень редки. Куда бы дальше ни пошли эти данные, они скорее всего понадобятся по одной цифре за раз! Если мы подключаем 7-сегментный индикатор, мы как правило используем "динамическую индикацию", когда цифры зажигаются одна за другой - это позволяет сэкономить на количестве транзисторов и проводов, идущих к контроллеру (будь то ПЛИС или МК). Также "по одной цифре" (максимум по две) мы будем заносить в память, либо отправлять через UART.

Поскольку наш преобразователь двоичного кода в BCD - по своей сути сдвиговый регистр (плюс цепи коррекции), то почему бы не применить его и для последовательной выдачи цифр, от самой старшей к самой младшей?

Но сначала разберёмся, а какой интерфейс нам вообще нужен? Как оказывается, если мы планируем результаты работы занести в оперативную память, нам удаётся влезть всего в 49 логических элементов!


Collapse )