Как проверить ограничения последовательности LR / S C (RIS C -V ISA) - PullRequest
2 голосов
/ 23 апреля 2020

Я прочитал RIS C -V spe c о расширении RV32A, у меня возник вопрос: как ЦП может проверять ограничения последовательности LR / S C, если программа выполняется в следующих инструкциях:

lr.w x6,x0,(x0)
jal x0,dest
.......
beq x0,x0,-1
.......
dest:
sc.w x1,x6,(x0)

Специалист c сказал, что «для гарантированной успешности последовательности в конечном итоге динамический код c, выполняемый между командами LR и S C, может содержать только другие инструкции из базы» I ”набор инструкций, исключая нагрузки, хранилища, скачки назад или взятые назад ветви, инструкции JALR, FENCE, FENCE.I и SYSTEM.".

Таким образом, если программа перепрыгивает через beq (обратная ветвь, которая нарушила указанное выше ограничение), то, как процессор может обнаружить 'beq', появляется в последовательностях LR / S C. В моем проекте аппаратное обеспечение не может обнаружить 'beq', если программа выполняет вышеуказанные инструкции, тогда S C может успешно сохранить данные в памяти данных, но это на самом деле должно вызвать сбой хранилища.

1 Ответ

0 голосов
/ 23 апреля 2020

beq не является частью динамического c кода , выполненного между LR и S C. Это не нарушение указанного вами ограничения, поскольку beq не не выполняет . Он просто сидит в памяти, ничего не делая, как и все другие потенциально мегабайты памяти, которые вы перепрыгиваете с помощью jal.

Dynami c означает в порядке выполнения, stati c означает в адресе памяти order.

Кроме того, CPU не требуется , чтобы такие последовательности всегда терпели неудачу, просто разрешено . Таким образом, программист должен избегать их, если он хочет убедиться, что каждый ЦП RIS C -V может пройти последовательность LR / S C без прерывания из-за какого-то определенного c недопустимого условия, такого как выполнение назад beq.

...