Skip to content

模型Model

单周期数据通路与控制

Single-cycle datapath · Datapath and control

从五条 RV32I 指令的状态转移导出寄存器、ALU、存储与多路选择控制,并逐项核对副作用。

形式陈述 ​

对五指令 ISA 子集,单周期实现让每条正常指令在一个时钟区间内完成取指、读寄存器、运算、必要的访存和下一状态选择。区间末的状态边界提交寄存器、PC及存储更新;本页假设存储接口能在给定周期内完成,不涉及真实缓存和异常。

数据通路包含PC、指令存储、两个读端口一个写端口的寄存器文件、立即数解码器、ALU、比较器、数据存储和选择器。数据存储与指令存储分离,分支目标有单独加法器;这是本页选择的资源配置。

指令 ALU 输入B 寄存器写入源 RegWrite MemWrite NextPC
add rs2 ALU和 1 0 PC+4
addi I立即数 ALU和 1 0 PC+4
lw I立即数 内存读值 1 0 PC+4
sw S立即数 无 0 1 PC+4
beq 本设计不使用ALU结果 无 0 0 比较成立选PC+B立即数

add/addi/lw/sw的ALU输入A为rs1。store的数据输入直接来自rs2,而不是来自ALU输入B;后者已经被立即数占用。RegWrite为一且rd为零时,寄存器文件仍丢弃写入。

直觉

数据通路提供“可以把值送到哪里”的道路,控制信号选择本条指令真正走哪条路。add与lw都需要加法,但前者把和写回寄存器,后者把和当地址,再把内存的值写回。只看ALU输出正确,不能证明指令正确。

所有组合部件可以并行产生候选值;没有被选择的值不应引发状态变化。选择器只决定数据来源,写使能才决定是否产生副作用,这两类控制不能混为一谈。

例子与边界

加法结果还是地址 ​

初始 x1=0x100、M[0x108..0x10b]=[5,0,0,0]。addi x2,x1,8 应写回 0x108;lw x2,8(x1) 应写回 5。二者的ALU和都为 0x108,只有写回选择不同。若总是选择ALU输出,所有地址计算测试可能通过,load语义仍完全错误。

store有两种不同的源 ​

执行 sw x3,8(x1),设 x3=17。ALU计算地址 0x108,数据端口取得17,写四个小端字节 [17,0,0,0]。误把ALU输入B也接到写数据,会把偏移8写入内存。这个错误来自两种角色被合并,与寄存器编号无关。

单周期不等于快速 ​

若取指、寄存器读取、ALU、数据读和写回选择的教学延迟依次为 2,1,2,3,1 个时间单位,lw关键路径需要9单位。即使add绕过数据读,其单周期实现仍受同一时钟周期限制。这里的单位只是串行路径预算,没有计入真实布线和时钟代价。

若把两块存储替换为只能每周期服务一次的统一端口,lw在一个区间内既需取指又需取数,原先的资源假设不再成立;必须改变时序或资源,而不能只改图上的方框名字。

推论与应用

逐指令验证可以先从控制表中读出有效路径,再把它代回ISA转移式。对store与branch,还要检查所有无关写使能为零。数据值相同但多写了一次内存,同样是错误实现。

五级流水线保留这些功能,但把中间结果和对应控制位一同寄存。不能只把数据延后一周期、仍让当前解码的RegWrite控制上一条指令的数据。

参考资料
  • UC Berkeley CS61C,Single-Cycle CPU Datapath: Introduction,课程笔记,访问于 2026-10-08。
  • David A. Patterson and John L. Hennessy, Computer Organization and Design RISC-V Edition, 2nd ed., 2021,Ch. 4。本文资源、分支加法器和延迟数字是明示的教学选择。
关系图谱8 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组