RISCV的实战-二级流水线的DarkRISCV.pdfVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档免费下载、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
RISCV的实战-⼆级流⽔线的DarkRISCV 介绍 在2018年8⽉19⽇凌晨2点到8点之间夜晚开发,darkriscv是开源RISC-V指令集的⼀个实验性的实现。如今,经过数周令⼈兴奋的不眠 夜⼯作,darkriscv已经可以稳定运⾏,可以⽤riscv-elf-gcc编译“hello world”并正常运⾏! 设计概念基于作者的其他早期RISC处理器,由简化的两级流⽔线组成,其中在第⼀个时钟中从指令存储器取指令,然后在第⼆个时钟中解 码/执⾏指令。管道在没有互锁的情况下重叠,在某种程度上,darkriscv可以在⼤多数时间达到每个指令⼀个时钟的性能(例外是在分⽀之 后,其中⼀个时钟在流⽔线flush中丢失)。另外,代码⾮常紧凑,有⼤约200⾏Verilog代码。 尽管与其他RISC-V实现相⽐,代码规模不⼤,但darkriscv具有许多令⼈印象深刻的功能: 实现了⼤多数RISC-V RV32I指令集 ⼯作频率⾼达75MHz,⼤部分时间每条指令维持 1个时钟 灵活的哈佛架构 (易于集成缓存控制器) 在真正的spartan-6 lx9中⼯作得很好 使⽤RISC-V的gcc 9.0.0可正常⼯作(⽆需补丁 !) 仅使⽤⼤约 1000个LUT(spartan-6 lx9,仅核⼼) 和最好的功能:BSD许可证 随意提出建议和良好的⿊客攻击 (良好的可扩展性)! 实现说明 因为作者使⽤的开发版是超低功耗的Xilinx Spartan-6系列FPGA,所以该项⽬⽬前使⽤的开发⼯具为Xilinx ISE 14.4 for Linux。但 是,DarkRISCV没有对Xilinx元件管脚进⾏明确的引⽤,并且所有逻辑都是直接从Verilog推断出来的,这意味着该项⽬可以轻松移植到其 他FPGA系列芯⽚板,并且可以轻松移植到其他环境中(作者将在未来添加对其他FPGA和⼯具的⽀持) )。 darkriscv的开发 ⽬的是为680x0 / coldfire系列的某些项⽬创建迁移路径。我的第⼀种⽅法是寻找可⾏的软件⽅案,经过⼤量的测试,我 发现了picorv32和RISC-V周围的所有⽣态系统。尽管直接替换680x0系列是⼀个⾮常好的选择,但picorv32可能不⾜以取代coldfire processors系列芯⽚板。 picorv32的主要问题是⼤多数指令每条指令需要3或4个时钟,在某些⽅⾯类似于68020,但运⾏频率为 150MHz。⽆论如何,每条指令 有3个时钟,峰值性能仅为50MIPS左右。因为我对实验RISC内核有⼀些很好的经验,我就开始编写darkriscv代码来检查复杂程度。令我 惊讶的是,在第⼀个晚上,我映射了RV32I规范的⼏乎所有指令,⽽darkriscv开始在75MHz正确执⾏第⼀条指令,每条指令⼀个时钟, 类似于快速和漂亮的68040!哇 ! :) RV32I规范本⾝⾮常令⼈印象深刻且易于实现(参见[1],第16页)。当然,还有⼀些缺点,例如有趣的⼩端总线(与680x0系列中的⽹络 导向⼤端总线相反),但经过⼀些实证测试后很容易就能完成⼯作。 初始设计⾮常简单,处理器具有2级流⽔线--指令预取和指令执⾏。在预取指令流⽔线,程序计数器总是提前⼀个时钟⼯作。在执⾏⽅⾯, 我们发现了所有解码,寄存器组读取,算术和逻辑运算,寄存器组写⼊和IO操作。只要两个阶段重叠,结果就是连续的指令流以每个指令1 个时钟的速率和⼤约75MIPS。 这意味着当与运⾏在150MHz并且每个指令有3个时钟的picorv32相⽐时,75MHz的darkriscv指令执⾏速度快50%。 不幸的是,我的加载指令有⼀个⼩问题: 1级执⾏需要更快的外部存储器!这对于早期的RISC处理器来说不是问题,因为早期的RISC处理 器使⽤基于LUT的⼩型和更快的存储器,但在darkriscv的情况下,该提议是⼀种更灵活的设计,在某种程度上可以使⽤基于BlockRAM的 缓存和缓慢的外部存储器。块RAM的问题在于需要两个时钟来回读存储器 :⼀个时钟⽤于寄存地址,另⼀个时钟⽤于寄存数据。外部存储 器需要⼤量时钟。 我的第⼀个解决⽅案是使⽤两个不同的时钟沿:⼀个⽤于darkriscv,另⼀个⽤于内存/总线接⼝。 在这种情况下,具有2级流⽔线的处理器就像2 * 0.5 + 1级流⽔线⼀样: 1/2阶段⽤于指令预取 1/2阶段⽤于静态指令解码 指令执⾏的1个阶段 在加载/存储指令的特殊情况下,最后⼀个阶段分为两个不同的阶段,作为⼀个4 * 0.5阶段的管道: 1/2阶段⽤于指令预取

文档评论(0)

151****9205 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

认证主体姚**

1亿VIP精品文档免费下

相关文档

相关课程推荐