<?xml version="1.0" encoding="gbk"?> <rss version="2.0"><channel> <title>定阅帖子更新</title> <link>http://www.broadkey.com.cn/XML.ASP</link><description>TEAM Board - 意得法电子</description> <copyright>TEAM 2.0.5 Release</copyright><generator>TEAM Board by TEAM5.Cn Studio</generator> <ttl>30</ttl><item><link>http://www.broadkey.com.cn/Thread.asp?tid=419 </link><title>我的FPGA学习历程</title><author>alan</author><pubDate>2009-12-15 9:09:34</pubDate><description><![CDATA[回想起自己学FPGA，已经有一段时间了，从开始的茫然，到后来的疯狂看书，设计开发板，调电路，练习各种FPGA实例，到最后能独立完成项目，一路走来，感受颇多，拿出来和大家分享，顺便介绍下自己的一点经验所得，希望对初学者有所帮助。<br />
　　废话不说了，下面进入正题，学习FPGA我主要经历了这么几个阶段：<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; ①、Verilog语言的学习，熟悉Verilog语言的各种语法。<br />
&nbsp;&nbsp;&nbsp; ②、FPGA的学习，熟悉QuartusII软件的各种功能，各种逻辑算法设计，接口模块(RS232,LCD,VGA,SPI,I2c等)的设计，时序分析，硬件优化等，自己开始设计简单的FPGA板子。<br />
&nbsp;&nbsp;&nbsp; ③、NiosII的学习，熟悉NiosII的开发流程，熟悉开发软件(SOPC,NiosII IDE),了解NiosII的基本结构，设计NiosII开发板，编写NiosII C语言程序，调试板子各模块功能。
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 先来说说第一个阶段，现在主要的硬件描述语言有VHDL，Verilog两种，在本科时老师一般教VHDL，不过现在</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Verilog用的人越来越多，其更容易上手(与C语言语法比较类似),也更灵活，现在的IC设计基本都用Verilog。像systemC，systemVerilog之类的应该还在萌芽阶段，以后可能会有较大发展。鉴于以上原因我选择了Verilog作为我学习的硬件描述语言。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其实有C语言的基础，学起Verilog的语言很简单，关键要有并行的概念，所有的module，assign，always都是并行的，这一点与软件语言有明显不同。这里推荐几本评价比较好的学习Verilog的书籍：<br />
&nbsp;&nbsp;&nbsp; ①、《verilog 数字系统设计教程》，这本书对于入门是一本很好的书，通俗易懂，让人很快上手，它里面的例子也不错。但本书对于资源优化方面的编程没有多少涉及到。<br />
&nbsp;&nbsp;&nbsp; ②、《设计与验证Verilog HDL》，这本书虽然比较薄，但是相当精辟，讲解的也很深入，很多概念看了这本书有种豁然开朗的感觉，呵呵。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 学习Verilog其实不用看很多书，基本的语法部分大家都一样，关键是要自己会灵活应用，多做练习。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Verilog语言学了一段时间，感觉自己可以编点东西，希望自己编的程序在板子上运行看看结果，下面就介绍我学习的第二个阶段。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 刚开始我拿了实验室一块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数据高速缓存，电子开关状态设置等，在实践中学习起来真的比平时快很多，用到什么学什么动力更大。这个时候我主要看的数据有这几本感觉比较好：<br />
&nbsp;&nbsp;&nbsp; ①、《Altera FPGA/CPLD 设计（基础篇）》：讲解一些基本的FPGA设计技术，以及QuartusII中各个工具的用法（IP，RTL，SignalProbe，SignalTapII，Timing Closure Floorplan，chip Editor等），对于入门非常好。<br />
&nbsp;&nbsp;&nbsp; ②、《Altera FPGA/CPLD 设计（高级篇）》：讲解了一些高级工具的应用，LogicLock，时序约束很分析，设计优化，也讲述了一些硬件编程的思想，作为提高用。<br />
&nbsp;&nbsp;&nbsp; ③、《FPGA设计指南--器件，工具和流程》：这本书看了他的目录忍不住就买了，这本书讲述了FPGA设计的各个方面，虽然每个方面都是点到为止，但能让你有个整体的概念，了解FPGA的所有设计功能，了解FPGA开发的整个流程。<br />
&nbsp;&nbsp;&nbsp; ④、在这里也推荐几个学习FPGA比较好的论坛<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.edacn.net/bbs">http://www.edacn.net/bbs</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.eetop.cn/">http://www.eetop.cn/</a><br />
&nbsp;&nbsp;&nbsp; ⑤、其实最好的学习网站莫过于Altera的官方网站<a href="http://www.altera.com/">www.altera.com</a>，不过很多人一看到英语就不想看，其实上面的英文很简单，很多时候不敢看是因为对自己没信心或心静不下来看。不过官方网站上资料很多，刚开始可能会觉得资料安排的有点乱，不方便查找，以后有时间我列个资料的链接目录，整理一下，方便大家查找。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 到这里，自己最FPGA的学习有一段时间了，练习了很多实例，自己也编写了不少程序，也有了一些项目经验，算是对FPGA有些了解了。在不断的学习中发现FPGA不仅可以做逻辑设计，算法设计等，还能做嵌入式开发，altera先后开发了Nios，NiosII两款FPGA的嵌入式软核，并有配套的软件，刚开始看到这些我真是心中突然豁然开朗，学习真的是无止境，又一个全新的领域摆在我面前，我决定学习NiosII，要学就要学最好。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 刚开始入门是很痛苦的，嵌入式设计需要从硬件到驱动到软件全部熟悉，硬件系统问题还不是很大(以前做过单片机，DSP等MCU),处理器的架构心里还有点数，对于驱动和软件工程，刚开始学习真的很头痛。NiosII应该还算比较新的内容(应该是2004年出的)，国内的书籍不算很多，网上这方面的资料也比较零碎，所以我就开始将Altera网站上这方面的资料系统的看一边，这里推荐几本网站上的handbook：<br />
&nbsp;&nbsp;&nbsp; ①、Embedded Design Handbook<br />
&nbsp;&nbsp;&nbsp; ②、Nios II Processor Reference Handbook<br />
&nbsp;&nbsp;&nbsp; ③、Nios II Software Developer's Handbook<br />
&nbsp;&nbsp;&nbsp; ④、Quartus II Handbook, Volume 4: SOPC Builder<br />
&nbsp;&nbsp;&nbsp; ⑤、Quartus II Handbook, Volume 5: Embedded Peripherals<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 看完这些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也了解的差不多了，终于可以自己编写一些规模大一点的程序了。<br />
&nbsp;&nbsp;&nbsp; 以后的路还很长，不过也有很多惊喜在等着我们......</p>
<p>&nbsp;</p>]]></description></item></channel></rss>