如何系统的学习FPGA 【学习的方法】

[复制链接]
471|5
 楼主 | 2018-8-9 17:15 | 显示全部楼层 |阅读模式
要有明确的学习目的
学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系统就是由若干个这样的元件搭建起来的。
 楼主 | 2018-8-9 17:46 | 显示全部楼层
知识点的“二八定律”
“二八定律”是由19世纪末意大利经济学家巴莱多发明的。他认为,在任何一组东西中,最重要的只占约20%的一小部分,其余的80%尽管占多数,却处于次要地位。二八定律适用范围非常的广,比如:20%的产品创造80%的利润,20%的人占有80%的财富等等等等。
那么,在IC/FPGA设计领域,是否也存在着“二八定律”现象呢?有的。根据笔者多年的统计分析,在实际项目中,20%的知识点完成了80%的设计。如果我们把这个定律逆向运用,那么就能得到一种快速学会技能的方法,大大降低学习的时间和精力。
完全掌握了这些知识点后,就会出现一种“熟读唐诗三百首,不会作诗也会吟”的状态。基础知识已经足够完成80%的工作任务,剩下的20%的内容,采取边做边学、立学立用的方法。这部分内容所需要的知识点,应该当成“新华字典”一样的工具书,不需要去死记硬背,只要用到即可。
反之,如果有一部分内容,经常在你的具体工作领域中出现,证明它就是核心知识点。多次重复的去查找去做的结果,这些知识会非常自然地进入你脑中的记忆库。
现在问题来了,假如我是一个初学者,又怎么知道哪些是核心知识点呢?还记得那句牛顿那句名言吗?我们可以理解为:要想看得更远,就要学会站在巨人的肩膀上。“修行在个人”的前提,是找到好的“师傅领进门”。
在这方面,我非常欣赏“至简设计法”。从学习IC/FPGA的角度来说,这是目前我所见到最吻合“二八定律”的方法。接下来我们要讲的是:语言只是工具。

语言只是工具Verilog
   前面我们讲到二八定律,这定律也适用于与计算机技术相关的市场。处于金字塔顶端的20%企业或产品,占据了80%甚至以上的市场份额。在经过初期的百花齐放之后,经过一系列的整合和淘汰过程,最后形成一至两家企业或产品获得垄断性优势的局面。例如国内的门户网站网易搜狐新浪,目前电子商务市场的阿里巴巴京东,开发板的Xilinx(赛灵思)等等,无不如此。
   同样,在FPGA设计语言方面,目前Verilog和VHDL处于垄断地位。那么,它们分别是怎么样的?具备哪些优势?怎样才能快速的学会并使用?对于设计者来说,重要性是怎么样的呢?
   我们从计算机语言说起。计算机数字信号处理电路的类似滤波、加密、解压等等操作,从本质上来说都是数**算过程。C、Pascai以及其它一些汇编语言编写程序,即是研究算法的合理性和有效性。
有些数字信号处理,比如军用无线通信等,对于运算时间和精度的要求,是通用的计算机系统所无法满足的,从而出现了专用集成电路ASIC。实际上ASIC是通过改变通用程序,而实现某种特殊算法的工具。作为ASIC领域中出现的一种半定制电路FPGA,因此需要有与之对应的硬件描述语言,去描述算法与硬线逻辑之间的关系。
Verilog和VHDL就是这种硬件描述语言。
按照我们以目的为导向的观点,FPGA设计的目的是“实现功能”。因此,语言应该只是我们实现目的的工具。我们要牢记的是完成最终任务,而不是被工具所迷惑甚至被奴役。下面我们就以Verilog语言为例,来介绍一下如何围绕实现功能目的,如何运用二八定律,掌握核心基本知识点,来使用好语言这一工具的方法吧。
1.        准备一本语法书,了解其基本概念;
2.        下文中介绍到的语法是核心语法,必须完全弄懂并能熟练运用;
3.        核心语法可以覆盖并满足绝大部分内容;
4.        只须熟练掌握核心语法,完全不会降低设计效率;
5.        语法书不是用来背的,是用于查阅的;核心知识点以外的语法,
| 2018-8-13 09:08 | 显示全部楼层

谢谢楼主分享
| 2018-8-20 18:32 | 显示全部楼层
请问一下像我才大一,还没学到数电等知识,只是大概理解,然后最近刚刚接触FPGA,是不是我应该先去看看数电和verilog语言,还是边学习FPGA,遇到不懂的再去查书。希望楼主帮解答一下。

评论

guyu_1 2018-8-30 15:05 回复TA
学习FPGA,遇到不懂的再去查书。 verilog 当字典查阅,不必刻意的去练习 。学习交流可加我Q1241003385,谢谢 
| 2018-9-5 16:45 | 显示全部楼层
诗意生活 发表于 2018-8-20 18:32
请问一下像我才大一,还没学到数电等知识,只是大概理解,然后最近刚刚接触FPGA,是不是我应该先去看看数电 ...

好的,谢谢
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

关闭

热门推荐上一条 /2 下一条

快速回复 返回顶部 返回列表