如何制作一个非常简单的16位CPU,首先我们要具体CPU是做到什么的,毕竟各位都比我确切,百度的资料也很仅有……如果想制作一个CPU,首先得明白下计算机的构成结构(或者计算机的替代品,因为并不是只有计算机有CPU,现在的电子产品都很先进设备,很多设备例如手机、洗衣机甚至电视和你家的汽车上面都得装一个CPU),数字电路基础,还最差有点编程的基础(当然,没也没关系,这些科学知识都很更容易取得,各种书上面都会提及,并且在接下来的过程中我会提及这些科学知识)我们要构建的是一个RISC指令集的CPU,并且我们最后要自己为这个CPU设计指令并且编码。首先我们来听得个故事,关于CPU的问世的故事:日本客户期望英特尔协助他们设计和生产八种专用集成电路芯片,用作构建桌面计算器。英特尔的工程师找到这样做有两个相当大的问题。第一,英特尔早已在全力研发三种内存芯片了,没人力再行设计八种新的芯片。
第二,用八种芯片构建计算器,将大大超出预算成本。英特尔的一个名为TedHoff的工程师仔细分析了日本同行的设计,他找到了一个现象。这八块芯片各构建一种特定的功能。
当用户用于计算器时,这些功能并不是同时都必须的。比如,如果用户必须计算出来100个数的和,他不会反复地输出一个数,再行做到一次乘法,一共做到100次,最后再行打印机出来。
负责管理输出、乘法和打印机的电路并不同时工作。这样,当一块芯片在工作时,其他芯片有可能是空闲的。Hoff有了一个点子:为什么无法用一块标准化的芯片再加程序来构建几块芯片的功能呢?当必须某种功能时,只必须把构建该功能的一段程序代码(称作子程序)读取到标准化芯片上,其功能与专用芯片不会几乎一样。经过几天的思维后,霍夫所画出有了计算器的新的体系结构图,其中包括4块芯片:一块标准化处理器芯片,构建所有的计算出来和掌控功能;一块可读取内存(RAM)芯片,用来存放数据;一块读入内存(ROM)芯片,用来存放程序;一块输入输出芯片,构建键入数据和操作命令、打印机结果等等功能。
看完了这个故事后,可以总结:CPU是一种用来替换专用集成电路的器件(这只是我的解读,有所不同人有有所不同解读,这个就智者见智了,我在接下来的例子中也不会解释我的点子)。然后考虑到如下这个例子:事例1-1:moveax,0repeat:inceaxjmprepeat事例1-2:intmain(){unsignedinti=0;while(1)i++;}事例1-3:可以看见,以上三个例子都产生了一个从0大大减少的序列,而且前两个例子不会仍然特到阻塞又从0开始(这个各不相同计算机的字长也就是多少位的CPU,eax是32位寄存器所以必定是添加4294967295然后返0,而后面那个c程序则看有所不同编译器和有所不同平台不一样),后面那个例子则看你用的是什么样的加法器和多少个D触发器那问题就来了,我假设要一个递增的序列怎么办呢?前两个例子很好说明,我必要改为代码不就得了:事例2-1:moveax,0repeat:deceaxjmprepeat事例2-2:intmain(){unsignedinti=0;while(1)i--;}你只必须用力敲打键盘,改动了代码之后,它就不会如你所愿的继续执行。但是后面那个例子怎么办呢?有可能你早已想起办法了:如事例2-3右图。
事例2-3:问题就来了,你在键盘上敲打两下可无法转变实际电路!上面(事例1-3)中是个加法器,但是跑到这里却变为了减法器(事例2-3)!这样的话,你就得再行做到一个电路,一个用来算数乘法,一个用来算数除法,可是两个电路代表你要用更加多的电路和芯片,你花上的钱就得更加多,要是你无法同时用于这两个电路你就花上了两份钱却只腊了一件事!这个问题能被解决问题吗?答案是能!请求看事例3:这个例子中用于了一个加法器一个减法器,没有比上面的电路省(似乎……怎么会你想要减法器做到加法器的功能?不有可能吧!当然,再加一个负数的补码显然就是乘以一个数,但是这里再行不考虑到这种问题),多了一组多路器,较少了一组D触发器。总的来说,优势还是显著的(两块电路板和一块电路板的差异)。而sel信号就是用来自由选择的(0是递减,1是递增)。
如果我们把sel信号看作“程序”的话,这个电路就像一个“CPU”能根据“程序”继续执行有所不同的“操作者”,这样的话,通过“程序”(sel信号),这个电路就需要构建适配。根据上面的结论,我指出(意味着是个人指出啊~):程序就是硬件电路的伸延!而CPU的基本思想,我指出就是这样的。接下来我们就分析CPU的结构和各个部件,然后构建这个CPU。
什么是单周期CPU,什么是多周期CPU,什么是RISC,什么是CISC首先大家得有时钟的概念:这个问题很差说明啊。可以解读为家里面的机械钟,上上电池之后就不会滴答滴答回头,而它“滴答滴答”的速度就是频率,滴答一下用的时间就是周期,而人的工作,上班,睡觉和自学娱乐都是按照时钟的命令来展开的(休息时间的网瘾少年远比),一般来说,时钟信号都是由晶体振荡器产生的,0101交错的信号(低电平和高电平)。
数字电路都必须一个“时钟”来驱动,就像弹奏交响乐的时候必须一个指挥家在前面指挥官一样,所有的人都会回来指挥官的拍子来弹奏,就像数字电路中所有的部件都会回来时钟节奏工作一样。如下是一个理想的时钟信号:(留意是理想的)。
当然,实际的时钟信号有可能近没这么理想,有可能下降沿是横的,而且频率也有可能不是50%,有晃动,有位移(相对于两个器件),有可能因为导线的寄生电容效应显得走形。上面那段如果没有听不懂也没关系~~~当真就是告诉他你,实际的时钟信号测出来认同没有这么标准。而cpu的工作频率,是外频与倍频的积(cpu到底怎么算数频率,只不过这个我也不过于确切呵呵),因为cpu是通过外部的晶振产生一个时钟信号,然后再行通过内部的电路(锁相环),倍频至必须的频率。
当然,有人问,为什么要这么困难呢?必要在电路外边做到个时钟晶振能产生那么低的时钟信号就可以了嘛,这个是可以的,在某些非常简单的系统上(例如51单片姬)就是这样的,但是计算出来姬的cpu比较复杂,因为一些原因所以必需要做cpu内。下面非常简单说道一下CPU的两种指令集:CISC和RISC。说道下我的观点(个人观点,如有错误还请求高手求证):RISC是ReducedInstructionSetComputer,精简指令集计算机,典型例子是MIPS处理器。CISC是ComplexInstructionSetCompute,简单指令集计算机,典型例子是x86系列处理器(当然现在的x86指令还是当初cisc的指令,但是实际处理器的结构都早已变为了risc结构了,risc的结构构建流水线等特性较为更容易,在计算机前的你如果用的是intel某系列的处理器,则它用于的指令集看起来还是像cisc的指令,但是实质上你的cpu的结构早已是risc的了)。
一般CISC的处理器必须用微指令因应运营,而RISC全部是通过软连线构建的,也就是说,当cisc的处理器在继续执行你的程序前,还得再行从另外一个rom里面朗读一些数据来“指导”处理器怎么处置你的命令,所以cisc效率较为较低,而risc是几乎通过部件和部件之间的相连构建某种功能,很大的提升了工作效率,而且为流水线结构的经常出现获取了基础。cisc的寄存器数量较较少,指令需要构建一些较为类似的功能,例如8086的一些寄存器:ax,bx,cx,dx,si,di等;段寄存器有:cs,ds,es,ss等。
比较的指令功能较为类似,例如xlat将bx中的值作为恩地址,al中的值作为位移,在内存中传输速率到的数据送往al当中(以ds为段寄存器)而risc的处理器则通用寄存器较为多,而指令的功能可以稍黯淡一点,例如:以nios嵌入式处理器来解释,nios处理器有32个通用寄存器(r0~r31),而指令功能比较x86的弱一些,而且x86展开内存采访是必要用于mov指令,nios处理器读书内存用的是load,写出内存用的是store,二者号召中断的方式也不一样,荐一个典型的例子,x86的处理器将中断向量表格放到了内存的低于地址(0-1023,每个中断向量占到四个字节),能容纳256个中断(以实模式的8086举例)号召中断时,将中断号对应的地址上的cs和ip的值取出到cs和ip寄存器而将原本的地址留存,并且留存状态寄存器然后转入中断处置,而risc则享有一个联合的中断响应函数,这个函数不会根据中断号寻找程序向系统登记的函数的地址,并且调用这个函数。一般来说而是用的cisc指令的长度是长短的,例如x86的xorax,bx对应机器码是0x31d8、而pushax是0x50、popcx是0x59。而risc的指令确是定长的,例如32位。
本文关键词:狗万·ManBetX,狗万官网唯一,狗万ManBetX官网登录入口,狗万ManBetX下载,狗万app官方网站
本文来源:狗万·ManBetX-www.huch-trading.com