Cameologist

Tina的小站,随机胡诌&科研笔记。调试中...

0%

关于数电的遥远记忆

最近遇到了好几次FPGA这几个字母。这是我在数字电子技术结课之后仍然留有印象的几种缩写之一。虽然我知道其全名为现场可编程门阵列,但实际上它对我来说仍然是一种神秘的东西。

至今我还是没太明白,“现场”到底是什么呢?如果说是无论什么电路,只要拿一块FPGA我都能现场实现的话……那我恐怕是辜负了它骄傲的名字。

我记得当时我们的数电课是和电气专业钱学森班一起上的。电气,西交王牌专业,人上人;钱班,工科掌上明珠,人上人。不知怎么就安排我们这帮学物理的就和工科人上人学了一样的数电。当然,由于我们并没有他们那么强大,所以我们可以不用做数电实验。除实验之外,还有就是用FPGA编制电路的大作业。当然对我们大作业也不是强制要求的,而是选做加分。这就导致我们班级没什么人实际做了大作业,只是去考了理论考试。这就相当于,学车只学科目一和科目四,科目二免修,科目三选修。由此可见学校应该并没指望我们通过这门课真的学会数电什么的。我认为学校的用意可能是,提供一个和工科专业的对接的通识教育,今后遇到从事功能的人员不至于完全不懂人家在讲什么。

当然,当时我对于数电还是比较积极的。一方面是只看教材学理论,觉得那些个作用各不相同的IC通过0和1协作,就能够实现各种功能是非常有趣的事情,稍微让我回忆起了童年搭建积木的无穷乐趣。另一方面,我很喜欢教我们的宁改娣老师,她也很喜欢上课积极的我,如此正反馈。而且在课堂外宁老师甚至对我的学业和生活也投入了关注,让我觉得非常温暖。因此由于这种种原因,当我拿到一片电气学院祖传的赛灵思公司出品的FPGA时,我是摩拳擦掌想要干一番事业的。

首先我就想,如果能从0开始在FPGA搭建一个CPU,那该是多么牛的一件事。更何况,通过研究CPU的一般结构,我认为我理解了如何干这件事情。接下来,我去借了一本实验教材, 费了九牛二虎之力在我的电脑安装好名为ISE的开发套件(事实上甚至在当时赛灵思的主打基本就换成了名为Vivado的开发套件,我记得他甚至将Vivado的下载放在外面而把ISE的下载入口藏得很隐蔽,可惜我们使用的硬件同样是老黄历了所以只得用老黄历开发软件)。

对照着教材,我首先尝试了LED灯的小程序,一切正常;乘着胜利的喜悦我又尝试了一个最简单的与非门电路——出现了奇怪的错误!我debug好久好久,对照书上的每一个细节,我的操作都一模一样。百度也没有结果——不会吧不会吧,你连一个门都造不出。没有想到雄心勃勃的开发计划就这么卡在了这里,且一卡就是好几周。后来发生了另一件事,让我跑通了这个与非门,同时也放弃了整个项目:相同的代码在同学的计算机上获得了全面的成功。

物理学的基础之一,是物理定律不随时间和空间坐标而发生变化。但是同样的代码效果却随地点而改变。将物理学的信念带入FPGA开发中,就不难理解为什么我当时受到的打击如此之大。同样的代码是否成功,要看环境如何。而这个环境虽然不似自然这样复杂,却也是由成千上万的各种文件中的各种参数构成。这在物理学是完全无法想象的。如果一个人从0开始创造这样一个代码运行的宇宙,那么需要花掉太多时间,光是和各种东西的接口就够头大的了;如果直接利用别人创造好的环境(也就是大家都在做的事情),那么除非你对其有完全的理解,否则一旦出现错误debug的难度将不可预估。

当然,上述是我当时的想法。后来,我也不是没有目睹过非常擅长于工程项目的人工作。确实让比如说FPGA运作起来可能没有我当时想象的那么难如登天。但那确实是我对于工程学看法全面改观的一个critical point。

我猜,这大概就是为什么虽然从那以后完全没有碰过,但时至今日FPGA、ISE和赛灵思之类的名词仍然深深刻在我记忆里的缘故。