<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>数据通路 on Lumenth</title>
        <link>https://blog.lumenth.me/tags/%E6%95%B0%E6%8D%AE%E9%80%9A%E8%B7%AF/</link>
        <description>Recent content in 数据通路 on Lumenth</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <copyright>Lumenth</copyright>
        <lastBuildDate>Fri, 25 Sep 2026 16:21:31 +0800</lastBuildDate><atom:link href="https://blog.lumenth.me/tags/%E6%95%B0%E6%8D%AE%E9%80%9A%E8%B7%AF/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>RV32I 单周期数据通路</title>
        <link>https://blog.lumenth.me/p/rv32i-datapath-per-instruction/</link>
        <pubDate>Thu, 24 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://blog.lumenth.me/p/rv32i-datapath-per-instruction/</guid>
        <description>&lt;img src="https://blog.lumenth.me/p/rv32i-datapath-per-instruction/Risc-V.png" alt="Featured image of post RV32I 单周期数据通路" /&gt;&lt;h1 id=&#34;逐指令数据通路说明配图版&#34;&gt;逐指令数据通路说明（配图版）
&lt;/h1&gt;&lt;p&gt;本文是&lt;a class=&#34;link&#34; href=&#34;../RV32I-Single-Cycle/&#34; &gt;单周期 RV32I CPU&lt;/a&gt;的配套篇：不再用文字画框图，而是&lt;strong&gt;逐类说明每条指令的数据通路走向，并标注对应的数据通路图应放在哪里&lt;/strong&gt;。请将绘制的图片统一放在本目录 &lt;code&gt;Datapath/&lt;/code&gt; 下，文件名按下方标注命名即可直接渲染。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;同 opcode 的指令共享同一套数据通路，区别仅在于 ALU 具体运算（由 &lt;code&gt;funct3&lt;/code&gt;/&lt;code&gt;funct7&lt;/code&gt; 决定）与立即数格式（&lt;code&gt;imm_sel&lt;/code&gt;）。因此按 9 类 opcode 组织，每类列出覆盖的全部指令。&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;公共部分所有指令共用&#34;&gt;公共部分（所有指令共用）
&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-overview.png&#34;
	width=&#34;1538&#34;
	height=&#34;980&#34;
	srcset=&#34;https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-overview_hu_17d227331db516e6.png 480w, https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-overview_hu_566f0271cbfa13d2.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;单周期数据通路总览（可点开放大）&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;156&#34;
		data-flex-basis=&#34;376px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;在取指阶段 &lt;code&gt;PC&lt;/code&gt; 给出地址从 &lt;code&gt;IMEM&lt;/code&gt; 读出 32 位指令；指令字经字段提取得到 &lt;code&gt;opcode / funct3 / funct7 / rs1 / rs2 / rd&lt;/code&gt;，其中 &lt;code&gt;opcode/funct3/funct7&lt;/code&gt; 送 &lt;code&gt;Control&lt;/code&gt; 译码，&lt;code&gt;rs1/rs2&lt;/code&gt; 送 &lt;code&gt;RegFile&lt;/code&gt; 读端口，&lt;code&gt;rd&lt;/code&gt; 作为写回地址。同时 &lt;code&gt;ImmGen&lt;/code&gt; 按类型生成符号扩展立即数。执行阶段 &lt;code&gt;ALU&lt;/code&gt; 的 A 端由 &lt;code&gt;alu_a_sel&lt;/code&gt; 选 &lt;code&gt;rdata1&lt;/code&gt; 或 &lt;code&gt;PC&lt;/code&gt;，B 端由 &lt;code&gt;alu_src&lt;/code&gt; 选 &lt;code&gt;rdata2&lt;/code&gt; 或 &lt;code&gt;imm&lt;/code&gt;；&lt;code&gt;ALU&lt;/code&gt; 输出 &lt;code&gt;alu_result&lt;/code&gt;（及 &lt;code&gt;zero&lt;/code&gt; 标志）。结果经 &lt;code&gt;WBMUX&lt;/code&gt;（&lt;code&gt;wb_sel&lt;/code&gt; 选择）写回 &lt;code&gt;RegFile&lt;/code&gt;，访存类经 &lt;code&gt;DMEM&lt;/code&gt;，下一条 &lt;code&gt;PC&lt;/code&gt; 由 &lt;code&gt;pc_next&lt;/code&gt; 选择逻辑决定。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;1-r-type--寄存器-寄存器运算10-条&#34;&gt;1. R-type —— 寄存器-寄存器运算（10 条）
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;覆盖指令&lt;/strong&gt;：&lt;code&gt;add&lt;/code&gt; &lt;code&gt;sub&lt;/code&gt; &lt;code&gt;and&lt;/code&gt; &lt;code&gt;or&lt;/code&gt; &lt;code&gt;xor&lt;/code&gt; &lt;code&gt;sll&lt;/code&gt; &lt;code&gt;srl&lt;/code&gt; &lt;code&gt;sra&lt;/code&gt; &lt;code&gt;slt&lt;/code&gt; &lt;code&gt;sltu&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-r-type.png&#34;
	width=&#34;1528&#34;
	height=&#34;986&#34;
	srcset=&#34;https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-r-type_hu_14e81876f2d14c73.png 480w, https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-r-type_hu_3ebdd9bc5ecd206f.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;R-type 数据通路（红色部分）&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;154&#34;
		data-flex-basis=&#34;371px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;数据通路为 &lt;code&gt;RegFile.rdata1 → ALU.A&lt;/code&gt;、&lt;code&gt;RegFile.rdata2 → ALU.B&lt;/code&gt;（因 &lt;code&gt;alu_src=0&lt;/code&gt;，B 端取 rs2）。&lt;code&gt;ALU&lt;/code&gt; 运算结果直接经 &lt;code&gt;WBMUX&lt;/code&gt;（&lt;code&gt;wb_sel=00&lt;/code&gt;）写回 &lt;code&gt;RegFile.rd&lt;/code&gt;（&lt;code&gt;reg_write=1&lt;/code&gt;）。不经过 &lt;code&gt;DMEM&lt;/code&gt;，不改变 &lt;code&gt;PC&lt;/code&gt; 流向，&lt;code&gt;PC_next = PC + 4&lt;/code&gt;。ALU 运算由 &lt;code&gt;{funct7[5], funct3}&lt;/code&gt; 选择：&lt;code&gt;0000 ADD&lt;/code&gt; / &lt;code&gt;1000 SUB&lt;/code&gt; / &lt;code&gt;0111 AND&lt;/code&gt; / &lt;code&gt;0110 OR&lt;/code&gt; / &lt;code&gt;0100 XOR&lt;/code&gt; / &lt;code&gt;0001 SLL&lt;/code&gt; / &lt;code&gt;0101 SRL&lt;/code&gt; / &lt;code&gt;1101 SRA&lt;/code&gt; / &lt;code&gt;0010 SLT&lt;/code&gt; / &lt;code&gt;0011 SLTU&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键控制信号&lt;/strong&gt;：&lt;code&gt;reg_write=1, alu_src=0, mem_read=0, mem_write=0, branch=0, jump=0, wb_sel=00, alu_a_sel=0, imm_sel=000，alu_op根据命令取值&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;2-i-type--寄存器-立即数运算9-条&#34;&gt;2. I-type —— 寄存器-立即数运算（9 条）
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;覆盖指令&lt;/strong&gt;：&lt;code&gt;addi&lt;/code&gt; &lt;code&gt;andi&lt;/code&gt; &lt;code&gt;ori&lt;/code&gt; &lt;code&gt;xori&lt;/code&gt; &lt;code&gt;slti&lt;/code&gt; &lt;code&gt;sltiu&lt;/code&gt; &lt;code&gt;slli&lt;/code&gt; &lt;code&gt;srli&lt;/code&gt; &lt;code&gt;srai&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-i-type.png&#34;
	width=&#34;1527&#34;
	height=&#34;968&#34;
	srcset=&#34;https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-i-type_hu_207e6f88f658d85f.png 480w, https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-i-type_hu_d83cf593f84ed446.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;I-type 数据通路&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;157&#34;
		data-flex-basis=&#34;378px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;数据通路与 R-type 几乎一致，唯一区别是 &lt;code&gt;ALU.B&lt;/code&gt; 由 &lt;code&gt;alu_src=1&lt;/code&gt; 改为取 &lt;code&gt;ImmGen&lt;/code&gt; 输出的立即数（&lt;code&gt;rdata2&lt;/code&gt; 不再参与）。&lt;code&gt;ALU&lt;/code&gt; 结果经 &lt;code&gt;WBMUX&lt;/code&gt;（&lt;code&gt;wb_sel=00&lt;/code&gt;）写回 &lt;code&gt;rd&lt;/code&gt;。不访存，&lt;code&gt;PC_next = PC + 4&lt;/code&gt;。ALU 运算由 &lt;code&gt;funct3&lt;/code&gt; 选择；&lt;code&gt;slli/srli/srai&lt;/code&gt; 移位量来自立即数低 5 位，其中 &lt;code&gt;srli&lt;/code&gt; 与 &lt;code&gt;srai&lt;/code&gt; 再靠 &lt;code&gt;funct7[5]&lt;/code&gt; 区分逻辑/算术右移。注意没有 &lt;code&gt;subi&lt;/code&gt;，减法用 &lt;code&gt;addi&lt;/code&gt; 传负数实现。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键控制信号&lt;/strong&gt;：&lt;code&gt;reg_write=1, alu_src=1, mem_read=0, mem_write=0, branch=0, jump=0, wb_sel=00, alu_a_sel=0, imm_sel=000&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;3-load--从存储器加载5-条&#34;&gt;3. LOAD —— 从存储器加载（5 条）
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;覆盖指令&lt;/strong&gt;：&lt;code&gt;lw&lt;/code&gt; &lt;code&gt;lh&lt;/code&gt; &lt;code&gt;lb&lt;/code&gt; &lt;code&gt;lhu&lt;/code&gt; &lt;code&gt;lbu&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-load.png&#34;
	width=&#34;1521&#34;
	height=&#34;977&#34;
	srcset=&#34;https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-load_hu_d4d5f4bd96a132c9.png 480w, https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-load_hu_9ace582adb18df21.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;LOAD 数据通路&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;155&#34;
		data-flex-basis=&#34;373px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ALU&lt;/code&gt; 计算地址（&lt;code&gt;A=rdata1&lt;/code&gt;，&lt;code&gt;B=imm&lt;/code&gt;，&lt;code&gt;alu_src=1&lt;/code&gt;，即 &lt;code&gt;rs1 + imm&lt;/code&gt;），地址送 &lt;code&gt;DMEM&lt;/code&gt;；&lt;code&gt;DMEM&lt;/code&gt; 在 &lt;code&gt;mem_read=1&lt;/code&gt; 时输出 &lt;code&gt;rdata&lt;/code&gt;。&lt;code&gt;rdata&lt;/code&gt; 经 &lt;code&gt;WBMUX&lt;/code&gt;（&lt;code&gt;wb_sel=01&lt;/code&gt;，选 MEM）写回 &lt;code&gt;RegFile.rd&lt;/code&gt;（&lt;code&gt;reg_write=1&lt;/code&gt;）。不写存储器，&lt;code&gt;PC_next = PC + 4&lt;/code&gt;。读写宽度/符号扩展由 &lt;code&gt;funct3&lt;/code&gt; 决定：&lt;code&gt;000 LB&lt;/code&gt;(符号) / &lt;code&gt;001 LH&lt;/code&gt;(符号) / &lt;code&gt;010 LW&lt;/code&gt; / &lt;code&gt;100 LBU&lt;/code&gt;(零扩展) / &lt;code&gt;101 LHU&lt;/code&gt;(零扩展)。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键控制信号&lt;/strong&gt;：&lt;code&gt;reg_write=1, alu_src=1, mem_read=1, mem_write=0, branch=0, jump=0, wb_sel=01, alu_a_sel=0, imm_sel=000&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;4-store--写入存储器3-条&#34;&gt;4. STORE —— 写入存储器（3 条）
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;覆盖指令&lt;/strong&gt;：&lt;code&gt;sw&lt;/code&gt; &lt;code&gt;sh&lt;/code&gt; &lt;code&gt;sb&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-store.png&#34;
	width=&#34;1497&#34;
	height=&#34;968&#34;
	srcset=&#34;https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-store_hu_a44ae231c642a297.png 480w, https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-store_hu_5e4cefc52d326eaa.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;STORE 数据通路&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;154&#34;
		data-flex-basis=&#34;371px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ALU&lt;/code&gt; 计算地址（&lt;code&gt;rs1 + imm&lt;/code&gt;，&lt;code&gt;alu_src=1&lt;/code&gt;），地址送 &lt;code&gt;DMEM&lt;/code&gt;。&lt;strong&gt;待写入的数据来自 &lt;code&gt;rs2&lt;/code&gt;&lt;/strong&gt;（&lt;code&gt;RegFile.rdata2&lt;/code&gt;），在 &lt;code&gt;mem_write=1&lt;/code&gt; 时写入 &lt;code&gt;DMEM&lt;/code&gt;。&lt;code&gt;STORE&lt;/code&gt; 不写回寄存器（&lt;code&gt;reg_write=0&lt;/code&gt;），也不经过 &lt;code&gt;WBMUX&lt;/code&gt; 写回。&lt;code&gt;PC_next = PC + 4&lt;/code&gt;。宽度由 &lt;code&gt;funct3&lt;/code&gt; 决定：&lt;code&gt;000 SB&lt;/code&gt; / &lt;code&gt;001 SH&lt;/code&gt; / &lt;code&gt;010 SW&lt;/code&gt;。画图时注意区分：地址用 rs1，数据是 rs2。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键控制信号&lt;/strong&gt;：&lt;code&gt;reg_write=0, alu_src=1, mem_read=0, mem_write=1, branch=0, jump=0, wb_sel=—, alu_a_sel=0, imm_sel=001&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;5-branch--条件分支6-条&#34;&gt;5. BRANCH —— 条件分支（6 条）
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;覆盖指令&lt;/strong&gt;：&lt;code&gt;beq&lt;/code&gt; &lt;code&gt;bne&lt;/code&gt; &lt;code&gt;blt&lt;/code&gt; &lt;code&gt;bge&lt;/code&gt; &lt;code&gt;bltu&lt;/code&gt; &lt;code&gt;bgeu&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-branch.png&#34;
	width=&#34;1506&#34;
	height=&#34;984&#34;
	srcset=&#34;https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-branch_hu_327375c61fa41649.png 480w, https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-branch_hu_74dd3b7b50fd6632.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;BRANCH 数据通路&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;153&#34;
		data-flex-basis=&#34;367px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ALU&lt;/code&gt; 对 &lt;code&gt;rs1/rs2&lt;/code&gt; 做比较（&lt;code&gt;alu_src=0&lt;/code&gt;，不访存、不写回）。&lt;code&gt;ALU&lt;/code&gt; 输出的 &lt;code&gt;zero&lt;/code&gt; 或 &lt;code&gt;result[0]&lt;/code&gt; 送「分支判断」逻辑，结合 &lt;code&gt;branch=1&lt;/code&gt; 与 &lt;code&gt;funct3&lt;/code&gt; 得到 &lt;code&gt;branch_taken&lt;/code&gt;。下一条 &lt;code&gt;PC&lt;/code&gt; 选择：&lt;code&gt;branch_taken ? PC + imm(B型) : PC + 4&lt;/code&gt;。&lt;code&gt;BRANCH&lt;/code&gt; 既不写寄存器也不访存。ALU 固定执行减/比较：&lt;code&gt;beq/bne&lt;/code&gt; → SUB 看 &lt;code&gt;zero&lt;/code&gt;；&lt;code&gt;blt/bge&lt;/code&gt; → SLT(有符号)；&lt;code&gt;bltu/bgeu&lt;/code&gt; → SLTU(无符号)，由 &lt;code&gt;funct3[2:1]&lt;/code&gt; 与 &lt;code&gt;funct3[0]&lt;/code&gt; 区分相等/大小比较及是否取反。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键控制信号&lt;/strong&gt;：&lt;code&gt;reg_write=0, alu_src=0, mem_read=0, mem_write=0, branch=1, jump=0, wb_sel=—, alu_a_sel=0, imm_sel=010&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;6-jal--无条件跳转并链接1-条&#34;&gt;6. JAL —— 无条件跳转并链接（1 条）
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;覆盖指令&lt;/strong&gt;：&lt;code&gt;jal&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-jal.png&#34;
	width=&#34;1494&#34;
	height=&#34;981&#34;
	srcset=&#34;https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-jal_hu_c2b2dfa7262e13ca.png 480w, https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-jal_hu_7a1a06de4a22c420.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;JAL 数据通路&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;152&#34;
		data-flex-basis=&#34;365px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;跳转目标 = &lt;code&gt;PC + imm&lt;/code&gt;（J 型立即数），&lt;strong&gt;不经过 ALU 做地址运算&lt;/strong&gt;，直接送「下一条 PC 选择」逻辑（&lt;code&gt;jump=1&lt;/code&gt; → &lt;code&gt;pc_next = PC + imm&lt;/code&gt;）。同时 &lt;code&gt;PC + 4&lt;/code&gt; 经 &lt;code&gt;WBMUX&lt;/code&gt;（&lt;code&gt;wb_sel=10&lt;/code&gt;，选 PC+4）写回 &lt;code&gt;RegFile.rd&lt;/code&gt;（&lt;code&gt;reg_write=1&lt;/code&gt;）作为返回地址。不访存，ALU 在此类指令中可闲置。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键控制信号&lt;/strong&gt;：&lt;code&gt;reg_write=1, alu_src=0, mem_read=0, mem_write=0, branch=0, jump=1, wb_sel=10, alu_a_sel=0, imm_sel=100&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;7-jalr--寄存器间接跳转并链接1-条&#34;&gt;7. JALR —— 寄存器间接跳转并链接（1 条）
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;覆盖指令&lt;/strong&gt;：&lt;code&gt;jalr&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-jalr.png&#34;
	width=&#34;1512&#34;
	height=&#34;989&#34;
	srcset=&#34;https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-jalr_hu_3cbe9b5e12a1b934.png 480w, https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-jalr_hu_b011783b4ef6f5ba.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;JALR 数据通路&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;152&#34;
		data-flex-basis=&#34;366px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;文字描述&lt;/strong&gt;：跳转地址 = &lt;code&gt;rs1 + imm&lt;/code&gt;，由 &lt;code&gt;ALU&lt;/code&gt; 计算（&lt;code&gt;alu_src=1&lt;/code&gt;，&lt;code&gt;A=rdata1&lt;/code&gt;，&lt;code&gt;B=imm&lt;/code&gt;），结果清最低位（&lt;code&gt;[0]=0&lt;/code&gt;）后作为 &lt;code&gt;pc_next&lt;/code&gt;（&lt;code&gt;jump=1&lt;/code&gt;）。同时 &lt;code&gt;PC + 4&lt;/code&gt; 经 &lt;code&gt;WBMUX&lt;/code&gt;（&lt;code&gt;wb_sel=10&lt;/code&gt;）写回 &lt;code&gt;rd&lt;/code&gt;（&lt;code&gt;reg_write=1&lt;/code&gt;）作为返回地址。最常用形式 &lt;code&gt;jalr x0, 0(x1)&lt;/code&gt; 不保存返回地址（rd=x0）。不访存。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键控制信号&lt;/strong&gt;：&lt;code&gt;reg_write=1, alu_src=1, mem_read=0, mem_write=0, branch=0, jump=1, wb_sel=10, alu_a_sel=0, imm_sel=000&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;8-lui--载入高位立即数1-条&#34;&gt;8. LUI —— 载入高位立即数（1 条）
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;覆盖指令&lt;/strong&gt;：&lt;code&gt;lui&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-lui.png&#34;
	width=&#34;1564&#34;
	height=&#34;983&#34;
	srcset=&#34;https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-lui_hu_40843aa3d441a900.png 480w, https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-lui_hu_caa0c68dd9558727.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;LUI 数据通路&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;159&#34;
		data-flex-basis=&#34;381px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;U&lt;/code&gt; 型立即数（高 20 位，低 12 位清零）直接经 &lt;code&gt;WBMUX&lt;/code&gt;（&lt;code&gt;wb_sel=11&lt;/code&gt;，选立即数）写回 &lt;code&gt;RegFile.rd&lt;/code&gt;（&lt;code&gt;reg_write=1&lt;/code&gt;）。&lt;strong&gt;不经过 ALU 运算&lt;/strong&gt;，也不访存，不访存。&lt;code&gt;PC_next = PC + 4&lt;/code&gt;。画图时只需把 &lt;code&gt;ImmGen&lt;/code&gt; 输出接到 &lt;code&gt;WBMUX&lt;/code&gt; 的 &lt;code&gt;imm&lt;/code&gt; 输入端即可。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键控制信号&lt;/strong&gt;：&lt;code&gt;reg_write=1, alu_src=—, mem_read=0, mem_write=0, branch=0, jump=0, wb_sel=11, alu_a_sel=0, imm_sel=011&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;9-auipc--地址无关高位立即数1-条&#34;&gt;9. AUIPC —— 地址无关高位立即数（1 条）
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;覆盖指令&lt;/strong&gt;：&lt;code&gt;auipc&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-auipc.png&#34;
	width=&#34;1581&#34;
	height=&#34;1006&#34;
	srcset=&#34;https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-auipc_hu_974f61274ce10cd2.png 480w, https://blog.lumenth.me/p/rv32i-datapath-per-instruction/datapath-auipc_hu_43f0e430450d0aa2.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;AUIPC 数据通路&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;157&#34;
		data-flex-basis=&#34;377px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;文字描述&lt;/strong&gt;：&lt;code&gt;ALU&lt;/code&gt; 的 A 端由 &lt;code&gt;alu_a_sel=1&lt;/code&gt; 改为取 &lt;code&gt;PC&lt;/code&gt;，B 端由 &lt;code&gt;alu_src=1&lt;/code&gt; 取 &lt;code&gt;U&lt;/code&gt; 型立即数，执行 &lt;code&gt;ADD&lt;/code&gt; 得到 &lt;code&gt;PC + (imm &amp;lt;&amp;lt; 12)&lt;/code&gt;。结果经 &lt;code&gt;WBMUX&lt;/code&gt;（&lt;code&gt;wb_sel=00&lt;/code&gt;）写回 &lt;code&gt;RegFile.rd&lt;/code&gt;（&lt;code&gt;reg_write=1&lt;/code&gt;）。不访存，&lt;code&gt;PC_next = PC + 4&lt;/code&gt;。常用于与 &lt;code&gt;jal&lt;/code&gt; 配合构造任意 32 位跳转/PC 相对地址。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键控制信号&lt;/strong&gt;：&lt;code&gt;reg_write=1, alu_src=1, mem_read=0, mem_write=0, branch=0, jump=0, wb_sel=00, alu_a_sel=1, imm_sel=011&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;控制信号速查表9-类汇总供画图对照&#34;&gt;控制信号速查表（9 类汇总，供画图对照）
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;opcode&lt;/th&gt;
          &lt;th&gt;类型&lt;/th&gt;
          &lt;th&gt;reg_write&lt;/th&gt;
          &lt;th&gt;alu_src&lt;/th&gt;
          &lt;th&gt;mem_read&lt;/th&gt;
          &lt;th&gt;mem_write&lt;/th&gt;
          &lt;th&gt;branch&lt;/th&gt;
          &lt;th&gt;jump&lt;/th&gt;
          &lt;th&gt;wb_sel&lt;/th&gt;
          &lt;th&gt;alu_a_sel&lt;/th&gt;
          &lt;th&gt;imm_sel&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;0110011&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;R-type&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;00&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;0010011&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;I-type&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;00&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;000&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;0000011&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;LOAD&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;01&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;000&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;0100011&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;STORE&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;001&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;1100011&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;BRANCH&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;010&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;1101111&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;JAL&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;100&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;1100111&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;JALR&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;000&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;0110111&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;LUI&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;11&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;011&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;0010111&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;AUIPC&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;00&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;011&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;该表与&lt;a class=&#34;link&#34; href=&#34;../RV32I-Single-Cycle/&#34; &gt;单周期 RV32I CPU&lt;/a&gt;中 Control 模块的译码表完全一致，可作为画图时每个 MUX 选择位的标注依据。&lt;/p&gt;&lt;/blockquote&gt;
</description>
        </item>
        
    </channel>
</rss>
