欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 集成电路流片随笔26:tinyriscv的三级流水线细则pc

集成电路流片随笔26:tinyriscv的三级流水线细则pc

2025/9/21 3:41:44 来源:https://blog.csdn.net/m0_51389066/article/details/147835598  浏览:    关键词:集成电路流片随笔26:tinyriscv的三级流水线细则pc
`include "defines.v"// PC寄存器模块
module pc_reg(input wire clk,input wire rst,input wire jump_flag_i,                 // 跳转标志input wire[`InstAddrBus] jump_addr_i,   // 跳转地址input wire[`Hold_Flag_Bus] hold_flag_i, // 流水线暂停标志input wire jtag_reset_flag_i,           // 复位标志output reg[`InstAddrBus] pc_o           // PC指针);always @ (posedge clk) begin// 复位if (rst == `RstEnable || jtag_reset_flag_i == 1'b1) beginpc_o <= `CpuResetAddr;// 跳转end else if (jump_flag_i == `JumpEnable) beginpc_o <= jump_addr_i;// 暂停end else if (hold_flag_i >= `Hold_Pc) beginpc_o <= pc_o;// 地址加4end else beginpc_o <= pc_o + 4'h4;endendendmodule

📌 模块功能概述

pc_reg模块负责控制指令地址(PC)的更新。它根据以下几种情况更新或保持PC值:

  1. 复位(Reset)
  2. 跳转(Jump)
  3. 流水线暂停(Hold)
  4. 正常递增

📥 输入端口解释

端口名位宽说明
clk1 bit时钟信号
rst1 bit全局复位信号(高电平有效)
jump_flag_i1 bit跳转使能信号(高电平表示需要跳转)
jump_addr_iInstAddrBus跳转目标地址
hold_flag_iHold_Flag_Bus保持流水线的标志位(如取指阶段暂停)
jtag_reset_flag_i1 bit来自JTAG接口的调试复位信号

📤 输出端口

端口名位宽说明
pc_oInstAddrBus当前PC值(即指令地址)

🔁 always 块说明

always @ (posedge clk)

在每个时钟上升沿,根据以下优先级更新 PC 值:

🥇 1. 复位信号优先
if (rst == `RstEnable || jtag_reset_flag_i == 1'b1)pc_o <= `CpuResetAddr;

当外部复位或JTAG调试复位触发时,PC重置为预设地址(如:0x00000000)。

🥈 2. 跳转信号
else if (jump_flag_i == `JumpEnable)pc_o <= jump_addr_i;

当检测到跳转请求时,将PC设置为跳转目标地址。

🥉 3. 流水线暂停(Hold)
else if (hold_flag_i >= `Hold_Pc)pc_o <= pc_o; // 保持不变

如果当前需要暂停(如因为缓存未命中或其他流水线控制信号),保持PC值不变。

🏁 4. 正常执行(地址加4)
elsepc_o <= pc_o + 4'h4;

如果无跳转或暂停,PC递增4字节,执行下一条指令。


✅ 总结:状态机行为

条件PC更新为
复位 or JTAG复位CpuResetAddr
跳转使能jump_addr_i
暂停标志 >= Hold_Pc保持不变
正常pc_o + 4

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词