第一章:CPU 导读 ------ 揭秘计算机的"大脑"
写在前面: 这一章虽然是导读,但却藏着考试必考的"送分题"。根据我们的《期末题型》文档,CPU 的定义功能 和执行指令的 5 个阶段是重点中的重点!
1. 什么是 CPU?(定义与功能)
CPU (Central Processing Unit) ,即中央处理器。如果把计算机比作一个人,那 CPU 就是他的大脑。
CPU 的核心功能:
-
执行指令:听从程序的"指挥",把代码变成动作。
-
处理数据:算术加减法、逻辑比较等。
-
控制协调:指挥内存、硬盘、显卡等设备和谐工作。
考试陷阱: CPU 不负责 永久存储海量信息(那是硬盘的事),也不直接负责显示图像(那是 GPU 的事)。
2. CPU 的组成结构(三驾马车)
CPU 内部主要由三大部分协同工作:
-
运算器(ALU):负责计算。
-
控制器(CU):负责"发号施令",解析指令并产生控制信号。
-
寄存器(Register):负责临时存放数据,速度极快。
3. 芯片设计理念的演进
这是简答题的一个潜在考点:
-
早期:自底向上 (Bottom-Up)。像手搭积木,先画晶体管,再拼电路。
-
现代:自顶向下 (Top-Down) 。先定义架构和功能,用 Verilog (HDL) 编写代码,最后由 EDA 工具自动综合成电路。
-
EDA 工具:不仅仅是画图软件,它贯穿设计、验证、仿真到制造的全过程。
4. ⭐⭐⭐ 重中之重:指令执行的 5 个阶段
顺序不能乱,功能不能混!
-
取指 (IF - Instruction Fetch)
-
操作 :根据 PC (程序计数器) 的值从存储器中读出指令。
-
关键部件:PC、指令存储器。
-
-
译码 (ID - Instruction Decode)
-
操作 :解析指令码,确定指令类型,并从 Register File (寄存器堆) 读出操作数。
-
关键部件:译码器、寄存器堆。
-
-
执行 (EX - Execute)
-
操作:进行算术或逻辑运算,或者计算访存地址。
-
关键部件 :ALU (算术逻辑单元)。
-
-
访存 (MEM - Memory Access)
-
操作:如果是 Load 指令则读内存,Store 指令则写内存。
-
关键部件:数据存储器。
-
-
写回 (WB - Write Back)
-
操作:将运算结果或读出的数据写回到目标寄存器。
-
关键部件:寄存器堆。
-
5. 期末冲刺模拟题(本章强化版)
一、 选择题(15分题型模拟)
-
CPU 中负责解析指令含义的部件是?
-
A. ALU
-
B. 控制器 (CU)
-
C. 寄存器
-
D. 存储器
-
答案:B
-
-
在 CPU 的 5 个阶段中,计算"A + B"这个加法动作发生在哪个阶段?
-
A. IF
-
B. ID
-
C. EX
-
D. WB
-
答案:C
-
-
下列关于 EDA 工具的说法,错误的是?
-
A. EDA 是电子设计自动化
-
B. EDA 可以显著提高设计效率
-
C. EDA 只用于芯片的物理版图绘制
-
D. EDA 贯穿芯片研发和生产周期
-
答案:C
-
二、 判断题(10分题型模拟)
-
CPU 的主要功能包括永久存储大量信息。( ) ------ 错
-
现代芯片设计通常采用"自底向上"的设计方法。( ) ------ 错
-
指令执行的顺序一定是先译码再取指。( ) ------ 错
-
所有的指令在执行时都必须经过"访存"阶段去读写数据存储器。( ) ------ 错 (注:如普通的 add 指令不访问数据存储器,但仍占用该时钟周期或跳过)
三、 简答题(40分题型模拟)
问:请详细阐述 CPU 指令执行的五个阶段及其逻辑顺序。 答:
-
取指 (IF):从内存获取指令。
-
译码 (ID):翻译指令并读寄存器。
-
执行 (EX):利用 ALU 进行运算。
-
访存 (MEM):对数据存储器进行读写。
-
写回 (WB) :将结果写回寄存器。 (逻辑顺序:IF -> ID -> EX -> MEM -> WB)
这一章你拿下了!记住,ID 阶段读寄存器,WB 阶段写寄存器,这个细节在后面讲"数据相关"时非常重要!
第二章:数字电路与 Verilog ------ 筑基行动
老师提醒: 这一章不仅考理论(选择、判断),更是后面代码填空题的基础。如果你分不清"普通编码"和"优先编码",或者搞不懂"补码加减法",后面的 CPU 设计实验会非常痛苦。请务必拿下!
1. 基础逻辑门与常用电路
在 Verilog 中,我们主要使用连续赋值语句 (assign) 来描述这些电路。
-
基础门:与(&)、或(|)、非(~)、异或(^)。
-
译码器 (Decoder):把二进制码翻译成独热码(One-hot)。
-
多路选择器 (MUX) ※※※:
-
功能:从多个输入信号中,根据选择信号(Select)选出一个输出。
-
Verilog 实现 :最常用的是三目运算符
assign out = sel ? a : b;。 -
期末考点:在 CPU 里,MUX 随处可见。比如:ALU 的第二个操作数是来自寄存器还是立即数?这就需要一个 MUX。
-
2. 编码器 (Encoder) ※※※
编码器是期末考的高频考点,PPT 中提到了两种核心编码逻辑,你必须能说出它们的区别。
(1) 普通编码 (Logic Encoding)
-
特点 :假设输入中只有一个信号有效(独热码)。
-
逻辑:如果有多个输入同时为 1,电路会出错或输出无意义。
(2) 优先编码 (Priority Encoding)
-
原理 :当多个输入同时有效时,只对优先级最高的那一个进行编码。
-
实验应用:在异常处理或中断嵌套时,如果有多个中断同时到达,CPU 会根据优先编码器先处理等级最高的。
3. 补码表示法与 ALU 运算
这是综合大题 和计算题的常客。
(1) 为什么用补码?
-
计算机为了让"减法"变成"加法",引入了补码。
-
公式 :
[A - B]补 = [A]补 + [-B]补。 -
求补码秘籍 :正数不变;负数取反加 1(符号位不变这种说法在纯位运算里不严谨,统一记作全部位取反后末位加1)。
(2) ALU 中的加减法实现
PPT 中给出了一个经典设计:
-
减法转加法 :
A - B实际上是执行A + (~B + 1)。 -
Verilog 代码精髓:
assign b_input = (op_sub) ? ~b : b; // 如果是减法,把 B 取反 assign cin = (op_sub) ? 1'b1 : 1'b0; // 如果是减法,进位输入加 1 assign {cout, result} = a + b_input + cin; -
溢出判断:A 和 B 符号相同,但结果符号不同,则溢出。
4. Verilog 核心语法补充(实验必修)
-
阻塞赋值 (
=):组合逻辑使用,像 C 语言一样顺序执行。 -
非阻塞赋值 (
<=):时序逻辑(D 触发器)使用,边沿触发,并行更新。 -
归约运算符 :
&a(所有位相与)、|a(所有位相或)。在译码电路里判断"是否有任何一个指令有效"时非常有用。
5. 期末冲刺模拟题(本章强化版)
一、 选择题
-
下列哪个 Verilog 运算符表示"按位异或"?
-
A. &
-
B. |
-
C. ^
-
D. ~
-
答案:C
-
-
在 8 位补码运算中,已知 [A]补 = 1111_1110,则 A 的真值是?
-
A. -1
-
B. -2
-
C. 254
-
D. -126
-
答案:B(解析:取反加1得0000_0010,即2,带上负号)
-
-
优先编码器的主要作用是?
-
A. 节省电路面积
-
B. 解决多个请求同时到达时的冲突
-
C. 将二进制转为十进制
-
D. 提高运算速度
-
答案:B
-
二、 判断题
-
在 Verilog 中,
assign语句描述的是时序逻辑。( ) ------ 错(是组合逻辑) -
补码减法
A - B可以通过A + (~B + 1)来实现。( ) ------ 对 -
多路选择器(MUX)的本质是一个"多对一"的数据开关。( ) ------ 对
-
归约操作符
|instr_bus如果结果为 1,表示instr_bus中至少有一位是 1。( ) ------ 对
三、 代码填空(模拟实验题)
题目:完善 ALU 中的加减法逻辑控制信号。
// 假设 op_add 为加法使能,op_sub 为减法使能
wire [31:0] adder_a;
wire [31:0] adder_b;
wire adder_cin;
wire [31:0] adder_result;
assign adder_a = src1;
assign adder_b = (op_sub) ? ( ① ) : src2; // 填空 ①
assign adder_cin = ( ② ) ? 1'b1 : 1'b0; // 填空 ②
assign adder_result = adder_a + adder_b + adder_cin;
- 答案: ①
~src2②op_sub
第二章的难点在于逻辑的灵活运用 。你要理解为什么 st 指令的译码需要用到逻辑门组合,为什么 ALU 结果输出要用一长串的 |(归约/选择逻辑)。
第三章:单周期 CPU 设计 ------ 手撕代码实战
老师敲黑板: "单周期"意味着一条指令在一个时钟周期内必须跑完。期末考试的代码填空题几乎全出自这里。我们要重点复习:指令译码逻辑 、控制信号生成 以及指令间的异同点。
1. 核心指令译码(代码题必考)
在单周期 CPU 中,我们首先要根据指令的机器码(Opcode)判断它是哪条指令。
// PPT 重点:译码逻辑 (基于 LoongArch 架构)
assign inst_add_w = op_31_26_d[6'h00] & op_25_22_d[4'h0] & op_21_20_d[2'h1] & op_19_15_d[5'h00];
assign inst_addi_w = op_31_26_d[6'h00] & op_25_22_d[4'ha];
assign inst_ld_w = op_31_26_d[6'h0a] & op_25_22_d[4'h2];
assign inst_st_w = op_31_26_d[6'h0a] & op_25_22_d[4'h6]; // 注意 st 和 ld 的次操作码区别
assign inst_bne = op_31_26_d[6'h17];
考点: 考试可能会空出
inst_st_w的后缀6'h0a和4'h6。记住:ld.w和st.w的主操作码相同,但次操作码不同。
2. 控制信号的秘密(10分大题关键)⭐⭐⭐
这是单周期 CPU 的灵魂。你需要理解每个信号为什么这么写:
| 信号名称 | 含义 | 哪些指令为 1 | 为什么要为 1 |
|---|---|---|---|
| src2_is_imm | 第二操作数是否是立即数 | addi.w, ld.w, st.w |
因为它们都需要用到 12 位偏移量/立即数。 |
| res_from_mem | 结果是否来自内存 | ld.w |
只有 load 指令是从内存读数写回寄存器。 |
| gr_we | 寄存器堆写使能 | add.w, addi.w, ld.w |
这三条指令最后都要把结果存回寄存器。 |
| mem_we | 内存写使能 | st.w |
只有 store 指令需要往内存里写东西。 |
| src_reg_is_rd | 第二读寄存器是否为 rd | st.w, bne |
st 要把 rd 的值存进内存;bne 要比较 rj 和 rd。 |
3. 指令对比:ld.w vs st.w (综合题常客)
共同点:
-
都要计算地址:
Address = Register[rj] + SignExtend(imm12)。 -
都要通过 ALU 算加法(计算地址)。
不同点(期末简答题/综合题):
-
数据流向 :
ld.w是 内存 -> 寄存器 ;st.w是 寄存器 -> 内存。 -
寄存器写使能 :
ld.w的gr_we为 1;st.w的gr_we为 0。 -
内存写使能 :
ld.w的mem_we为 0;st.w的mem_we为 1。
4. 指令对比:add.w vs addi.w
-
add.w :两个操作数都来自寄存器 (
rj和rk)。 -
addi.w :第二个操作数来自指令中的立即数。
-
考点 :
rf_raddr2的选择逻辑。如果是add.w,读寄存器地址是rk;如果是st.w/bne,读寄存器地址是rd。
5. 期末冲刺模拟题(本章强化版)
一、 选择题
-
在单周期 CPU 设计中,
gr_we信号在执行下列哪条指令时为 0?-
A. add.w
-
B. addi.w
-
C. ld.w
-
D. st.w
-
答案:D(解析:Store 指令写内存,不写寄存器)
-
-
res_from_mem信号主要用于控制哪个部件的输入?-
A. ALU
-
B. 寄存器堆写回数据选择的 MUX
-
C. PC 计算器
-
D. 指令存储器
-
答案:B
-
二、 判断题
-
单周期 CPU 的时钟周期长度由执行时间最短的指令决定。( ) ------ 错 (是由执行时间最长的指令决定)
-
ld.w指令在执行阶段(EX)利用 ALU 来计算访存的有效地址。( ) ------ 对 -
src2_is_imm信号为 1 时,ALU 的第二个输入端选通的是寄存器读出的数据。( ) ------ 错(选通的是立即数)
三、 代码填空(模拟 20 分大题)
请完善以下单周期 CPU 的控制逻辑:
assign src2_is_imm = ( ① ) | inst_ld_w | inst_st_w;
assign res_from_mem = ( ② );
assign gr_we = inst_add_w | ( ③ ) | inst_addi_w;
assign mem_we = ( ④ );
assign src_reg_is_rd = inst_bne | inst_st_w;
// 写回寄存器的数据选择
assign rf_wdata = res_from_mem ? ( ⑤ ) : alu_result;
参考答案: ① inst_addi_w ② inst_ld_w ③ inst_ld_w ④ inst_st_w ⑤ data_sram_rdata (从数据内存读出的数据)
这一章是提分的关键!请大家务必在草稿纸上画一下 ld.w 和 st.w 的数据流图。弄清楚谁在写寄存器,谁在写内存,考试时代码填空就是送分题。
第四章:流水线 CPU ------ 速度的飞跃与冲突的烦恼
老师敲黑板: 如果单周期 CPU 是"一个人从头到尾洗完一件衣服再洗下一件",那流水线就是"洗衣、脱水、烘干、折叠、收纳"五个人分工合作。 期末重点: 流水线寄存器、数据相关(RAW)、阻塞(Stall)与前递(Forwarding)。
1. 流水线的五个阶段(复习)
流水线将指令执行切成 5 个等分,每个阶段占用一个时钟周期:
-
IF (取指):取指令。
-
ID (译码):解指令、读寄存器。
-
EX (执行):算术逻辑运算。
-
MEM (访存):读写内存。
-
WB (写回):写回寄存器。
理想状态: 每个时钟周期都能"流出"一条完成的指令。
2. 流水线寄存器(Pipeline Registers)
为了让不同指令在不同阶段互不干扰,阶段之间必须有"墙"挡着,这就是流水线寄存器。
-
作用:暂存上一阶段产生的控制信号和数据,并在下一个时钟上升沿传给下一阶段。
-
命名 :通常叫
IF_ID_reg(存放 IF 给 ID 的数据),ID_EX_reg,EX_MEM_reg,MEM_WB_reg。
3. ⭐⭐⭐ 数据相关 (Data Hazard)
这是本章最难、最常考的知识点,特别是 RAW (Read After Write) 相关。
(1) 什么是 RAW 相关?
前一条指令要写 寄存器(比如 add.w $t1, $t2, $t3),后一条指令立刻要读 这个寄存器(比如 sub.w $t4, $t1, $t5)。 由于前指令在 WB 阶段才写回,而后指令在 ID 阶段就要读,导致后指令读到了旧数据!
(2) 解决办法 A:阻塞 (Stall)
-
原理:强制让后一条指令在 ID 阶段"等一等",直到前指令写回。
-
代价:会产生空泡(Bubble),降低性能。
(3) 解决办法 B:数据前递 (Forwarding) ※※※
-
原理:既然前指令在 EX 阶段已经算出了结果,没必要等它写回寄存器,直接把这个结果从 EX 或 MEM 阶段"拉一根线"传给后指令的 ALU 输入端。
-
考点 :前递可以解决
add后面接add的冲突,但无法完全解决ld.w后面接add的冲突(需要阻塞一个周期,这叫 Load-use Hazard)。
4. 可阻塞的流水线设计逻辑
在 Verilog 代码中,控制流水线流动的核心逻辑(PPT 重点):
-
allowin:本级是否允许新数据进入。 -
ready_go:本级数据是否处理完毕,准备好传给下一级。 -
to_next_valid:本级是否有有效数据要传给下一级。
公式: assign allowin = !valid || (ready_go && next_allowin);
5. 期末冲刺模拟题(本章强化版)
一、 选择题
-
在 5 级流水线中,解决 Load-use 冲突最有效且必要的手段是?
-
A. 增加 ALU 数量
-
B. 软件插入 nop 指令或硬件阻塞一个周期
-
C. 使用更快的内存
-
D. 增加寄存器数量
-
答案:B(解析:Load 的结果在 MEM 阶段才出来,EX 阶段拿不到,必须等)
-
-
流水线寄存器的主要作用是?
-
A. 加快运算速度
-
B. 存储指令执行结果
-
C. 隔离不同阶段的信号,实现指令并行
-
D. 替代内存
-
答案:C
-
二、 判断题
-
流水线由于引入了寄存器延迟,单条指令的执行时间(延时)其实变长了。( ) ------ 对(每级都有寄存器建立时间)
-
数据前递(Forwarding)可以解决所有的 RAW 冲突,无需阻塞。( ) ------ 错(Load-use 必须阻塞)
-
在流水线 CPU 中,PC 指针每个时钟周期都会更新。( ) ------ 对(在没有阻塞的情况下)
三、 综合题(模拟 15 分大题)
题目:分析以下代码在 5 级流水线(无前递,有阻塞)中的执行过程:
add.w $t1, $t2, $t3 (1)
sub.w $t4, $t1, $t5 (2)
问:
-
指令 (2) 与指令 (1) 存在什么相关?
-
如果没有前递,指令 (2) 必须在 ID 阶段等待多久?
-
如果引入了前递技术,指令 (2) 是否还需要等待?
参考答案:
-
存在 RAW (Read After Write) 数据相关(关于 t1 寄存器)。
-
需要等待 2 个时钟周期(直到指令 1 到达 WB 阶段,指令 2 才能在 ID 阶段读到正确值,或者等指令 1 彻底写回)。
-
如果有前递,不需要等待。指令 1 在 EX 阶段的结果可以直接前递给指令 2 的 EX 阶段输入。
流水线的核心在于"抢时间"。考试时如果让你画流水线时空图,记得 Load 指令的结果在 MEM 之后才有效,这是最容易画错的地方!
第六章:异常与中断 ------ CPU 的"紧急避险"
老师敲黑板: 如果 CPU 是一辆高速行驶的赛车,异常就是"车子内部爆胎",中断就是"路边有人挥手拦车"。 期末考点: 异常与中断的区别、同步与异步的判定、特权等级(PLV)、以及常见的异常代号。
1. 异常 vs 中断(必考对比)
这是简答题和选择题的常客,请务必背下这张表:
| 特性 | 异常 (Exception) | 中断 (Interrupt) |
|---|---|---|
| 来源 | 内部信号(指令执行过程中触发) | 外部信号(键盘、定时器、网卡) |
| 同步性 | 同步(由当前指令引起,位置可预测) | 异步(随机发生,与当前指令无关) |
| 可屏蔽性 | 不可屏蔽(错了就是错了,必须处理) | 可屏蔽(可以设置"别来烦我") |
| 举例 | 整数除零、非法指令、地址对齐错 | 键盘按下、鼠标移动、定时器到期 |
2. 特权等级 (Privilege Level)
龙架构(LoongArch)中有两个核心等级:
-
PLV0 (内核态/核心态):权限最高。可以执行所有指令,访问所有内存,修改控制状态寄存器(CSR)。
-
PLV3 (用户态):权限受限。普通程序运行的地方。不能直接操作硬件。
考点: 当异常发生时,CPU 会自动从 PLV3 切换到 PLV0。
3. 控制状态寄存器 (CSR)
CPU 专门准备了一组"小本子"来记录异常信息:
-
CSR.CRMD:当前模式寄存器(存当前特权等级、中断使能)。
-
CSR.PRMD:例外前模式寄存器(存异常发生前的特权等级,用于处理完后"穿回去")。
-
CSR.ESTAT:例外状态寄存器(存异常的类型/代号)。
-
CSR.ERA:例外返回地址(存异常发生时那条指令的地址,处理完后跳回来)。
-
CSR.EENTRY:例外入口地址(处理程序在哪里?看这个)。
4. 常见的异常代号 (Exception Code)
选择题可能会考以下代号的含义:
-
INT (0x0):外部硬件中断。
-
SYS (0x0B) :系统调用(执行
syscall指令,用于用户态请求内核服务)。 -
ADE (0x08):地址对齐错误(比如读 4 字节数据但地址没对齐)。
-
RI (0x0D):非法指令(CPU 读到了不认识的机器码)。
5. 期末冲刺模拟题(本章强化版)
一、 选择题
-
下列事件中,属于"异步"事件的是?
-
A. 指令执行时发现除数为 0
-
B. 执行了未定义指令
-
C. 用户按下了键盘
-
D. 内存地址越界访问
-
答案:C(解析:只有外部硬件触发的中断是异步的)
-
-
在异常处理过程中,记录"处理程序入口地址"的寄存器是?
-
A. CSR.ERA
-
B. CSR.EENTRY
-
C. CSR.ESTAT
-
D. CSR.PRMD
-
答案:B
-
-
当 CPU 从异常处理程序返回时,会从哪个模式切换回哪个模式?
-
A. PLV3 -> PLV0
-
B. PLV0 -> PLV3
-
C. PLV3 -> PLV3
-
D. 不切换
-
答案:B(解析:异常处理完是从内核态回到用户态)
-
二、 判断题
-
所有的异常都可以通过软件设置来屏蔽。( ) ------ 错(异常通常不可屏蔽)
-
syscall指令触发的是一种特殊的同步异常。( ) ------ 对 -
异常发生时,CPU 会将当前的 PC 保存到 CSR.ERA 中,以便后续返回执行。( ) ------ 对
-
只有在 PLV3 模式下才能访问控制状态寄存器 (CSR)。( ) ------ 错(只有 PLV0 才有权限)
三、 简答题(高分预测)
问:请简述 CPU 处理异常(Exception)的主要流程。 答:
-
识别与记录 :CPU 发现异常,在
CSR.ESTAT记录异常代号,在CSR.ERA记录返回地址。 -
状态保存 :将当前特权等级(PLV)等信息保存到
CSR.PRMD中。 -
跳转处理 :将 PLV 设置为 0,并强行跳转到
CSR.EENTRY指向的地址开始执行处理程序。 -
执行程序:运行内核代码解决问题。
-
恢复返回 :执行
ertn指令,根据CSR.PRMD恢复状态,并跳回CSR.ERA继续执行原程序。
这一章的关键是理解流程 。记住 CSR.ERA 存的是"回去的地址",CSR.EENTRY 存的是"处理程序的地址",考试千万别写反了!
第七章:AXI 总线 ------ 芯片内部的"高速公路"
老师敲黑板: 之前的 CPU 都是在自家院子里折腾。AXI 总线则是为了让 CPU 能跟外部的内存、外设进行标准化通信。 期末考点: 五个通道的名称与功能、双向握手协议(Valid/Ready)、读写事务的流程。
1. 为什么需要 AXI 总线?
在复杂的芯片系统中,模块之间如果乱拉线,电路会乱成一团。
-
标准化:大家都遵守同样的协议,方便模块复用。
-
高性能 :支持读写并行 、突发传输(Burst)。
-
握手机制:确保数据传输"你情我愿",防止数据丢失。
2. ⭐⭐⭐ AXI 的五个独立通道
这是本章最核心的知识点,选择题和简答题必考:
| 通道名称 | 英文名 | 功能描述 |
|---|---|---|
| 读地址通道 | AR (Read Address) | 主机告诉从机:我要读哪个地址的数据? |
| 读数据通道 | R (Read Data) | 从机把数据传回给主机(包含读响应)。 |
| 写地址通道 | AW (Write Address) | 主机告诉从机:我要往哪个地址写数据? |
| 写数据通道 | W (Write Data) | 主机把要写的数据发给从机。 |
| 写响应通道 | B (Write Response) | 从机告诉主机:刚才那笔数据我写成功了。 |
注意: 为什么写操作有 3 个通道而读只有 2 个?因为写操作需要一个**反馈(B通道)**来确认数据真的存进去了,而读操作直接看读回来的数据就知道成功没。
3. 握手协议:VALID 与 READY ※※※
AXI 的所有通道都遵循相同的双向握手逻辑:
-
VALID (有效信号):发送方(Master/Slave)说:"我把东西准备好了。"
-
READY (准备好信号):接收方说:"我有空了,可以收了。"
-
传输发生 :当且仅当 VALID 和 READY 同时为高(上升沿)时,数据成功传输。
考点判断:
VALID 信号一旦拉高,在 READY 没来之前不能拉低。(要有信用)
READY 信号可以先于 VALID 拉高,也可以后拉高。
4. 读写事务时序
-
读事务:
-
AR 通道握手(发地址)。
-
R 通道握手(回数据)。
-
-
写事务:
-
AW 通道握手(发地址)。
-
W 通道握手(发数据)。
-
B 通道握手(回确认信号)。
-
5. 期末冲刺模拟题(本章强化版)
一、 选择题
-
AXI 总线中,负责告知主机"写操作已完成"的通道是?
-
A. AW 通道
-
B. W 通道
-
C. B 通道
-
D. R 通道
-
答案:C
-
-
在 AXI 握手协议中,传输发生的必要条件是?
-
A. 只有 VALID 为高
-
B. 只有 READY 为高
-
C. VALID 和 READY 均为高
-
D. 时钟下降沿到来
-
答案:C
-
-
下列关于 AXI 通道的说法,错误的是?
-
A. 读写通道是完全独立的
-
B. 每个通道都有自己的握手信号
-
C. AXI 只有 4 个通道
-
D. 支持突发传输
-
答案:C(解析:有 5 个通道)
-
二、 判断题
-
在写事务中,写数据和写地址必须在同一个时钟周期发出。( ) ------ 错(它们是独立通道,可以异步发出)
-
VALID 信号可以依赖 READY 信号来触发。( ) ------ 错(协议建议 VALID 不要等待 READY,防止死锁)
-
AXI 总线支持全双工通信,即读和写可以同时进行。( ) ------ 对
三、 简答题(综合题预测)
问:请列举 AXI 总线的五个通道,并简述一次"读事务"的完整过程。 答:
-
五个通道:写地址通道(AW)、写数据通道(W)、写响应通道(B)、读地址通道(AR)、读数据通道(R)。
-
读事务过程:
-
地址阶段 :主机通过 AR 通道发送目标地址,并拉高
ARVALID;当从机拉高ARREADY时,地址传输完成。 -
数据阶段 :从机准备好数据后,通过 R 通道发送数据并拉高
RVALID;当主机拉高RREADY时,数据传输完成。
-
AXI 是大厂(如 ARM)的标准,学好这一章对你以后找芯片设计的工作非常有帮助。考试时重点盯着 VALID/READY 的握手波形图看!