要有明确的学习目的
学FPGA,从哪里开始学起?先来看看需要哪些基础知识吧。要学数字电路、VHDL或Verilog等硬件描述语言、QUARTUS/ISE/MODELSIM等软件工具、脚本语言,甚至还有人认为要学完C语言。Oh my god!这实在太多了!不错,这就是大部分人认为FPGA“入门难”的原因。中国有句谚语,“世上无难事,只怕有心人”。我认为,这句话除了表达做事需要有决心恒心以外,应该还有另外一种理解。那就是:如果一件事情非常的难,或许是因为你还不够“有心”,没有找到正确的方法。
我曾经有一位邻居是一位汽车工业领域的大学教授。他的一生都致力于汽车工业的研究和教学。在动力、材料、电路、制造等方面,专业知识非常深厚。然而,他本人不会驾驶汽车!
举这个例子并非否认基础学科研究的意义和实效,因为如果没有这些,汽车工业不可能发展。准确的说,是根本就无法出现“汽车”这个东西。这里想说明的是,懂得汽车制造的“知识”,与驾驶汽车的“技能”,两者之间不尽相同。如果我们的需要是掌握技能(驾驶汽车),那么懂得汽车原理、制造相关的知识就只属于加分项,而不是必须项。
所以,首先要有明确的学习目的。
明确学习目的不仅仅是 “能运用IC/FPGA完成项目功能”这个整体的大目的,同时应该贯穿在整个学习过程中。我们应该非常清晰地知道每一个具体项目、架构、模块、信号目的是什么?我们去学的知识点,要完成哪些可以具体的、甚至可以量化的目标?
目的不清晰,就容易出现混乱。先来看下面几个小例子:
1.语言是基础,学语言总是没错的。那就从Verilog开始吧。买回一堆相关的书籍,花费了很大的时间和精力,终于懂了。进入实际设计,突然发现Verilog很多语法是不能综合的,也没有实际的电路与之对应,在具体的逻辑设计时也不能用,书上又没有明确指出。然后再去买一本与之相关的扩展的书籍学习。最后枯燥的理论知识越来越多,混乱成一团,还是不能设计出项目;
2.按照书上的做法,以普通信号作为always的敏感信号列表。最后编写出错,而且根本不知道错误出在哪里。一直到有人指点,或是工作N年之后才明白:作为理论知识体系出现的专业书籍,全面和系统是基本要求。例如Verilog语法书籍中的很多用法作为知识点是对的,在实际应用中却存在出错的可能;
3.买个开发板,看代码,下载例程看现象。唔,好像会写流水灯代码了哦。接着进入一个实际项目,马上一筹莫展;
……
上面种种现象,究其原因,都或多或少与目的不明确有关系。类似的问题必须先明确。我们完全可以把IC/FPGA设计看做一种“技能”。通过这个技能,高效高质地开发出产品。我们应该围绕“功能”这个目标,提升自己专业技能的高度,然后在这个基础上去扩展宽度。
接下来的问题就是我们需要的是“渔”还是“鱼”?也就是,是掌握到FPGA这种设计方法,还是会写某一个具体的FPGA程序?有了明确的学习目的之后,就需要有正确的学习方法。那么正确的学习方法有哪些呢?敬请关注下一节。
围绕目的去学习
我们的思路是“以目的为导向”,围绕着目的,精准定位学习方向和内容。下面具体以D触发器及其代码为例介绍一下这个方法。
从最终目的“学会FPGA”开始,什么是FPGA?为什么要用FPGA?它的优势在哪里?现场可编程门阵列的现场、可编程、门阵列分别是什么意思?继续追问,为什么FPGA“可编程”?它的内部结构是什么?FPGA最基本的逻辑单元是什么?
从一个大的“学会FPGA”目的,一路自上而下的分解问下来,很自然的就到了D触发器这里, D触发器是整个FPGA的设计基础和核心,是FPGA所有项目都必须使用到的,那么我们就必须完全掌握它。
现在,对于数字电路关于触发器方面的知识,我们就精准锁定D触发器的内容,其它关于RS、JK、T触发器方面的内容,至少到目前为止,与我们的目标FPGA无关,更准确点说与我现在的上一层目标(可编程的逻辑单元)无关,就没有必要把时间和精力放在它们身上。事实上从D触发器这个点还可以继续往下推,一直可以推到最基础的数学知识1+1=2。但是不管怎么推,这些知识点始终处于一条纵贯的直线上,省去了海量的平面扩展知识。
我们继续按照这种方法学习D触发器。
D触发器是什么?它的功能结构是什么?首先,我们可以把这个D触发器理解为一个电路元件,而整个FPGA系统就是由若干个这样的元件搭建起来的。
|