基于RISC-V指令集的CPU设计和FPGA实现(三)

本文深入解读CPU设计,通过实例演示了5阶段执行流程,涉及PC、IROM、RegFile、ImmGen、ALU、CTRL等组件。从addx2,x1,x0指令到复杂跳转操作,展示了如何设计数据通路表和控制信号。

CPU 设计

首先参考黑书的CPU(64位)设计:

 

其将指令的获取和执行分为:取值IF、译码ID、执行EX、访存MEM、写回WB 五个阶段,虽然这些分层更多是为了流水线的实现做准备,但是了解这些并且按照分模块的思想有助于代码的编写的功能的实现(当时一气呵成后除了数码管管脚写反外🤣基本没出什么错误)

在黑书中是循序渐进的引出这些器件和这个架构的,这里限于篇幅就直接将所有部件和结构阐述出来。

CPU主要构件

CPU的主要构件有:指令地址寄存器PC指令存储器 (InstMem)、寄存器堆 (RegFile)、立即数生成器(ImmGen)、运算单元 (ALU)、控制单元(CTRL)、数据存储器(DMEM)

指令地址寄存器

程序计数器(PC)指明了当前程序的运行位置,通俗的理解是作为一个指令的地址存在。

所以是在每一条指令执行的最开始(准确的说是每个时钟周期的最开始),我们应该确定当前 PC 的值,从而指向相应的指令内容

  • 输入:PC(顺序执行用)、branch_PC(跳转执行用)

  • 控制:顺序执行 or 跳转执行 PCSel

  • 输出:下一条指令的地址 npc

  • 功能:选择顺序执行(PC=PC+4)还是跳转执行(PC=branch_PC

指令寄存器

对于每一个程序计数器(PC),我们需要找到对应的指令内容,指令寄存器干的就是这种事情。

  • 输入:PC

  • 输出:指令内容inst

  • 功能:读取对应地址的指令

寄存器堆

基于 RISC-V 指令集的 CPU 特点之一就是拥有 32 个寄存器,按照给定的寄存器号对相应的寄存器进行读写操作也是十分关键的操作

  • 输入:寄存器rs1、寄存器rs2、写入寄存器wr、写入内容wd

  • 控制:读写控制 RegWE

  • 输出:读出的数据 rd1rd2

  • 功能:读写寄存器

立即数生成器

对于拥有立即数的指令,我们需要将立即数从中提取出来,并按照相应的指令类型输出不同的立即数

  • 输入:指令 inst

  • 控制:立即数扩展类型 SextOpe

  • 输出:扩展立即数结果

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值