太久不写博客,再次提笔时,总是一筹莫展、万般痛苦。这次就先来几篇随意点的博客练练手吧!
从毕业开始,就一直很想写几篇博客回顾一下在大学里学习的几门很有意思又很有用的课程。现在一晃,工作已经五年了,说长不长、说短也不短,也该是时候写点东西来回顾和感激在大学所学的课程。
《C语言》《数据结构与算法》等一些基础的课程作为软工工程的入门学科,重中之重,就留到以后来写。这次我想先来回顾大学的一位老师教授的三门课,对我影响深远的三门课:《计算机结构与组成》、《计算机图形学》和《人工智能》。三门课是由同一位老师教授,三门高深而又复杂的课程,但又非常的有趣和痛苦,我们一个个的来慢慢絮叨絮叨。
首先说说《计算机结构与组成》,作为大一下学期就开设的课程,对我们这些刚接触编程没多久的新人来说还是有些难度的。当然即便是难,也要硬着头皮学完、学会。至于课程内容吧,没啥好说的,跟国内很多的大学教的一样,讲讲计算机的发展历史,各个模块的功能、介绍一下操作系统等等。而之所以要拿来出来叙叙旧,主要还是因为这门课的课后大作业:设计CPU。
说是设计CPU,其实并不是真的设计一个能在主板上真实可用的CPU,而是使用Logisim软件来设计一个16位单时钟周期的CPU。具体请看如下作业信息要求:
具体制作过程就不细细讲解了,我们直奔最后的结果吧。
在这个课程的最后,我当然是非常完美的完成了这个作业,设计了一个属于自己的另类CPU,并且可以准确执行一段提前编码好的小程序。
(ps:其实也不是很完美啦,有些地方的设计还有很高的优化空间,当然一些地方的设计也不是最合理的,一起其实也只是勉强能用而已,嘿嘿~~~)
在看最后运行的效果前,首先来看看这个另类CPU的整体布局吧:
这是CodeRAM模块
这个是PC模块
这个是OP模块:
DataPath模块:
这个是RegFile模块:
ALU模块:
不知名模块:
嗯,更多的就不截取了,反正就是这一堆的线路图,很多我也不知道该怎么解释了,时间有点久远了。
把这些组合在一起就成了CPU的内部逻辑,然后配置上代码内存和数据内存(代码的内存和数据的内存是分开的)、时钟等等就是一个可以运行一段小程序的计算机了。
后面为了验证这个CPU的可运行,且没有出错,自己设计了一小段汇编程序,并手工转码成16进制,如下所示:
中间为汇编指令,后面为转码后的16进制。
内存的初始数据如下:
然后只需运行这段小程序,在进行一些运算后,内存的数据变成了如下的形式:
上面看的是理论数据,下面我们来看看实际的运行效果:
以上,收!