计算机原理与嵌入式系统笔记:第十四篇
试题为回忆版,可能有疏漏/错误
选择:
绪论 嵌入式系统设计流程
前变址
立即数判断
简答题:
直接映射和全相连的概念、二者优缺点
补码计算、CPSR位判断
AMBA总线
分析题:
MIPS数据通路、流水线寄存器位宽、信号含义
EDF调度表
编程题:
While-Do结构的FIR滤波器/循环书写
总体是不算太难的。考场里最快交卷的时间是开考后一个半小时。
概念考察的不少,需要好好背一背。主要是理解。
信号数量、位宽啥的不用背,图上一般都会有,含义其实也能通过看图上面的MUX来判断。
计算机原理与嵌入式系统笔记:第十三篇
多进程与多速率系统
任务与进程
任务(task) 是一个密切相连的操作组合的功能描述。
任务也可定义为若干进程或线程的组成。
进程(process) 是一个程序的单次执行。
两次运行相同的程序,可以创建两个不同进程
每个进程拥有自己的状态:
寄存器状态
存储器状态
操作系统管理进程
为什么需要多进程?多任务本身即是多进程,多进程有助于在时间复杂系统中应用。
多速率系统
多速率(multirate) 的嵌入式计算系统很常见,程序设计必须满足多种速率对计算的时间要求。
任务之间可以是同步或不同步
同步的任务可以以不同的速率发生
根据任务的实际计算需求,进程运行在不同的速率
进程的时间约束
进程的时间约束会影响可用的调度策略,进程有两个重要的约束:
释放时间(release time):也叫起始时间(initiation time),进程处于准备执行状态的时刻,此时未取得CPU控制,也没有开始运行。
截止时限(deadline):指明计算何时必须结束。
非周期性进程由一个事件触发;周期性进程在每个周期都执行,在周期开始时初始化。
进程的速率约束
进程的速率约束指 ...
计算机原理与嵌入式系统笔记:第十二篇
程序组件与程序模型
嵌入式软件常用的三个组件结构:
状态机(State machine)
循环缓冲区(Circular buffer)
队列(Queue)
状态机适合于交互式系统,循环缓冲区和队列应用于数字信号处理系统。
状态机
有限状态机是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型,分为两种:
Moore机:输出只由当前状态确定
Mealy机:输出依赖于当前状态和输入
循环缓冲区
流数据通常用于信号处理领域的程序设计中,数据定期传送,新数据按规律到达,且每个数据生命周期有限,需要程序立即处理。循环缓冲区是便于程序高效处理流数据的一种数据结构。数据窗口尺寸不变,只是随时间滑动。
索引指向循环缓冲区的下一个被替换的数据位置(input)和当前使用的数据位置(use)。
#define CMAX 6 /* filter order */int circ[CMAX]; /* circular buffer */int pos; /* position of current sample */void circ_update(int xnew)& ...
计算机原理与嵌入式系统笔记:第十一篇
CPU总线
计算系统包括微处理器(CPU)、输入输出设备(I/O Devices)和存储器。
总线(bus) 是系统组件之间的公共连接,是CPU与存储器和设备进行通信的机制,定义它们之间通信的协议。
协议(protocol) 定义了设备之间如何通信。
四周期握手协议
设备1升高查询信号的输出电平,告诉设备2准备监听数据。
当设备2准备好接收数据时,它使应答信号为高电平。这时设备1和设备2已准备好发送或接收数据。
一旦数据传送完毕,设备2使应答信号为低电平,表示已经接收完数据。
检测到应答信号变低,设备1降低其查询信号的输出电平
典型总线结构
总线的基本操作是读和写,典型的总线结构包括以下组件:
Clock:时钟,用于总线各组件之间的同步。
R/W:当总线读时,R/W为1;当总线写时,R/W为0。
Address:是一个a位信号束(bundle),传输访问的地址。
Data:是一个n位信号束,用于传输CPU发送或者接收的数据。
Data ready:数据就绪,表示数据信号束上的值有效。
传输由CPU控制,R/W和地址是单向信号,CPU决定地址和方向。
总线操作的时序图与顺序图
...
计算机原理与嵌入式系统笔记:第十篇
MIPS流水线结构
必考的牢弟
流水线组成与加速比估算
MIPS的流水线由5级组成,每级完成指令执行的一个步骤:
IF:从存储器中取指令
ID:指令解码和读寄存器
EX:指令执行操作或地址计算
MEM:存取存储器操作数
WB:将结果写回寄存器
一般假设寄存器堆的读或写为100ps,其他操作为200ps。则:
lw指令既要读又要写寄存器堆,并且要访问数据存储器,因此耗时800ps;
sw指令不需要写入寄存器堆,因此耗时700ps;
R-type指令不需要访问数据存储器,因此耗时600ps;
branch指令不需要访问数据存储器,也不需要写入寄存器堆,因此耗时500ps。
则执行3条lw指令的加速比应该是1.71,执行3条R-type指令的加速比应该是1.28。
有关流水线的更多内容请参阅:ARM第四话:流水线!
流水线各级延时不均衡会降低加速比,进/出流水线的延时也会降低加速比。
面向流水线的指令集设计
设计适应流水线的MIPS指令集,应当遵循“4+1”原则:
所有的指令长度都相同(32-bit)
简化了流水线第一级取指和第二级译码
而x86指令的长度:1~15 byte ...
计算机原理与嵌入式系统笔记:第九篇
MIPS处理器
MIPS是RISC处理器的一种,全程为无内部互锁流水级的微处理器(Microprocessor without interlocked pipelined stages),其机制是尽量利用软件办法避免流水线中的数据相关问题。MIPS处理器广泛用于路由器上,常见的路由器使用的处理器有发哥联发科MT7621等。
时钟周期
MIPS采用两相非交叠时钟,流水线级是两层的锁存器。
指令
MIPS有三类指令:
存储器访问指令(Load/Store指令):
取字(lw),存字(sw)
算术/逻辑指令(R-type指令):
加法(add),减法(sub),与(and),或(or),小于则置位(slt)
分支指令(Branch指令):
相等则跳转(beq),无条件跳转(j)
记好开头6位对应的数字就知道这是什么指令了!最简单的办法!
0:R-Type
4:Branch
35:lw
43:sw
寄存器中的Rs/Rt/Rd到底是什么意思?
Rs表示源寄存器Source Register,Rt代表作为中间缓存的目标寄存器Target Register,Rd表示目的 ...
计算机原理与嵌入式系统笔记:第八篇
输入/输出设备
输入输出设备(I/O Devices)通常有一些模拟元件或非电子元件(比如磁盘驱动器),但与CPU的接口通常是数字逻辑——一组寄存器。
对于IO编程支持,有两种办法:IO指令和内存映射IO:
I/O指令为I/O设备提供了单独的地址空间。
内存映射I/O是最普遍的方法,即使是提供I/O指令的CPU也不排除使用内存映射I/O。
内存映射I/O是为每个I/O设备的寄存器提供一个地址。
程序使用普通的CPU读写内存命令来与设备通信。
如: 在C语言中定义和使用一个变量时,编译器隐藏了变量地址,可以使用指针来操纵I/O设备的地址。
// 读取任意存储单元的函数peekint peek(char *location) { return *location; }#define DEV1 0x1000dev_status = peek(DEV1); /*读取设备寄存器*/// 写入任意存储单元的函数pokevoid poke(char *location, char newval) { (*location) = newval; ...
计算机原理与嵌入式系统笔记:第七篇
存储管理单元
存储管理单元(Memory Management Unit, MMU)在CPU和物理主存之间进行地址转换,将地址从逻辑空间映射到物理空间,转换过程也称为内存映射。
DSP用于计算密集型任务,通常不使用MMU。
物理地址(physical address):用于内存芯片级的单元寻址,与实际的RAM单元对应。
逻辑地址(logical address):程序的抽象地址空间,不与实际的RAM单元对应
地址转换方法
两种基本的地址转换方法:
分段:支持较大的、大小可以不等的内存区域。
起始地址+大小
分页:支持较小的、大小相等的内存区域。
段页式寻址模式:将每个段分成页并且其地址转换分成两步的方法来建立。
段地址转换过程
分段寄存器:记录当前的活动段,寄存器存储当前活动段的基地址。
逻辑地址:来自于指令,作为相对段基址的偏移量。
物理地址:将段基址和偏移量相加
范围检查:检查物理地址是否超过段的上限
需要在分段寄存器中增加一项存储内容,记录段长。
用段长和偏移量进行比较,来判断物理地址的合法性
页地址转换过程
逻辑地址分为两部分:页号和页内 ...
计算机原理与嵌入式系统笔记:第六篇
最烦的一节,必考。
高速缓存
局部性原理
局部性原理是存储系统层级构成的基础。
时间局部性:当前被访问的数据有可能很快再次被访问。就比如刚拿了一本书到书桌上查阅,可能会很快地再次查阅它。
空间局部性:当前被访问数据地址相近的数据有可能很快被访问。就比如找到一本关于ARM的书籍时,也许紧挨着它的另一本书籍也是需要的,因为图书馆会将相同主题的书放在同一书架上。
程序为何会具有局部性?
程序中的循环结构,呈现出时间局部性
程序中的顺序执行指令,呈现出空间局部性
访问时间与缓存未命中
强制性未命中(compulsory miss):
也称为冷未命中(cold miss),
发生在存储单元第一次被访问时。
容量未命中(capacity miss):
由于工作集过大造成的缓存未命中。
冲突未命中(conflict miss):
由于两个地址映射到高速缓存的同一个单元,缓存存入时互相挤占对方导致的未命中。
平均内存访问时间计算公式
一级缓存:
tav=htcache+(1−h)tmaint_{av}=ht_{cache}+(1-h)t_{main}
tav=htc ...
计算机原理与嵌入式系统笔记:第五篇
必考的
流水线
流水线无法减少每个任务的延迟。
流水线中多个任务同时执行,可以提高整个工作的吞吐率。
流水线的速率受限于速度最慢的一级。木桶效应,小子
加速比
流水线的加速比:采用流水线方式执行之后,吞吐量提高的比例。
流水线的最大加速比:最大加速比=流水线级数(最好情况下)
流水线各级延时不均衡会降低加速比。
进/出流水线的延时降低了加速比。任务数足够多时,可以忽略进/出流水线延时对加速比的影响。
ARM7的三级流水线
ARM使用三级流水线:
取指:从存储器中获取指令代码到指令流水线。
译码:指令译码,通过控制信号操作数据通路准备执行。
执行:指令获得数据通路“使用权”:读寄存器, 移位操作, ALU运算和写回。
每一级的结果存储在寄存器中。
练习1
[{"url":"C:/Users/Zyx/AppData/Roaming/Typora/typora-user-images/image-20240612162220732.png","alt":""},{"url":"https://bp.esing.dev/https://raw.gi ...