11 / 63 · Теория
Дешифратор, one-hot-выбор и допустимые входы
Преобразуйте двоичный адрес в отдельные линии выбора и задайте enable, диапазон и инварианты выбора.
Уроки доступны бесплатно. Запишитесь, чтобы сохранять прогресс.
Преобразование адреса в линии выбора
-битный дешифраторДешифратор активирует выходную линию, соответствующую двоичному коду. При наличии enable неактивное разрешение может устанавливать все выходы в 0. преобразует входной адрес в выбор одного из максимум выходов. Выход с разрешением можно определить так:
Для дешифратора 2-to-4: , , , . При enable=0 все выходы нулевые, при enable=1 ровно один равен 1.
При enable=1 меняйте адрес a1a0: включается лишь один из d0–d3. Затем установите enable=0 и убедитесь, что выключены все линии.
d[i] = enable AND (2 × a1 + a0 = i)
Значение по умолчанию завершает определение функции
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.
Прочитать объяснение
Адрес имеет бита, недопустимых кодов 6. При en=0 все линии выбора должны быть 0 независимо от адреса. Для недопустимого адреса можно специфицировать все нули и отдельный признак ошибки.