自己设计制作CPU与单片机(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-19 03:48:59

点击下载

作者:姜咏江

出版社:北京图灵文化发展有限公司

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

自己设计制作CPU与单片机

自己设计制作CPU与单片机试读:

前言

“能不能自己设计制作一台计算机?”

现在,我可以肯定地回答你:“能!”

计算机发展到今天,几乎已经是无处不用了。然而谈起中国人自己制造计算机的问题,未免还有些气短。特别是计算机的灵魂CPU,一色都是国外制造的,就是有人说某CPU是中国人制造的,你也未必相信,最好的回答恐怕也是“山寨”或者仿造。

什么我们自己不能够制造CPU?这涉及到CPU的设计理论方法和超大规模集成电路制造技术。据最新的报导,我国已经掌握了 22纳米的超大规模集成电路生产工艺,看来很快就会有真正国内生产的CPU芯片问世。

说到 CPU设计,关键要有理论和设计实践环境。长时间以来,我们既缺先进的设计理论,又缺实现CPU理论的设计环境。理论需要头脑思考,只要我们辛勤认真地学习和思考,理论问题就能够解决,关键的是实现CPU设计的环境与工艺技术。可以说CPU设计环境和工艺技术阻碍了我国微电子工业的发展。现在这个问题应该说已经解决了。十几年前发展起来的FPGA芯片,使这一切都变得简单了。FPGA的出现标志着一个全新的个人设计制作CPU芯片的时代到来了。

从进入计算机领域的那一天开始,我就无时无刻不在梦想自己制造一台计算机。这一梦想在2006年终于成为了现实。我不但设计出了完全属于自己的CPU,还亲手制作了以自己的 CPU为中心的通用单片机。一般的单片机不能随时运行用户程序,而我制作的单片机可以在运行过程中,随时输入用户程序执行。专用计算机和通用计算机的根本区别就在于能否执行用户程序。

一晃8年的时间过去了。很高兴地看到想要自己设计制作CPU与计算机的人越来越多。这期间向我询问个人设计制作 CPU技术的人也多了起来,所以我决定将自己的心得体会写出来,希望能够快速地营造一个自己设计制作 CPU与计算机的氛围,希望我国的计算机高端理论和技术能够快速发展。

本书是我三十几年从事计算机教学与科研的经验总结,其中包含多个自己设计的 CPU实例。既有复杂指令系统的 CPU,也有流水线一类精简指令系统的 CPU,特别是还有我自己发明的动态 CPU的设计。这些设计工程实例,既有复杂一些的,也有简单的。这样做的目的,是想让那些资深的计算机技术人员和那些资历尚浅的计算机 CPU设计爱好者,都能够在本书中获得一些启迪,增加他们投身到计算机高端领域的兴趣。

本书共分三大部分:

上篇叫做CPU设计制作入门。其中主要介绍用硬件编程语言如何来设计制作CPU与单片机。这一部分主要以精简指令格式的CPU设计为主。由浅入深,有简单CPU设计、通用CPU与单片机设计制作、流水线CPU设计、通用流水线CPU与单片机设计制作、透明三级流水线CPU与单片机制作等。

中篇叫做深入CPU设计。这一部分对计算机CPU设计的理论和方法作了深入地介绍和讨论,从源头上来解决CPU设计的基础理论和技术,重点介绍原理图方式设计CPU的技术和方法。这样做的目的是能对初学 CPU设计的读者给予理论上的指导,同时力求对那些有创新CPU设计能力的读者有所帮助。这一部分主要包括:(1)计算机 CPU设计原理和方法,重点给出了限位记数法和对称制,它们是机器计算的重要理论和设计的重要依据;(2)构成 CPU的各种元器件设计方法与实际设计,特别给出了定点数加、减、乘、除和浮点数加减法运算器的设计,这些运算器都能够实现超长数的运算;(3)给出了PMC110计算机基础型和带液晶屏单片机设计的工程实例,重点介绍如何用原理图设计通用计算机的内外结构,液晶屏设备的使用及CPU与外设异步通信的基本方法;(4)给出了动态计算机PMC362的设计思想与设计方法等。

下篇叫做自己制作单片机。这一部分主要介绍通用单片机如何制作。其中包括带有FPGA的计算机电路板设计、器件选择、设备安装、工程下载等一系列设计制作方法。通过这一部分内容论述,让读者能够成为一个可以独立运行的单片机的制造者。

CPU设计制造之所以被称为“高科技”,在于它所涉及的知识和技术领域较广,所以使一些想涉猎这一领域的人望而却步。什么复杂的 CPU设计、什么高深的操作系统设计,通过本书你会看到,原来这一切也不过是如此而已!

书中令作者十分得意的有三点:

第一是限位数与对称制理论,它在补码制的基础上,完善了机器精确计算的理论和方法;

第二是动态 CPU的设计理论和方法,这一发明是对以进程线程方法进行程序运行和调度,以系统软件管理内存的运行方式发出了挑战,进而发出了“减少软件消耗”的呼声;

第三是让读者一下子就能够接触到操作系统内核,用简单的十几条指令,就能让读者体会到操作系统的本意。

书中许多内容都是作者的独创,虽然这些内容有些距离市场应用还有相当的距离,但其中所揭示的理论和方法却是最直接的。发展一下,进入市场是指日可待的事情。就我个人几十年的设计体会来说,这方面的东西未必像一些人所描述的那样高深莫测,在FPGA器件和电子设计自动化软件EDA存在的条件下,有志趣的高中生都可以自己将CPU设计出来。

但愿我所写的这本抛砖引玉的书,能够吸引我国更多的年轻人投入到 CPU与计算机的设计领域中来!姜咏江2014年1月12日上篇CPU设计制作入门

计算机是人类智慧的最高结晶,CPU是这种智慧结晶的核心。我们只有掌握了 CPU的设计制作技术,才能说真正掌握了计算机。计算机电子电路设计最基本的方法是原理图,这种设计方法不仅要掌握计算机的理论和方法,而且要深刻理解电子电路的相关知识和技术。原理图设计方法对搞软件设计为主的人来说,有一定的难度。近些年发展起来的硬件编程语言,在很大程度上降低了设计者对硬件电路细节的设计要求,通过电子设计自动化 EDA(Electronic Design Automation)软件,就能够开发出一些硬件产品。这大大降低了电子电路的设计难度,非常受电子市场产品的设计制造者欢迎。EDA 软件的设计者将常用的基本电子电路,做成了可以直接用编程语言描述的元器件。EDA 软件使用者在不很了解元器件结构细节的情况下,就可以拿来组织自己的较为复杂的电路,从而简便了电子电路的设计。不太懂原理图设计的人开始接触CPU设计,当然最好是从编程的方法入手,待有了一定的基础之后,再深入研究原理图设计方法,深刻地去探求CPU设计的电子电路实现问题更好。

本篇我们假定读者有C语言设计经验,在懂得计算机基础知识的基础上,以硬件设计语言Verilog HDL为主,通过编程的方法引领读者快速地进入计算机CPU设计的天地,引领读者学会用编程方法设计CPU和制作简单的计算机。如果需要首先了解原理图设计CPU的方法,请直接阅读中篇的相关内容。第1章自己就能设计制造CPU

几年前我曾劝别人与我一起搞 CPU设计,但那时得到的回答是:“搞 CPU设计?水太深了!”

计算机是信息世界的佼佼者,计算机的 CPU使人感到奥妙高深,神秘莫测。如今的计算机CPU除了包含运算器、控制器之外,还包含有高速缓存cache存储器,是计算机智能的核心,所以又被称为核。我国把与计算机相关的信息产业叫高新技术产业,这无形当中更增加了人们对计算机CPU设计制作的神秘感。能够设计制作CPU,无疑是每一个学习计算机技术的人向往的事情。一个人自己可以设计制造 CPU吗?若干年前,这个问题的回答是否定的。如今则不同了,我以我设计制作计算机CPU的经历和经验,可以完全肯定地告诉你,这现在不仅能够做到,而且能够做得很好。

由于超大规模集成电路技术的发展,近十几年出现了现场可编程阵列器件FPGA,这使电子电路的设计工作一下子从“刀耕火种”的时代摆脱出来,从众人一起从事 CPU设计制造的大协作时期,进入了个人设计制造复杂的 CPU的时代。你不信吗?被称为人类“高科技”的计算机CPU设计制造,被我三言两语轻松地说“自己能够制造”,这未免有些吹牛了吧?如果你有C程序设计的基础,又是一个确实想要探求计算机的核心部件CPU设计制造的人,就不妨通过本书与我一起去制造几个CPU试试吧。1.1 自己设计制作CPU有啥意义

我国真正普遍应用计算机还是在20世纪80年代,那时多数人都缺乏对计算机的全面认识,认为计算机就如同汽车一样,买回来用就是了,因而从上到下都把主要精力放在了软件方面,再加上我国集成电路技术方面的落后,在计算机核心设计方面没有多大的发展。直到21世纪初,我们才有了自己设计制造计算机核心部件CPU的打算,但是多数都在仿造美国的设计,根本谈不上独立的创新设计。我国之所以到 21世纪初才进入了计算机核心设计,其关键的问题是缺乏进行计算机核心设计的硬件条件。

1945年第一台电子计算机用的是电子管制作的,这台计算机的体积有一座楼房那么大。以后即使有了晶体管和印刷电路技术,计算机仍然不能普遍地应用,国外也只是在一些科研单位和重要部门使用。至于我国就更是谈不上应用计算机的普及问题了,加之又经历了“文化大革命”,计算机基础的薄弱就更凸现出来了。文革后期,由清华大学、北京无线电三厂、天津无线电技术研究所、江苏无线电厂、苏州无线电厂、中国科学院原子能研究所、上海师范大学、上海无线电十三厂和上海中兴无线电厂等单位联合,在1974年以NOVA1200小型机为蓝本作为仿制样机研发出DJS130小型计算机。DJS130小型计算机以德国造的打字机作为输入输出设备,没有显示器,主机箱就有写字台那么大,内存是磁芯结构,起初只有32K,关键零部件是不是自己设计的无从知晓。据有关人士透漏,总共生产了 1000余台供科研院所使用。但后来受到了国外计算机厂商的冲击,没有了继续发展的潜力。我国的 CPU设计直到本世纪初期才崭露头脚,以“龙芯”为代表的超大规模集成电路结构,山寨 MIPS 的CPU诞生了,严格地说,这不算自己设计的CPU。什么是自己设计的CPU呢?那应该是指令系统和整体结构都是自己设计的才算。据报道,“龙芯”与美国 MIPS 公司已经签约,承认了MIPS公司在“龙芯”芯片中的知识产权,龙芯公司负责人对外讲只是认可指令系统。CPU的指令系统包含了什么?是整个计算机的设计思想与方法!其实,仿制并不是一件羞耻的事情,相反,仿制是一种快速深入学习的极好方法,是深入领会他人先进技术和理论的极好形式,进而能够为自己的创新设计打下良好的基础。试问,哪一个搞科学研究的人不是从“仿制”先人或他人的思想方法开始的?

还好,上个世纪后期传入我国的FPGA器件和相关技术,给了我们一个从源头设计制造计算机CPU的机会。FPGA技术让计算机设计从集团作战,进入了可以个人设计的阶段,于是我国才出现了一批真正致力于计算机CPU设计的科学家。

计算机经历将近 70年的发展历程,可以说已经相当完善了。但是,我们为什么还要在这里提倡自己设计制作CPU呢?

计算机虽然产生于西方国家,但这是全人类的巨大财富,在知识产权被普遍承认的时代,谁掌握了计算机的核心 CPU设计技术,就如同掌握了人类财富中巨大金矿的钥匙。只有掌握了计算机CPU的核心技术,我们才能够有权力使用和享受信息这笔人类巨大的社会财富。

长期以来,我国计算机人员大多数都游离在计算机核心设计技术之外,都在使用国外制造好的计算机,并把精力用在了软件编程上,甚至错误地认为“软件什么事情都能做”,这阻碍了我国计算机核心CPU技术发展。

我国的计算机教育和微电子教育脱节,弄得计算机专业的学生对电子电路似懂非懂,根本就不去涉猎计算机硬件方面的设计。而学微电子的学生都在大量地使用国外的核心部件,在人家提供的 CPU产品基础上,作下游产品,技术上多数在做接口,按照人家安排的用户方法做进一步的应用。他们根本就用不着对计算机 CPU等核心结构设计和制造,根本就没有机会作CPU设计实践。更叫人不能容忍的是教师也是对CPU内部结构和设计方法似通非通,对CPU设计制作知道得较少。因而自己设计制作CPU,那是培养计算机、微电子高水平师生的需要。

计算机产业过于追求市场,追求利润,他们多数都在借助于美国或其他国家的大公司赚钱,而不能够去深入探讨计算机理论,进行技术革新,更谈不上解决计算机自身关键性的问题,多数情况人云亦云,跟着国际公司的商业宣传鼓噪国内市场,获取国外公司剩余下来的少数利润。急功近利的思想,统治着我国的计算机企业界,更不要说创造性地去搞计算机CPU设计制造。

像“核高基”一类的国家重大项目,瞄准的是所谓国际水准,搞大兵团作战,参加项目的单位被任务压得抬不起头来,如何在 CPU设计领域真正去搞创新?多数的情况是将国外知名公司的CPU设计拿来剖析,修修改改,很难从自己的认识去真正设计创新的CPU产品,这样大多数CPU都会落入人家CPU设计翻版的圈圈,难以逃出。

CPU设计制作是软硬件一体化工程,搞CPU设计必须软件硬件都要精通。而这种精通必须从 CPU设计的实践中才能够获得,因此,必须培养计算机软硬件方面的全才,这种全才人才系统培养的最好方法,就是要通过CPU设计制作的过程磨练。

电子设计自动化EDA技术的发展,为个人设计制作CPU提供了很好的条件,人们不必再需要投入大量的资金,去购买材料和设备,也不需要去搞多人的协作,一起去设计CPU。只要你有强烈的兴趣和灵光的头脑,就可以在家中设计制作 CPU,可以完全按着自己的设想进行CPU设计实践。

我国计算机CPU设计制作人才奇缺,培养自己设计制造计算机CPU的才智和能力,是国家强盛的需要,是实现中国梦的需要。面对国家发展的需要,我们怎么能够说不呢?

信息时代的关键产品是计算机,而计算机关键的产品是 CPU。世界信息技术产业的发展,目前给了我们一个非常难得的机遇,抓住机遇,快速地培养自己的设计制作计算机核心部件CPU的能力,我们才有希望成为信息时代的强国。1.2 我设计制作CPU的经历

我本是学数学出身,毕业时正赶上我国计算机教育兴起。一个在校期间只学过ALGOL60语言,且是没有上过计算机操作的人,居然也当上了计算机课程的教师。不过,自从我进入计算机教育的行列,就有一个奋斗的梦想,一定要自己设计制造一台计算机。这个梦想经历了近 20年,也就是世纪交替年的时候,我的逻辑计算机设计基本上完成了。但那是纸上谈兵!虽然我少年时参加过无线电课外小组,也曾自己组装过晶体管超外差收音机,自己描过印制电路板,懂得一些焊接技术,但要用这些技术就去造一台计算机,那简直是笑话。

尽管如此,我还是“贼心不死”,怎么才能验证我设计的计算机是真实的?我所设计的CPU 能够真实地运行程序吗?我用什么方法自己造一台计算机呢?这些问题当时一直在我的脑海中萦绕。我曾多次将学校那些出了问题的个人计算机拆卸重装,想到自己要造一台计算机,时常望着那些集成电路块发呆。难,实在是太难了!

2004年,一个偶然的机会在微电子工程朋友那里,让我接触到了EDA软件QuartusII,认识了现场可编程阵列器件FPGA,从此我的梦想就有了实现的可能。后来,买了一块友晶公司的DE1开发板(见图1-1),我用原理图方式设计了我的第一款计算机,并下载到DE1上,真实地跑起了自己设计的汇编程序。自此,我自己设计制作 CPU 的历程就开始了。在学习他人先进思想技术的同时,设计了动态计算机PMC362CPU。就是在DE1开发板上,我很快就实现了动态计算机PMC362的CPU烧制和运行,当6个测试程序在它上面动态运行的时候,我甚至激动得要跳起来。

友晶公司的DE1开发板是非常好的平台,能够连接键盘、显示器,具备各种通信接口,就连SD卡插口都带,SRAM、DRAM、FLASH、时钟等设备一应俱全。虽然在当时这是非常全面的微电子工程开发平台,但对于集中精力搞CPU设计的人来说,未免显得有些庞杂。能不能自己设计一个简单的专门适合 CPU结构设计的开发平台?这个平台要把一切都放置在FPGA中,让一个完整的计算机CPU都设计在FPGA中,岂不是更好?这个愿望,经过努力我也实现了。图1-1 友晶DE1开发板

经过学微电子工程的朋友帮助,我使用印制电路板 PCB设计软件 PADS,完成了 PCB设计,并到市场购置了FPGA和其他需要的器件,自己进行了焊接,最后,一台完全属于自己设计制作的计算机CPU的专用平台造出来了(见图1-2)。就是这么一个看起来十分简陋的开发板,让我在上面搞了许多我认为的大动作,它让我设计的多款 CPU都跑了起来。有X86结构的CPU,有流水线结构的CPU,有多元动态计算机的CPU。当PMC362在这个自制开发板上运行的时候,我立即就想到将这块开发板叫PMC。

在PMC开发板上,我用QuartusII的永久方式烧制(一般说的下载)了我的第一款完整的二进制通用计算机,它能够运行用汇编写出的程序。我把这个计算机叫PMC。

为什么把这个计算机叫PMC呢?在组装这个计算机之前,我已经用Quartus II设计出了动态计算机。这是我研究多处理器计算机的心得,已经在Quartus II中仿真验证过了。这款动态计算机有3个程序处理器,6个程序存储器及其附属设备,2个通道处理器组织在一起,形成了6个程序自行调度,在3个程序处理器和2个输入输出通道上动态运行的状态。这个计算机的程序运行和设备的调度管理,都不使用操作系统,而是依靠程序运行的需要,自动寻找空闲的处理器连接运行。不用操作系统管理多个程序在不同多处理器上运行,你未必相信,但确确实实我让它们这样做了。那时我将执行程序的处理器叫执行单位PU(Performance Unit)。将放置程序、数据和一切与程序执行环境相关的设备组织成一个整体,叫存储单元MU(Memory Unit)。输入输出处理器仍然用以前的习惯叫通道CHL(Channel)。取其字头,于是就有了PMC362计算机的名称。现在开发板上“烧制”在FPGA中的只是最简单的PMC,其中只有一个PU,一个MU,没有CHL。图1-2 我造的第一个CPU开发板

别小瞧这台PMC计算机,它是一台能够装填用户程序,并能够在虚拟存储空间上运行的计算机。它是我们现在所说的X86结构,但又是动态计算机的最简单版,它按照动态计算机的思想设计,功能强大。别的不说,它可以进行任何存储空间足够条件下的精确算术运算,不论多少位的数据都可以,并且运算结果分毫不差。例如,我用本机汇编设计了一个求255以内整数阶乘的程序,让它常驻内存,随时可以让用户程序调用。255!,咱们现在使用的微机能够准确地计算吗?能不能,你可以编程试试,恐怕多数会给你浮点表示的近似值。然而这台计算机却能够算出精确的结果。255!的结果要有 210个字节长度!这台小小的计算机会以走马灯的形式给你在数码管上显示出来结果。

这台计算机虽然只是二进制层面上的,但完全可以进行有各种外部设备组织的扩展。是深层次培养训练CPU设计人员的基础设备。在图1-2的板子上,我烧制过动态计算机PMC362,也烧制过16位的流水线结构CPU,实验证明了多种CPU设计,都可以用我自己设计的这款CPU专用开发板烧制,并能通过烧制后的实际运行,来验证自己的设计效果。

出于体验外设扩充设计方法,扩大可视输出的效果,我又设计制造了带有液晶屏的PMC。这一款专用 CPU设计实验开发板的实物如图 1-3所示。该实验开发板只是在前面一款的基础上添加了液晶屏,然而FPGA的资源要求增加了不少。所以我将Altera公司的Cyclon EP1C6T144FPGA芯片,换成了资源丰富一点的Cyclon EP1C12Q240FPGA芯片。这样原来的144个引脚,增加到了240个,满足了增加液晶屏之后对引脚的需求。图1-3 我造的带液晶屏CPU开发板

液晶屏的增加要做相应的接口设计,包括设备的驱动程序有时也要增加设计,这一切都是在FPGA内部设计完成的。设计这些东西对自己全面理解CPU,设计CPU结构都有很大的启迪和帮助,为今后设计更有创新意义的CPU,能够打下良好的基础。1.3 电子电路设计制作的新变化

自己能够设计制作 CPU的坚实基础是 FPGA。可以说,现场可编程阵列器件 FPGA的出现,使计算机设计与制作一下子进入了个人时代。这个时代的特点之一就是即使是非常复杂的计算机系统,也可以神奇地装填到一个方寸大小的集成电路芯片当中,这使电子电路的设计者从此摆脱了“刀耕火种”的状态。

长期以来我国的计算机产业一直不得不跟在美国等技术发达国家的屁股后面跑,中国人不是不聪明,也不是没有志气,而是我们的科技基础太差,缺少自己设计制造计算机的必要条件。就拿超大规模集成电路来说吧,没有现代的技术设备,单靠两只手,再有本事也是捏不出来的。有了超大规模集成电路可编程芯片FPGA,情况就大不相同了。FPGA虽然是国外生产的电子产品,然而这种产品是给现代电子工程技术人员打造的超级工作环境,一切电子电路设计需要的材料在FPGA中几乎都有,而且不用焊,也不用动手连接组装,通过计算机辅助设计软件,就可以将所需要的电子系统设计构造出来。因而许多人认为FPGA是个人进行高精尖电子系统设计时代的标志。本书介绍的自制二进制层面上的通用计算机系统PMC,就可以说是这一时代到来的例证。

虽然计算机是人类科技发展的产物,但由于计算机的功能强大性和应用普遍性,使它直接影响着国家的力量和人类财富的分配。因而每个国家都会不遗余力地发展计算机产业以及相关产品,力争成为计算机产业的领头羊。计算机产业的上游一直被美国等几个少数国家垄断着,使得像中国这样的大国都不得不跟着他们,作产业的中下游产品。要改变这种被动的局面,我们一定要自己全面掌握计算机设计技术,通过独立的工作实践,设计实现具有特色的适用的计算机系统,这样才能在不远的将来,让自己制造的计算机系统成为强大国力的一部分。

现在,据说我们国家自己可以制造 22纳米的超大规模集成电路芯片了,国外的水平也只是在 14纳米左右,在芯片制造业我国追赶上世界先进国家的日子已经不远了。但是,信息产业的龙头——计算机CPU芯片设计制造业,却距离先进国家甚远。我们需要创新研究,在不久的将来,在CPU设计制造方面才能走向世界前列。

有电子电路的现代化设计手段 EDA,有能够充分发挥人们聪明才智的电子电路试验场FPGA,只要我们能够不断地发挥自己的聪明才智,超前的计算机CPU结构,就会在我们的手中制造出来。1.4 自己设计CPU的条件

一个计算机爱好者要想设计制作 CPU,需要哪些条件?在我看来,最重要的是他应该有设计制作 CPU的强烈兴趣,有勇于攻克科技难关的毅力和决心。当然,个人只有这方面的主观条件还不够,还应该有一定的基础,不然 CPU设计无论如何也不会称为人类的高科技产品不是?

简单地说,自己学习CPU设计,要有一块带有FPGA的电子电路设计开发版,至少要有一定的计算机相关基础知识。例如,计算机的基本构成,计算机的软硬件关系,二进制数和十六进制数,计算机工作为什么要执行程序等。其实,这些都是中学生就具备的知识,并不高深。此外,还要懂一些电子电路的基础知识,如有过程序设计的经验更好,特别是学习过C程序设计,那对学习计算机CPU设计来说,困难会少一些。

本书的起点,是针对计算机软硬件学生和科技工作者展开的,但是也照顾到那些基础不齐的发烧友。论述中必要的基础知识,也会适当地讲解,目的是让热情的发烧友能够顺利地投入CPU的设计与制作。

在 CPU的设计制作实践中,我深深地体会到了“只要功夫深,铁杵磨成针”这句话的深刻含义。1.5 创新CPU设计的意义

追求创新是一切科技工作者的天性。计算机CPU设计是人类创新研究最好的平台之一。计算机科学是集人类智慧之大成的一门学科,CPU的设计研究不但主要关联着数学、逻辑学、电学、信息学等,而且将人类研究的一系列科学方法都包含进来了,各种各样的理论和方法在计算机世界都有充分地体现。

自己设计制作 CPU,不仅能够快速地掌握计算机核心部件的工作原理和设计方法,而且在设计CPU的实践中,通过深刻理解CPU的工作过程和设计技巧,能够获得创新的真知灼见,创造和发现别人不曾理解和发明的东西。

现在,计算机的种类繁多,从超级计算机到微处理器 MCU,几乎是应有尽有。但即便如此,仍然不能够满足我们生产生活的实际需要。这需要那些专门的计算机 CPU问世,以便准确无误地进行各种智能处理。计算机 CPU产品大部分来自美国,但美国提供给我们的CPU是带有保密条件的,一些特殊环境下能够使用的CPU产品,包括军事部门使用的CPU产品,他们是不会提供给我们的。他们要保证对我们的优势。如果我们完全依赖他们,或者跟在他们的屁股后面去模仿,那就是我们的悲哀。为此,我们必须认真地搞 CPU的创新设计,在借鉴前人或外国设计的基础上,从根基上认真研究,力争设计出完全属于我们自己能够掌控的CPU,这是现实和长远都十分有意义的事情。

近几年片上多处理器CMP(Chip Multicore Processor)发展迅速,片上“多核”已经被商家炒得热火朝天,但多核的计算机效率并未像人们想象的那样,获得成倍的增长,其原因主要有:

多核不能实现完全的并行工作。因为多核本质上是一个局域网络,核间通过网络形式连接,任务的分配和执行是非一致性的,特别是片上多核的结构不能像片外网络那样,每个节点都有任务输入机制。它的任务装填方式是有限的一个或几个端口,故而难以保证各个核能够分配到充分的任务工作。

多核不能充分发挥芯片结构的特点。由于高集成度的芯片体积小,线延时极短,并且时钟有较好的“同时性”,非常适合“同步数据传输”。但网络数据传输方式是异步的,需要打包、解析、确定路由等一系列对于同步传输是多余的过程,因而多核会耗费许多时间来进行数据转移传输,而不能很好利用芯片集成结构的优势。

通行的多核系统管理方式落后。目前,多核结构中程序执行的调度管理采用软件方式,依据操作系统进程调度或网络协议,频繁地进行任务分配和程序调度。由于操作系统和协议本身就是需要到处理器上执行的程序,它们的执行不但占用处理器资源,而且还无法实现系统对各核运行的同步管理。这样在“管态”下,就会出现处理器停顿的现象,不可避免地会形成软件管理瓶颈。

多核无法避免“存储墙”问题。由于多核延续继承了现代操作系统的共享内存的程序存储方式,因而对内存的要求越来越大,而访存带宽不能随着核的增多而增加,反而使处理器对存储器访问时间加长的矛盾愈加突出,虽然采用多级缓存结构勉强可以保证正常运转,但增加缓存所带来的时间消耗,抵消了多核并行工作提高的效率。这种“存储墙”问题一直伴随多核结构。

多核结构并行编程困难。由于多核在片上采用的是网络结构,而网络结构不适合统一编写并行程序,这样就加重了软件编程人员的负担。软件人员惊呼:“免费的午餐没有了!”超大规模集成电路技术的发展,不仅在方寸之间汇集了大量的硬件资源,而且为信息的高效传输、硬件逻辑设计等都提供了极为方便的条件。CMP 架构设计能否充分利用集成芯片的特点,将是衡量其好坏的重要标志。国内率先发展起来的动态计算机核心设计,不仅在 CMP核心架构上有了很大的改造,而且在多核引发的一系列问题上有望找到化解的方法。

我国掌握计算机 CPU核心设计制造技术的人才奇缺,有志者应该将自己投身到信息强国的行列中来。不论 CPU创新设计有多么困难,只要我们努力从根基上研究,掌握好计算机的上游设计制造技术,信息化时代的强军、强国之梦,就有可能很快实现。第2章进入硬件设计的天地

CPU设计实际上是软硬件设计一体化的工作。如果你从来没有搞过电子电路硬件设计,那你就要先来接触一下进行电子电路硬件设计的环境,了解电子电路设计用的计算机辅助设计软件,学会如何使用它。我们设计CPU将要使用的计算机辅助设计软件叫QuartusII,它是美国电子芯片厂商Altera公司的产品。针对FPGA器件Quartus II提供了电子电路的原理图设计方法,也提供了用硬件描述语言编程设计电路的方法,是一款应用广泛、十分优秀的EDA软件产品。

如果你使用过QuartusII,并且用Verilog HDL语言设计过电子电路,那么这一章就可以跳过去,否则你应该仔细地阅读,不然你还会返回来读它。2.1 搭建自己的制造工厂

不论是谁,干什么工作,都要有他的工作环境。设计高科技的计算机 CPU芯片,自然少不了必要的工作条件和设计环境。现在,请你准备好一台 Windows 系统下的电脑,我们一起来搭建你从事CPU设计所必需的工作环境。

能够用来设计硬件 CPU 的软件目前有好几款。笔者所进行的各种 CPU 设计,都是在Quartus II上完成的,这款软件很是简单方便,也适合初学CPU设计的人使用,所以就推荐使用这个EDA软件。2.1.1 安装你的设计制造工具

EDA软件Quartus II是一款极好的计算机辅助设计软件,它把电子电路的硬件设计过程,转化成了计算机编程和可视化图形操作,由此给广大的电子电路设计技术人员带来了极大的方便。如果你使用的计算机没有安装Quartus II软件,请按照我说的要求来安装它吧。

你有 Quartus II 7.2的安装盘吗?如果没有,请先到 Altera公司的网站http://www.altera.com.cn下载,这款软件可以免费下载。我国许多高校都有Altera公司免费赠送的Quartus II 7.2软件。请找到Quartus II 7.2软件安装盘,放入光驱之后,系统会自动出现图2-1所示的Altera Complete Design Suite v7.2安装界面。

Altara公司提供的这张学习安装盘上有很多内容,其他我们不用去管它,你只要在安装界面上选择Install free package按钮进行安装,并选择用Next和Yes来回答安装过程的提问,最终就会将这个软件安装完成。图2-1 Quartu II安装界面

完成安装 QWuartus II 之后,在系统桌面上会有图标,在系统开始菜单中也可以找到Altera→Quartus II7.2 Web Edition的启动项。双击系统桌面上Quartus II图标,或单击菜单中的启动项,都可以启动Quartus II。2.1.2 获得开工许可证

Quartus II 是授权软件,正常使用必须先添加license授权文件,以便得到使用许可。由于我们是用于学习目的,Altera公司免费支持。下面我们来准备许可证license文件,并进行授权安装。

网上找到Quartus II7.2授权文件夹,打开这个文件夹,并打开“读我”文件。按照这个文件所说的方法,进行相应的 license.DAT文件改造。授权改造一定要谨慎操作,不然会很容易出现问题。这一过程需要正确填写你计算机的网卡号。

将整理好的 license.DAT文件最好复制到 Altera文件夹的子文件夹“72”之下,保存在其他文件夹中,查找起来很不方便。一切准备停当,然后就可以进行授权文件安装了。

Quartus II软件授权文件的安装要在它启动之后。Quartus II启动之后,系统将出现图2-2的操作界面。界面上方是系统操作菜单,接下来是操作工具栏。工具栏前面与Word工具栏相似,后面有编译、仿真、下载烧制等项按钮。

在系统菜单和工具栏的下方,左面是文件实体结构Entity,它有3张卡片,我们主要使用顶层文件Hierarchy和Files卡片。在Entity的下面是操作状态Status窗口,右面是设计工作区域。窗口的最下面有很多张卡片,用于显示各种操作所反映的系统信息。图2-2 Quartus II操作界面

安装授权文件license要从主菜单中选择Tools→License Setup,将会得到如图2-3所示的选择界面。在 license File栏目单击三点查找按钮,找到你整理好的那个 license.DAT文件,并单击OK按钮,完成授权使用操作。

如果在改造license.DAT文件时,不知道自己计算机的网卡ID,就可到这个License Setup下面的Network Interface Card[NIC] ID中去复制。图2-3 License选择操作

我们只有正确地安装了license.DAT之后,才能够有效地使用Quartus II,不然你即使设计了文件,也不能完成编译一类必要的设计操作。2.1.3 熟悉如何建立设计工程

Quartus II 是流行的集成环境软件,其中既包括程序文本编辑操作界面,也包括可视化编程界面。为方便对多种文件的管理和使用,Quartus II 一般要求建立工程项目。工程项目中,文件的组织如同倒挂的树。树根上的文件叫顶层文件,其他的文件都位于枝和叶的状态。顺着根、枝和叶的关系,很容易查找到所关注文件的主从关系,从而可以部分地进行设计和检查,十分方便。做为初次接触EDA软件Quartus II,我们先来熟悉一下如何建立工程项目。

在图2-2的Quartus II操作界面下选择主菜单栏中的File→New Project Wizard,这样系统会弹出图2-4所示的导航对话框。图2-4 新建项目导航对话框

在导航对话框第一行下面的输入区,输入工程项目所在的文件夹路径(在此输入d:\mypro),在第二行下面的输入区,输入所建项目的名称(在此输入 mypro),同时系统会在第三栏中,自动输入工程项目顶层文件的名称 mypro。工程项目文件 mypro 的扩展名是“.qpf”,顶层文件mypro只是预留的文件名称,实际设计中顶层文件名称还可以更改。

以上工作完成后选择next按钮,如果输入的文件夹并不存在,系统会提示是否建立,选择Yes之后,即能够建立相应文件夹和设定名称的工程项目,但并不建立顶层文件。

在此之后,系统会弹出图2-5所示导航对话框,要求添加已经设计好的文件。如果以前你已经进行过相关的设计,那么在此就可以将设计的文件添加到当前的工程项目当中。如果没有,就可以向下进行。添加文件的工作也可以在设计过程中随时进行,在此我们直接选择Next按钮,接下来就会进入下一步。图2-5 添加项目文件导航对话框

随后系统将弹出图2-6所示的选择目标器件及参数的导航对话框。所说的目标器件是指QuartusII能够使用的可编程器件FPGA。目标器件的参数包括器件家族、封装型号、引脚数和速度级别等。此处可按图所示进行选择,然后单击Next按钮,进入下一步。图2-6 选择目标器件及参数导航对话框

此后,系统导航会弹出图2-7所示窗口,要求用户选择使用的其他EDA工具相关软件。可以不选,直接单击Next按钮。图2-7 EDA工具设置导航对话框

最后,系统将弹出图2-8所示的项目设置信息总结窗口,该窗口将之前所作的设置作了汇总。图2-8 工程项目设置总体信息

工程项目创建内容重点包括:项目所在目录,项目名称,顶层文件名称,器件家族名称,器件型号等。选择Finish按钮。至此,我们就完成了第一个CPU设计工程项目的建立工作。2.2 设计制造CPU需要热身

Quartus II 针对 FPGA 提供了原理图操作和硬件语言编程两种设计方式。原理图方式应该说是最基本的,而硬件编程语言是在原理图的基础上,构造出来的程序设计方式。编程方式的起点离实际器件较远,又接近于软件人员习惯的程序设计方法,故容易被计算机软件人员接受。我相信大家都是学习过软件编程方法的人,所以在这里先介绍 EDA的软件的编程设计方法。

我们使用的硬件编程语言叫Verilog HDL。Verilog HDL就是参考了C语言的结构设计出来的,因而学习过C编程的朋友,会很容易看懂下面的设计。2.2.1 初学硬件编程的例子

用电子电路构造算术运算的加减法运算器,应该说是破解用机器进行数值计算原理的最好例子,但是这需要理解“限位数”的理论和方法。为了让你不至于被记数理论的问题所困惑,我们将用限位数的理论设计加减法运算器的问题,放在后面的章节去论述。在下面的编程设计中,你就按照无符号整数的运算来理解所说的数就可以了。

打开我们上节建立的 Quartus II设计工程 mypro,然后按照下面的步骤,我们一起进行设计加减法运算器的操作。

第一步,在图2-2的窗口,选择主菜单File→New,系统会出现图2-9的选择窗口。图2-9 新建文件选择窗口

在这个窗口中,选择Verilog HDL File。之后将出现如图2-10所示的程序文本编辑窗口。系统会以Verilog1.v做为缺省文件名,存储的时候你可以进行修改。图2-10 新建程序编辑窗口

一般来说,程序文本编辑区域的左边会出现 Entity 和 Status 两个窗口。结构实体窗口Entity有3张卡片,第一张Hierarchy会指出当前的顶层文件名称,还有编程使用的FPGA家族和型号信息。第二张Files卡片会列出已经设计的全部文件。第三张卡片Design Unis列出的是原理图方式设计的器件。这三张卡片的内容在工程设计中会经常使用。

第二步,我们在程序编辑窗口中单击鼠标右键,并在弹出菜单中选择 Insert Template。这时会出现如图2-11所示的模版选择菜单。请在左面的Language Templates栏下选Full Designs,并打开Arithmetic后,再打开Adders,然后选择SignedAdder/Subtractor(AddSub)。此时,在右面Preview区域出现的是系统提供的有符号加减法运算器的设计模版。

你也许尚不熟悉 Verilog HDL的程序结构,所以利用 Quartus II提供的编程模版好处很多,不仅能够规范没经验设计者的书写,免得出现编程格式上的差错,而且是初学者学习程序结构设计的最简捷方法之一。

模板中带有“//”的行是注释行,不属于实际的程序,真正的程序是从 module 开始到endmodule结束。

我们单击了Insert按钮,关掉插入窗口,这样在程序编辑窗口就会出现Preview区域的程序内容。图2-11 Module编程模板

第三步,我们并不完全同意模版的书写。请将模块名称改为Add_Sub,并将其保存为存储文件名。(请注意,Verilog HDL要求module描述的实例名称必须与存储文件名一致!)接下来我们将程序内容稍加修改,得到的程序如下。

module Add_Sub

(

input [WIDTH-1:0] dataa,

input [WIDTH-1:0] datab,

input Sub, // 如果Sub为0,加减法器做加法,为1做减法

input clk,

output reg [WIDTH-1:0] result

);

parameter WIDTH =16;

always @ (posedge clk)

begin

if (!Sub)

result <=dataa + datab;

else

result <=dataa - datab;

end

endmodule

将修改后的这个程序再次保存,我们进行硬件设计的第一个VerilogHDL程序就编写好了。2.2.2 程序书写的要点你知道吗?

如果你没有用Verilog HDL进行编程的经验,也许是一头雾水。当然,如果你有这方面的经验,一定会比较轻松,甚至可以不看,转到后面的 CPU设计程序未尝不可。为了初学的读者着想,我们还是简单地对这个程序解释一下。

1. Verilog HDL程序区分字母大小写,规定保留字一律小写。

2. Verilog HDL程序是以模块module为基本单位的,形式上以module开头,以endmodule作为结束标志。模块名称name可以设计者自定,并要求和文件存储名称一致。

3. module 和 endmodule之间,称为模块实体。模块实体包括输入输出端口及数据类型描述,接下来是实际语句体描述。输入输出端口数据名称和类型的描述,要放在模块名称的后面,并要用括号括起来。数据名称又叫做变量。端口中的数据名称又叫端口变量。

端口变量的概念是与电气设备的实际相关的。比如电脑,你要给它插电,要有电源插口,还要有开关。这些需要外部提供操作的地方,就叫输入端口。电脑要将其完成的信息向外输送,这些输送信息的接口,就叫输出端口。同时兼有输入输出功能的接口,就叫双向端口。

4. 器件端口描述一般有输入、输出和双向三部分变量类型。输入变量描述用保留字input 开头,接着是变量宽度,再接着是变量名称。输出变量描述用保留字 output开头,其余格式与输入变量一致。双向端口描述既可以做输入变量,又可以做输出变量的变量,要用bidir保留字开头,格式也和输入变量一致。多个端口变量描述,它们之间要用“,”分割,最后一个直接连接“);”,不用添加逗号。

5. Verilog HDL的变量主要有导线型和寄存器型。导线型变量是描述导线的,用 wire保留字在前面描述。寄存器型变量用reg保留字在前面描述。在端口变量描述中, wire可以省略。

6. 无论导线型还是寄存器型变量实际容纳的都是二进制数,它们能够容纳二进制数的位数称为变量的宽度。描述变量宽度的形式如“[7:0]”,这表示有8位宽度的向量,内部二进制数或存放二进制数的位置编号是 7、6、5、4、3、2、1、0。方括号内两端的整数是二进制位的标号最大和最小数,中间省略用“:”。宽度标号可以左大右小,也可以左小右大。Verilog HDL 规定这两个数字可以用形参的运算式表达,但结果一定是一个常数。

7. 形式参数要用parameter保留字来定义,形式为:parameter形参名称=常数。形式参数名称许多人习惯上愿意用大写字母形成的字符串表示。

8. 每个语句都要用“;”作为结束符。一个语句可以占用多行。一行中若有“//”,则表示此行//之后的内容为注释,不是语句的内容。在“/*”和“*/”之间的内容全部作废,当然可以写更多的解释在里边。

9. clk是脉冲时钟信号,一般是周期性地取值 0或 1。clk从 0变到 1的瞬间称为上升沿,而从1变到0的瞬间称为下降沿。posedge是描述上升沿有效的保留字,negedge是描述下降沿的保留字。不论上升沿或者是下降沿都是瞬间的标注,表明时间的某个位置,要理解成没有时间延续。

10. always@(posedge clk)是一个结构语句的头,其中有多个语句时,要用begin … end语句体括起来。always@(posedge clk)的意思是说,只要clk上升沿到来,该begin …end语句体的内容就会被执行一遍。always语句括号内的变量称为敏感变量,多个敏感变量同时存在,用“or”或者“,”分隔。posedge和 negedge必须在每个敏感变量之前修饰。如果变量是下降沿有效,要用negedge修饰变量。

11. always语句体内的语句是顺序执行的,就是要执行完前面的语句之后,再执行后面的语句。例如,

always @ (posedge clk)

begin

a =dataa + datab;

b =dataa - datab;

end

这两个为a和b赋值的语句是在clk同一个上升沿到来时顺序执行的。如果将“=”号改成“<=”号,那么这两个语句就不再是顺序执行了,而是同时开始执行了。这一变化初学者一定要注意,不然会影响对电路的分析。“=”叫阻塞赋值符号,“<=”叫非阻塞赋值符号。

12. 程序当中的if … else是条件选择语句,基本上与C语言的语义一样。

13. always语句是随 clk变化不断重复执行的,可以认为是一个无限循环的语句体。当然,Verilog HDL语言中也有for循环语句。有关for循环语句,我们用到的时候再加以解释也许更妥当。

14. 我们的Add_Sub程序设计了一个16位的加减法运算器,输入端口有两个16位的数据导线dataa、datab,一个时钟输入导线clk,一个控制选择加减运算的导线Sub。输出端口是一个16位的寄存器result。每当时钟上升沿到来的时刻,依据Sub为0,还是1,器件会做dataa+datab或dataa-datab,并将运算的结果送到result寄存器。

对这个小小的 EDA程序解释了这么多,我想你似乎应该明白了。为什么说“似乎”?因为这种编程设计的加减法运算器,看不到和电子电路的硬件有何联系。为此,下面我就来介绍,如何将软件设计程序转化成硬件设计。2.2.3 程序就是硬件吗

看到这里你也许会说:“这是什么硬件设计呀?就是软件程序设计嘛!”

不错,我同意你的说法。实际上,一切编程的设计方法都是软件的方法。不过这种面向硬件的软件编程方法最终要体现在硬件的结构变化上,而不是像一般的软件编程那样,最后得到的仅仅是一堆信息编码而已。对于用硬件编程语言设计的电子电路来说,最终总是要用电器元器件表达出来,不然那就是无用的软件设计。实际当中,能与电子元器件产生一一对应关系的是原理图设计方式。所以,不论多么复杂的 EDA编程设计,最后都得转化成电子电路的原理图,或者与原理图直接相关的数据形式,这样,它们才能成为硬件制造的依据。对于现场可编程阵列器件FPGA,或者复杂可编程器件CPLD等,硬件描述语言设计的结果,都需要有定制成原理图的数据,在系统加电时靠这些数据来组织它们内部的元件,最终形成我们所需要的电路结构。EDA 软件将得到这种定制数据的过程叫编译,将定制数据放到器件中构造电路的过程叫下载烧制。

如此之说,你是否就明白了什么叫硬件设计?即使现在不明白也没关系,但是你要记住,用Verilog HDL语言设计好的程序,必需要经过编译,才能够生成可以实现电路烧制的文件。

不多说了。我们现在就编译刚刚设计的加减法运算器。在Add_Sub.v程序文件打开的情况下,从主菜单选择Project→Set as Top_Level Entity(定为顶层文件)。这个操作的作用是暂时将当前的程序文件,当作顶层文件进行编译。这是一种部分编译的方法。Quartus II 给了我们选择部分编译还是全局编译的权力,使用起来很是方便。

进行编译,需要从主菜单选择Processing→Compiler Tool(编译工具),或在工具栏单击箭头按钮。这样,系统会出现图2-12自动编译界面,这是一种不需用户过多干预的集成编译过程。图2-12 编译集成界面

Quartus II的集成编译会做四项工作,其中包括:Analysis & Synthesis、Fitter、Assembler和Classic Timing Analyzer。从字面上讲是分析综合、修正、汇编和标准时间分析。说到底,就是将我们设计的程序,通过他们预先设计好的组件,恰当地组装成电路,并转化成能够定制FPGA的数据。

在编译集成界面中,系统会最后给出FPGA芯片资源使用情况,会告诉你是否成功编译,有多少条警告等。对于系统编译的警告,我们暂不去深究,一般也可以不用理会,不会有太大问题。如果给出的是不成功提示,那么我们就要去查找设计的错误了。查找差错的方法我们后面遇到时再讨论。

编译成功意味着什么?意味着检查我们的设计是否符合电子电路的一般规则,但有些与器件无关的逻辑错误,仅通过编译是检查不出来的,这需要有进一步的逻辑正确性分析。检查逻辑正确与否的方法有两种。一是将编译的结果烧制到FPGA中,并借助于相关设备实际验证。二是用数学的波形图变化方法进行仿真验证。前面一种方法不仅需要设备,而且对我们现在来讲,过于复杂。后面的方法,是在现代电子电路设计中经常使用的可靠方法。我们就用数学仿真的方法来验证加减法运算器的设计对错吧。2.2.4 怎样知道自己设计的对与错

我们设计的硬件程序编译成功之后,得到的仅仅是一些将来用于构造硬件的数据。要想通过这些数据来观察硬件的实际效果,可以用Quartus II专门设计的数学波形仿真工具查看。波形仿真是通过图形方式,将硬件的输入输出用具有延时表示的波形表示出来,这种波形可以表达出硬件运行过程中,各种输入输出变量的变化,让我们能够通过这些变量的变化确定硬件设计的正确与否。

Quartus II 为我们设计的波形仿真有两种,一种是功能波形仿真,另一种是时序波形仿真。功能仿真一般只考虑硬件设计的逻辑关系,不考虑电器元件的信号传输时间,认为各种器件都是理想的。因而功能仿真检验的结果比较粗糙,不能完全满足实际需要。与功能仿真不同,时序仿真要考虑器件的信息传递时间,因而比较接近实际的信息传递过程,是比较理想的仿真方式。事实上,功能仿真能够通过的设计,不见得时序仿真能够通过。而时序仿真能够通过的设计,一般都有较好的功能仿真效果。功能仿真常常用于没有把握的电子电路设计当中,而时序仿真一般都用于比较有把握的电子电路设计检验。我们介绍的加减法运算器设计都经过了实践检验,故而很有把握,为了说明问题,才需要进行时序仿真。

数学图像的波形时序仿真要把设计电子器件端口变量的变化,依据器件运行的时间,用波形或者数据的形式表现出来。用Quartus II提供的波形时序仿真,需要对编译好的工程,再经过建立空的仿真波形文件→选择仿真端口变量→设置信号和数据输入→进行波形仿真这几个阶段。

建立空的波形仿真文件要选择Quartus II主菜单File→New,在出现图2-13的对话框中,选择Other Files→Vector Waveform File。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载