计算机原理与嵌入式系统笔记:第十篇
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设备的地址。
123456789101112// 读取任意存储单元的函数peekint peek(char *location) { return *location; }#define DEV1 0x1000dev_status = peek(DEV1); /*读取设备寄存器*/// 写入任意存储单元的函数pokevoid poke(char *location, char newval) { (*locatio ...
计算机原理与嵌入式系统笔记:第七篇
存储管理单元
存储管理单元(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":"https://webp.esing.dev/img/image-20241016124012384_20241016_1240.png","alt":""},{"url":"https://webp.esing.dev/img/image-2024061216222073 ...
模拟集成电路设计 考试复习提纲
倒序列举考点(因为老师就是倒序讲的)
考试题型
填空/判断题 10~20'
简答题,可能有简单计算 10~20' “怎么做校准?”
推导题,聚焦基本推导,过程较长
计算题,两道
去年平均分:75
中位数:70
第九章 信号源发生器
基本概念、反馈系统如何震荡、巴特豪斯准则
文氏桥如何震荡及自动振幅控制(Automatic Amplitude Control)、多谐振荡器工作原理(正负反馈时域)
环形振荡器原理及传输函数、LC Tank、Q值、如何等效为并联电阻
单端口振荡器原理、结构图、科二皮子(Colpitts)振荡器和皮尔斯(Pierce)振荡器
第八章 非线性电路
比较器及其通断条件、上下拉(Pull Up&Down)电阻、集电极输出和发射极输出区别、过驱动电压(Overdrive)概念、比较器常见应用(脉冲调制、窗口探测器等)
反偏齐纳二极管作用
施密特触发器及其原理(正反馈)、同向与反向电路结构、迟滞比较器常见应用(减小纹波等)、
半波整流和全波整流、二极管和反馈通路、半波整流带来的缺点及电压限制二极管、全波整流关系式
交流直流转换器、极值检测器和其非理想性
...
计算机原理与嵌入式系统笔记:第四篇
多寄存器L/S指令
LDR和STR指令仅能load/store一个32位字
ARM可以在一条指令中load/store 16个寄存器中的一个任意数目的子集,如LDMIA指令。
LDM/STM
1234LDMIA STMIA Increment After 这里的增加/减少是相对于基地址使用前/后的LDMIB STMIB Increment Before LDMDA STMDA Decrement After 如:当使用LDMIA和STMIA指令时LDMDB STMDB Decrement Befor 基地址被使用后(After)增加(Increment)
同样可以使用!使多寄存器L/S指令的基地址自动变址。
如图,r9表示起始指针,r9'表示结束指针。
控制流指令
条件转移指令
B{L}{<cond>} <target address>
地址计算方式:先对指令中定义的24位偏移量进行符号扩展,左移两位形成字的偏移,然后将它加到程序计数器。
转移指令的范围大致为+/-32MB( ...
数字系统设计复习笔记:第十四篇
前言
文章内容可能有较多错误,仅供参考
考完了。
整体来说不算非常难,但要好好想想。我花了2个小时做完试卷,剩下的半个小时又看了一遍,纠正了一些语法错误。概念考察很多,但是没有很冷门的地方。但还是有不确定的题目。
下面列一些考试中觉得很迷惑/比较难的题目。
判断
Verilog向量最高位的下标一定比最低位下标大。
Verilog向量最左侧为MSB。
Verilog模块内每个变量都要独立声明。
简答
以下两端代码有区别吗?如果有,区别是什么?
1234567if (a > b) x = x + 1;else y = y + 1;case (a > b) 1'b1: x = x + 1; default: y = y + 1;endcase
代码题
三分频器(代码填空)
四位带同步复位端和进位输出的加减法计数器
Playwright加载Chrome扩展
前言
最近在使用Playwright写浏览器自动化。想安装一点常用的浏览器扩展,比如油猴、Header Editor啥的,结果拖进去一直提示无权限安装。查了下官方文档,依旧没有进展。
操作步骤
将要安装的插件后缀名改为zip并解压到独立文件夹;
在Playwright浏览器的启动参数指定插件路径:
12345678910111213141516e_path1 = "path/to/your/extracted/extension1"e_path2 = "path/to/your/extracted/extension2"chromium = playwright.chromiumself.context = chromium.launch_persistent_context( user_data_dir=utils.sub_folder(Folder.BROWSER_DATA), headless=False, proxy=proxy_object, ignore_default_args=["--en ...