Перейти к содержанию

Регистры SHA256 RP2350

Регистры аппаратного ускорителя SHA-256 в RP2350: запуск вычисления, запись сообщения блоками по 512 бит вручную или через DMA, перестановка байтов и 256-битный результат в восьми регистрах.

RP2350 считает хеш SHA-256 по стандарту FIPS 180-4 аппаратно. Запись 1 в бит START регистра CSR готовит новый расчёт, затем сообщение пишут в WDATA, дополняют по правилам SHA-256 до целого числа блоков по 512 бит и, дождавшись SUM_VLD = 1, читают результат из SUM0–SUM7 (даташит RP2350, раздел 12.13).

Дополнение делает программа: к сообщению добавляют бит 1, нули и 64-битную длину сообщения в битах, чтобы длина стала кратна 512. Блок — это 16 записей по 32 бита, 32 по 16 или 64 по 8; после него ядро ещё 57 тактов вычисляет хеш и держит WDATA_RDY в нуле. Предел — один блок за 121 такт, 0,53 байта за такт: при 150 МГц около 79,3 МБ/с, если DMA пишет 32-битными словами.

Алгоритм SHA-256 работает со словами от старшего байта к младшему, а шина собирает байты от младшего. Бит BSWAP, установленный после сброса, переставляет байты каждого слова, чтобы хешировать обычный буфер байтов. Запрос DMA приходит сразу на целый блок, поэтому размер передачи в DMA_SIZE задают до запуска канала.

ЭкземплярБазовый адрес
SHA2560x400F 8000

Регистры блока

РегистрСмещениеНазначениеПосле сброса
SHA256_CSR0x00Управление и состояние0x0000 1206
SHA256_WDATA0x04Данные сообщения: 16 слов на блок0x0000 0000
SHA256_SUMn0x08 + n · 0x04Слово n результата SHA-256; не определено при SUM_VLD = 00x0000 0000

SHA256_CSR — управление и состояние

Смещение 0x00, адрес 0x400F 8000, после сброса 0x0000 1206. Макросы pico-sdk: SHA256_CSR_…

1514131211109876543210
—BSWAP—DMA_SIZE—ERR_WDATA_NOT_RDY—SUM_VLDWDATA_RDYSTART
  • BSWAP (бит 12, чтение и запись, после сброса 0x1) — Перестановка байтов каждого 32-битного слова перед хешированием; включена после сброса.
  • DMA_SIZE (биты 9:8, чтение и запись, после сброса 0x2) — Размер передачи DMA — 8, 16 или 32 бита; задают до запуска канала DMA.
    ЗначениеИмя в pico-sdk
    0x08bit
    0x116bit
    0x232bit
  • ERR_WDATA_NOT_RDY (бит 4, сброс записью 1, после сброса 0x0) — Была запись в WDATA при WDATA_RDY = 0; сбрасывается записью 1.
  • SUM_VLD (бит 2, только чтение, после сброса 0x1) — Результат в SUM0–SUM7 действителен.
  • WDATA_RDY (бит 1, только чтение, после сброса 0x1) — Можно писать в WDATA; после 16 слов бит в нуле 57 тактов.
  • START (бит 0, сбрасывается сам, после сброса 0x0) — Запись 1 начинает новый хеш: SUM0–SUM7 получают начальные значения, счётчики сбрасываются.

SHA256_WDATA — данные сообщения: 16 слов на блок

Смещение 0x04, адрес 0x400F 8004, после сброса 0x0000 0000, запись с побочным действием. Макросы pico-sdk: SHA256_WDATA_…

Значение занимает регистр целиком, отдельных полей нет.

SHA256_SUMn — слово n результата SHA-256; не определено при SUM_VLD = 0

8 регистров, n = 0…7: смещение 0x08 + n · 0x04, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: SHA256_SUMn_…

Значение занимает регистр целиком, отдельных полей нет.

Частые вопросы

Как посчитать SHA-256 на RP2350 аппаратно?

Запишите 1 в START регистра CSR, затем пишите сообщение с дополнением в WDATA, проверяя WDATA_RDY перед каждой записью, или передайте его через DMA. Когда SUM_VLD станет 1, хеш читается из SUM0–SUM7.

Насколько быстро RP2350 считает SHA-256?

Блок 512 бит — не быстрее чем за 121 такт: 64 такта на запись 16 слов по шине APB и 57 тактов на вычисление. При 150 МГц и 32-битных передачах DMA это около 79,3 МБ/с; запись байтами и опрос WDATA_RDY процессором медленнее.

Источники

  1. Raspberry Pi. RP2350 Datasheet (release 8, build 80d627281ed5) — раздел 12.13.5: список регистров, назначение полей, тип доступа и значения после сброса
  2. Raspberry Pi. pico-sdk 2.1.1: заголовки src/rp2350/hardware_regs/include/hardware/regs/*.h (коммит bddd20f) — смещения, биты, тип доступа и значение после сброса каждого поля, базовые адреса из addressmap.h; лицензия BSD-3-Clause

Нашли ошибку в регистрах?

Другие регистры RP2350

Статьи и термины