Как мне соблюдать RISC-V? - PullRequest
0 голосов
/ 23 января 2019

Я только что говорил с коллегой о том, что на самом деле означает соответствие RISC-V.Мы подробно обсудили следующие темы:

  1. Насколько я понял идею, процессор совместим с RISC-V, если он реализует базовый набор команд RISC-V и, возможно, одинили более стандартных расширений. полностью , а не только частично.Можно даже определить и реализовать собственные инструкции (например, расширения «коричневого поля» или «нового поля»), если они не касаются базового набора команд или какого-либо из стандартных расширений.Гарантируя это, машинный код, сгенерированный любым RISC-V-совместимым компилятором, будет работать на моей машине.В этом весь смысл, верно?

    • ISA RISC-V не предназначен для отложенных ветвей.Насколько я понимаю, определение того, являются ли ветки отложенными или нет, уже является частью ISA и не является вопросом реализации.Это правильно?

    • Предположим, что кто-то хочет использовать RISC-V с отложенными ветвями.Является ли это хорошей идеей или нет, давайте просто сосредоточимся на вопросе соответствия.По моему мнению, RISC-V больше не соответствовал определению и реализации некоторых существующих инструкций перехода / перехода из базового набора команд в качестве отложенных переходов.Компиляция RISC-V-совместимого компилятора больше не будет работать на такой машине.Вместо этого можно было бы свободно определять собственные отложенные инструкции ветвления.Конечно, как и в случае любого другого написанного самостоятельно расширения, нельзя ожидать, что произвольный компилятор будет использовать такую ​​инструкцию.Я прав?

  2. В соответствии со спецификацией RISC-V, «счетчик программы pc содержит адрес текущей инструкции».Моя интерпретация этого предложения заключается в том, что любая инструкция перехода / перехода относится к адресу, по которому она хранится.Опять же, независимо от реализации.Пример: предположим, что реализация, в которой инструкция перехода / перехода выполняется через несколько циклов после ее получения.Это будет означать, что ПК потенциально увеличился уже.Поэтому задача реализации состоит в том, чтобы как-то сохранить адрес инструкции перехода / перехода.Задачей компилятора является , а не , чтобы узнать об этой задержке и компенсировать ее, изменив немедленное добавление к ПК.Правильно ли я обобщаю это?

Итак, вкратце, короткая версия моих вопросов:

  1. Означает ли соответствие RISC-V эту базунабор целочисленных инструкций и стандартное расширение не должны быть изменены или удалены?

  2. Является ли информация о том, задерживается ли ветвление или нет уже в ISA?

  3. Считается ли ПК RISC-V независимым от какой-либо задержки в конвейере?

Я считаю, что ISA в целом не зависит от специфики реализации.Контр-аргумент к тому, что я утверждаю, состоит в том, что нужно было бы сообщить компилятору о специфике реализации (отложенные переходы, поведение ПК и т. Д.) И что это все еще можно считать совместимым с ISA.

1 Ответ

0 голосов
/ 25 января 2019

Я не эксперт, но за последние 20 лет внедрил несколько ядер.Ключевая концепция в ваших трех частичных вопросах: полнота и видимость пользователя .Утверждать полноту означает, на мой взгляд, что ни одна часть стандарта не может быть изменена или удалена.Однако это действительно редкий стандарт, если в нем нет сомнительных моментов и разделов, которые разные люди могут по-разному интерпретировать.В конкретном случае RISC-V я хотел бы указать на помощь указать соответствие , если вы еще не видели его.

Было бы хорошо, если бы некоторые реальные эксперты ответили на этот вопрос.

  1. Означает ли соответствие RISC-V, что набор базовых целочисленных команд и стандартное расширение не должны быть изменены или измененыраздели?

У меня такое же понимание, как и у тебя.Не имеет смысла требовать поведения, определенного в стандарте, а затем не соблюдать этот стандарт.

Является ли информация о том, что ветка задерживается или не является частью ISA?

Опять я согласен с вами.Отложенные ветви - это открытая функция для пользователей процессора.Следовательно, ISA должен указать возможное существование таких ветвей, действительно, со страницы 15 riscv-spec-v2.2.pdf:

"Инструкции передачи управления в RV32I не имеют архитектурно видимых интервалов задержки. "

Обратите внимание на формулировку, поскольку ваша реализация не предоставляет пользователю никакого интервала задержки, вы можете делать все, что захотите.А с нестандартным расширением вы совершенно свободно можете создавать инструкции, имеющие слоты задержки, вы даже можете поместить инструкции RV32I в эти слоты.

Считается ли ПК RISC-V независимым от какой-либо задержки конвейера?

Да.

...