‮Сдвиг по фазе (kincajou) wrote,
‮Сдвиг по фазе
kincajou

Category:

worklog: невыровненный доступ и конечный автомат

Т.к. я хочу соорудить процессор, способный работать ещё и со сжатыми 16-битными командами (сжатию подлежит не всё множество 32-битных команд, но значительная их часть и есть смысл попробовать получить кое-какие выгоды от этого), а шина памяти инструкций строго 32-разрядная, то возникает сложность: надо реализовать поддержку извлечения невыровненных (misaligned) инструкций.

16 и 32 команды могут идти вперемешку: хотя компилятор и может подбить 32-битные инструкции по границам слов, это НЕ обязательно!
Чтение невыровненной инструкции замедляет конвейер на 1 такт: сначала проталкивается NOP, затем считанная команда.

Длина инструкции закодирована в двух младших битах: если там [11], то это 32-битная команда, если там [00], [01] или [10], тогда 16-битная. Устройство извлечения анализирует эти два бита и значение 1 бита Program Counter (бит 0 всегда равен нулю, иначе срабатывает исключение):
1) если длина инструкции 16 бит, значит, выровненный доступ; приращение PC +2
2) если длина инструкции 32 бита и бит 1 равен нулю - значит, выровненный доступ; приращение PC +4
3) если длина инструкции 32 бита и бит 1 равен единице - значит, невыровненный доступ; приращение PC +2 (и в следующем такте ещё +2)

Cоорудил автомат (FSM с кодированием состояний one-hot), причём аж на пять или даже на шесть, если считать "стартовую позицию", состояний:
1) чтение нижней 16-битной команды
2) чтение верхней 16-битной команды
3) чтение нижней половинки невыровненной 32-битной команды
4) чтение верхней половинки невыровненной 32-битной команды
5) чтение выровненной 32-битной команды

Количество состояний можно сократить, но ценой потери наглядности схемы. При этом на самом деле схема упростится не так сильно, как хотелось бы: память состояний и так умещается в один корпус 74HC174, куда меньше-то...

Tags: risc-v, worklog
Subscribe

  • (no subject)

    Как я застукал бычка (?) за вылазкой из норки

  • Hi-res/Crop

    Сейчас разглядел, насколько по-разному они выглядят. Может, это три разных представителя трёх разных видов крабов? Второго я нашёл вот…

  • Hi-res/Crop/Resize

    Был не очень прав насчёт этих таракашек - они есть, но теперь гораздо дальше от берега, чем раньше. Пришлось очень хорошо понырять, чтобы найти…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 25 comments

  • (no subject)

    Как я застукал бычка (?) за вылазкой из норки

  • Hi-res/Crop

    Сейчас разглядел, насколько по-разному они выглядят. Может, это три разных представителя трёх разных видов крабов? Второго я нашёл вот…

  • Hi-res/Crop/Resize

    Был не очень прав насчёт этих таракашек - они есть, но теперь гораздо дальше от берега, чем раньше. Пришлось очень хорошо понырять, чтобы найти…