ComputerSystem
文章平均质量分 73
XV_
喜欢读书,热衷于探究本质,热爱技术,终身学习,不断成长。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
x86异常处理与中断机制(3)中断处理过程
上一节讲完了根据中断类型号找中断服务程序的过程,现在着重说明一下更加完整的中断处理过程吧。本节以8086时代的中断处理过程为例进行说明,主要分两大部分硬件处理软件处理需要注意,这不是绝对的,得看实际情况,简单来说就是,如果硬件本来就完成了相关必要动作,中断服务程序就不用再执行了,如果没有,就需要写入程序中执行相关操作。1 中断处理过程1.1 前提:产生&检测 中断中断处理的前提,是产生中断,然后检测到中断,否则怎么处理呢?对于中断的产生,分为内部和外部,内部就是指令执行产生的,原创 2021-04-18 21:38:55 · 867 阅读 · 0 评论 -
x86异常处理与中断机制(2)中断向量表
补充:事件不仅包含中断和异常,还包含系统调用,这个属于用户主动请求的事件。上一节,只有一个溢出异常,那么,如果很多异常、中断呢?(中断向量表)另外,之前0号地址只能存储两条指令,如果需要更多指令怎么办?(地址的位置以及对应程序大小应该更灵活)注意,中断服务程序包含(保存现场,调用处理方法(主体),恢复现场)我们在遇到中断之后,需要执行的步骤,我们简化一下CPU做一些硬件处理工作(识别中断源,关中断,当前指令(或下一条指令)地址压栈,FLAGS寄存器压栈)找到处理中断的程序地址(这里的程序是中原创 2021-04-18 21:06:00 · 2909 阅读 · 0 评论 -
x86异常处理与中断机制(1)概述中断的来源和处理方式
参考《计算机组成》(北京大学 MOOC)1 异常与中断的来源(为什么需要中断)首先,说明一下异常和中断这两个概念。它们两个唯一的区别,就是,没有什么区别。只是不同的地方不同的时间不同的人的叫法不一样,所以,不用太在意区别了,以后我们统称中断。1.1 什么时候发生中断一句话!CPU正在干活的时候,有事情打扰它,不让他继续正常工作了,需要去处理其他事情。那么是什么事情呢?这个事情分成两类内部的事情外部的事情1.1.1 内部的事情简而言之,就是执行指令的时候,出现状况了。出现什么状况了原创 2021-04-18 14:39:52 · 1408 阅读 · 0 评论 -
x86架构下 CF与OF标志位 & 带符号和无符号运算 详解
针对能够影响OF和CF标志位的指令,一般来说是涉及到数据运算的指令,这里使用add举例,即不区分有无符号的加法指令,参与运算的数据,从二进制层级去考虑。CF标志位对于CF,它是carry flag,进位标志,这个进位,表示的是二进制层次下的进位,例如:mov al,98hadd al,al它的运算是其中,得到的最高一位,会被丢弃,这个也就是进位了!模拟一下:这个进位还是很简单的!如何实现add指令进位时,CF的变化这个简单,我们只需要记录一下add的结果的假想最高位即可,也就是真正原创 2021-02-04 16:17:25 · 7662 阅读 · 2 评论 -
2020-12-15 CPU设计复盘
SOC修改将之前完成的31条指令单周期CPU进行了重构,将其分开,实现了内外有别,将CPU、指令ROM和数据RAM。这样,以后为其增加接口外设,总线控制,才更加清晰,这是进一步封装和抽象。MARS大坑j和jal指令,使用的是绝对地址,而MARS和我的CPU不匹配……结果就debug半天,很难匹配,因为起始地址如果是00003000开始,那么coe文件将会又很多东西0……不过内样的话,就一劳永逸了,看来还是得改。接下来,做好地址空间映射的修改和文档完善。充分体会,一个系统的依赖和完备性,非常重要原创 2020-12-25 12:04:19 · 352 阅读 · 1 评论 -
【计算机系统设计】实践笔记(6)改进数据通路:lw和sw指令
不想多说了……前面的铺垫足够了,剩下的自己做做应该也会了,如果遇到问题,就搜一下自己查阅就好。这篇水过,没有太多技术点。唯一注意的是,引入的RAM和ROM的clk触发问题,可能引起时序问题,等实际测试遇到问题再解决,问题出现之前也不知道会遇到啥。...原创 2020-12-09 21:39:43 · 5187 阅读 · 0 评论 -
【计算机系统设计】实践笔记(5)改进数据通路:beq和bne指令分析与实现
接下来的分析和实践非常粗糙,因为跟之前一样的分析流程,不再多说了,如果前面真的掌握,这里不看也罢。分析先看beq指令。ALU输入的是rs和rt,不输入imm,进行subu操作,判断是否为zero,输出zero信号。控制器增加Branch信号,识别beq指令,当zero和Branch同时成立,就可以跳转,目标地址是PC + 4 + (sign-extend)offset。bne指令同理。实现ALUALU增加zero输出,如果rs - rt == 0,zero = 0,即rs = rt,对应be原创 2020-12-06 22:52:02 · 9603 阅读 · 0 评论 -
【计算机系统设计】实践笔记(5)插叙:内外有别之CPU和Memory
区分CPU的内外首先明确,内存,不在CPU内,我们的CPU是会有数据和指令端口的,然后去访问内存和外设。而CPU设计,我们所说的单周期,多周期和流水线,描述的都是CPU,而不是Memory,因此,我们在进行CPU设计的时候,注意不要将内存与CPU混一起,尽管我们经常混在一起测试,但是它们的功能和外部输入,是相对独立的。因此,CPU和内存的时钟周期可以不一样,这完全自由地取决于你自己的设计,而不受什么过多的限制。...原创 2020-12-06 19:48:38 · 541 阅读 · 0 评论 -
【计算机系统设计】实践笔记(4)改进数据通路:第一类I型指令分析与实现
0 回顾之前,我们完成了17条R型指令的设计,接下来,我们逐步完成I型指令的设计。1 核心思想:增量思维 & 复用思维 & 学会选择 & 分治思想增量思维我们从无到有,构建了支持R型指令的CPU,接下来还会完成I型指令,J型指令,这样,单周期CPU就完成了,之后,我们会将其改进为多周期CPU,也会改进为五级流水线CPU,之后可能需要提升性能,增加串口;将内存移出去,增加内存控制器;增加指令Cache和数据Cache……让我们慢慢启程吧!复用思维 & 学会选择人生皆原创 2020-11-30 14:25:33 · 3073 阅读 · 0 评论 -
【计算机系统设计】实践笔记(3)改进数据通路:jr指令分析与实现
1 jr指令分析instructionoprsrtrdshamtfuncjr000000rs000000000000000001000举例:jr $31功能:PC <- ($31)这是个跳转指令,将指定寄存器的值,放入PC中,是无条件跳转。我们需要更新PC,加一个多路选择器,实现+4和PC <- (reg)两种选择增加控制信号Jrn,标识jr指令2 新的数据通路3 器件修改控制器,控制信号输出Jrn标识jr指令PC,增加原创 2020-11-29 22:31:35 · 7657 阅读 · 0 评论 -
【计算机系统设计】实践笔记(3)改进数据通路:移位R型指令分析
0 回顾前面的内容中,第一类R型指令分析,我们完成了一类R型指令的设计,完成了其数据通路,构建了相应的部件,并且完成了从ROM中取指,成功进行了基本的功能仿真,进行了综合和实现,但是没有完成综合和实现的时序仿真。下面,我们要继续进行其他R型指令的分析,这次我们只分析三个移位指令,也就是sll srl sra,然后改进我们已有的数据通路,完成对应的设计。1 移位指令分析我们先看看指令编码instructionoprsrtrdshamtfuncsll000000000原创 2020-11-29 21:29:23 · 3235 阅读 · 0 评论 -
【计算机系统设计】实践笔记(2)插叙:综合与实现
接上一篇文章的第10节之前完成了功能仿真,下面我们进行综合实现。10.1.1 综合综合成功。实现试试这真是令人悲伤……找Bug吧。我们看看综合后的门级网表。发现综合后的并不是我们想要的……看了看可能是综合的目录错误,我们再试试。不是这个原因……单元测试每一个模块,综合都没问题,为啥连起来就不行了?可能因为没有输出??我们先把之前的寄存器堆初始化该回去,默认全0.再让ALUresult暂时作为输出试试。没有输出的模块是没用的!也可能是把synthesis搞傻的原因…… 就像是算法原创 2020-11-28 11:40:46 · 541 阅读 · 0 评论 -
【计算机系统设计】实践笔记(2)数据通路构建:第一类R型指令分析(2)
接上一篇【计算机系统设计】实践笔记(2)数据通路构建:第一类R型指令分析(1)8.2 ALU运算器8.2.1 注意事项:有无符号数的运算和比较主要针对slt sltu srlv srav这几条指令中,涉及到的对有无符号数进行的操作。8.3 Register Files 寄存器堆9 连接已有器件9.1 增加ROM9.2 将已有部件连接起来!10 惊人的事实:我们已经构建了完整的数据通路你可能感到惊讶,但这就是事实,我们已经,构建好了一个CPU,并且它能够执行13条指令!这简直太酷了不是吗原创 2020-11-27 20:35:18 · 2270 阅读 · 1 评论 -
【Verilog】数据流建模传输问题:赋值传输有方向
这次,我们说明的是,assign语句实现的数据流建模,包含的是两个层面建立联系传输方向assign A = B的本质含义是A与B建立关联B的值传给A这个传输方向至关重要,实际情况是什么,就必须按照顺序进行,不是单纯地连线,本质是数据的传输,是有方向的。看看下面的CPU的例子,注意注释中的【关注点】// reg_files_1 Inputswire [31:0] ALUresult; // 【关注点1】wire [4:0] rA = instruction[25:21]原创 2020-11-27 20:34:17 · 1804 阅读 · 0 评论 -
【计算机系统设计】实践笔记(2)数据通路构建:第一类R型指令分析(1)
0 回顾上一次实践笔记(0)我们实现了一个最简单的,能够每个上升沿+4的PC。我们最需要关注的就是器件功能的独立性,避免内外功能混杂,同时一定要注意脑中有电路(RTL级描述的抽象电路而不是实际的门级电路,内个交给EDA工具就行)。1 针对的指令现在,我们分析一下R类指令,我们需要构建数据通路,而很多的R类指令是相似的,因此可以直接分析一类指令,就像所有指令都需要取指,我们就分析所有指令一样。那么,我们要分析哪一类指令?这取决于我们准备实现的指令有什么,我们先看看。add addu sub sub原创 2020-11-15 15:57:53 · 6676 阅读 · 0 评论 -
【计算机系统设计】实践笔记(1)数据通路构建:取指部件分析
0 核心思想根据指令功能,分析出需求,从而得出需要的部件、控制信号以及其他设计。1. 针对的指令取指阶段,针对所有指令,任何指令都需要进行取指。2 功能(需求)分析CPU的内部采用的是字节编址,每次取指之后,都进行PC + 4。需要执行的操作是取指令:M[PC]更新PC:PC <- PC + 43 需要的部件PC寄存器加法器指令存储器ROM4 控制线(控制信号)4.1 自身必须clk:时钟信号(用于同步)reset:复位信号(清零 clear)问题:PC原创 2020-11-12 22:05:55 · 2136 阅读 · 0 评论 -
【计算机系统设计】重点 · 学习笔记(0)(数据通路设计思想)
重点1:05.1设计思想设计思想至关重要,这决定了你能不能自己根据ISA设计出来CPU架构,而不是只是抄别人的,也决定你能不能完成自己的设计更优化的架构。描述方式约定6数据通路 ≠ Verilog代码我们构建的数据通路,是根据各种分析得到的,但是不代表Verilog要这么写,Verilog构建的模块应该更加独立化、集成化、简洁化。比如,各种多路选择器,完全可以集成到一些器件中,否则太乱了!。又例如中心控制器,输入信号足足12位,负担太大,因此将ALUOp和func单独拆出来,原创 2020-11-12 16:49:26 · 409 阅读 · 1 评论 -
【计算机系统设计】重点 · 学习笔记(1)(资源消耗)
这一点先浅显理解,就好比我要造一个楼我是用现成的材料造节省?还是需要用XX材料,但是XX材料还需要现成材料造呢?这也不一定,但是基本来说,如果使用现有资源,能够直接用,那其实是最好不过的了,这也就是Verilog设计的时候,需要注意的,应该调用更少的资源完成更多的事情,不是吗?...原创 2020-11-12 11:22:33 · 294 阅读 · 0 评论 -
【计算机系统设计】重点 · 学习笔记(0)
HDL等硬件描述语言,例如Verilog,是并行的,而不像软件一样的顺序执行的,例如很多的always块,initial块,都是并行的,他们会转换为硬件电路,而在仿真的时候,他们也是并发执行地,这一点可以从时序图看出来。硬件电路是真实的物理器件,是有时间延迟的,因此延迟多久,就显地尤为重要,什么时候完成是十分重要的参数(时序仿真?)。...原创 2020-11-10 22:43:45 · 308 阅读 · 0 评论 -
【计算机系统设计】学习笔记(2)
5.1对于CPU与外界的读写,只有load和store指令能够做,所以很多情况下,直接通过bypass跳过去了,或者闲置,尤其对于流水线,更应该直接跳过而不是闲置(如何设计?)。另一方面,这个执行过程相对来说很慢,因此,可以加cache来加速这个过程,以便于后面提高主频。对于不需要的阶段,直接跳过或者闲置这个情况只能发生在4、5阶段,其他阶段不可能闲置,而4、5阶段,我们也不应该让它闲置,所以 是不是应该采取一些策略跳过,以提高性能呢?5.25.2与6.1和6.1归纳到数据通路设计思想笔记。原创 2020-11-12 11:04:17 · 269 阅读 · 0 评论 -
【计算机系统设计】学习笔记(1)03,04
疑问:sw和lw指令,获取的地址==不是4的整倍数(字节不对齐)==的时候,应该如何处理?东南大学MOCC 计算机系统综合设计 0303-1 寄存器介绍了MIPS寄存器,32个寄存器的基本功能和使用,注意子程序调用寄存器t不保护与s的保护$31寄存器在子程序嵌套调用下如何使用?$0只能为0,写入其他值将会被忽略,但是允许写入,只是写完也没用03-2 寻址方式PC相对寻址PC = (PC + 4) + ((sign-extend)imm << 2)为什么要扩展后左移两..原创 2020-11-12 10:17:45 · 1878 阅读 · 0 评论
分享