EDN首页   博客首页 用户登陆  |  注册

日志档案

发表于 2008/11/13 22:01:32

50

标签: FPGA  Nios  Verilog  

【原创】我的FPGA学习历程

        回想起自己学FPGA,已经有一段时间了,从开始的茫然,到后来的疯狂看书,设计开发板,调电路,练习各种FPGA实例,到最后能独立完成项目,一路走来,感受颇多,拿出来和大家分享,顺便介绍下自己的一点经验所得,希望对初学者有所帮助。
  废话不说了,下面进入正题,学习FPGA我主要经历了这么几个阶段:
   
    ①、Verilog语言的学习,熟悉Verilog语言的各种语法。
    ②、FPGA的学习,熟悉QuartusII软件的各种功能,各种逻辑算法设计,接口模块(RS232,LCD,VGA,SPI,I2c等)的设计,时序分析,硬件优化等,自己开始设计简单的FPGA板子。
    ③、NiosII的学习,熟悉NiosII的开发流程,熟悉开发软件(SOPC,NiosII IDE),了解NiosII的基本结构,设计NiosII开发板,编写NiosII C语言程序,调试板子各模块功能。

        先来说说第一个阶段,现在主要的硬件描述语言有VHDL,Verilog两种,在本科时老师一般教VHDL,不过现在

        Verilog用的人越来越多,其更容易上手(与C语言语法比较类似),也更灵活,现在的IC设计基本都用Verilog。像systemC,systemVerilog之类的应该还在萌芽阶段,以后可能会有较大发展。鉴于以上原因我选择了Verilog作为我学习的硬件描述语言。
        其实有C语言的基础,学起Verilog的语言很简单,关键要有并行的概念,所有的module,assign,always都是并行的,这一点与软件语言有明显不同。这里推荐几本评价比较好的学习Verilog的书籍:
    ①、《verilog 数字系统设计教程》,这本书对于入门是一本很好的书,通俗易懂,让人很快上手,它里面的例子也不错。但本书对于资源优化方面的编程没有多少涉及到。
    ②、《设计与验证Verilog HDL》,这本书虽然比较薄,但是相当精辟,讲解的也很深入,很多概念看了这本书有种豁然开朗的感觉,呵呵。
        学习Verilog其实不用看很多书,基本的语法部分大家都一样,关键是要自己会灵活应用,多做练习。

        Verilog语言学了一段时间,感觉自己可以编点东西,希望自己编的程序在板子上运行看看结果,下面就介绍我学习的第二个阶段。
        刚开始我拿了实验室一块CPLD的开发板做练习,熟悉QuartusII的各种功能,比如IP的调用,各种约束设置,时序分析,Logiclock设计方法等,不过做到后面发现CPLD的资源不太够(没有内嵌的RAM、不能用SignalTapII,LE太少等),而实验室没有FPGA开发板,所以就萌生了自己做FPGA开发板的意图,刚好Cadence我也学的差不多了,就花了几天时间主要研究了FPGA配置电路的设计,在板子上做了Jtag和AS下载口,在做了几个用户按键和LED,其他的口全部引出作为IO口,电路比较简单,板子焊好后一调就通了(心里那个爽啊...)。我选的FPGA是cycloneII系列的EP2C5,资源比以前的FPGA多了好几倍,还有PLL,内嵌的RAM,可以试试SignalTapII,用内嵌的逻辑分析仪测试引脚波形,对于FPGA的调试,逻辑分析仪是至关重要的。利用这块板子我完成了项目中的几个主要功能:RS232通信,指令译码,配置DDS,AD数据高速缓存,电子开关状态设置等,在实践中学习起来真的比平时快很多,用到什么学什么动力更大。这个时候我主要看的数据有这几本感觉比较好:
    ①、《Altera FPGA/CPLD 设计(基础篇)》:讲解一些基本的FPGA设计技术,以及QuartusII中各个工具的用法(IP,RTL,SignalProbe,SignalTapII,Timing Closure Floorplan,chip Editor等),对于入门非常好。
    ②、《Altera FPGA/CPLD 设计(高级篇)》:讲解了一些高级工具的应用,LogicLock,时序约束很分析,设计优化,也讲述了一些硬件编程的思想,作为提高用。
    ③、《FPGA设计指南--器件,工具和流程》:这本书看了他的目录忍不住就买了,这本书讲述了FPGA设计的各个方面,虽然每个方面都是点到为止,但能让你有个整体的概念,了解FPGA的所有设计功能,了解FPGA开发的整个流程。
    ④、在这里也推荐几个学习FPGA比较好的论坛
         http://www.edacn.net/bbs
         http://www.eetop.cn/
    ⑤、其实最好的学习网站莫过于Altera的官方网站www.altera.com,不过很多人一看到英语就不想看,其实上面的英文很简单,很多时候不敢看是因为对自己没信心或心静不下来看。不过官方网站上资料很多,刚开始可能会觉得资料安排的有点乱,不方便查找,以后有时间我列个资料的链接目录,整理一下,方便大家查找。
   
        到这里,自己最FPGA的学习有一段时间了,练习了很多实例,自己也编写了不少程序,也有了一些项目经验,算是对FPGA有些了解了。在不断的学习中发现FPGA不仅可以做逻辑设计,算法设计等,还能做嵌入式开发,altera先后开发了Nios,NiosII两款FPGA的嵌入式软核,并有配套的软件,刚开始看到这些我真是心中突然豁然开朗,学习真的是无止境,又一个全新的领域摆在我面前,我决定学习NiosII,要学就要学最好。
        刚开始入门是很痛苦的,嵌入式设计需要从硬件到驱动到软件全部熟悉,硬件系统问题还不是很大(以前做过单片机,DSP等MCU),处理器的架构心里还有点数,对于驱动和软件工程,刚开始学习真的很头痛。NiosII应该还算比较新的内容(应该是2004年出的),国内的书籍不算很多,网上这方面的资料也比较零碎,所以我就开始将Altera网站上这方面的资料系统的看一边,这里推荐几本网站上的handbook:
    ①、Embedded Design Handbook
    ②、Nios II Processor Reference Handbook
    ③、Nios II Software Developer's Handbook
    ④、Quartus II Handbook, Volume 4: SOPC Builder
    ⑤、Quartus II Handbook, Volume 5: Embedded Peripherals
        看完这些handbook,总算基本明白整个架构,软硬件设计方法,驱动的编写等,感觉自己可以编一些嵌入式的程序了,不过虽然前面做的那块ep2c5的板子支持NiosII系统,不过对于嵌入式设计来说还是显得单薄了一点,没有SDRAM,Flash这两个比较基本的模块,Ep2C5内嵌的RAM太小,程序写不大,而且每次总要绞尽脑汁优化程序代码大小,很多时候优化了后函数功能会受到限制,不利于初学者,也不利于调试。所以到这里我有产生了自己做一块Nios开发板的想法(直接买比较贵,自己做便宜,而且还能锻炼自己,一举两得),通过借鉴其他开发板,选择自己开发板上需要包含什么模块,确定各个模块使用什么芯片,阅读各个芯片的datasheet,画出原理图并做出PCB图,这块板子我选的是Ep2c8Q208,比上一块资源又将近多了一倍,板子上还有以下模块:SDRAM,Flash,EPCS4,RS232,USB,VGA,PS2,AD,DA,LCD等,满足了一般开发板的配置要求。板子回来以后调试了四五天,(flash工作了,LCD显示了,RS232通了,USB通了,AD,DA工作了,SDRAM正常了...),真是每天都有惊喜,每个模块都编写了NiosII软件测试程序,调试硬件的时候对软件的运行也更熟悉了。在这次调试的过程中真的学到了很多,为此专门写了好几页调试笔记,下次拿出来和大家一起分享。现在硬件平台有了,NiosII也了解的差不多了,终于可以自己编写一些规模大一点的程序了。
    以后的路还很长,不过也有很多惊喜在等着我们......

 

系统分类: CPLD/FPGA   |   用户分类: FPGA   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

该用户于2008/11/14 13:07:10编辑过该文章

阅读(14129)  |  评论(69)  |  收藏(18)  |  举报  

投一票您将和博主都有获奖机会!

最新评论

  • ytfdhb

    2010/1/15 19:50:03

    真牛!我得好好学习学习,楼主真乃高人……

  • zhanpeng6012

    2009/12/27 19:39:37

    见贤思齐啊

  • robin_ren

    2009/10/16 20:07:14

    楼主果然很强,我总是在门口徘徊

  • lbh0226

    2009/10/8 15:44:25

    学习了,楼主很有毅力的

  • lucky5

    2009/9/23 21:09:01

    感触很多

  • chactor

    2009/8/15 13:31:22

    博主创办的网站: www.eieworld.com 上面有更详细的内容

  • aijuanni

    2009/7/31 11:16:48

    关注

  • turboc

    2009/7/21 20:19:43

    向楼主学习,楼主的学习经历对初学者非常有用,谢谢了

  • jacky_shen

    2009/7/18 21:06:39

    楼主的历程对我很有启发

  • tiandirongwoxin

    2009/5/14 12:04:26

    不错!以后可向你学习了!

  • lin65505578

    2009/5/12 22:30:03

    哇哇,值得学习

  • huxiao9178

    2009/5/6 23:13:55

    感谢分享.我是开始学习的,望 以后有这方面的问题能够请教.

  • aiboluo13

    2009/5/5 21:45:10

    楼主的经验值得借鉴呀。我们这里,一般只能是自学了。

  • dukedz

    2009/5/1 0:08:01

    汗,牛人就是牛人,usb一下就通了,说的好轻巧啊。。。。。。。。。。。。。。。。。。 赌东道赌东道赌东道赌东道赌东道赌东道赌东道赌东道赌东道赌东道的。

  • tibird

    2009/4/24 11:18:22

  • daheng

    2009/4/21 11:41:30

    在学校实验室用的是FPGA,可一直没有自己做出过东西来

  • 526762737

    2009/4/2 13:29:17

    楼主啊 我也学了将近一个学期的cpld/fpga但是自己好像还是摸不清怎么动手做?能告诉下从什么项目开始动手么?谢谢

  • AlfedSun

    2009/4/2 9:52:19

    厉害啊,学习学习

  • seize_theday

    2009/3/13 13:40:50

    学习中、谢谢分享!

  • mengfj_1985

    2009/3/12 22:48:13

    顶一下

  • sosoul

    2009/3/11 21:25:52

    哇塞,我刚开始接触FPGA,因为也是跟着项目走,所以很焦急。 看到楼主的文章真是受益匪浅,豁然开朗!以后一定每篇必读!!!

  • colinji

    2009/2/17 21:57:49

    谢谢分享,学习中

  • Neptunezj

    2009/2/13 20:41:49

    留个爪,好好学习!

  • xwq8204

    2009/2/1 15:28:28

    比起楼主,我浮躁的多啊

  • xwq8204

    2009/2/1 15:28:07

    牛人啊,赞一个

  • duands

    2009/1/17 15:06:57

    我也顶一下,搞了一段时间了,不过杂事太多,静不下心来,感觉第一步总是迈不出去

  • xiangjin1017

    2009/1/11 15:57:18

    好文章~

  • chactor

    2008/12/28 20:15:01

    是用Allegro,版本是15.7

  • qiaoyisong

    2008/12/27 19:30:38

    您好,请问您布线使用的Candence软件是哪一款? Allegro么? qiaoyisong@gmail.com

  • qiaoyisong

    2008/12/27 19:30:29

    您好,请问您布线使用的Candence软件是哪一款? Allegro么? qiaoyisong@gmail.com

  • qiaoyisong

    2008/12/27 19:29:45

    您好,请问您布线使用的Candence软件是哪一款? Allegro么? qiaoyisong@gmail.com

  • guzhou79

    2008/12/26 11:35:28

    hhhhhhhhhhhhhhhhhh

  • mgq1985

    2008/12/26 11:14:03

  • kai3008

    2008/12/19 23:29:14

    有动力才有学习劲头,很佩服你,贵在坚持及静心学习,基础重要,一点一步去学习,实践,很多谢你的经验,让人有信心去学习技术,我想问一下:自己明知有一技术很有用,但没有劲力学习它,而且不知学了能否温份好工作,现在好多招技术都关心你在同一行做了多久,而不关心你这技术用这他公司产品也合适,所以无什么劲力去学,如何去克服这心理障碍,就像你刚学FPGA一样迷茫

  • kai3008

    2008/12/19 23:28:40

    有动力才有学习劲头,很佩服你,贵在坚持及静心学习,基础重要,一点一步去学习,实践,很多谢你的经验,让人有信心去学习技术,我想问一下:自己明知有一技术很有用,但没有劲力学习它,而且不知学了能否温份好工作,现在好多招技术都关心你在同一行做了多久,而不关心你这技术用这他公司产品也合适,所以无什么劲力去学,如何去克服这心理障碍,就像你刚学FPGA一样迷茫

  • ptwang

    2008/12/19 11:16:11

    不错,俺一开始接触的是 VHDL,感觉再学Verilog的话,挺别扭!还是博主厉害啊

  • 雪鹰1

    2008/12/18 16:01:12

    厉害!!!

  • chactor

    2008/12/18 13:23:20

    可以转载,不过最好注明转载出处啊,呵呵

  • zldiy

    2008/12/18 10:31:28

    准备入门FPGA,谢谢很好的资料,可以转载吗?我想放到我的QQ空间中,方便以后的资料参考?

  • yattya

    2008/12/18 0:58:35

    这个必须顶啊。我是菜鸟,看了这篇文章对我帮助很大。

  • yattya

    2008/12/18 0:58:17

    这个必须顶啊。我是菜鸟,看了这篇文章对我帮助很大。

  • feixiang65

    2008/12/17 20:32:59

    佩服 太强了

  • biyajie

    2008/12/17 13:52:58

    楼主好强,向你学习。

  • biyajie

    2008/12/17 13:52:38

    楼主好强,向你学习。

  • biyajie

    2008/12/17 13:52:08

    楼主好强,向你学习。

  • chengfei21

    2008/12/17 13:06:14

    路走下来就好了

  • tanakasang

    2008/12/13 22:51:11

    持续关注着博主的新作~~

  • yslkendy

    2008/12/13 18:33:56

    顶一下

  • weiwgml

    2008/12/13 15:33:31

    不错不错,我也正在学习FPGA,也很想涉及这个行业,感觉很有意思,不过老板项目不涉及这一块只能自己抽出些时间按学习,还好实验室有个很强大的开发平台扔哪没人用,看了楼主的总结受益匪浅啊,只要努力没有做不成的事!

  • younew

    2008/12/12 11:47:33

    请求有没有关于QuartusII的约束设置,时序分析方面的资料啊,详细一点的?

  • abcd200844

    2008/12/11 20:11:21

    支持博主!做个记号,改日再来!

  • ligongchen

    2008/12/11 12:52:27

    支持啊

  • chactor

    2008/12/5 22:49:16

    硬件虽然速度快,当很多时候做控制不方便,外加MCU又增加成本,加上niosII后,原来的算法逻辑还可以用硬件Verilog实现,不过还可以加上软件控制,这样系统可以做的更大一些。

  • fpgasdr

    2008/12/5 22:28:49

    为什么不一直做硬件呢,后来去做nios , 明显 做逻辑和算法的技术含量都有意思一些

  • jianfengxy

    2008/12/5 22:06:25

    不错。

  • xw_0104

    2008/12/5 20:17:25

    谢谢 分享!

  • dirk99

    2008/11/29 14:08:37

    谢谢 楼主 分享!!!!!!!

  • dirk99

    2008/11/29 14:08:26

    谢谢 楼主 分享!!!!!!!

  • wangyongjina

    2008/11/29 11:19:26

    不错!前辈。。。。。

  • zl_sinan

    2008/11/24 9:44:39

    谢谢分享经验,期待着分享你的其他惊喜!!!

  • chactor

    2008/11/20 9:33:48

    我在后续的博文:Nios II 嵌入式系统硬件设计系列文章中会将板子上的电路分各个模块分别讲解,欢迎继续关注我的博客,调试笔记近期会发上来。

  • maoyuhong

    2008/11/19 22:10:53

    博主能不能发出你做的那个板子的原理图学习下

  • maoyuhong

    2008/11/19 22:09:26

    支持楼主发出调试笔记 谢谢

  • icoozy

    2008/11/19 21:06:03

    好长一条路,我慢慢地一步一步走

  • duanwenbo2004

    2008/11/19 16:08:14

    不错,自己也要努力了

  • chactor

    2008/11/19 9:48:23

    其实仔细算起来,学习时间也不长,应该是一学期左右,这一学期基本上一直在学习FPGA,学习贵在多锻炼,多实践,因为也是跟着项目走,有进度要求,有这个压力,所以也有动力,呵呵,关键是要靠自己多努力

  • 24272809

    2008/11/19 9:27:20

    想问一下,博主从开始学习verilog语法,到现在有多长时间了?我感觉自己学了半年了,什么都还不会,真的佩服你。

  • dongmeih

    2008/11/18 18:21:08

    不错!!!!!!!

  • jiereliyi

    2008/11/17 15:13:19

    支持,不错