Altifigence Academy

7 / 37 · Теория

Ширина срезов, конкатенации и повторения

Стройте тракт данных, рассчитывая суммарную ширину соединённых сигналов и условия сохранения значения.

Конкатенация — не сложение

{a,b} приписывает биты b после битов a. При ширинах M и N результат имеет ширину M+N. Для unsignedБеззнаковая интерпретация (unsigned) рассматривает битовую последовательность как неотрицательное целое. Диапазон n бит — от 0 до 2^n−1; знаковая интерпретация тех же битов может дать другое число. Подробнее-битовых строк численно:

{a,b}=a⋅2N+b\{a,b\}=a\cdot2^N+b

При a=2'b10, b=3'b101 результат 5'b10101, то есть 21. Это другая операция, чем арифметическая сумма 7.

Биты a перемещаются вверх на ширину b. КонкатенациюКонкатенация соединяет битовые последовательности рядом друг с другом. Ширина результата равна сумме ширин операндов; это не арифметическое сложение чисел. нужно читать как a×2³+b, а не a+b.

Соединение битов и сложение
  1. a = 10: Ширина 2 бита, целое 2
  2. b = 101: Ширина 3 бита, целое 5
  3. {a,b} = 10101: Ширина 5 бит, 2×8+5=21

Подписывайте ширину рядом с выражением

SystemVerilog
logic [7:0] word;
logic [3:0] upper, lower;
logic [7:0] swapped;
assign upper = word[7:4];
assign lower = word[3:0];
assign swapped = {lower, upper};

Для входа 8'hA3 swapped равен 8'h3A. Ошибка одной границы срезаСрез выбирает непрерывный диапазон битов вектора. Выбранный диапазон определяет ширину результата и порядок битов. меняет ширину или значение. Частичная выборка может трактоваться как отдельное unsigned-значение даже у signed-вектора; перед знаковыми операциями перепроверьте смысл.

Расширение знака и повторная конкатенация

SystemVerilog
logic signed [3:0] small;
logic signed [7:0] extended;
assign extended = {{4{small[3]}}, small};

Четыре копии знакового бита соединяются с исходными четырьмя битами, образуя 8. Sign extension — не арифметическое добавление единицы при MSBMSB — бит с наибольшим позиционным весом. Его индекс зависит от направления объявления вектора, поэтому нельзя всегда считать его битом с наибольшим номером. Подробнее=1, а расширение битового представления с сохранением интерпретируемого значения.

Универсальная схема со срезом q[N-2:0] имеет недопустимый диапазон при N=1. Ограничьте минимальную ширину или обработайте N=1 отдельной generate-ветвью. Параметризация не завершается простой заменой числа переменной.

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

a — 3-битное 101, b — 2-битное 11. Каковы ширина и значение {a,b}? Что останется после сохранения в 4 битах?

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

Ширина 5 бит, строка 10111, значение 5⋅4+3=235\cdot4+3=23. При сохранении в 4 битах старший отбрасывается: остаётся 0111, то есть 7.

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