1 / 37 · Теория
RTL: описание одновременно работающих схем
Отделите порядок программных действий от параллельной структуры и задайте текущее состояние, следующее состояние и момент наблюдения.
Уроки доступны бесплатно. Запишитесь, чтобы сохранять прогресс.
Схема продолжает работать
RTL описывает движение значений между регистрами через комбинационную логику. Модуль задаёт границу аппаратуры; два экземпляра создают две взаимодействующие структуры, а не последовательные вызовы функций. Схема остаётся активной при изменениях входов. Перенесите элементы, память и автоматы из курса «Цифровые логические схемы» в явные интерфейсы SystemVerilog и воспроизводимые проверки. До реализации объясните разрядность, источник, достоверность и сброс каждого сигнала.
Разделяйте текущее и следующее состояние
Полный модуль накапливает беззнаковые четырёхбитовые sample в восьмибитовом регистре. Синхронный сброс активен высоким уровнем и важнее enable. Разрешённый фронт добавляет sample; остальные сохраняют sum. Арифметика выполняется по модулю 256.
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
endmodulenext_sum — комбинационный результат: он может измениться вместе с sum или sample без фронта такта. sum хранит состояние и меняется на нарастающем фронте. Одинаковое объявление logic не означает одинаковую аппаратную роль. Отсутствующий заключительный else в тактовом блоке удерживает регистр; пропущенное присваивание в комбинационном блоке может потребовать защёлку. Сначала определите тип блока.
До моделирования вычислите таблицу фронтов
Строка использует состояние и входы непосредственно до фронта; наблюдайте после неблокирующих обновлений.
| Фронт | rst | enable | sample | sum до | sum после |
|---|---|---|---|---|---|
| E0 | 1 | 1 | 9 | Неизвестно | 0 |
| E1 | 0 | 1 | 3 | 0 | 3 |
| E2 | 0 | 0 | 7 | 3 | 3 |
| E3 | 0 | 1 | 5 | 3 | 8 |
| E4 | 1 | 1 | 15 | 8 | 0 |
На 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. Сохраните исходники, таблицу и ожидания. Отметка завершения урока подтверждает обучение, а не запуск симулятора.