DocsTech
/
NONEDISPLAY
/

~ cd дешифратор. принцип работы и примеры

Дешифратор — логическое элемент, которое преобразует цифровой код двоичной системе счисления на входе в определенной сигнал на выходе. Можно реализовать как в цифровом виде с помощью программирования, так и на транзисторно-транзисторной логике (ТТЛ). Дешифратор не имеет определенной схемы, потому что имеет 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;
}
Главная
Курсы
Вебинары
Анализ рынка вакансий в сфере RTL-дизайна в России: тренды, спрос и перспективы
LinuxCNC: Преимущества и применение в станкостроении и автоматизации
Алгоритм Хаффмана: Теория, методология и практическая реализация для эффективного сжатия данных
Chisel vs. SystemVerilog: Новый взгляд на проектирование цифровых схем
Подключение датчика ZMPT101B к Arduino: схема, настройка и пример кода
Подключение MAX6675 к Arduino: схема, библиотеки и примеры кода
Подключение и настройка MPU6050 к Arduino: схема, библиотеки и скетч
Подключение VL53L0X к Arduino: полное руководство по лазерному датчику расстояния
Подключение компас HMC5883L к Arduino: схема, библиотеки и пример кода
Подключение ACS712 к Arduino: схема, библиотеки и скетчи
Подключение ADXL345 к Arduino: схема, библиотеки и код
Подключение датчика INA219 к Arduino: схема, библиотеки и примеры кода
HC-SR04 и Arduino: схема подключения, библиотеки и скетч
Assertion-Based Verification(ABV): основные понятия, принцип работы и примеры
Подключение HX711 к Arduino: схема, библиотеки и код
Подключение DHT22 к Arduino: схема, код и необходимые библиотеки
Как подключить RCWL-0516 к Arduino: схема, библиотеки и скетч
Универсальная Методология Верификации (UVM): Описание, Особенности и Пример Использования
DS18B20: Подключение к Arduino, Библиотеки и Скетч
Методологии верификации HDL-кода: Основы, Преимущества и Популярные Подходы
Роль ПЛИС в Алготрейдинге и Высокочастотной Торговле
Lint, CDC, RDC, LEC, Power Analyzer, STA и DFT для HDL
Пиратство плохо! Мне так сказали…
Применение Icarus Verilog для тестирования с входными данными
Ключевые параметры для выбора цифроаналогового преобразователя (ЦАП)
Все о КНФ и ДНФ: Понятие, Примеры и Применение
Импликация: Что Это, Таблица Истинности и Применение в Информатике
Стрелка Пирса: Что Это за Логическая Операция и Таблица Истинности
Штрих Шеффера: Полное Руководство
STM32F103 с использованием HAL и I2C: Подробная конфигурация и пример кода
Подключение DHT11 к ESP32: Схема, Библиотеки и Пример Кода
ESP8266 I2C: настройка для master и slave
Подключение DHT11 к Arduino и Вывод на LCD 1602 I2C: Схема и Скетч
Подключение DHT11 к Arduino: Схема, Библиотеки и Скетч
ESP32 I2C: Настройка кода под master и slave
TM1637 Подключение к Arduino: Полное Руководство
Подключение часов DS3231 к Arduino и LCD 1602 I2C
Arduino: Часы Реального Времени DS1302 на LCD 1602 I2C
ESP32 SPI: Объявление SPI на ESP32 с Примером Кода
ESP8266 SPI: полная инструкция SPI на ESP8266
Протокол SPI: Регистровая Логика, Передача Данных и Режимы
Демультиплексор: принцип работы, схема и основы
Счетчики с синхронным и асинхронным сбросом на Verilog
Знаковость signed в Verilog: примеры, синтаксис, оптимизация
Директива Define в Verilog: Синтаксис, Примеры и Применение
Таблицы истинности триггеров: JK, RS, D и T
Fork и begin в Verilog: обзор и различия
Posedge и Negedge в Verilog: Синтаксис и Функциональность
Verilog always: Синтаксис, Примеры и Применение
Wire в Verilog: Основы использования, синтаксис и примеры кода
Блокирующие и неблокирующие присваивания в Verilog
Verilog Assign: что делает этот оператор?
Verilog Parameter: Ключевой Инструмент Оптимизации
Многомерные массивы в Verilog
Case Verilog
Дешифратор. Принцип работы и Примеры
Модули в Verilog
Описание FIFO. Примеры на Verilog и С++
Закрыть