Altifigence Academy

28 / 36 · Теория

Срезы и конкатенация

Проследите размещение объединённых битов в регистре.

Цели урока

  • Проследите размещение объединённых битов в регистре.

Скобки соединяют, а не складывают

q<={q[1:0],din} ставит биты рядом. Срез 01 и din=1 дают 011, а не арифметическую сумму. Правая часть целиком читает прежний q. Один фронт не записывает din и затем многократно копирует новое значение по всем ступеням.

Фрагмент RTL
always_ff @(posedge clk)
    if (rst) q <= 3'b000;
    else q <= {q[1:0], din};
Новая позицияИсточник
q[2]Прежнее q[1]
q[1]Прежнее q[0]
q[0]din на фронте

Порядок меняет направление

{din,q[2:1]} вставляет вход в старший разряд. Ширина прежняя, но направление иное. Для q=101,din=1 исходное выражение даёт 011, обратное — 110. Корректный синтаксис не означает эквивалентную схему.

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

Для q=010,din=0 чему равно {q[1:0],din}?

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

Добавьте 0 к срезу 10: получится 100. Старый q[2] не используется.

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