16844
19468
简介:RISC-V用户级ISA的权威参考或参考实现是什么?
上下文:RISC-V网站上有“ RISC-V指令集手册”,该手册很好地解释了用户级指令,但没有给出确切的规范。我现在正在尝试构建用户级ISA模拟器,并打算在以后编写FPGA实现,因此确切的行为对我很重要。
参考实现就足够了,但是最好应该尽可能地简单-也就是说,我将尽力理解流水线的实现。重要的是要了解指定的ISA,而不是单个CPU实现或编译器实现。
一个显示我的问题的例子是AUIPC指令:散文解释说:“ AUIPC从20位U即时数形成32位偏移,用零填充最低的12位,然后将该偏移添加到pc,然后将结果放入寄存器rd。”我想知道这是指新旧PC,即AUIPC指令或下一条指令的位置。我看了看“ RISCV Angel”的实现,但这似乎掩盖了(旧)PC的低位部分-不仅仅是立即的-我在规范中找不到任何原因,甚至在规范中也找不到。更改规格的历史记录(因为Angel年龄较大)。现在,我有两个关于AUIPC的问题,而不是答案。许多其他说明对我构成了类似的问题。 
引用的《 RISC-V指令集手册》是与权威参考最接近的内容。如果其中存在不清楚或不正确的地方,则可以在维护该文档的Github网站上打开问题:https://github.com/riscv/riscv-isa-manual
就AIUPC而言,本手册第9页底部的这句话暗含但未明确说明答案:
还有一个用户可见的附加寄存器:程序计数器pc保存当前指令的地址。
基于该陈述,我希望AIUPC指令看到并操纵的pc值是AIUPC指令本身的地址。
JALR指令的讨论支持这种解释:
间接跳转指令JALR(跳转和链接寄存器)使用I型编码。通过将12位带符号的I-immediate加到寄存器rs1,然后将结果的最低有效位设置为零,可以获得目标地址。跳转后的指令地址(pc + 4)被写入寄存器rd。
给定以下指令的地址表示为pc + 4,显然在执行JALR期间可见的pc值就是JALR指令本身的地址。
该手册的最新草案(位于https://github.com/riscv/riscv-isa-manual/releases/download/draft-20190321-ba17106/riscv-spec.pdf)使情况更加清晰。在当前手册中代替此:
AUIPC将12个低阶零位附加到20位U紧随其后,将结果符号扩展为64位,然后将其添加到pc中,并将结果放入寄存器rd中。
最新草案说:
AUIPC与20位U立即数形成32位偏移量,用零填充最低的12位,将该偏移量添加到AUIPC指令的pc中,然后将结果放入寄存器rd中。
|
你的答案
StackExchange.ifUsing(“ editor”,function(){
StackExchange.using(“ externalEditor”,function(){
StackExchange.using(“ snippets”,function(){
StackExchange.snippets.init();
});
});
},“代码段”);
StackExchange.ready(function(){
var channelOptions = {
标签:“” .split(“”),
id:“ 1”
};
initTagRenderer(“”。split(“”),“” .split(“”),channelOptions);
StackExchange.using(“ externalEditor”,function(){
//如果启用了摘要,则必须在摘要后触发编辑器
如果(StackExchange.settings.snippets.snippetsEnabled){
StackExchange.using(“ snippets”,function(){
createEditor();
});
}
其他{
createEditor();
}
});
函数createEditor(){
StackExchange.prepareEditor({
useStacksEditor:否,
heartbeatType:“答案”,
autoActivateHeartbeat:否,
convertImagesToLinks:是,
noModals:是的,
showLowRepImageUploadWarning:是的,
声望:ToPostImages:10,
bindNavPrevention:正确,
后缀:“”,
imageUploader:{
brandingHtml:“采用\ u003ca href = \“ https://imgur.com/ \” \ u003e \ u003csvg class = \“ svg-icon \” width = \“ 50 \” height = \“ 18 \” viewBox = \“ 0 0 50 18 \” fill = \“ none \” xmlns = \“ http://www.w3.org/2000/svg \” \ u003e \ u003cpath d = \“ M46.1709 9.17788C46.1709 8.26454 46.2665 7.94324 47.1084 7.58816C47.4091 7.46349 47.7169 7.36433 48.0099 7.26993C48.9099 6.97997 49.672 6.73443 49.672 5.93063C49.672 5.22043 48.9832 4.61182 48.1414 4.61182C47.4335 4.61182 46.7256 4.91628 46.0943 5.50789C45.74.6 4.313.6412 4.313.6662 43.1481 6.59048V11.9512C43.1481 13.2535 43.6264 13.8962 44.6595 13.8962C45.6924 13.8962 46.1709 13.2535 46.1709 11.9512V9.17788Z \“ / \ u003e \ u003cpath d = \” M32.492 10.1419C32.492 12.6954 34.1182 14.048437.0451 14.0484 41.5985 12.6954 41.5985 10.1419V6.59049C41.5985 5.28821 41.1394 4.66232 40.1061 4.66232C39.0732 4.66232 38.5948 5.28821 38.5948 6.59049V9.60062C38.5948 10.8521 38.2696 11.5455 37.0451 11.5455C35.8209 11.5455 35.4954 10.8 521 35.4954 9.60062V6.59049C35.4954 5.28821 35.0173 4.66232 34.0034 4.66232C32.9703 4.66232 32.492 5.28821 32.492 6.59049V10.1419Z \“ / \ u003e \ u003cpath fill-rule = \” evenodd \“ clip-rule = \” evenodd \“ d = \“ M25.6622 17.6335C27.8049 17.6335 29.3739 16.9402 30.2537 15.6379C30.8468 14.7755 30.9615 13.5579 30.9615 11.9512V6.59049C30.9615 5.28821 30.4833 4.66231 29.4502 4.66231C28.9913 4.66231 28.4555 4.94978 28.1109 5.50789C6.723 4.5608.787 .1369 4.56087 21.0134 6.57349 21.0134 9.27932C21.0134 11.9852 23.003 13.913 25.3754 13.913C26.5612 13.913 27.4607 13.4902 28.1109 12.6616C28.1109 12.7229 28.1161 12.7799 28.121 12.8346C28.1256 12.8854 28.1301 12.9342 28.1301 12.983C28.14.3349 14.732 15.2321 24.1352 14.9821 23.5661 14.7787C23.176 14.6393 22.8472 14.5218 22.5437 14.5218C21.7977 14.5218 21.2429 15.0123 21.2429 15.6887C21.2429 16.7375 22.9072 17.6335 25.6622 17.6335ZM24.1317 9.27932C24.1317 7.94324 24.9928 7.09766 26.1024 27.2119 7.09766 28.0918 7.94324 28.0918 9.27932C28.0918 10.6321 27.2311 11.511626.1024 11.5116C24.9737 11.5116 24.1317 10.6491 24.1317 9.27932Z \“ / \ u003e \ u003cpath d = \” M16.8045 11.9512C16.8045 13.2535 17.2637 13.8962 18.2965 13.8962C19.3298 13.828V 11.802879 13.2566 19.808。 16.4027 4.62866C15.1594 4.62866 14.279 4.98375 13.3609 5.88013C12.653 5.05154 11.6581 4.62866 10.3573 4.62866C9.34336 4.62866 8.57809 4.89931 7.9466 5.5079C7.58314.2578.59328 7.10506 4.66232 6.51203.9573232C5。 6.51203 13.8962C7.54479 13.8962 8.0232 13.2535 8.0232 11.9512V8.90741C8.0232 7。 9157 7.58817 14.3365 6.91179 15.4269 6.91179C16.4027 6.91179 16.8045 7.58817 16.8045 8.94108V11.9512Z \“ / \ u003e \ u003cpath d = \” M3.31675 6.59049C3.31675 5.28821 2.83866 4.66232 1.82471 4.66232C0 .791758 4.66232 0.313354 5.28821 0.313354 6.59049V11.9512C0.313354 13.2535 0.791758 13.8962 1.82471 13.8962C2.85798 13.8962 3.31675 13.2535 3.31675 11.9512V6.59049Z \“ / u003e \ u003.82012009151.1。 1.98861C0 2.87869 0.822846 3.57676 1.87209 3.57676C2.90056 3.57676 3.7234 2.87869 3.7234 1.98861C3.7234 1.1159 2.90056 0.400291 1.87209 0.400291Z \“ fill = \”#1BB76E \“ / \ u003e \ u003c / s / u003e \ u003c / s ,
contentPolicyHtml:“根据\ u003ca href = \许可的用户贡献” https://stackoverflow.com/help/licensing \“ \ u003ecc by-sa \ u003c / a \ u003e \ u003ca href = \” https://stackoverflow.com /法律/内容政策\“ \ u003e(内容政策)\ u003c / a \ u003e”,
allowUrls:是
},
onDemand:是的,
throwSelector:“。discard-answer”
,立即ShowMarkdownHelp:true,enableTables:true,enableSnippets:true
});
}
});
感谢您为Stack Overflow提供答案!
请务必回答问题。提供详细信息并分享您的研究!
但是要避免...
寻求帮助,澄清或回答其他答案。
根据意见发表声明;用参考或个人经验来备份它们。
要了解更多信息,请参阅有关编写出色答案的提示。
草稿已保存
草稿丢弃
注册或登录
StackExchange.ready(function(){
StackExchange.helpers.onClickDraftSave('#login-link');
});
使用Google注册
使用Facebook注册
使用电子邮件和密码注册
提交
以访客身份发布
名称
电子邮件
必需,但从未显示
StackExchange.ready(
函数(){
StackExchange.openid.initPostLogin('.New-post-login','https%3a%2f%2fstackoverflow.com%2fquestions%2f55314747%2frisc-v-user-level-reference-or-reference-implementation%23new-answer' ,“ question_page”);
}
);
以访客身份发布
名称
电子邮件
必需,但从未显示
发表您的答案
丢弃
点击“发布答案”,即表示您同意我们的服务条款,隐私政策和Cookie政策
不是您要找的答案?浏览标记为riscv的其他问题或提出您自己的问题。