在RISC头层牛皮和二层牛皮的区别-V CPU领域工作两年有余,突然有了自己写一个RISC-V CPU的冲动。既然想了,那就干吧!
说明:本系列文章的代码路径:github/电脑蓝屏重启shawn110285/Cookabarra
需求规格分析和微架构设计过程我们跳过,直接采用经典的5级流水线顺做歪鼻矫正序执行结构:取范伟打天下指(IF)、译码(ID),执行(EX)、访存(LSU)和写回(WB),其中译码、执行和访存mba备考均采用组合逻辑加打一拍的方式传入流水线的下一阶段。流水线之间的协同(包括流水线的暂停、冲刷、异常处理等)通秋叶原过一个总控ctrl模块完成。
第一章:RISC-V 通用寄存器GPR寄存器是CPU工作的基础,RISC-V规范中定义了32个整型寄存器(地精工程师通用寄存器),32个包养女大学生浮点寄存器,32个矢量寄存器卡尼尔面膜和众多的控制状态寄存器(CSR)。当前阶段我们先实现的一个简易的RV32同性恋测试IMZiscr CPU,所以我们只需要实现32个GPR和为数不多的CSR。
一条RISC-成力V指令中通常包含两个源寄存器(rs1和rs2)和一个目标寄存器(rd),所以我们实现的GPR模块需要支持2读端口,1个写端口。
寄存器糙皮病的写操作采用时序逻辑,在w1212是什么意思rite back阶段进行更新。由于RSIC-V规定往0号寄存器写入任何值, 0号寄存器的返回永远为0,所以在寄存器的写操作中需要区分一下0号增利宝寄存器。
G代数环PR寄存器的读操作采用组合逻辑,本时钟周期得到结果,口袋妖怪二周目为了支持把回写阶段(write back)的GPR写操作反映到当前的寄存器读操作中,我们增加了相关forward的逻辑。
程序代码中有可能试图往0冷光美白牙号寄存器写入macau非0值,记性不好吃什么比如伪代码csrw csr, rs1就被编码为csrrw x0, csr, rs1, 此时就会试图宠物狐狸把csr寄存器的值写入x0寄存器,如果直接针对所有的GPR做forward操作,则0号寄存器的读操作得到的值就可能不是0,所以也需要特别处理一下。
通用寄存器的功能模块就完成了,代码文件为: gpr.v。
本文发布于:2023-05-25 17:37:16,感谢您对本站的认可!
本文链接:http://www.ranqi119.com/ge/85/128199.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |