
cpu设计和实现
文章平均质量分 86
cpu设计和实现
嵌入式-老费
计算机科班出身,09年研究生毕业即投入嵌入式开发工作,欢迎付费咨询,微信联系:xiaoxing_fei。
展开
-
cpu设计和实现(总结篇)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 学习cpu,主要还是因为自己对它的原理和实现还有很多不明白、不清楚的地方,本着追根溯源的精神,正好借助于verilog开源代码一窥究竟。和十年、二十年前相比较,现在数字电路学习、verilog学习、ip学习、开发板的购买方面要便捷很多。记得,最早的时候,记得市面上只有一本关于cpu设计的书,那就是《CPU源代码分析与芯片设计及Linux移植》。这本书上面不光谈了cpu设计,还谈到了怎原创 2022-12-03 15:10:31 · 3017 阅读 · 0 评论 -
cpu设计和实现(异常和中断)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 异常和中断几乎是cpu最重要的特性。而异常和中断,本质上其实是一回事。很多熟悉mips的朋友,应该都听过这么一个词,那就是精确异常,那什么是精确异常呢?其实意思是说,cpu在某一个阶段发生了异常之后,并不急于马上处理,而是等到了mem访存阶段来统一处理,因为说不定在运行过程中还会出现其他异常。 发生异常的阶段很多,但是wb写回阶段是肯定不会发生异常的。所以,在mem原创 2022-11-30 21:57:18 · 2115 阅读 · 0 评论 -
cpu设计和实现(协处理器cp0)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 除了通用计算器负责控制和计算之外,cpu如果需要正常有序地运行,还需要一定地协处理器来帮助完成对应地工作。在mips下面,这样地协处理器称之为cp0。协处理器地工作一般包括这几个方面, 1)处理中断和异常; 2)处理mmu和tlb; 3)处理cache; 4)处理其他cpu的相关属性。原创 2022-11-30 08:44:02 · 2098 阅读 · 0 评论 -
cpu设计和实现(数据访问)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 在cpu设计当中,数据访问是比较重要的一个环节。一般认为,数据访问就是内存访问。其实不然。我们都知道,cpu访问一般有指令访问和数据访问两个部分。质量访问就是rom访问,这个比较纯粹。但是数据访问就比较复杂一点。因为,除了单纯的数据读取访问之外,数据访问还担负着io访问的功能。一般的外设访问都是通过ip来完成的,这些io都有自己的设备地址空间,那么cpu如何通过这些设备地址空间来控制原创 2022-11-29 22:58:48 · 1273 阅读 · 0 评论 -
cpu设计和实现(pc跳转和延迟槽)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 cpu按部就班地去取指执行是理想情况。很多时候,cpu的pc寄存器会跳来跳去的。跳转的情况很多,一般可以分成三种。第一,绝对跳转;第二,条件跳转;第三,异常跳转。绝对跳转,很容易理解,就是不得不做的跳转,比如在主函数里面调用子函数这种就属于绝对跳转。当然,函数调用的时候还需要把返回的地址保存一下。条件跳转,这种也很常见,就是对数据进行判断后,根据结果来分析下是否需要跳转。而异常跳转,原创 2022-11-28 08:41:40 · 1877 阅读 · 0 评论 -
cpu设计和实现(流水线暂停)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面我们说过,数字电路里面流水线的引入,主要是为了提高数据的处理效率。那么,鉴于此,为什么又要对流水线进行暂停处理呢?直接在某一个阶段,把所有的工作都完成不行吗?举个例子来说,如果指令在exe阶段的时候,同时需要处理乘法和加法(madd指令),那样不是也可以吗。其实,这么做,确实是可以的。但是,真的这么做的话,会大幅度降低时钟运算频率,那样会反而得不偿失了。原创 2022-11-27 17:33:52 · 1870 阅读 · 0 评论 -
cpu设计和实现(协处理器hi和lo)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 很多同学可能不了解mips处理器,如果个人想补充一点mips cpu的知识,可以找些资料来读一下,比如《See Mips Run》。 上一期说到了,在cpu设计的过程当中,使用了数据预取的技术。它的主要思想就是,因为流水线的关系,后续数据在计算的过程当中,如果仅仅从寄存器获取数据,就有可能发生数据读取错误的情况。因为这个时候,相关寄存器的数据可能在执行、访存、写回的原创 2022-11-26 16:26:59 · 2497 阅读 · 1 评论 -
cpu设计和实现(数据预取)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面说过了一条指令经过cpu处理的时候需要经历几个阶段。通过实验,我们发现,哪怕是再简单的ori指令也要经历取指、译码、执行、访存和写回这五个阶段。这从之前的波形图上面可以看的很明显。原创 2022-11-24 21:44:50 · 741 阅读 · 0 评论 -
cpu设计和实现(流水线上的第一条指令)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 读书的时候,《计算机组成原理》也看了,《计算机体系结构》也学了,老师也给我们讲了各种各样的流水线知识,但是实践的机会很少,感觉就是没有把理论转成实际的东西。工作之后,到时候有机会接触各种各样的开源代码,这里面就包括了开源cpu代码,比如openrisc(https://github.com/openrisc/or1200/tree/master/rtl/verilog)这样的。但是内原创 2022-11-19 14:10:30 · 1008 阅读 · 0 评论 -
cpu设计和实现(取指)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 cpu设计的本质是数字电路的设计。要是没有verilog、vhdl这些语言,那么剩下来使用的方法基本只有卡诺图这一种了。在数字电路中,有两种基本的电路,一种是逻辑电路,一种是时序电路。两者的区别在于,逻辑电路随之跟着输入而变化,而时序电路只有在时钟边沿除法的时候才能变化,其他时刻都会保持这一电路。原创 2022-11-18 08:34:29 · 1140 阅读 · 0 评论 -
cpu设计和实现(iverilog工具)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 编写verilog的工具不少。大家熟知的modelsim、quartus和vivado都可以用来编写的。前者主要是用来仿真,quartus主要用于altera芯片(现在属于intel),vivado则服务于xilinx芯片(现在属于amd)。如果不愿意破解,其实找到一款合适的工具还是蛮难的,而且简单、方便、好上手。好在开源工具有iverilog这样一款工具,windows、linux原创 2022-11-16 08:35:46 · 4606 阅读 · 1 评论 -
cpu设计和实现(基础)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 差不多在20年前,也就是2002-2003年的时候,市场上关于cpu设计的书还是很少的。那个时候比较火的是各种各样的web技术,比如html、js、java web之类的。学习好web,就可以获得一份不错的工作。真正嵌入式获得重视,是开始国内有能力生产、设计芯片之后,简单的比如gd32的mcu,复杂的比如瑞芯微的rk3399等等。原创 2022-11-09 08:46:53 · 3537 阅读 · 2 评论