2 / 63 · Теория
Системы счисления и представление фиксированной разрядности
Помимо перевода между системами счисления, рассчитывайте диапазон представления, нужную разрядность и ошибку усечения.
Уроки доступны бесплатно. Запишитесь, чтобы сохранять прогресс.
С чего начинается курс
Рекомендуются знание школьной алгебры и базовый опыт программирования. Двоичные числа и булева алгебраБулева алгебра оперирует значениями 0 и 1 и операциями AND, OR, NOT. Знак сложения здесь обычно означает OR, поэтому правила отличаются от сложения целых чисел. Подробнее входят в программу; темп быстрый, уровень соответствует вводному университетскому курсу цифрового проектирования. Сосредоточьтесь на входных условиях, разрядности и моменте наблюдения: проверяйте их на примерах, а не просто заучивайте формулы.
Различайте битовую строку и её значение
Схема хранит конечную битовую строку. Её интерпретацию как целого, знакового числа или числа с фиксированной точкойФиксированная точка — представление чисел с заранее заданным положением двоичной точки: к целочисленной битовой последовательности применяют постоянный масштаб. Нужно задать разрядность, знаковость и число дробных разрядов. Подробнее задаёт проектный контракт. Для расчёта диапазонов, необходимого в реальном RTL, предполагается знание целочисленной арифметики и степеней.
Интерпретация -битного unsignedБеззнаковая интерпретация (unsigned) рассматривает битовую последовательность как неотрицательное целое. Диапазон n бит — от 0 до 2^n−1; знаковая интерпретация тех же битов может дать другое число. задаётся так:
10110110 означает . Группировка по 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-битной ширине схемы результат сравнения зависит от информации о знаке, переданной оператору.
Сначала диапазон, затем разрядность
Минимальное число бит для различения состояний:
Для счёта от 0 до 999 нужно представить 1000 значений: достаточно 10 бит. От 0 до 1024 — это 1025 значений, нужны 11 бит. Путая максимум с числом состояний, легко потерять один бит именно на границе. Если параметризовать RTL вплоть до , ограничьте ширину снизу одним битом, чтобы не получить нулевой вектор.
Что происходит при сохранении в более узкий сигнал
При сохранении беззнакового числа с отбрасыванием старших битов и сохранением бит выполняется операция по модулю:
Например, если 9-битный результат 300 сохранить в 8 битах, останется 44. Это не округление и не насыщение. Для насыщения нужна отдельная схема, обнаруживающая выход за диапазон и выбирающая максимальное значение.
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?
Прочитать объяснение
Первый диапазон содержит значений: нужны 12 бит. Второй содержит 4097 значений: нужны 13 бит. Так как , сохранится 8'hFF. По одному сохранённому значению нельзя заключить, что переполнения не было.