7 / 37 · Теория
Ширина срезов, конкатенации и повторения
Стройте тракт данных, рассчитывая суммарную ширину соединённых сигналов и условия сохранения значения.
Уроки доступны бесплатно. Запишитесь, чтобы сохранять прогресс.
Конкатенация — не сложение
{a,b} приписывает биты b после битов a. При ширинах M и N результат имеет ширину M+N. Для unsignedБеззнаковая интерпретация (unsigned) рассматривает битовую последовательность как неотрицательное целое. Диапазон n бит — от 0 до 2^n−1; знаковая интерпретация тех же битов может дать другое число. Подробнее-битовых строк численно:
При a=2'b10, b=3'b101 результат 5'b10101, то есть 21. Это другая операция, чем арифметическая сумма 7.
Биты a перемещаются вверх на ширину b. КонкатенациюКонкатенация соединяет битовые последовательности рядом друг с другом. Ширина результата равна сумме ширин операндов; это не арифметическое сложение чисел. нужно читать как a×2³+b, а не a+b.
- a = 10: Ширина 2 бита, целое 2
- b = 101: Ширина 3 бита, целое 5
- {a,b} = 10101: Ширина 5 бит, 2×8+5=21
Подписывайте ширину рядом с выражением
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-вектора; перед знаковыми операциями перепроверьте смысл.
Расширение знака и повторная конкатенация
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, значение . При сохранении в 4 битах старший отбрасывается: остаётся 0111, то есть 7.