源码先锋

源码先锋

【学习FPGA必看】一个FPGA小白的自述

admin 168 101

本人是一个纯FPGA小白,就连FPGA这个名词我都是最近才知道,所以如果你也正想入门学习FPGA的话,请耐心看下去吧,相信你看完绝对不会后悔。

首先大家可能会疑问学习FPGA需要什么基础知识,实话告诉你,基本不需要。我在学习FPGA之前除我们专业开设的模拟电子技术课外,自己只是自学了一下51单片机开发和数字电子技术的一些最简单基础的东西,最后发现用到的就是一个二进制和一些基本的门级电路知识,其次就是一种编程思维的培养,但我相信作为想学FPGA的你应该也多少具备一些这类知识吧。如果没有的话不妨简单看看吧。

大家可能还会疑惑一个问题:在这么短的时间内真的能学到知识吗?

不要试图用软件思维去编写代码。因为软件思维是在单片机编写程序时运用广泛的一种思维,主要通过一些串行或并行输出的代码去控制单片机处理一些问题,这样就会涉及到一些诸如延时和初始化这样的代码,但在FPGA中则不一样,在FPGA中是电路的反应,只要一通电就开始执行。在FPGA中也没有for循环和while循环、高阻态和不定态的说法。关于时序的功能都是通过时钟来实现的。FPGA是使用Verilog语言进行编写的,Verilog中文翻译又叫硬件描述语言,不是一种设计语言。所以我们在做一个FPGA设计之前,其实已经有硬件的电路结构在头脑里面了,我们只是用Verilog语言把它描述出来而已,绝不是用Verilog设计一门电路出来,这个思维模式是完全不一样的。

FPGA中是电路的反应

软件思维编写的代码可读性较差,而且和硬件思维编写的代码比起来运行的时候更耗时。

软件思维编写的代码

明德扬规范的代码

现在我们需要实现一个帧频率的计算,统计两秒钟内输入帧的个数,然后把得到的数除以2就得到一秒钟的帧频率。下面我们来一起看看这个功能用两种不同代码实现的区别:

软件思维写出的代码

明德扬规范的代码

大家不难看出,用软件思维写出的代码不仅繁杂,理解起来也比较困难,而明德扬规范的代码则显得更简洁、高效,效率也是不可同日而语的。

另外我们还不难发现一点,潘老师和明德扬规范的代码结构和语法非常简单,很多语法几乎都只是用得到了if和else这些最简单的语句,所以我们在学习语法上其实不用花费太多的时间,这也为我们新手入门降低了很多难度,节省了很多宝贵的时间。

明德扬规范的代码结构和语法

另外潘老师个人讲课也比较有特点,虽然潘老师普通话不是特别标准,但这并不影响我们对于知识和思维的学习。

潘老师研发经验非常丰富,曾在华为这种世界500强的公司工作过,做过很多项目的开发,所以实战经验丰富,讲的很多东西实用性比较强。特别是对于我这种是抱着参加竞赛的小白来说帮助很大。

我们都知道,想要提要时钟频率就要减小时钟周期,但因为D触发器和线路之间传递的那部分延时是由物理器件决定的跟器件的工艺和材料等因素有关,我们没办法进行修改,我们能做的就是对组合逻辑那部分电路的延时减到最小。这条把延时减到最小的路径也叫关键路径。

关键路径

老师在一开始就讲过在FPGA里面的电路是一通电就可以工作,指的是对于最基本的门电路而言的。于是老师就举了他在海思里面做项目的一个例子:要把一个集成电路跑到2G的频率!可想而知这需要多么小的时钟周期,他们的方法就是把所有能拆的组合逻辑都拆成了基本的门电路,甚至连选择器他们也不放过,只为了一步步提高频率。就这样一直不停地拆,直至把任何两个寄存器之间的延时缩小到最小最小,从而达到就可以达到提高时钟频率的目标,这个方法也叫流水线设计。

减小时钟周期

潘老师讲课还善于联系现实生活进行分析。在讲到关于状态机的设计时,为了将状态机设计的目和过程一目了然,于是便联系生活讲到了我们日常生活中常见的自动售货机的设计。

自动售货机的设计

并且还就这个例子讲到了代码设计的三段论格式,让设计代码显得非常实用高效,便于分析。

自动售货机代码的设计

明德扬科教专注FPGA教学和开发!

文末给大家带来一些福利,免费赠送《FPGA知识大串讲》课程供大家学习