刚进实验室的时候,我的二导就给了我一块开发版,是altera 公司的nios ep1c20 cyclone 系列开发板,当时是以大学计划买的,5000RMB。于是就开始了我的fpga 学习之路。以前学习过verilog,当时只是停留在纯粹的理论阶段,编几个小小的程序,用quartus-ii 自带的仿真软件进行一下仿真就ok 了。用仿真软件进行仿真,往往能够得出你所想要的结果,但是一旦下载到芯片里边运行的话问题就会接踵而来。和单片机机学习一样,万事开有难。我做的第一个实验也是点亮led。自己编写程序(几行而已),编译,引脚分配,仿真,然后就用jtag 下载线连接开发版板和pc 机,将sof 文件下载到芯片。现在想起来这是多么简单的几个步骤,但是对于当时的我来说,是花费了很多的时间和精力来查找资料和埋头做实验的。
特别是引脚的分配,对着文档只说需要这么做,然而为什么要这么做呢?当时没有过多的想法,只想让我看到实验的结果,有了结果我就有了无限的成就感和对做实验的热情,所以当看到经过我的努力,在我的第一个fpga 实验里led 按照我的意图来动作的时候,那种喜悦之情与当初学习单片机时候实现led 闪烁的情形是多么的相似。这也是我做实验的一个惯例和一个经验,那就是边做实验边看书,在实验中发现问题,遇到不懂的问题或者原理在查找相关的文档,我习惯动手,要是让我坐在实验室看上哪怕是1 天的纯理论书籍,我的脑袋也会爆炸的,赫赫,因为没有这么看过书,所以脑袋也一直没有爆炸。以及后来学习ucos 嵌入式操作系统我也采用的这个方法,我把它叫做“阶梯成就感”(在写这篇文章的时候突然觉得这个词语很符合这种情形,临时想出来的)。
抱着这种热情,自己后来一点一点地深入的学习fpga,一些常规逻辑电路的设计,包括逻辑门电路、数据选择器、编译码器、加减乘除运算器、移位器,到后来的稍微复杂的电路设计,包括FIFO、数字跑表、频率计、状态机、交通等的控制、卡式电话计费系统以及UART 等。
以上的试验我都是采用的verilog 语言来实现的。当初接触fpga 的时候向学习VHDL,那时同学们都用verilog,以便和他们讨论问题的方便,后来就改学习verilog 了,一学不要紧,发现自己深深地爱上了verilog,因为对于我来说,他无疑更加适合我。这也是我的一个经验,那就是看看你旁边的人用的是什么工具,他们用的工具往往不是你最喜欢的或者是不是当前最流行的和用的最广泛的,但是你若要和他们交流讨论问题的话,那你还是迁就一下,大环境是这样的,和你旁边的人所用工具一样,交流起来也会顺畅方便。
来实验室后,因为我们实验室的员工用的伟福的仿真器,所以软件当然还是用伟福提供的。伟福的软件不怎么好,只支持汇编,比起大名鼎鼎的keil c51 那是逊了一大截。但是在前期的时候我还是选择了伟福的软件,因为我不想到时候我有问题不会的时候周边没有人帮助我。再后来,经过自己的摸索和向身边的工程师们请教,伟福用的已经很熟悉了,汇编也有了自己的一套,这个时候我开始在伟福里边嵌入keil,用c 语言来写程序,但是调试的时候用伟福软件还是有缺陷,比如说不能够单步执行。所以再后来我下载了keil c51 软件,从此以后我正式的在keil 的开发界面下写程序了。
当然仿真的时候也可以在keil 环境下用伟福仿真器,我想伟福在制造他的产品的时候就已经考虑到这点了,他的一些产品肯定要兼容主流软件keil 的。用了keil C51 后就不想用伟福编译软件了,同样的用了c 写程序后,就不想用汇编了。但是汇编是每一个硬件研发工程师们都必需的,汇编有c 不可企及之处,有时候还非用汇编不可。汇编的运行效率高,但是写起来很是繁琐,繁琐规繁琐,当在某些特定的时刻,汇编发挥了他不可替代的作用。比如在将usoc 移植到单片机的时候,与处理器相关的程序还真是必须用汇编来完成。
再后来,开始学习sopc。从最小系统硬件平台的搭建,到简单的led 闪烁程序的编写,到sof 文件在芯片上跑起来,看着led 的亮与灭,心中一直充满着无限的热清。每一次接触新知识都有一种发自内心的激动,每一次接触的新东西我都是从最简单的led 闪烁开始,从单片机到fpga 到sopc 再到ucos,只有每天的一个小小的进步才能让我拥有对工作的热情,只有这每天小小的看得见的“阶梯成就感”,才能激发自己对更多知识的追求。本人比较欣赏altera 公司推出的可编程片上系统(即sopc),她解放了我们搭建硬件系统的繁琐,仅仅需要按照需求在系统里边加上自己的IP 核和一些必须的外设。
altera公司或者其他的第三方公司已经为我们提供了性能和功能很完善的IP 核,我们所要做的只是将这些IP核加入到我们的系统里完成我们需要的功能。硬件系统完成后,需要在altera 公司为我们提供的nios IDE环境里边对我们的硬件系统进行软件编程,在这里,完全用c 语言来完成我们所需要的功能。与前边学习单片机、fpga 一样,第一个实验还是led 闪烁,然后慢慢的转向一些比较复杂的功能设计上去,也无非是实现以前用verilog 实现过的一些功能。两者的区别是:一种完全用verilog 语言来实现全部功能;一种需要先用sopc builder 搭建硬件系统,然后在nios ide 中进行软件的编程。这两种方法都能够实现我们需要的功能,但是后者更方便快捷,因为在这种方法里,我们使用的是“拿来主义”,IP 核已经实现了我们的功能,要做的仅仅是去用它而已。
最近一段时间在学习ucos 嵌入式操作系统,主要是运用在FPGA 里面。nios 已经为我们移植好了,不需要修改任何文件。在nios 用户界面里进行一些相应的设置,就可以用它了。altera 公司为我们提供的模板里边有几个很好的例子,任务管理、信号量、邮箱传递、事件标志、时间管理等都为我们提供了很好的模板,我们需要作的是认真的阅读它,研究它,必要的话对模板进行一些改写来完成自己的功能,这是模仿的更高的一个境地了,把他的一些东西进行吸收转化成为自己的东西,我想这是一个硬件爱好者和初学者非常乐于做的事情。
在进行fpga 学习的时候,我遇到过事情停滞不前,没有进展,心情沮丧的时候。那个时候对底层硬件一无所知,连对基本的原理图也看不懂,更别说程序在开发板上是怎么运行的了。再到后来进行nios 开发的时候,这种沮丧感与日俱增,每天一点进步也没有,那是一个很漫长的日子,现在想起来,依然庆幸自己没有绝望,没有对自己热爱的硬件失去信心。后来事件出现了转机。有一次我和我办公室的一个工程师聊天,谈到了我的空惑,他建议我先学习单片机,自己搭建硬件平台从最小系统做起。这个工程师热心助人,学习方面的问题他总是很耐心的为我解答,让我受益匪浅,我很庆幸能够在这种环境当中学习,虽说我不在高校,但是研究所为我提供的学习环境与硬件设施我想不是每个高校学生能够享受到的。
我想说的是,遇到问题的时候,当我们感觉事情没法进展下去的时候,我们不妨换一种方式,多与周边的人聊聊天。在我的环境里,我的导师是一个拥有近30 年硬件开发经验的资深研究员,才开始的时候我什么都不懂(赫赫,感觉现在依然什么都不懂,东西越学越多,总也学不完),但是我总喜欢跑到我导师的办公室和他瞎聊。他和蔼可亲,容易接近,和他交流的时候总是给我一些职业和人生方面的忠告,这些忠告将会伴随着我的人生。
人生总是有很多坎坷,我们的学习也是的。在这个时候我们就要看看任正非写给华为员工的一封信《要快乐的度过充满困难的一生》,在那里我们可以找到好好活下去的理由;当看中了某件事情的时候,我们就需要鼓足勇气,满腔热情地去迎接它,遇到困难的时候多和别人交流,或者是去网上看看李嘉诚的写给青年的《are you ready》,在那里我们可以学到谦虚、勇气、智慧、毅力。
最后送给我们的初学者一句话。《圣经》中马太福音里的一句话:凡有的,还要加给他叫他多余;没有的,连他所有的也要夺过来。
-
FPGA
+关注
关注
1628文章
21722浏览量
602896 -
电子工程师
+关注
关注
252文章
767浏览量
95621
发布评论请先 登录
相关推荐
评论