Дешифратор. Принцип работы и Примеры

Содержание

Дешифратор — логическое элемент, которое преобразует цифровой код двоичной системе счисления на входе в определенной сигнал на выходе. Можно реализовать как в цифровом виде с помощью программирования, так и на транзисторно-транзисторной логике (ТТЛ). Дешифратор не имеет определенной схемы, потому что имеет 2 важных параметра:

  1. Битовая длина — это ширина линии цифрового сигнала, который подключается к входам дешифратора.
  2. Кол-во выходов. Каждый схемотехник или программист сам решает какое количество и какие выводы ему нужны.

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

Принцип работы Дешифратора

На вход дешифратору подается цифровой код в двоичной системе счисления, который сравнивается внутри с помощью программы и ТТЛ, и если результат совпал с закладываемым значением, то выводит на определенном выходе высокий уровень. Высокий уровень сигнала означает:

  1. Если схема на ТТЛ, то высокое рабочее напряжение, которое схемотехник закладывал в схему.
  2. Если это цифровая схема, то на выходе появляется логическая единица «1».

Рассмотрим 16-битный дешифратор, цифровая схема которого построенная отображена на рисунке 1.

Дешифратор 16-битный полная схема
Рисунок 1. 16-битный дешифратор на комбинационной логике.

Однако, в таком виде никогда не применяются ни в аналоговой, ни в цифровой схемотехнике. Разработчика имеется необходимость проверять лишь совпадение с несколькими числами, а не всеми. В качестве 2-го примера рассмотри дешифратор, проверяющий значение 8, 13. У данного логического элемента 4 входных порта и 2 выходных. Условное графическое обозначение(УГО), схема на ТТЛ и RTL показано на рисунке 2.

Дешифратор УГО ТТЛ RTL
Рисунок 2. УГО, ТТЛ и RTL дешифратора.

Пример Дешифратора на Verilog

Пример дешифратор, который изображен на рисунке 2, реализован на Verilog для FPGA. Модуль получает 4 цифровых сигнала, сравнивает побитно и выдает на соответствующий выход логическую единицу.
module decoder16(out8, out13, data0, data1, data2, data3); input data0, data1, data2, data3; output out8, out13; assign out8 = data3 & ~data2 & ~data1 & ~data0, out13 = data3 & data2 & ~data1 & data0; endmodule

Пример Дешифратора на C++

Для написания 16-битного дешифратора для микроконтроллера AVR, который обрабатывает входной двоичный код, получаемый с четырех входов, и подает высокий сигнал на выходы в случае, если код равен 6, 10 или 13, вам понадобится создать соответствующую логику обработки данных.

Вам придется подключить к пинам микроконтроллера ваши входы и выходы, а затем использовать сочетания операций чтения входных данных и управления выходами в зависимости от условий равенства входного двоичного кода заданным значениям.

Этот код управляет входными и выходными портами микроконтроллера AVR и осуществляет проверку входного двоичного кода с четырех входов, подает высокий сигнал на выходы при условиях равенства введенного кода 6, 10 или 13. Пожалуйста, убедитесь, что подключили ваши входы к соответствующим пинам микроконтроллера.
#include <avr/io.h> void setup() { // Настройка портов ввода-вывода DDRD = 0b00000000; // Назначение D0-D3 для входа DDRB = 0b00100000; // Установка B5 как выход DDRB = DDRB | 0b00010000; // Установка B4 как выход DDRD = DDRD | 0b00010000; // Установка D4 как выход } void decoder(uint8_t input) { if(input == 6 || input == 10 || input == 13) { if(input == 6) PORTB |= 0b00100000; // Установка высокого сигнала на B5 if(input == 10) PORTB |= 0b00010000; // Установка высокого сигнала на B4 if(input == 13) PORTD |= 0b00010000; // Установка высокого сигнала на D4 } else { // Сброс выходов PORTB &= 0b11011111; PORTB &= 0b11101111; PORTD &= 0b11101111; } } int main() { setup(); // Считываем данные с четырех входов и формируем двоичный код uint8_t input_code = PINA & 0b00001111; // Применяем дешифратор decoder(input_code); return 0; }