查看: 3668|回复: 9

[分享] 大师教你如何制作一个简单的16位CPU(转载)

[复制链接]
  • TA的每日心情
    开心
    2017-1-24 09:50
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    654

    主题

    3262

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    13119
    最后登录
    2019-1-27
    发表于 2016-4-13 16:02:22 | 显示全部楼层 |阅读模式
    来源:大法师千寻   百度贴吧

    如何制作一个简单的16位CPU,首先我们要明确CPU是做什么的,想必各位都比我清楚,百度的资料也很全。。。。。
    如果想要制作一个CPU,首先得明白下计算机的组成结构(或者计算机的替代品,因为并不是只有计算机有CPU,现在的电子产品都很先进,很多设备例如手机、洗衣机甚至电视和你家的汽车上面都得装一个CPU),数字电路基础,还最好有点编程的基础(当然,没有也没关系,这些知识都很容易获得,各种书上面都会提到,并且在接下来的过程中我会提到这些知识)

    我们要实现的是一个RISC指令集的CPU,并且我们最后要自己为这个CPU设计指令并且编码。

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

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

    霍夫有了一个想法:为什么不能用一块通用的芯片加上程序来实现几块芯片的功能呢?当需要某种功能时,只需要把实现该功能的一段程序代码(称为子程序)加载到通用芯片上,其功能与专用芯片会完全一样。

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

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

    然后考虑如下这个例子:

    例1-1:
    1. <font size="3">mov eax,0

    2. repeat:inc eax

    3. jmp repeat</font>
    复制代码


    例1-2:
    1. <font size="3">int main()

    2. {

    3. unsigned int i = 0;

    4. while(1)

    5. i++;

    6. }</font>
    复制代码


    例1-3:
    2016041301.jpg

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

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

    例2-1:
    1. <font size="3">mov eax,0

    2. repeat:dec eax

    3. jmp repeat</font>
    复制代码

    例2-2:
    1. <font size="3">int main()

    2. {

    3. unsigned int i = 0;

    4. while(1)

    5. i--;

    6. }</font>
    复制代码


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

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

    例2-3:
    2016041302.jpg

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

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

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

    请看例3:
    2016041303.jpg

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

    而sel信号就是用来选择的(0是递增,1是递减)。

    如果我们把sel信号看做“程序”的话,这个电路就像一个“CPU”能根据“程序”执行不同的“操作”,这样的话,通过“程序”(sel信号),这个电路就能够实现复用。

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

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

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

    回复

    使用道具 举报

  • TA的每日心情

    2016-10-20 09:45
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    80

    主题

    1038

    帖子

    5

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2223
    最后登录
    2023-11-20
    发表于 2016-4-13 17:16:48 | 显示全部楼层
    这么溜!
    回复

    使用道具 举报

    该用户从未签到

    10

    主题

    358

    帖子

    0

    高级会员

    Rank: 4

    积分
    924
    最后登录
    1970-1-1
    发表于 2016-4-13 17:34:12 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-11-23 10:20
  • 签到天数: 45 天

    连续签到: 1 天

    [LV.5]常住居民I

    5

    主题

    693

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1404
    最后登录
    2025-7-18
    发表于 2016-4-13 18:40:13 | 显示全部楼层
    赞赞赞,收藏学习下
    dfdfdfdfdfdfdfd dsfa222
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16697
    最后登录
    1970-1-1
    发表于 2016-4-13 19:47:32 | 显示全部楼层
    厉害厉害
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-5-23 06:13
  • 签到天数: 1082 天

    连续签到: 1 天

    [LV.10]以坛为家III

    18

    主题

    1974

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    6147
    最后登录
    2025-7-17
    发表于 2016-4-13 21:40:48 | 显示全部楼层
    四高一!!!
    回复

    使用道具 举报

    该用户从未签到

    2

    主题

    83

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    234
    最后登录
    2016-9-11
    发表于 2016-4-13 21:51:56 | 显示全部楼层
    赞啊!!!!!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-5-24 10:39
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    140

    主题

    2087

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3913
    最后登录
    2020-5-24
    发表于 2016-4-13 23:01:42 | 显示全部楼层
    谢谢分享学习一下
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7123
    最后登录
    2023-4-20
    发表于 2016-4-14 08:39:23 | 显示全部楼层
    功底比较深,且了解的较全面和透彻,估计是搞硬件结构设计的。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-4-26 22:12
  • 签到天数: 586 天

    连续签到: 1 天

    [LV.9]以坛为家II

    1

    主题

    1620

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    3240
    最后登录
    2020-4-26
    发表于 2016-4-14 13:06:33 | 显示全部楼层
    试一下,谢谢
    2020加油
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-19 02:48 , Processed in 0.119583 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表