Altifigence Academy

11 / 63 · Теория

Дешифратор, one-hot-выбор и допустимые входы

Преобразуйте двоичный адрес в отдельные линии выбора и задайте enable, диапазон и инварианты выбора.

Преобразование адреса в линии выбора

NN-битный дешифраторДешифратор активирует выходную линию, соответствующую двоичному коду. При наличии enable неактивное разрешение может устанавливать все выходы в 0. преобразует входной адрес в выбор одного из максимум 2N2^N выходов. Выход did_i с разрешением ee можно определить так:

di=e∧(a=i)d_i=e\land(a=i)

Для дешифратора 2-to-4: d0=ea‾1a‾0d_0=e\overline a_1\overline a_0, d1=ea‾1a0d_1=e\overline a_1a_0, d2=ea1a‾0d_2=ea_1\overline a_0, d3=ea1a0d_3=ea_1a_0. При enable=0 все выходы нулевые, при enable=1 ровно один равен 1.

При enable=1 меняйте адрес a1a0: включается лишь один из d0–d3. Затем установите enable=0 и убедитесь, что выключены все линии.

От адреса к линиям выбора one-hot

d[i] = enable AND (2 × a1 + a0 = i)

Значение по умолчанию завершает определение функции

SystemVerilog
module decoder2 (
  input logic en,
  input logic [1:0] addr,
  output logic [3:0] select
);
  always_comb begin
    select = 4'b0000;
    if (en) begin
      case (addr)
        2'd0: select = 4'b0001;
        2'd1: select = 4'b0010;
        2'd2: select = 4'b0100;
        2'd3: select = 4'b1000;
        default: select = 4'b0000;
      endcase
    end
  end
endmodule

Первое присваивание по умолчанию охватывает все пути исполнения, не позволяя запоминать прежний выход. Одно название always_comb не превращает неопределённые ветви в правильную схему автоматически.

Когда число выходов не является степенью двойки

Для выбора 10 устройств требуется 4-битный адрес, но 10–15 недопустимы. Нужно задать политику, например все выходы 0 и флаг ошибки 1. Неиспользуемый код сам по себе не разрешает произвольный выход.

Проверяйте не только соответствие адреса выходу, но и отсутствие нескольких активных линий одновременно и выключение всех линий при disable. Такие инвариантыИнвариант — условие, которое должно выполняться при любом допустимом выполнении. Например, число хранимых элементов FIFO глубиной 4 всегда находится между 0 и 4 включительно. Подробнее особенно важны для разрешения записи памяти и выбора устройств на шине. С ростом дешифратора растут fan-out адресных сигналов и нагрузка проводников, поэтому полезно рассматривать иерархическое декодирование.

Попробуйте сами

Спроектируйте адресный дешифратор с 10 выходами. Определите ширину адреса, число недопустимых кодов и обязательное условие при en=0.

Прочитать объяснение

Адрес имеет ⌈log⁡210⌉=4\lceil\log_2 10\rceil=4 бита, недопустимых кодов 6. При en=0 все линии выбора должны быть 0 независимо от адреса. Для недопустимого адреса можно специфицировать все нули и отдельный признак ошибки.

Выбор действует в этом браузере. Его можно изменить внизу страницы.