基于RISCV指令集的五级流水线CPU功能说明(基于代码逐段解读)

张开发
2026/6/13 21:35:52 15 分钟阅读
基于RISCV指令集的五级流水线CPU功能说明(基于代码逐段解读)
基于RISCV指令集的五级流水线CPU设计及验证 平台:quartus 包括:verilog代码汇编代码详细设计文档说明 实现功能:RISBUJ型指令寻址方式支持字节对齐小端模式加了cache前递冒险AHB总线外设等一、顶层模块cpu_LSX该模块为CPU核心顶层集成五级流水线、Cache、AHB总线接口等核心功能输入时钟clk和复位信号rst_n实现RISCV指令的取指、译码、执行、访存、回写全流程。基于RISCV指令集的五级流水线CPU设计及验证 平台:quartus 包括:verilog代码汇编代码详细设计文档说明 实现功能:RISBUJ型指令寻址方式支持字节对齐小端模式加了cache前递冒险AHB总线外设等关键信号与子模块连接取指阶段通过PC模块生成指令地址AddressIns连接至程序存储器ramins读取指令InstructionFromInsMemToIF_IDReg传入IF/ID寄存器。译码阶段指令经IF/ID寄存器锁存后送入控制单元Control解析 opcode生成分支Branch、存储器读写MemRead/MemWrite等控制信号寄存器堆Ram_Reg32通过读地址ReadReg1/ReadReg2输出操作数立即数生成器immGen根据指令类型生成32位立即数imm。执行阶段ALU控制单元ALUCtrl根据ALUOp和指令Func字段生成运算控制信号ALU执行运算前递单元ForwardingUnit检测数据冲突并生成前递信号分支地址加法器add32计算跳转目标地址。访存阶段数据存储器ramdata通过ALU结果DataMemAddress访问数据Cache模块Cache处理缓存命中/未命中逻辑AHB总线接口AHBslaveMux实现外设访问。回写阶段通过写回选择器WBMUX选择写回数据ALU结果或存储器读数据写回寄存器堆。二、取指阶段IF2.1 PC模块PC功能生成当前指令地址并计算下一条指令地址PC4支持分支/跳转地址切换。输入复位信号rstn、时钟clk、PC使能PCEnToPC来自冒险检测单元、下一条PC选择信号NextPCSel0为PC41为分支/跳转地址、分支/跳转目标地址PCAddImmFromEXToPC。输出当前指令地址PCOutToInsMemAndIFIDReg、PC4值PCPlus4ToIFIDReg。逻辑复位时PC初始化为32h0使能有效时根据NextPCSel选择PC4或目标地址作为新PC值。2.2 程序存储器ram_ins功能存储指令通过地址读取32位指令。输入指令地址AddressInsFromPCTo_InsMem。输出32位指令InstructionFromInsMemToIF_IDReg。特性同步读操作地址对应存储单元的指令输出至IF/ID寄存器。2.3 IF/ID寄存器IF_IDReg功能锁存取指阶段的指令、PC值和PC4值传递至译码阶段。输入复位rstn、时钟clk、使能IFIDEnToIFIDReg来自冒险检测单元、指令InstructionFromInsMemToIFIDReg、PC值PCOutToInsMemAndIFIDReg、PC4PCPlus4ToIFIDReg。输出锁存的指令InstructionFromIFIDRegToID、PC值PCFromIFIDRegToID、PC4PCPlus4FromIFIDRegToID。逻辑使能无效时保持原值复位时清空使能有效时锁存输入信号。三、译码阶段ID3.1 控制单元Control功能根据指令 opcode 生成流水线控制信号。输入指令InstructionFromIFIDRegTo_ID。输出分支控制Branch、存储器读MemRead、存储器写MemWrite、ALU源选择ALUSrc0为寄存器数据1为立即数、寄存器写回使能RegWrite、写回数据源选择MemtoReg0为ALU结果1为存储器读数据、J型指令标志J、U型指令标志U、ALU操作类型ALUOp3位。逻辑通过 opcode指令[6:0]判断指令类型R/I/S/B/U/J输出对应控制信号。例如R型指令如addALUSrc0RegWrite1MemtoReg0。存储指令如swMemWrite1ALUSrc1RegWrite0。分支指令如beqBranch1ALUSrc0RegWrite0。3.2 寄存器堆Ram_Reg32功能32个32位通用寄存器支持读写操作寄存器0固定输出0。输入读地址1ReadReg1FromIDToReg32、读地址2ReadReg2FromIDToReg32、写地址RegWriteFromWBToReg32、写数据RegWriteDataFromWBToReg32、写使能enRegWriteFromWBTo_Reg32。输出读数据1ReadData1FromReg32ToIDEXReg、读数据2ReadData2FromReg32ToIDEXReg。逻辑同步写操作写使能有效时将数据写入目标寄存器读操作异步根据地址输出数据地址0恒为32h0。3.3 立即数生成器immGen功能根据指令类型解析立即数字段生成32位立即数。输入指令InstructionFromIFIDRegTo_ID。输出32位立即数immFromimmGenToID_EXReg。逻辑I型指令[31:20]符号扩展。S型{指令[31:25], 指令[11:7]}符号扩展。B型{指令[31], 指令[7], 指令[30:25], 指令[11:8], 1b0}符号扩展左移1位。U型{指令[31:12], 12h0}。J型{指令[31], 指令[19:12], 指令[20], 指令[30:21], 1b0}符号扩展左移1位。3.4 ID/EX寄存器ID_EXReg功能锁存译码阶段的控制信号、操作数、立即数等传递至执行阶段。输入复位rstn、时钟clk、控制信号Branch/MemRead等、寄存器数据ReadData1/ReadData2、立即数imm、PC值PCFromIFIDRegToID、目标寄存器地址RdFromIDToID_EXReg等。输出锁存的控制信号、操作数、立即数、PC值等供执行阶段使用。逻辑复位时清空控制信号时钟沿锁存输入信号。四、执行阶段EX4.1 前递单元ForwardingUnit功能检测数据冲突并生成前递信号将后续阶段的结果提前传递至ALU输入避免流水线暂停。输入ID/EX阶段源寄存器地址rs1EX、rs2EX、EX/MEM阶段目标寄存器地址rdMEM及写使能RegWriteMEM、MEM/WB阶段目标寄存器地址rdWB及写使能RegWriteWB。输出前递控制信号ForwardA、ForwardB2位00为原始数据01为MEM阶段结果10为WB阶段结果。逻辑若rs1EX rdMEM且RegWrite_MEM有效ForwardA01前递MEM阶段结果。若rs1EX rdWB且RegWrite_WB有效ForwardA10前递WB阶段结果。rs2_EX同理生成ForwardB。4.2 ALU控制单元ALUCtrl功能根据ALUOp和指令Func字段生成ALU运算控制信号。输入ALUOp3位来自控制单元、指令Func33位、Func77位。输出ALU控制信号ALUCtrl5位支持加法10000、减法10001、与10010、或10011、异或10100、左移10101、右移10110等操作。逻辑ALUOp000加载/存储指令ALUCtrl10000加法。ALUOp001分支指令根据Func3生成比较操作如beq对应减法Zero标志判断。ALUOp010R型/I型指令结合Func3和Func7生成具体运算如add为10000sub为10001。4.3 ALU模块ALU功能根据ALUCtrl信号执行算术/逻辑运算。输入操作数1source1来自前递选择后的寄存器数据或立即数、操作数2source2、ALU控制信号ALUCtrl。输出运算结果result、零标志Zero结果为0时置1用于分支判断。逻辑根据ALUCtrl选择运算类型例如ALUCtrl10000result source1 source2。ALUCtrl10001result source1 - source2。ALUCtrl10010result source1 source2。4.4 分支地址计算add32功能计算分支/跳转指令的目标地址PC 立即数。输入PC值PCFromIDEXRegToEX、立即数immFromIDEXRegToEX。输出目标地址PCAddImmFromEXToPCAndEX_MEMReg。逻辑result PC imm立即数已包含左移1位处理适用于分支指令。4.5 EX/MEM寄存器EX_MEMReg功能锁存执行阶段的运算结果、控制信号、数据等传递至访存阶段。输入复位rstn、时钟clk、ALU结果ALUResultFromEXToEXMEMReg、寄存器数据2WriteData2FromEXToEX_MEMReg、控制信号Branch/MemRead/MemWrite等、分支目标地址PCAddImm、Zero标志等。输出锁存的上述信号供访存阶段使用。五、访存阶段MEM5.1 数据存储器ram_data功能存储数据支持读MemRead和写MemWrite操作。输入地址DataMemAddressFromEXMEMRegToDataMem、写数据WritedataFromEXMEMRegToDataMem、读使能MemReadFromEXMEMRegToDataMem、写使能MemWriteFromEXMEMRegToDataMem。输出读数据ReadDataFromDataMemToMEM_WBReg。特性同步读写小端模式存储低地址存数据低位字节支持字节对齐访问。5.2 Cache模块Cache功能缓存数据存储器内容减少主存访问次数采用两路组相联结构写回策略。输入CPU读/写信号MemRead/MemWrite、地址DataMemAddress、写数据Writedata、主存读数据ReadDataFromDataMem。输出缓存命中信号Hit、缓存读数据CacheReadData、主存写使能CacheMemWrite、主存写数据Cache_Writedata。逻辑读操作地址匹配且有效位为1则命中Hit1输出缓存数据否则访问主存并更新缓存Hit0时流水线暂停。写操作命中时更新缓存并标记“修改”位未命中时直接写主存替换缓存块时若“修改”位置位则先写回主存。5.3 AHB总线接口AHB_slaveMux功能实现CPU与外设的通信遵循AHB协议支持多外设选择。输入地址HADDR、写数据HWDATA、读写控制HWRITE、外设选择信号根据地址高位。输出读数据HRDATA、传输就绪HREADY。外设映射地址最高4位为8h8时访问外设。次4位addr[27:24]选择具体外设LED1、数码管2、按键3、UART4、定时器5。5.4 MEM/WB寄存器MEM_WBReg功能锁存访存阶段的存储器读数据、ALU结果、控制信号等传递至回写阶段。输入复位rstn、时钟clk、存储器读数据ReadDataFromDataMemToMEMWBReg、ALU结果ALUResultFromEXMEMRegToMEMWBReg、控制信号RegWrite/MemtoReg等、目标寄存器地址RdFromEXMEMRegToMEMWBReg。输出锁存的上述信号供回写阶段使用。六、回写阶段WB6.1 写回选择器WBMUX功能选择写回寄存器堆的数据来源。输入ALU结果ALUResultFromMEMWBRegToWB、存储器读数据ReadDataFromMEMWBRegToWB、写回选择信号MemtoRegFromMEMWBRegTo_WB。输出写回数据RegWriteDataFromWBToReg32。逻辑MemtoReg0时选择ALU结果1时选择存储器读数据。6.2 寄存器写回控制功能将写回数据写入目标寄存器。输入写使能RegWriteFromMEMWBRegToWB、目标寄存器地址RdFromMEMWBRegToWB、写回数据RegWriteDataFromWBToReg32。输出连接至寄存器堆的写使能、地址和数据信号。逻辑写使能有效时将数据写入目标寄存器地址0忽略写操作。七、冒险检测单元HazardDetectionUnit功能检测数据冒险和控制冒险生成流水线暂停或清空信号。输入ID阶段源寄存器地址rs1ID、rs2ID、EX阶段目标寄存器地址rdEX、EX阶段存储器读信号MemReadEX、分支标志Branch、Zero标志Zero、J型指令标志J。输出PC使能PCEnToPC、IF/ID寄存器使能IFIDEnToIFIDReg、ID/EX寄存器复位IDEXReset、下一条PC选择信号NextPCSel。逻辑数据冒险若rs1IDrdEX或rs2IDrdEX且MemReadEX有效输出PCEn0、IFIDEn0暂停取指和译码IDEXReset0保持EX阶段信号。控制冒险分支指令且Zero1或J型指令输出NextPCSel1选择分支/跳转地址ID_EXReset1清空ID/EX寄存器。八、外设模块8.1 UART模块AHB_UART功能实现串行通信支持115200bps波特率包含发送tx和接收rx逻辑。输入AHB总线信号地址、数据、读写控制、外部接收引脚irxpin。输出外部发送引脚otxpin、总线读数据HRDATA。逻辑发送CPU写数据至发送寄存器UART将并行数据转为串行信号1位起始位、8位数据位、1位停止位。接收将串行信号转为并行数据CPU通过读接收寄存器获取数据。8.2 其他外设AHB_ledCPU写数据[7:0]控制8位LED亮灭。AHB_hexCPU写数据控制4位数码管显示段选信号输出。AHB_keyCPU读数据获取8位按键状态低电平表示按下。AHB_TIMER32位定时器CPU写计数初值和使能信号计数至0后停止。总结本设计实现了基于RISCV指令集的五级流水线CPU支持R/I/S/B/U/J型指令通过前递和冒险检测解决流水线冲突集成Cache提升访存效率通过AHB总线扩展外设。代码严格遵循模块化设计各阶段功能独立且通过寄存器传递数据忠实还原了RISCV处理器的基础架构与运行逻辑。

更多文章