RISC-V

Aug 02, 2024 00:36

https://www.csl.cornell.edu/courses/ece4750/handouts/ece4750-tinyrv-isa.pdf

Страница 5 содержит объяснение, как разбирать непосредственные операнды в разных форматах. Вроде, все пять форматов рассмотрены.

Если вам надо интересной глупости ( Read more... )

процессоры, risc, система команд, risc-v

Leave a comment

truwork August 2 2024, 12:01:19 UTC

На длинный пост длинный ответ...

Реализация с 12 бит имеет вполне очевидное объяснение, и, как ни странно, проистекает из самой идеи RISC-V, как открытой архитектуры. Идея заключается в том, что RISC-V задумывалась, как модульная расширяемая архитектура, а значит, в кодировке инструкций должно оставаться достаточно место для добавления новых инструкций. При большем значении IMM-части просто остается слишком мало места под кодирование опкода, что упоминается, как один из недостатков MIPS.

Исторически так сложилось, что сейчас широко используются 8-битные байты и 32-битные инструкции в RISC-процессорах. Могло быть и по другому, например, 6-битные байты и 48-битные инструкции (но инфраструктура индустрии сейчас под это не заточена от слова совсем)...

Если принято решение, что инструкция кодируется 32-битами, то в команде работы с непосредственными значениями мы имеем такие части: опкод, регистр источника, регистр назначения и непосредственное значение. Т.к. запланировано 32 регистра, то номер регистра кодируется 5-ю битами. В случае с RISC-V прикинули и решили выделить: 7 бит на кодирование группы длинных (32-бит и более) и коротких (16-битных) инструкций. Группы длинных инструкций -- табличка 4 строки на 8 столбцов (можно найти в спецификации). Итого, на непосредственное значение и кодирование инструкции в группе остается 32 - 7 - 5 - 5 = 15 бит. Так что ни о каких 16-битах непосредственного значения в кодировании речи быть не может.

Далее, выбор 12 бит -- это по сути, результат согласования разных форматов кодирования. Потому что удалось сделать формат U для загрузки верхнего значения из 20 бит (32 - 7 - 5), и сделать поле func3 размером 3 бита для типа операции.

Reply

thesz August 2 2024, 21:59:42 UTC
Мне кажется, что пословица про трусы и крестик ещё более подходит к RISC-V и его авторам после вашего объяснения.

У RISC-V практически бесконечное пространство команд, у него длина команды переменная. То, что нельзя было делать в MIPS, можно и нужно было делать в RISC-V, то, что MIPS сделал с запасом (более, чем 13-тибитный непосредственный операнд, расширяемый по разному в зависимости от команды в том числе), надо было повторять в RISC-V.

Да, малоизвестный современным разработчикам факт - у нульадресной (стековой) машины плотность кода очень высока. Те самые 6 битов на инструкцию, а то и меньше можно (GA144, там 5). Почему RISC-V не пошёл путём нульадресной машины?

Вот то-то и оно.

Reply

truwork August 3 2024, 05:41:03 UTC

> У RISC-V практически бесконечное пространство команд, у него длина команды переменная

Вы не путайте потенциал развития, заложенный в схему кодирования и базовую ISA. В базовой ISA команды строго 32-битные и ее цель обеспечить простой набор команд, с простой реализацией FPGA/ASIC.

Сама по себе спецификация RISC-V - это не сухой документ, констатирующий факт. Это документ с множеством ссылок, объясняющий цели, намерения, ссылающийся на опыт других архитектур, проектов и т.п. В начальной разработке спецификации архитекторами были в т.ч. Девид Паттерсон и Крсте Асанович, уж они-то в курсе, что и как было сделано в MIPS.

Reply

thesz August 3 2024, 06:24:25 UTC
> В базовой ISA команды строго 32-битные и ее цель обеспечить простой набор команд, с простой реализацией FPGA/ASIC.

Вот насчёт простоты у меня вопросов полно. Начиная с двух пар совершенно идентичных форматов, которые, тем не менее, разные.

У меня там вопрос был: "Почему RISC-V не пошёл путём нульадресной машины в сжатом наборе команд?"

Что по этому поводу говорят Крсте и Девид?

Reply

truwork August 3 2024, 12:59:55 UTC

> Начиная с двух пар совершенно идентичных форматов, которые, тем не менее, разные.

Так объяснение же дано, что бы можно было еще сильнее упростить декодер. Лично с моим жизненным опытом это совпадает. С вашим, видимо, не совпадает. Так же, в ревизии 2011 года общими в формате были были только биты адресов регистров, а IMM выглядели "красиво". Во второй ревизии RISC-V уже сделали вариант, более оптимальный для синтеза. Вроде, понятно, что такая доработка была не просто так.

> У меня там вопрос был: "Почему RISC-V не пошёл путём нульадресной машины в сжатом наборе команд?"

Уточните вопрос. Вы имеете в виду, что нужно создать отдельную ISA под сжатые инструкции? Опять же, это противоречит подходам и целям, которые ставились для сжатых инструкций. Стандартные сжатые инструкции не вводят какие-то новые инструкции, а основаны на существующих 32-битных.

Reply

thesz August 3 2024, 16:53:42 UTC
> Во второй ревизии RISC-V уже сделали вариант, более оптимальный для синтеза. Вроде, понятно, что такая доработка была не просто так.

"Из этого с очевидностью следует" меня удовлетворить не может.

Цифр нет.

Чего они добились-то?

> Стандартные сжатые инструкции не вводят какие-то новые инструкции, а основаны на существующих 32-битных.

https://www.cs.sfu.ca/~ashriram/Courses/CS295/assets/notebooks/RISCV/RISCV_CARD.pdf

Там есть и форматы сжатых инструкций, третья страница. Ничего они не основаны на 32-хбитных. Например, CI type имеет funct3 не там, где funct3 у 32-хбитных.

Во всём документе нет ни слова про энтропию, про набор программ для её вычисления, про компиляторы, от качества которых многое зависит.

Здесь я опять вижу, что "мы сделали вот так, вам теперь с этим жить."

Reply

truwork August 3 2024, 19:20:13 UTC

> "Из этого с очевидностью следует" меня удовлетворить не может.



...



...



Видимо, что бы понять, нужно выполнить задание из книги Харрисов.

Reply

thesz August 3 2024, 20:56:45 UTC
То есть, цифр нет.

Большое спасибо за беседу.

Reply

truwork August 3 2024, 19:32:46 UTC

> Ничего они не основаны на 32-хбитных.

Идея сжатых инструкций в RISC-V в рамках подхода упрощения декодера - что бы любой 16-битной инструкции соответствовала 32-битная. Тогда достаточно сделать блок расширения 16-битной инструкции в 32-битную без какой-либо сложной логики (и с учетом изменения PC на 2, а не на 4).

> Во всём документе нет ни слова про энтропию

Есть живые доклады на эту тему, есть слайды, есть статьи. Навскидку:

https://people.eecs.berkeley.edu/~krste/papers/waterman-ms.pdf



people.eecs.berkeley.edu

Reply


Leave a comment

Up