Altifigence Academy

1 / 37 · Теория

RTL: описание одновременно работающих схем

Отделите порядок программных действий от параллельной структуры и задайте текущее состояние, следующее состояние и момент наблюдения.

Схема продолжает работать

RTL описывает движение значений между регистрами через комбинационную логику. Модуль задаёт границу аппаратуры; два экземпляра создают две взаимодействующие структуры, а не последовательные вызовы функций. Схема остаётся активной при изменениях входов. Перенесите элементы, память и автоматы из курса «Цифровые логические схемы» в явные интерфейсы SystemVerilog и воспроизводимые проверки. До реализации объясните разрядность, источник, достоверность и сброс каждого сигнала.

Разделяйте текущее и следующее состояние

Полный модуль накапливает беззнаковые четырёхбитовые sample в восьмибитовом регистре. Синхронный сброс активен высоким уровнем и важнее enable. Разрешённый фронт добавляет sample; остальные сохраняют sum. Арифметика выполняется по модулю 256.

SystemVerilog
module accumulator (
  input  logic       clk, rst, enable,
  input  logic [3:0] sample,
  output logic [7:0] sum
);
  logic [7:0] next_sum;
  assign next_sum = sum + {4'b0000, sample};
  always_ff @(posedge clk) begin
    if (rst) sum <= 8'b0;
    else if (enable) sum <= next_sum;
  end
endmodule

next_sum — комбинационный результат: он может измениться вместе с sum или sample без фронта такта. sum хранит состояние и меняется на нарастающем фронте. Одинаковое объявление logic не означает одинаковую аппаратную роль. Отсутствующий заключительный else в тактовом блоке удерживает регистр; пропущенное присваивание в комбинационном блоке может потребовать защёлку. Сначала определите тип блока.

До моделирования вычислите таблицу фронтов

Строка использует состояние и входы непосредственно до фронта; наблюдайте после неблокирующих обновлений.

Фронтrstenablesamplesum доsum после
E0119Неизвестно0
E101303
E200733
E301538
E4111580

На E4 выигрывает сброс, сложения нет. При старом sum=250 и принятом sample=10 восьмибитовый результат равен 4. Сохранение девятого бита изменило бы интерфейс и арифметический контракт.

Локальный порядок и структурный параллелизм

Блокирующие присваивания = внутри комбинационной процедуры идут в процедурном порядке. Отдельные процедуры и непрерывные присваивания являются параллельными процессами. Неблокирующие <= вычисляют правую часть из доступных при исполнении значений, затем планируют обновление. Порядок текста не заменяет спецификацию задержки. Не пишите #10 в накопителе для ожидания одного такта: задержки и генератор такта принадлежат универсальному стенду моделирования. Синтезируемый переход описывает фронт и состояние, а не sleep.

Практика: измените одно требование

Замените переполнение насыщением на 255. Явно расширьте операнды и вычислите девятибитовую сумму. При бите 8=1 сохраните 255, иначе биты 7:0. Сохраните приоритеты. Проверьте 0+0,250+5,250+6, запрещённый фронт и одновременные reset/enable: ожидаются 0,255,255, удержание,0. Только 250+5 не выявляет потерянный перенос; обязательно включите 250+6. Сохраните исходники, таблицу и ожидания. Отметка завершения урока подтверждает обучение, а не запуск симулятора.

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