《CPU自制入门》是人民有点出版社图灵系列自引进日本的一本非常好的书,该书在2014年出版,当年已经引起了不少IT业内认识和计算机技术爱好者们的关注(当然也包括我),后续数年不知因为什么原因,市场上缺货,二手渠道曾经一路被炒高至售价四五百元。后来出版社和责任编辑乐鑫发现,于去年重印,虽已过多年,至今仍可从各平台渠道上看到该书销售火热受追捧的程度。
正如译者赵谦博士在此书译者序中所言,对非常多接触IT行业从业人员、爱好者、有志从事或了解相关领域的学生而言,《CPU自制入门》正是他们一直寻找的那本书。相关领域的经典教材和各类好书不少,如MIT出版社出版的哈佛大学教材《计算机系统要素》,斯坦福大学前校长John LeRoy Hennessy等编写的《计算机组成与设计: 硬件/软件接口》,国内广泛采用的白中英教授编写的《计算机组成原理》。然而,迄今为止尚未发现一本像《CPU自制入门》这本书一样提供较低阅读门槛,并且从实践出发,介绍了计算机系统最物理、最底层开始的搭建过程,从电路板设计制造到CPU结构的设计和描述直到汇编语言编程,将如此广泛的技术内容以实践方式来学习,本书确实是首屈一指,也尚未见来着。本书在各层次原理理论讲解不尽详细,因为每一章摊开原理讲清楚明白可能都是大学里相关的一本专业课,不可能也没必要,但作为相关专业的实验手册或者课程设计指导书则再合适不过了(笔者有诸如配套白中英编写教材的清华大学科教仪器厂的TEC-4计算机组成原理实验箱,但其对普通师生的可获取性差且技术方案过于陈旧跟不上产业界的步伐),个人强烈建议国内有志的高校教师在教学改革过程中考虑将本书内容或者体系纳入专门的实验课或者相关课程设计中。
相信愿意购买和阅读此书的读者一定和我一样相信在可预见的未来,具备软硬结合设计和实践能力的工程师将会更加具有竞争力。书中几乎简要介绍了所有必要的基础知识(如数字电路设计、Verilog语言、电路板CAD软件使用、元器件购买等)。书中以最为精简的文字,将最核心的知识汇集到一本书中,使各种知识背景的读者都可以方便阅读以至于实践。
当然,这样的安排也容易导致了实践者在独自实践的过程之因为涉及领域之广泛而不熟悉,往往容易遇到意外的问题被卡住而最终被迫放弃。在本书编辑建议下,我把陆陆续续大概花了一个月实践过程中所遇到的各种问题和大家分享,写成这篇指南,希望能让大家实践顺利,少走弯路。
全书分为3章,
第1章 CPU得设计与实现
第2章 电路板的设计与制作
第3章 编程
实验实操过程中,不建议采用书中顺序,而应该从第2章开始,然后适度阅读第1章,并按照第3章逐步操作,原因如下:
1.书中采用的硬件架构并非现成产品,需要电路板和元器件实操,在硬件体系没有搭建起来以前,所有代码都无法在真实的平台上验证。
2.第一章是原理性讲解,设计本书最重要的精神和概念,多数阅读者未必有很好的Verilog语言基础和各种FPGA基础知识(如果有,本书可能对FPGA工程师略显粗浅),所以第一章如果遇到卡顿或者看不懂的地方,不应放弃,而应该先按照2、3章流程完成实操后,再慢慢理解第一章,第一章应该当成原理讲述大纲和字典,可以粗略看一遍不需要完全理解,开始实践代码的过程中,遇到不懂的地方再不时回来翻看。
3.本书重点在于有全套简单易用,资料详尽,案例完整的从芯片选型到电路设计,从硬件描述语言到汇编语言的全套解说,应该注重整个完整实践过程的主线,重在体验和为理论原理学习提供动力和感性认知,而不应过分纠结在一两个细节上。
跳坑:
初学者应完全遵照书中软件和版本进行环境搭建和操作,遇到有实际困难切换环境或者元件的情景,需要在有相关领域专业人员的指导下进行操作和元器件购买。
本书中文版在作者序前一页有一个声明
笔者写这段话的时候,已经是2021年了。这说明本书编写的环境并不能使用相关软件的任意版本,而应该尽量与书籍上内容呈现的版本一致或者寻找上述声明日期来进行操作。也就是说书中的代码和操作与软件之间的版本是有一定依存程度的。
这是为什么呢?以FPGA开发环境ISE为例,其不同版本开发环境所创建的工程往往与所依赖的代码文件和IP核相关。不同的版本,IP是可以升级的,但是如果IP在新版本新增一些接口,或者删掉一些接口,那么ISE是不能自动帮助连线或者修改代码的,这部分还是需要用户手动完成,这是特别需要注意的,也是导致很多莫名奇妙的错误让初学者无所适从而放弃。
以PCB设计软件Eagle CAD为例,其书中所展示的版本5.11.0为例,在2012年这是一款流行的PCB设计软件,属于一家叫做CADSOFT的德国公司,由于其有一个简单好用的免费版本,所以其在电子爱好者和创客社区非常活跃用于设计交流。但如今这款软件已经被AutoDesk公司所收购,其操作界面有较大的改变,也需要AutoDesk账号登录才能使用,笔者也遇到过官方自带元件库的命名对应和电路原理图文件打开后报错的情况。
跳坑:
书籍中相关资料下载问题
该书籍在图灵社区上相应的页面并没有提供直接的资料下载,https://www.ituring.com.cn/book/1142
而是给出了日本原版技术评论社的相关资料下载链接,刚开始没仔细查看该页面的图灵社区读者通常会在随书下载中查找资料,只有试读PDF
请至http://gihyo.jp/book/2012/978-4-7741-5338-4/support下载本书源代码。
请注意,该页面虽然全都是日文,但仍然不影响使用。如果强迫症,可以将整个页面直接扔进Google Translate或者DeepL翻译,查看译文。附网址(需要先获得访问完整互联网的能力)https://translate.google.com/translate?sl=ja&tl=zh-CN&u=https://gihyo.jp/book/2012/978-4-7741-5338-4/support
但是请注意,除了实践所需代码,原作者和出版社还提供了一些书籍的勘误和补充,其中P.403关于综合选项 的一项尤其重要,因为原书中没有提及,在代码综合的过程中,默认以speed而不是area进行综合,这回导致代码综合结果超过了该款芯片xc3s250e的容量而失败,一开始我在这里就卡住了两天。
跳坑:
电路板设计与绘图问题
可能是因为教育环境的缘故,国内大部分学生比较熟悉的EDA往往仅限于Altium Designer,笔者看到CSDN网站上有博客主https://blog.csdn.net/zysns/article/details/96426607(应该是比较主动好学的在校大学生)讲述自己完全按照书本内容附图在Altium Designer把整个原理图从零开始都画了一遍。我觉得精神可嘉但似乎不是很有必要,可能是这位同学并没有留意到上一条提到的随书相关资料,里面已经有直接可用的PCB文件,直接导出来使用生产即可。
作者在书中内容所展示的PCB板和封面的拥有基板少女的电路板并不是一个版本的电路板
根据作者在PCB丝印层提供的网址信息http://respon.org/(该网址已失效,但可以根据互联网档案馆https://archive.org/回溯查看该网页过去的历史)作者曾在该网站贩售书籍配套的裸PCB板,共有3个版本 1.0 、1.1、2.0。作者网站提供的文件和书中讲述内容,均为1.0版本,此版本背面并没有做出少女图案的覆铜层排版,并且电源模块另有一块电路板,用于将9V电源分别转换为3.3V、2.5V和1.2V三种电压。1.0版本电路板采用的电源转换方案较为传统,但非常适合没有焊接操作经验的初学者作为练习(全部都是插件元器件),后续版本可能采用了体积更为小巧的元器件方案来提供电压变换,具体方案(Eagle软件免费版限制了PCB尺寸在100*100以内)。此外,肯定有不少读者倾慕书籍封面的基板少女情有独钟,实际上此图案对于本书整理的技术和功能实现并没有丝毫影响,只是通过调整布线格局构造出这个有趣的图案。由于作者没有提供含有图案的源文件(即1.1和2.0版)但初学者操作修改电路板文件不出错具有一定风险,硬件排错比软件更为复杂,修改验证周期也更长。因此我建议初学者完全按照书中内容,即可1.0版实践,当一切顺利完成并且愿意在花费一定时间熟练操作Eagle PCB软件后,完全可以根据作者提供的如下视频进行图案的构造。
https://v.qq.com/x/page/a3220vz6bo3.html
<iframe frameborder="0" src="https://v.qq.com/txp/iframe/player.html?vid=a3220vz6bo3" allowFullScreen="true"></iframe>
在后续实践过程中,笔者发现电路板上的IC3(74AC25)和IC5(74HC14)封装并不正确,不是标准的SOP引脚间距,其将导致最后PCB上的IC无法正常焊接(需要较为麻烦的跳线操作技巧)。笔者已将Eagle PCB文件略作修改,新版本将在本文后附的GitHub资料中上传。
关于Eagle软件的操作,笔者作为国内最早一批接触该软件的创客群体,不自谦推荐笔者早年从Sparkfun社区翻译的相关中文教程两篇,相信易于上手并足以应付包括此项目在内的一般项目需求:
http://www.i-element.org/eagleschematic/
http://www.i-element.org/eaglepcblayout/
跳坑:
电路板制作问题
作者所处的时间(2012年)和地点(日本),作为个人,进行PCB样品的制作可能要选用感光的制作方式(PCB文件里过孔偏大也是为了将就这种制造工艺,以减少后续失败风险)或者昂贵的海外委托加工方式。
然而我们今天所处的中国电子产品供应链廉价且灵活,完全没有必要购买一大堆零件手工捣鼓制作。所以书中相关内容建议仅供参考了解,实际上只要把相应的Eagle PCB文件按照相应步骤导出成标准的生产文件Gerber(参考书中操作步骤或者上一条Eagle软件操作参考文章),然后将相关文件发给国内一些制造商(如捷多邦、嘉立创等制造商即可完成PCB制作)。
由于PCB上阻容元件较多且标识并不是特别明晰(日本人这风格真的搞不懂),自己焊接相当费时,手动操作也比较容易出错,想象一下你在考试时进行大量手动的复杂计算,能保证不出一点差错的几率有多大?可以考虑委托上述PCB或者专业的SMT供应商预先贴片,至少可以把非IC的阻容贴好,而且由于后续手动焊接插件和芯片等元器件难保不会出现意外,非常建议多准备几款贴好阻容的PCB(3-5块)。
也可以考虑寻求笔者(微信ID:zhangchengwust)直接购买半成品PCB(贴好阻容元件),因为批量会比较便宜。
跳坑:
芯片购买问题
不知道是不是因为这一年多收到疫情影响,该项目中电路板上所使用的两个核心的芯片的正规供货渠道在这个时间节点(2020年11月)不是非常顺畅,即便是强大的DigiKey有供货也非常昂贵。有比较熟悉FPGA原料市场的朋友告诉笔者,十年前的产品线产量本来就不大,遇到供货不稳定的比较正常。
通过淘宝和华强北等一些不是非常原厂经销商的渠道,花费了比较高昂的价格(约100元)作者买到了XC3S250E SMD_VQ100和XCF02S SMD_VO20C这两个芯片和其它一些比较特殊的零件。在零件购买这一步,作为有一定经验的电子工程师的笔者也栽了跟头,因为淘宝等一些特殊渠道上淘洗来的芯片不仅可能是拆机的二手货,而且甚至很可能是无法工作的坏芯片或者是假的。
第一次在一家淘宝店买的XCF02S上一号引脚附近的芯片上没有圆点,一开始我还以为是这个芯片规格特殊,省略了这个一般芯片上都有的标记,后来到了烧录程序过程中发现芯片完全无法识别。在查阅了该芯片的Datasheet后,我确认这很可能是个假芯片。
可以考虑寻求笔者(微信ID:zhangchengwust)创建的交流群批量购买元器件包。如果在这方面有廉价并且稳定供货渠道的朋友,欢迎告知。
跳坑:
数字电路和Verilog HDL语言基本知识问题
如果你在学校里认真学过数字电路相关课程并熟练掌握C语言,可能对这本号称入门的书不屑一顾,再粗粗一眼看上去,感觉Verilog的语法和C语言看起来没啥区别,但当认真开始实现功能并且尝试理解代码原理的时候,你会发现你错了。对,对于没有只有上述课程基础,并没有FPGA实践经验的笔者来说,就是这样。不信你可以试试光凭本书第一章的那点介绍,你完全没法读懂项目里的大部分代码。
后来为了调试Verilog代码综合过程中的一些错误过程中,我反反复复查阅了数电书籍和专门的Verilog语言的书籍,对于掌握这门语言,效果并不是非常好。后来通过老石谈芯视频上的推荐,我发现对于真心想掌握这门语言的人,与其它理工科的学习一样必不可少的修炼手段,就是刷题!对,就是刷题网址,刷了一周后,发现提升非常大,实在看不懂的,就看一下答案,再自己写一遍。网址和答案附上:
https://github.com/johnsonwust/HDL-Bits-Solutions(笔者Github,欢迎加薪点赞)
跳坑:
Xilinx ISE 版本选择和兼容性问题
电路都做完了,来到搭建软件环境这一步了。首先要注意,ISE已经是近十年前的产物了,最后的更新也是2013年的事情。本书译者赵谦博士建议我们后续学习FPGA都迁移到替代它的新环境Xilinx vivado中来。即便如此,请注意,如果你是Win10系统,千万不要下载上图所示的Win10版本,因为这是基于虚拟机技术的,虽然小,但是很多芯片用不了。而且笔者的结果就是直接装不上(不知道和电脑上装了VMWare一类的虚拟机程序是否有关)。
一共有4个压缩文件,而且每个都接近2G。如果你在下载过程中出现卡顿或者什么别的幺蛾子,请考虑获取访问完整互联网的能力。
接下来就是申请赛灵思的账号,并且填写自己的地址和公司等信息,要符合U.S. Government Export Approval,什么?是的,你没听错,下载米国公司的软件也算出口,也要符合美国政府的技术出口管制。所以我毫不犹豫的添了个纽约的地址,嘿嘿嘿!
跳坑:
Xilinx ISE 闪退问题
这个问题也卡了笔者很久,我刚开始发现的时候,事情是这样的,每当在Win10下把输入法从英文切换成中文的时候,软件立马闪退,后来发现导入文件和打开项目的时候也会有这个毛病,我当时简直就想咒骂赛灵思的软件工程师。问了我一个有FPGA开发经验的朋友,他直接告诉我,他们只在Linux环境下允许ISE,没在Windos下运行过。我刚有点心动的时候,忽然发现书后面马上要介绍使用JTAGE Shell烧录程序到FPGA的软件似乎只能在Windows下运行,而且作者都是在Windows下运行的,于是我硬着头皮找到了下面这个解决方法。
解决Xilinx_ISE 14.7在Win10下选择“open project”崩溃闪退的问题
问题描述
ISE 14.7对win10无法完美支持,在使用64位ISE时点击OPEN之类的东西时程序都会崩溃,虽然使用32位不会有这个问题,但是工程的默认打开方式不能改为32位。
解决方法如下
寻找安装Xilinx_ISE的安装目录下的文件夹:
D:\Xilinx\14.7\ISE_DS\ISE\lib\nt64
对文件夹下的两个文件作如下操作:
将libPortability.dll重名为libPortability.dll.orig
将 libPortabilityNOSH.dll 复制一份,然后将这个复制重命名为libPortability.dll
至此,64位ISE在打开项目等方面已经不会闪退,但是 PlanAhead等高级功能面前还是会闪退,
参考来源:https://blog.csdn.net/idevede/article/details/56024153
跳坑:
BSDL文件