<th id="nb95r"><meter id="nb95r"><dfn id="nb95r"></dfn></meter></th>
    <nobr id="nb95r"><menuitem id="nb95r"><var id="nb95r"></var></menuitem></nobr>

    <listing id="nb95r"><meter id="nb95r"></meter></listing>
    <thead id="nb95r"><meter id="nb95r"></meter></thead>
    <font id="nb95r"><meter id="nb95r"></meter></font>
    <sub id="nb95r"><menuitem id="nb95r"></menuitem></sub>

    <sub id="nb95r"><meter id="nb95r"><dfn id="nb95r"></dfn></meter></sub>

      <thead id="nb95r"></thead>

      <sub id="nb95r"><meter id="nb95r"><cite id="nb95r"></cite></meter></sub>

      新闻中心

      EEPW首页 > ?#24230;?#24335;系统 > 牛人业话 > 16位CPU怎么做,DIY大神给你支支招儿

      16位CPU怎么做,DIY大神给你支支招儿

      作者:时间:2019-03-19来源:电子工程世界收藏

        如何制作一个简单的16位,首先我们要明确是做什么的,想必各位都比我清楚,百度的资料也很全……

      本文引用地址:http://www.ytvs.tw/article/201903/398604.htm

        如果想要制作一个,首先得明白下计算机的组成结构(或者计算机的替代品,因为并不是只有计算机有CPU,现在的电子产品都很先进,很多设备例如手机、洗衣机甚至电 视和你家的汽车上面都得装一个CPU),数字电路基础,还最好有点编程的基础(?#27604;唬?#27809;有也?#36824;?#31995;,这些知识都很容易获得,各种书上面都会提到,并且在接下来的过?#35752;形一?#25552;到这些知识)

        我们要实现的是一个指令集的CPU,并且我们最后要自?#20309;?#36825;个CPU设计指令并且编码。

        首先我们来听个故事,关于CPU的诞生的故事:

        日本客户希望英特尔帮助他们设计和生产八种专用集成电路芯片,用于实现桌面计算器。英特尔的工程师发现这样做有两个很大的问题。第一,英特尔已经在全力开发 三种内存芯片了,没有人力再设计八种新的芯片。第二,用八?#20013;?#29255;实现计算器,将大大超出预算成本。英特尔的一个名叫Ted Hoff 的工程师仔细分析了日本同行的设计,他发现了一个现象。这八块芯片各实现一种特定的功能。当用户使用计算器?#20445;?#36825;些功能并不是同时都需要的。比如,如果用户需要计算100个数的和,他会重复地输入一个数,再做一次加法,一共做100次,最后再打印出来。负责输入、加法和打印的电路并不同时工作。 这样,当一块芯片在工作?#20445;?#20854;他芯片可能是空闲的。

        Hoff有了一个想法?#20309;?#20160;么不能用一块通用的芯片加上程序来实现几块芯片的功能呢?当需要某种功能?#20445;?#21482;需要把实?#25351;?#21151;能的一段程序代码(称为子程序)加载到通用芯片上,其功能与专用芯片会完全一样。

        经过几天的思考后,霍夫画出了计算器的新的体系结构图,其中包含4块芯片:一块通?#20040;?#29702;器芯片,实现所有的计算和控制功能;一块可读写内存(RAM)芯片, ?#32654;?#23384;放数据;一块只读内存(ROM)芯片,?#32654;?#23384;放程序;一块输入输出芯片,实现键入数据和操作命令、打印结果等等功能。

        看完这个故事后,可以总结:CPU是一种?#32654;?#20195;替专用集成电路的器件(这只是我的理解,不同人有不同理解,这个就智者见智了,我在接下来的例子中也会说明我的想法)。

        然后考虑如下这个例子:

        例1-1:

        mov eax,0

        repeat:inc eax

        jmp repeat

        例1-2:

        int main()

        {

        unsigned int i = 0;

        while(1)

        i++;

        }

        例1-3:

      16位CPU怎么做,DIY大神给你支支招儿

        可以看到,以?#20808;?#20010;例子都产生了一个从0不?#26174;?#21152;的序列,而且前两个例子会一直加到溢出又从0开始(这个取决于计算机的字长也就是多少位的CPU,eax是 32位寄存器所以必然是加到4294967295然后回0,而后面那个c程序则看不同编译器和不同平台不一样),后面那个例子则看你用的是什么样的加法器和多少个D触发器

        那问题就来了,我假设要一个递减的序列怎么办呢?前两个例子很好解释,我直接改代码不就得了:

        例2-1:

        mov eax,0

        repeat:dec eax

        jmp repeat

        例2-2:

        int main()

        {

        unsigned int i = 0;

        while(1)

        i--;

        }

        你只需要轻轻敲击键盘,修改了代码之后,它就会如你所愿的执行。

        但是后面那个例子怎么办呢?可能你已经想到办法了:如例2-3所示。

        例2-3:

      16位CPU怎么做,DIY大神给你支支招儿

        问题就来了,你在键盘上敲两下可不能改变?#23548;?#30005;路!上面(例1-3)中是个加法器,但是跑到这里却变成了减法器(例2-3)!

        这样的话,你就得再做一个电路,一个?#32654;?#31639;加法,一个?#32654;?#31639;减法,可是两个电路代表你得用更多的电路和芯片,你花的钱就得更多,要是你不能同时使用这两个电路你就花了两份钱却只干了一件事!

        这个问题能被解决吗?答案是能!

        请看例3:

      16位CPU怎么做,DIY大神给你支支招儿

        这个例子中使用了一个加法器一个减法器,没比上面的电路省(显然……难道你想用减法器做加法器的功能?不可能吧!?#27604;唬?#21152;上一个负数的补码确实就是减去 一个数,但是这里先不考虑这种问题),多了一组多路器,少了一组D触发器。总的来说,优势还是明显的(两块电路板和一块电路板的差别)。

        而sel信号就是?#32654;?#36873;择的(0是递增,1是递减)。

        如果我们把sel信号看做“程序”的话,这个电路就像一个“CPU”能根据“程序”执行不同的?#23433;?#20316;?#20445;?#36825;样的话,通过“程序”(sel信号),这个电路就能够实?#25351;?#29992;。

        根据上面的结论,我认为(仅仅是个人认为啊~):程序就是硬件电路的延伸!

        而CPU的基本思想,我认为就是这样的。

        接下来我们就分析CPU的结构和各个部件,然后实现这个CPU。

        什么是单周期CPU,什么是多周期CPU,什么是,什么是CISC

        首先大家得有时钟的概念:这个问题不好解释 啊。。。。。。可以理解为家里面的机械钟,上上电池之后就会滴答滴答走,而它“滴答滴答”的速度就是频率,滴答一下用的时间就是周期,而人的工作,下班, 吃饭和学习娱乐都是按照时钟的指示来进行的(熬夜的网瘾少年不算),一般来说,时?#26377;?#21495;都是由晶体振荡器产生的,0101交替的信号(低电平和高电平)。

        数字电路都需要一个“时?#21360;?#26469;驱动,就像演奏交响乐的时候需要一个指挥家在前面指挥一样,所有的人都会跟着指挥的拍子来演奏,就像数字电路中所有的部件都会跟着时钟节拍工作一样。

        如下是一个理想的时?#26377;藕牛?注意是理想的)。

      16位CPU怎么做,DIY大神给你支支招儿

        ?#27604;唬导?#30340;时?#26377;?#21495;可能远没有这么理想,可能上升沿是斜的,而且占空比也可能不是50%,有抖动,有偏移(相对于两个器件),可能因为导线的寄生电容效应变得走形。

        上面?#23884;?#22914;果没听懂也?#36824;?#31995;~~~反正就是告诉你,?#23548;?#30340;时?#26377;?#21495;测出来肯定没这么标准。

        而 cpu的工作频率,是外频与倍频的积(cpu究竟怎么算频率,其实这个我也不太清楚呵呵),因为cpu是通过外部的晶振产生一个时?#26377;藕牛?#28982;后再通过内部 的电路(锁相环),倍频至需要的频?#30465;5比唬?#26377;人问,为什么要这么麻烦呢?直接在电路外边做个时钟晶振能产生那么高的时?#26377;?#21495;就可以了嘛,这个是可以的, 在某些简单的系?#25104;?例如51单片姬)就是这样的,但是计算姬的cpu比?#32454;?#26434;,因为一些原因所以必须要做到cpu内。

        下面简单说一下CPU的两种指令集:CISC和

        说下我的看法(个人看法,如有错误还请高手指正):

        RISC是Reduced Instruction Set Computer,精简指令集计算机,典型例子是MIPS处理器。

        CISC 是Complex Instruction Set Compute,复杂指令集计算机,典型例子是x86系?#20889;?#29702;器(?#27604;?#29616;在的x86指令还是当初cisc的指令,但是?#23548;?#22788;理器的结构都已经变成了 risc结构了,risc的结构实现流水线等特性比?#20808;?#26131;,在计算机前的你如果用的是intel某系列的处理器,则它使用的指令集看?#20808;?#36824;是像cisc的 指令,但是?#23548;?#19978;你的cpu的结构已经是risc的了)。

        一般CISC的处理器需要用微指令配?#26174;?#34892;,而RISC全部是通过硬连线实现的, 也就是说,当cisc的处理器在执行你的程序前,还得先从另外一个rom里面?#33080;?#19968;些数据来“指导?#36125;?#29702;器怎么处理你的命令,所以cisc效率比?#31995;停?#32780; risc是完全通过部件和部件之间的连接实现某种功能,极大的提高了工作效率,而且为流水线结构的出现提供了基础。cisc的寄存器数量较少,指令能够实 现一些比较特殊的功能,例如8086的一些寄存器:

        ax,bx,cx,dx,si,di等;段寄存器有:cs,ds,es,ss等。相对的指令功能比较特殊,例如xlat将bx中的值作为基地址,al中的值作为偏移,在内存中寻址到的数据送到al当中(以ds为段寄存器)

        而risc的处理器则通用寄存器比较多,而指令的功能可以稍微弱一点,例如:

        以nios?#24230;?#24335;处理器来说明,nios处理器有32个通用寄存器(r0~r31),而指令功能相对x86的弱一些,而且x86进?#24515;?#23384;访问是直接使用mov指令,nios处理器读内存用的是load,写内存用的是store,

        二者响应中断的方式也不一样,举一个典型的例子,x86的处理器将中断向量表放在了内存的最低地址(0-1023,每个中断向量占四个字节),能容纳256 个中断(以?#30340;?#24335;的8086举例)响应中断?#20445;?#23558;中断号对应的地址上的cs和ip的值装入到cs和ip寄存器而将原来的地址保存,并且保存状态寄存器然后 进入中断处理,而risc则拥有一个共同的中断响应函数,这个函数会根据中断号?#19994;?#31243;序向系统注册的函数的地址,并?#19994;?#29992;这个函数。一般来说而是用的 cisc指令的长度是不定的,例如x86的xor ax,bx对应机器码是0x31d8、而push ax是0x50、pop cx是0x59。而risc的指令确是定长的,例如32位。


      上一页 1 2 3 下一页

      关键词: CPU RISC

      评论

      技术专区

      关闭
      v98彩票是不是骗局

        <th id="nb95r"><meter id="nb95r"><dfn id="nb95r"></dfn></meter></th>
        <nobr id="nb95r"><menuitem id="nb95r"><var id="nb95r"></var></menuitem></nobr>

        <listing id="nb95r"><meter id="nb95r"></meter></listing>
        <thead id="nb95r"><meter id="nb95r"></meter></thead>
        <font id="nb95r"><meter id="nb95r"></meter></font>
        <sub id="nb95r"><menuitem id="nb95r"></menuitem></sub>

        <sub id="nb95r"><meter id="nb95r"><dfn id="nb95r"></dfn></meter></sub>

          <thead id="nb95r"></thead>

          <sub id="nb95r"><meter id="nb95r"><cite id="nb95r"></cite></meter></sub>

            <th id="nb95r"><meter id="nb95r"><dfn id="nb95r"></dfn></meter></th>
            <nobr id="nb95r"><menuitem id="nb95r"><var id="nb95r"></var></menuitem></nobr>

            <listing id="nb95r"><meter id="nb95r"></meter></listing>
            <thead id="nb95r"><meter id="nb95r"></meter></thead>
            <font id="nb95r"><meter id="nb95r"></meter></font>
            <sub id="nb95r"><menuitem id="nb95r"></menuitem></sub>

            <sub id="nb95r"><meter id="nb95r"><dfn id="nb95r"></dfn></meter></sub>

              <thead id="nb95r"></thead>

              <sub id="nb95r"><meter id="nb95r"><cite id="nb95r"></cite></meter></sub>
              电子游艺澳门宣传av 江西快三走势图手机版 青海十一选五中奖钱数 欢乐升级怎样全屏 重庆分分彩教学视频 0k000澳客网 福彩3d之家 福彩深圳风采走势图 广东快乐10分8种玩法 新11选5任选1 北单开奖 山西快乐十分走势 极速飞艇有开奖记录吗 nba比分90wim p3试机号走势图彩宝网