Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2549 / 2061 / 971
Регистрация: 09.10.2013
Сообщений: 4,790
Записей в блоге: 4

RISC-V ISA / Почему константы так странно кодируются?

27.12.2024, 00:53. Показов 1113. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Изучаю архитектуру RISC-V и постоянно возникает вопрос: что ж так все запутано?

Если декодирование представить шлейфом из проводов:

то на фотке, еще норм =\

Кодом приходится "шлейфы перекручивать"
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 26.4 Control Transfer Instructions
 
// j/jal
function sign_ext_t get_jump(code_t code);
    get_jump[31:12] = { 32 - 12 { code[12] } };
    get_jump[11:11] = code[12:12];
    get_jump[10:10] = code[ 8: 8];
    get_jump[  9:8] = code[10: 9];
    get_jump[  7:7] = code[ 6: 6];
    get_jump[  6:6] = code[ 7: 7];
    get_jump[  5:5] = code[ 2: 2];
    get_jump[  4:4] = code[11:11];
    get_jump[  3:1] = code[ 5: 3];
    get_jump[  0:0] = 0;
endfunction
 
// beqz/bnez
function sign_ext_t get_branch(code_t code);
    get_branch[31:9] = { 32 - 9 { code[12] } };
    get_branch[ 8:8] = code[12:12];
    get_branch[ 7:6] = code[ 6: 5];
    get_branch[ 5:5] = code[ 2: 2];
    get_branch[ 4:3] = code[11:10];
    get_branch[ 2:1] = code[ 4: 3];
    get_branch[ 0:0] = 0;
endfunction
В инструкции константы "чуднО" кодируются...
Бит тут, бит там...

Какой в этом смысл?
Миниатюры
RISC-V ISA / Почему константы так странно кодируются?  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.12.2024, 00:53
Ответы с готовыми решениями:

Ansys почему так странно обозначаются СК
Здравствуйте! Подскажите пожалуйста, почему так странно обозначаются системы координат: вот как мне понять, что есть Х а что Z. ...

Почему так странно работает калькулятор
Здраствуйте, я сегодня решил взяться за C++, решил написать самое простое, калькулятор: #include <cstdlib> #include...

Почему мой div так странно позиционируется?
У меня есть страница с дивами, в аттаче есть скриншот. У меня 5 основных блоков (AAA, BBB, CCC, Community, News), которые в лежиме float:...

14
3664 / 2554 / 572
Регистрация: 11.09.2009
Сообщений: 9,204
27.12.2024, 14:12
Цитата Сообщение от Max Dark Посмотреть сообщение
Какой в этом смысл?
Пожалуйтесь авторам.
0
 Аватар для COKPOWEHEU
4054 / 2606 / 432
Регистрация: 09.09.2017
Сообщений: 11,615
27.12.2024, 22:22
Я, конечно, никогда risc-v ядра не разрабатывал. Но, раз уж там решили сделать именно такое кодирование и задокументировали на уровне стандарта, видимо, в реальных железках это имеет смысл (а для некоторых случаев смысл даже поясняется в документации). Ну там при декодировании произвольной команды можно сразу выковырять все аргументы. Например:
The only difference between the S and B formats is that the 12-bit immediate field is used to encode branch offsets in multiples of 2 in the B format. Instead of shifting all bits in the instruction-encoded immediate left by one in hardware as is conventionally done, the middle bits (imm[10:1]) and sign bit stay in fixed positions, while the lowest bit in S format (inst[7]) encodes a high-order bit in B format.
Биты 1-4 и 5-10 и для B- и для S- команд на одних и тех же местах. А 31-й бит - всегда бит знака.

Добавлено через 2 минуты
Цитата Сообщение от Max Dark Посмотреть сообщение
Миниатюры
P.S. вглядываться с микроскопом во всякие скриншоты я, разумеется, не буду.
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,423
Записей в блоге: 2
31.12.2024, 02:35
Всё там нормально кодируется.
По битам 0-1 сразу видно, 16 битная инструкция или 32 битная.
И биты под регистры нормально выделены.
Перепутаны только биты в инструкциях с константами. Где место было, туда биты и вставили.

Добавлено через 4 минуты
Да и не требуется никому особо кодировка. Я раза три всего вручную пытался раскодировать. Ассемблер и дизассемблер сами с кодировкой хорошо справляются.
0
 Аватар для COKPOWEHEU
4054 / 2606 / 432
Регистрация: 09.09.2017
Сообщений: 11,615
31.12.2024, 09:45
Цитата Сообщение от Grey Посмотреть сообщение
Да и не требуется никому особо кодировка.
ТС, похоже, ядро RISC-V пишет на ПЛИС.
Цитата Сообщение от Grey Посмотреть сообщение
Перепутаны только биты в инструкциях с константами.
Да нет. Что в I, что в U все по порядку. Разделено на два в S, но там понятно для чего сделано: чтобы регистры оставались на тех же местах. И в SB, UJ разбиты странным образом. Но там очевидно заботились о какой-то оптимизации. Ну там чтобы знаковый бит всегда был 31-м, чтобы большинство остальных битов оставалось на тех же позициях.
0
259 / 189 / 29
Регистрация: 26.11.2022
Сообщений: 794
31.12.2024, 10:38
Пишет ядро в качестве упражнения?
Эти ядра уже давно доступы.
Или что-то новое?
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,423
Записей в блоге: 2
31.12.2024, 11:21
Тогда стоит упомянуть и порядок байт Little Endian. Как раз для чтения битов 0-1.
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2549 / 2061 / 971
Регистрация: 09.10.2013
Сообщений: 4,790
Записей в блоге: 4
31.12.2024, 17:40  [ТС]
Цитата Сообщение от Aledveu Посмотреть сообщение
Пишет ядро в качестве упражнения?
Угу. Очень упрощенное.
Разминка для мозга - совсем не похоже на "обычное" программирование.

Добавлено через 23 минуты
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Да нет. Что в I, что в U все по порядку.
Для 32-хбитных инструкций - смещения в B/J-Type
Для "сжатых"(16 бит) - там вот в кодировке констант полная чехарда...

Добавлено через 1 час 13 минут

Не по теме:

Цитата Сообщение от Max Dark Посмотреть сообщение
совсем не похоже на "обычное" программирование.
У меня видимо "ООП головного мозга" - привык объединять данные и операции над ними.
Даже на ассемблере можно подобный подход использовать.

На известных мне ЯП для FPGA это не применимо.

0
259 / 189 / 29
Регистрация: 26.11.2022
Сообщений: 794
31.12.2024, 17:59
это потому что не надо думать в концепцциях ООП.
ООП - Это всего лишь один из многих способов, которым хорошо пользоваться только для решения определённых задач.
А verilog/hdl очень хорошо выкручивают мозг в другую сторону. Поначалу больно, но потом нормально.
я бы сказал что как упражнение писать ядро risc-v это перебор особенно если писать аппаратуру ещё тяжело.
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2549 / 2061 / 971
Регистрация: 09.10.2013
Сообщений: 4,790
Записей в блоге: 4
31.12.2024, 18:15  [ТС]

Не по теме:

Цитата Сообщение от Aledveu Посмотреть сообщение
как упражнение писать ядро risc-v это перебор
Есть затруднения в реализации операций с памятью(чтение/запись), остальное (на первый взгляд) выглядит просто.
ИМХО, сложнее всякие контроллеры периферии описывать(SPI / I2C / etc)



В общем по теме: можно принять за ответ "так исторически сложилось".
0
 Аватар для COKPOWEHEU
4054 / 2606 / 432
Регистрация: 09.09.2017
Сообщений: 11,615
31.12.2024, 19:50
Цитата Сообщение от Max Dark Посмотреть сообщение
Для "сжатых"(16 бит) - там вот в кодировке констант полная чехарда...
А вы хотите сразу поддерживать расширение С, не реализовав базовую I или E?
Цитата Сообщение от Max Dark Посмотреть сообщение
У меня видимо "ООП головного мозга" - привык объединять данные и операции над ними.
А в железе, похоже, не так. Отдельно декодируются данные (одновременно в нескольких вариантах), отдельно инструкции, потом из 100500 вариантов декодирования используется всего один.
Цитата Сообщение от Max Dark Посмотреть сообщение
Угу. Очень упрощенное.
Разминка для мозга - совсем не похоже на "обычное" программирование.
Почти завидую. Но прежде, чем лезть в ПЛИС, мне бы с обычными контроллерами что-то полезное сделать...
Цитата Сообщение от Max Dark Посмотреть сообщение
Есть затруднения в реализации операций с памятью
А условные/безусловные переходы?
Цитата Сообщение от Max Dark Посмотреть сообщение
В общем по теме: можно принять за ответ "так исторически сложилось".
Не сказал бы. Как раз в RISC-V над кодированием долго и специально думали. Тут нет такого дикого легаси, как в каком-нибудь x86ю
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2549 / 2061 / 971
Регистрация: 09.10.2013
Сообщений: 4,790
Записей в блоге: 4
31.12.2024, 21:11  [ТС]
COKPOWEHEU, так скажем: FPGA - текущее увлечение.

* Архитектура RISC-V была выбрана по причине открытости + под неё уже есть компиляторы.
* про поддержку инструкций: хз. может и не нужно это сжатие...
* Переходы - это комбинация вычислений адреса с последующим чтением из памяти.
* ИМХО, для "железа" нет разницы(почти), какой бит где, но описывать это - тот еще геморрой.

Не по теме:

С Наступающим)



Добавлено через 55 минут

Не по теме:

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
А в железе, похоже, не так.
Что то вспомнилось, как я на транзисторах "программировал" - вернее на микросхемах 155-й серии.
Собрал универсальный блок с сигналами "начать работу"/"занят"/"завершено"...
До реализации так и не дошло.
Все схемы остались только в блокноте, а блокнот утерян...

0
 Аватар для COKPOWEHEU
4054 / 2606 / 432
Регистрация: 09.09.2017
Сообщений: 11,615
31.12.2024, 21:37
Цитата Сообщение от Max Dark Посмотреть сообщение
про поддержку инструкций: хз. может и не нужно это сжатие...
Ну, я бы начал с минимально рабочей версии. Может, даже не I, а E - с меньшим количеством регистров и инструкций. А там уж в какую сторону потянет. Может, навешивать расширения, может конвейер, предсказания переходов, кеш и прочие оптимизации.
Цитата Сообщение от Max Dark Посмотреть сообщение
Переходы - это комбинация вычислений адреса с последующим чтением из памяти.
Отдельное веселье будет с конвейером, когда три инструкции уже загружены и почти выполнены, а тут выяснятся, что был переход, и надо их игнорировать.
Цитата Сообщение от Max Dark Посмотреть сообщение
ИМХО, для "железа" нет разницы(почти), какой бит где, но описывать это - тот еще геморрой.
Для тех же U/J инструкций не приходится делать операцию сдвига - тоже экономия на транзисторах. Зачем-то же эти варианты разделили, при том, что кодирующие биты одни и те же.
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2549 / 2061 / 971
Регистрация: 09.10.2013
Сообщений: 4,790
Записей в блоге: 4
31.12.2024, 21:54  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Ну, я бы начал с минимально рабочей версии.
Для минимальной версии у меня VM есть.
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Может, даже не I, а E
Между I/E разница в количестве регистров - не особо принципиально.
Там даже нет особой разницы 32, 64 или большая разрядность...
А вот сжатие инструкций - там способ расшифровки инструкций/констант от нее зависит.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
не приходится делать операцию сдвига
лично я это представляю простым пересечением проводников - без всякой математики.
0
 Аватар для COKPOWEHEU
4054 / 2606 / 432
Регистрация: 09.09.2017
Сообщений: 11,615
01.01.2025, 01:01
Цитата Сообщение от Max Dark Посмотреть сообщение
Между I/E разница в количестве регистров - не особо принципиально.
Мне казалось, в E и инструкций меньше. Но утверждать не возьмусь.
Цитата Сообщение от Max Dark Посмотреть сообщение
лично я это представляю простым пересечением проводников - без всякой математики.
Возможно. А возможно, решили упростить выходной мультиплексор, который подставляет регистр/память/imm. Тут могу только фантазировать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.01.2025, 01:01
Помогаю со студенческими работами здесь

Обьясните, почему код так странно считает факториалы
Добрый день, ув. форумчане. Есть код, считающий факториалы:#include "stdio.h" #include "windows.h" __int64 factorial(__int64 n)...

Почему так странно обрабатывается запрос по селекции дат?
У меня есть поле dataTime в нем хранятся данные 14.01.2020 10:08 14.01.2020 10:10 14.01.2020 10:10 14.01.2020 10:10 14.01.2020...

Почему VBA так странно делает сравнение значений?
Всем привет, У меня возник такой вопрос. В ячейке A1 высвечивается #ИМЯ?. Я создал такую программку: Sub msgboxerror() On Error...

Почему так странно срабатывает селекция дат в запросе?
Делаю запрос к представлению код запроса SELECT orders_view.*, orders_view.data FROM orders_view WHERE orders_view.data...

Почему так странно находятся углы в сферической системе координат
Добрый вечер! Вот краткая вырезка, которая меня и интересует. Всё по инфе из WIKI СФЕРИЧЕСКИЕ КООРДИНАТЫ. 1 Есть координаты точки и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Кэш REDIS и C#
UnmanagedCoder 01.06.2025
Redis (Remote Dictionary Server) - это ультраскоростное хранилище данных в оперативной памяти, работающее по принципу "ключ-значение". Суть проста: данные хранятся не на диске, а прямо в RAM, что. . .
Lenovo IH110CX Rev 1.0 user manual
Maks 01.06.2025
Размещения без повторений
VistaSV30 31.05.2025
Код возвращает список вариантов размещений A^{k}_{n}=\frac{n!}{(n-k)!} from itertools import permutations def pwr(k, n): # Размещение без повторений (Placement without repetition) if k. . .
Redis и Node.js с TypeScript - решения для высоконагруженных систем
Reangularity 31.05.2025
Redis (Remote Dictionary Server) — сверхбыстрое хранилище данных в памяти, способное обрабатывать операции за микросекунды. И что особенно важно для нас — с удивительно простым API. А теперь. . .
Unit-тестирование с моками в Go
golander 31.05.2025
Большинство разработчиков предпочитают тестировать код без использования моков. Например, при интеграции с Elasticsearch логичнее запустить контейнер локально и тестировать Go-код непосредственно с. . .
Как работать с PDF в C#
stackOverflow 31.05.2025
Нам приходится сталкиваться с PDF по разным причинам. Генерация счетов, создание отчетов, извлечение данных из загруженных пользователем документов, автоматизация рабочих процесов - это лишь верхушка. . .
Двухбуквенные коды стран в шифровании.
russiannick 31.05.2025
Человечество издревле манила возможность замены сочетаний букв вымышленными символами, делающие сообщение понятным только для посвещенных. Настала пора внести в это свой вклад. Двухбуквенные коды. . .
Мой опыт в исправлении ошибки приложения Boinc в части заряда батареи смартфона.
Programma_Boinc 31.05.2025
Мой опыт в исправлении ошибки приложения Boinc в части заряда батареи смартфона. Хотел бы поделиться опытом в исправлении ошибки приложения в части заряда батареи смартфона. Сразу скажу, что. . .
Добро пожаловать на конкурс PrimeGrid, посвященный 20-летию PrimeGrid
Programma_Boinc 31.05.2025
Добро пожаловать на конкурс PrimeGrid, посвященный 20-летию PrimeGrid: 5-дневный обобщенный поиск простых чисел Ферма n = 20 с 12 июня 20:20 UTC по 17 июня 20:20 UTC. 12 июня 2005 года. . .
Вероятность в шансы / Шансы в вероятность
VistaSV30 31.05.2025
# Шансы -> Вероятность def Chance_to_Probability(ch): def gcd(a, b): # НОД - нужен для упрощения значений шансов while b != 0: a, b = b, a % b return a. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »