Altifigence Academy

2 / 63 · Теория

Системы счисления и представление фиксированной разрядности

Помимо перевода между системами счисления, рассчитывайте диапазон представления, нужную разрядность и ошибку усечения.

С чего начинается курс

Рекомендуются знание школьной алгебры и базовый опыт программирования. Двоичные числа и булева алгебраБулева алгебра оперирует значениями 0 и 1 и операциями AND, OR, NOT. Знак сложения здесь обычно означает OR, поэтому правила отличаются от сложения целых чисел. Подробнее входят в программу; темп быстрый, уровень соответствует вводному университетскому курсу цифрового проектирования. Сосредоточьтесь на входных условиях, разрядности и моменте наблюдения: проверяйте их на примерах, а не просто заучивайте формулы.

Различайте битовую строку и её значение

Схема хранит конечную битовую строку. Её интерпретацию как целого, знакового числа или числа с фиксированной точкойФиксированная точка — представление чисел с заранее заданным положением двоичной точки: к целочисленной битовой последовательности применяют постоянный масштаб. Нужно задать разрядность, знаковость и число дробных разрядов. Подробнее задаёт проектный контракт. Для расчёта диапазонов, необходимого в реальном RTL, предполагается знание целочисленной арифметики и степеней.

Интерпретация NN-битного unsignedБеззнаковая интерпретация (unsigned) рассматривает битовую последовательность как неотрицательное целое. Диапазон n бит — от 0 до 2^n−1; знаковая интерпретация тех же битов может дать другое число. задаётся так:

u=∑i=0N−1bi2i,0≤u≤2N−1u=\sum_{i=0}^{N-1}b_i2^i,\qquad 0\le u\le 2^N-1

10110110 означает 128+32+16+4+2=182128+32+16+4+2=182. Группировка по 4 бита даёт B6, поэтому 8'hB6 и 8'b10110110 — одна битовая строка. Каждая шестнадцатеричная цифра всегда представляет 4 бита, что ускоряет чтение адресов, масок и временных диаграмм.

Та же битовая строка, другая интерпретация

Переключите b7 ниже. В unsigned добавится вес 128, а в дополнительном кодеДополнительный код представляет знаковые целые битовой последовательностью фиксированной ширины. Для n бит диапазон составляет от −2^(n−1) до 2^(n−1)−1. Подробнее старший бит имеет вес −128. Сначала задайте 0x7F и 0x80 и сравните границы двух интерпретаций.

Биты и представление чисел

10110110 → unsigned 182 · signed -74 · hex 0xB6

Изменение битовой строки и её знаковая интерпретация — разные операции. Даже при одинаковой 8-битной ширине схемы результат сравнения зависит от информации о знаке, переданной оператору.

Сначала диапазон, затем разрядность

Минимальное число бит для различения MM состояний:

N=⌈log⁡2M⌉N=\left\lceil\log_2 M\right\rceil

Для счёта от 0 до 999 нужно представить 1000 значений: достаточно 10 бит. От 0 до 1024 — это 1025 значений, нужны 11 бит. Путая максимум с числом состояний, легко потерять один бит именно на границе. Если параметризовать RTL вплоть до M=1M=1, ограничьте ширину снизу одним битом, чтобы не получить нулевой вектор.

Что происходит при сохранении в более узкий сигнал

При сохранении беззнакового числа с отбрасыванием старших битов и сохранением NN бит выполняется операция по модулю:

xstored=x mod 2Nx_{stored}=x\bmod 2^N

Например, если 9-битный результат 300 сохранить в 8 битах, останется 44. Это не округление и не насыщение. Для насыщения нужна отдельная схема, обнаруживающая выход за диапазон и выбирающая максимальное значение.

SystemVerilog
logic [7:0] a, b, low;
logic [8:0] full_sum;
assign full_sum = {1'b0, a} + {1'b0, b};
assign low = full_sum[7:0];

Предварительное расширение обоих операндов явно выражает намерение сохранить перенос. Не считайте, что запись основания числа определяет также знак и ширину результата. Для анализа диаграмм нужны разрядность, знак и основание.

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

Сколько бит нужно для значений от 0 до 4095 и от 0 до 4096? Что останется, если сохранить 511 в 8-битном unsigned?

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

Первый диапазон содержит 4096=2124096=2^{12} значений: нужны 12 бит. Второй содержит 4097 значений: нужны 13 бит. Так как 511 mod 256=255511\bmod256=255, сохранится 8'hFF. По одному сохранённому значению нельзя заключить, что переполнения не было.

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