RISC-V:实现ADDI指令

本文档详细介绍了RISC-V单周期CPU的设计与验证过程,包括CPU模块、控制器、立即数生成器和三端口寄存器模块的实现。通过添加数据窗口进行指令执行状态的观察,并通过微步进操作执行测试指令,分析了各模块在执行不同指令时的数据流动和寄存器状态变化。实验展示了如何通过FPGA进行硬件验证,并提供了调试步骤和分析结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0 实验要求

89a8f034d4084af98d0cb6ad744a8668.png6175da3dfe4b476fa76e380d4a284053.png

        实验整体框架已给出,任务主要包括:

  • 数据窗口的添加(可选,我添加了)
  • 立即数生成错误修改(老师主动设置错误,修改见代码)
  • 三端口寄存器模块的添加(这与此前的三端口略有不同,注意重点查看RegisterFile模块的实现)

1 源代码

`default_nettype none 
// --------------------------------------------------------------------
// 单周期 RISC-V CPU 模块
// --------------------------------------------------------------------
module CPU
 #(
     parameter DATAWIDTH = 32,
     parameter ADDRWIDTH = 32
 )
(
    input  wire iCPU_Reset,
    input  wire iCPU_Clk,
    // 指令存储器接口
    output wire [ADDRWIDTH-1:0] oIM_Addr,   //指令存储器地址
    input  wire [DATAWIDTH-1:0] iIM_Data,   //指令存储器数据
    // 数据存储器接口
    input  wire [DATAWIDTH-1:0] iReadData,  //数据存储器读数据
    output wire [DATAWIDTH-1:0] oWriteData, //数据存储器写数据
    output wire [ADDRWIDTH-1:0] oAB,        //数据存储器地址
    output wire oWR,                        //数据存储器写使能
    // 连接调试器的信号
    output wire [ADDRWIDTH-1:0] oCurrent_PC,
    output wire oFetch,
    input  wire iScanClk,
    input  wire iScanIn,
    output wire oScanOut,
    input  wire [1:0] iScanCtrl
);

   /** The input port is replaced with an internal signal **/
   wire   clk   = iCPU_Clk;
   wire   reset = iCPU_Reset;

   // Instruction parts
   logic [31:0] pc, nextPC;
   logic [31:0] instruction; // instruction code
   assign nextPC = pc + 4;   /*-TODO 目前仅支持PC+4,增加分支指令时需修改 -*/
   // PC
   DataReg #(32) pcreg(.iD(nextPC), .oQ(pc), .Clk(clk), .Reset(reset), .Load(1'b1));
   assign oIM_Addr = pc;         // 连接指令存储器的地址端口
   assign instruction = iIM_Data;// 连接指令存储器的数据端口

   // Instruction decode
   logic [6:0] opcode;
   logic [2:0] funct3;
   logic [6:0] funct7;
   logic 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈士奇谭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值