第一篇:给大学生学习ARM和FPGA的一些建议
首先不管是学什么,要有最初的兴趣!
学习ARM的,对于初学者来说,要学的知识点很多,到底从哪里下手,人们常常感到非常迷茫。大一学生先从C语言开始入门,在大一阶段由于对计算机还非常陌生,因此不可能写出一个具有完整图形界面的软件,重点以“与硬件无关的计算方法、数据结构”为基础学习C语言,至少练习编写一万行C代码,否则不会找到编程的感觉,也体会不到编程乐趣。
有了一万行编程的经验后,大二接着开始学习数字电路和模拟电路了,这是你的机会!将来的开发工作有几种选择,但这两门都很重要,学好了你有可能成为顶尖的高手、专家和系统级水平的人才,即便学得不太好,你也有可能成为一个优秀的工程师。
学FPGA,作为初学者,在学习《电子技术基础(数字部分)》时同步学习FPGA与Verilog技术的重点是快速入门和打下一定的基础。最好在大一开始学习单片机。有了大一、二阶段强化训练,后续的很多课程度可以理论与实践并重地学习,进入大三阶段则需要有选择地重点学习嵌入式操作系统原理与编程、嵌入式系统与FPGA的混合系统设计或者全力以赴钻研FPGA应用技术等技术方向,大四阶段就可以真刀真枪地完成一个漂亮的毕业设计,并能够写出一篇比硕士水平还要高的论文。
亚嵌教育培训中心
第二篇:周立功博客――给大学生学习ARM和FPGA的建议.
周立功博客 —— 给大学生学习ARM 和 FPGA 的建议
对于初学者来说,要学的知识点很多,到底从哪里下手,人们常常感到 非常迷茫。大一学生先从 C 语言开始入门,在大一阶段由于对计算机还 非常陌生,因此不可能写出一个具有完整图形界面的软件,重点以 “ 与 硬件无关的计算方法、数据结构 ” 为基础学习C 语言,至少练习编写一 万行 C 代码,否则不会找到编程的感觉,也体会不到编程乐趣,很多人 就是因为缺乏一定量的训练, 所以对编程没有兴趣,以至于未到毕业时 就全部忘记了,程序设计是一项实践性很强的实践活动,没有大量的实 践作为基础是很难入门的, 因此我认为编写一万行代码是判定是否入门 的依据。请初学者记住:当你编写了一万行代码时,这是你能够从事专 业的开始,否则你不要期望在这个领域混下去。与此同时, C 语言也是 学习和使用 Verilog 的重要基础, 所以千万不可小视 C 语言。更重要的 是, 如果你的 C 语言不好的话,你将来就业选择的路子就会受到很大的 限制,要么只能做硬件工程师、销售工程师或者转行,别无选择!有了一万行编程的经验后,大二接着开始学习数字电路和模拟电路了, 这是你的机会!将来的开发工作有几种选择,但这两门都很重要,学好 了你有可能成为顶尖的高手、专家和系统级水平的人才,即便学得不太 好,你也有可能成为一个优秀的工程师。前一篇博文讲了,如果你精通 了 C/C++,即便你的硬件水平一般,你也可以成为一个优秀的开发工程 师, 即由硬件工程师负责逻辑电路和模拟电路的设计, 由你来编程 —— 你可以编写基于 WinCE、Linux、Vxworks 或者 Windows 等操作系统的程
序。那么怎样才算基本上 “ 精通 ” 呢?至少编写五万行代码,当你已经编 写了 10万行代码时,可以说你已经完全精通了,这个时候你如果有很 大的造化的话,那完全取决于你当初学习的基础是否牢固了。所以我在 前面提到了, 精通一门可以成为优秀的开发工程师,但绝对不可能成为 系统级的开发工程师,因为你的知识结构不行。
最好在学习数字电路时购买一个 99元的 EasyFPGA030开发学习板,这 个板子是我们开发的,但这个价格是没有利润的, 不要认为我是在做推 销, 我们推出这个产品完全是针对大二学生的,希望有更多的大二学生 提早醒悟, 能够在学习数字电路时同步学习FPGA 和 Verilog , 强化课程 之间的关联。笔者虽然是一个企业家,但也有
一份爱心和社会责任感, 为社会做出自己的贡献同样也是企业家的 “ 销售业绩 ” ,我们为这个开发 板撰写了 30万字的配套资料和适合各种水平的范例,也投入了大量的 精力录制 Verilog 语言视频讲座, 这些都是超值和免费的。与此同时从 2009年开始着手针对大二和大三学生举办 FPGA 大赛,以提高在校大学 生的兴趣,让那些觉悟者进一步提高自信心,找到自己未来的坐标。学 好数字电路和模拟电路以及 FPGA 应用技术,除了成为电子产品开发工 程师之外(高附加值的嵌入式系统产品几乎离不开 FPGA , 还有一个就 业方向就是号称 “ 金饭碗 ” 的集成电路设计。
作为初学者,在学习《电子技术基础(数字部分》时同步学习FPGA 与 Verilog 技术的重点是快速入门和打下一定的基础, 根据配套的教材 和数字电路教材的内容将基本的数字电路用 FPGA 实现即可,这是本阶 段的学习目标,不要将学习高深难度的应用技术作为重点。并利用课余
和暑假期间的空余时间, 将一些图书上现成的使用数字电路实现的例子 用 FPGA 来完成设计即可, 比方如何使用 FPGA 实现一个计数器, 并动手 做出来。到大三阶段在做出选择,到底是选择成为一个专业的 FPGA 应 用设计工程师、还是嵌入式系统与 FPGA 混合应用系统设计工程师或集 成电路开发工程师, 以自己的兴趣和志向为基础而定, 所以在学习嵌入 式系统技术的同时学习FPGA ,两者之间并不矛盾。
最好在大一开始学习单片机, 这就是笔者为何撰写 《新编电类专业计算 机基础》这本图书的原因(详见破解电类专业 “ 就业难、人才荒 ” 的解决 方案!(4。因为大一不学习单片机,后面的课程都没有办法学好。对于大一学习单片机,很多老师不去用心研究学习方法和教学规律,反 而搬出一大堆理由来 “ 吓唬 ” 人。笔者当年仅仅是一个技校生,在完全没 有指导老师的情况下,也找不到可以参考的技术资料, 只是凭着偶尔看 到一篇报道罗伯特设计的 Altair 8800计算机就做出了一台不需要工作 软件的计算机(改进型的 Altair-80C31电路详见《新编电类专业计算 机基础》教材。要相信现在公开的信息、资讯条件、人们的聪明智慧 与教师的力量, 因此大学本科生在大一阶段学会单片机是非常容易的一 件事情。
有了单片机基础之后,在大二阶段学习数字电路与模拟电路的同时,结 合单片机学习接口扩展技术与模拟前向通道数据采集技术, 并编写相应 的程序实现一个一个的小系统设计, 大三时根本不再需要学习所谓的接 口技术与微机原理了。针对数字电路与模拟电路笔者准备写作一套小系 统设计与制作配套图书, 将前后之间的课程也同步和关联起来,期望进
一步提高大学生的动手能力。
有了大一、二阶段强化训练, 后续的很多课程度可以理论与实践并重地 学习,比方目前大学开设的《自动控制理论》几乎都是空对空地教学与 联系,如果结合自动控制理论的教学, 让学生学习设计一个自动穿越迷 宫的电脑鼠, 并举办相应的大赛, 则能够很好地将嵌入式系统应用技术、数字电路与模拟电路、计算方法与数据结构、机构设计......相关课程 有机地结合起来,学生的兴趣将大大地得到提高。
当学生有了学习的兴趣和动力之后,教学势必由老师个人在课堂上演 “ 独角戏 ” 的场面转变为研讨会,学生也一定会竭尽全力由被动学习向主 动学习转变, 这就是教育要达到的目标, 所以我们不能一味地指责学生 不好学。作为老师我们一定要思考和拿出行动,让学生喜欢并愿意向您 学习。事实上学生的未来完全取决于老师的引导, 现在教师队伍存在的 很大毛病就是将责任推向扩招和学生不好好学, 扩招有没有问题?当然 有, 但作为教师我们做得怎么样呢?我们是否在教学上做出了巨大的努 力,这需要我们扪心自问。
学生不好好学,这也是事实!但也是表象,我们要思考他们为什么不好 好学习?我们应该怎样才能让他们好好地学?作为老师, 第一不能给学 生划定考试范围, 第二学生缺课要坚决扣分, 如果做到这两点基本的要 求,学生不好好学就制度处理,我想效果会有很大的改变。当然就业难 的责任也不能完全推给老师, 但老师们应该做到自己该做到的,因为家 长都希望老师们对他们的子女严格要求, 更迫切的需求就是让他们的子 女学到真本事,他们肯定支持教师的行动。
进入大三阶段则需要有选择地重点学习嵌入式操作系统原理与编程、嵌 入式系统与 FPGA 的混合系统设计或者全力以赴钻研 FPGA 应用技术等技 术方向, 大四
阶段就可以真刀真枪地完成一个漂亮的毕业设计,并能够 写出一篇比硕士水平还要高的论文。
第三篇:周立功博客——给大学生学习ARM和FPGA的建议
0 周立功博客——给大学生学习ARM和FPGA的建议
对于初学者来说,要学的知识点很多,到底从哪里下手,人们常常感到非常迷茫。大一学生先从C语言开始入门,在大一阶段由于对计算机还非常陌生,因此不可能写出一个具有完整图形界面的软件,重点以“与硬件无关的计算方法、数据结构”为基础学习C语言,至少练习编写一万行C代码,否则不会找到编程的感觉,也体会不到编程乐趣,很多人就是因为缺乏一定量的训练,所以对编程没有兴趣,以至于未到毕业时就全部忘记了,程序设计是一项实践性很强的实践活动,没有大量的实践作为基础是很难入门的,因此我认为编写一万行代码是判定是否入门的依据。请初学者记住:当你编写了一万行代码时,这是你能够从事专业的开始,否则你不要期望在这个领域混下去。与此同时,C语言也是学习和使用Verilog的重要基础,所以千万不可小视C语言。更重要的是,如果你的C语言不好的话,你将来就业选择的路子就会受到很大的限制,要么只能做硬件工程师、销售工程师或者转行,别无选择!有了一万行编程的经验后,大二接着开始学习数字电路和模拟电路了,这是你的机会!将来的开发工作有几种选择,但这两门都很重要,学好了你有可能成为顶尖的高手、专家和系统级水平的人才,即便学得不太好,你也有可能成为一个优秀的工程师。前一篇博文讲了,如果你精通了C/C++,即便你的硬件水平一般,你也可以成为一个优秀的开发工程师,即由硬件工程师负责逻辑电路和模拟电路的设计,由你来编程——你可以编写基于WinCE、Linux、Vxworks或者Windows等操作系统的程序。那么怎样才算基本上“精通”呢?至少编写五万行代码,当你已经编写了10万行代码时,可以说你已经完全精通了,这个时候你如果有很大的造化的话,那完全取决于你当初学习的基础是否牢固了。所以我在前面提到了,精通一门可以成为优秀的开发工程师,但绝对不可能成为系统级的开发工程师,因为你的知识结构不行。
最好在学习数字电路时购买一个99元的EasyFPGA030开发学习板,这个板子是我们开发的,但这个价格是没有利润的,不要认为我是在做推销,我们推出这个产品完全是针对大二学生的,希望有更多的大二学生提早醒悟,能够在学习数字电路时同步学习FPGA和Verilog,强化课程之间的关联。笔者虽然是一个企业家,但也有一份爱心和社会责任感,为社会做出自己的贡献同样也是企业家的“销售业绩”,我们为这个开发板撰写了30万字的配套资料和适合各种水平的范例,也投入了大量的精力录制Verilog语言视频讲座,这些都是超值和免费的。与此同时从2009年开始着手针对大二和大三学生举办FPGA大赛,以提高在校大学生的兴趣,让那些觉悟者进一步提高自信心,找到自己未来的坐标。学好数字电路和模拟电路以及FPGA应用技术,除了成为电子产品开发工程师之外(高附加值的嵌入式系统产品几乎离不开FPGA),还有一个就业方向就是号称“金饭碗”的集成电路设计。
作为初学者,在学习《电子技术基础(数字部分)》时同步学习FPGA与Verilog技术的重点是快速入门和打下一定的基础,根据配套的教材和数字电路教材的内容将基本的数字电路用FPGA实现即可,这是本阶段的学习目标,不要将学习高深难度的应用技术作为重点。并利用课余和暑假期间的空余时间,将一些图书上现成的使用数字电路实现的例子用FPGA来完成设计即可,比方如何使用FPGA 实现一个计数器,并动手做出来。到大三阶段在做出选择,到底是选择成为一个专业的FPGA应用设计工程师、还是嵌入式系统与FPGA混合应用系统设计工程师或集成电路开发工程师,以自己的兴趣和志向为基础而定,所以在学习嵌入式系统技术的同时学习FPGA,两者之间并不矛盾。
最好在大一开始学习单片机,这就是笔者为何撰写《新编电类专业计算机基础》这本图书的原因(详见破解电类专业“就业难、人才荒”的解决方案!(4))。因为大一不学习单片机,后面的课程都没有办法学好。对于大一学习单片机,很多老师不去用心研究学习方法和教学规律,反而搬出一大堆理由来“吓唬”人。笔者当年仅仅是一个技校生,在完全没有指导老师的情况下,也找不到可以参考的技术资料,只是凭着偶尔看到一篇报道罗伯特设计的Altair 8800计算机就做出了一台不需要工作软件的计算机(改进型的Altair-80C31电路详见《新编电类专业计算机基础》教材)。要相信现在公开的信息、资讯条件、人们的聪明智慧与教师的力量,因此大学本科生在大一阶段学会单片机是非常容易的一件事情。
有了单片机基础之后,在大二阶段学习数字电路与模拟电路的同时,结合单片机学习接口扩展技术与模拟前向通道数据采集技术,并编写相应的程序实现一个一个的小系统设计,大三时根本不再需要学习所谓的接口技术与微机原理了。针对数字电路与模拟电路笔者准备写作一套小系统设计与制作配套图书,将前后之间的课程也同步和关联起来,期望进一步提高大学生的动手能力。
有了大一、二阶段强化训练,后续的很多课程度可以理论与实践并重地学习,比方目前大学开设的《自动控制理论》几乎都是空对空地教学与联系,如果结合自动控制理论的教学,让学生学习设计一个自动穿越迷宫的电脑鼠,并举办相应的大赛,则能够很好地将嵌入式系统应用技术、数字电路与模拟电路、计算方法与数据结构、机构设计......相关课程有机地结合起来,学生的兴趣将大大地得到提高。
当学生有了学习的兴趣和动力之后,教学势必由老师个人在课堂上演“独角戏”的场面转变为研讨会,学生也一定会竭尽全力由被动学习向主动学习转变,这就是教育要达到的目标,所以我们不能一味地指责学生不好学。作为老师我们一定要思考和拿出行动,让学生喜欢并愿意向您学习。事实上学生的未来完全取决于老师的引导,现在教师队伍存在的很大毛病就是将责任推向扩招和学生不好好学,扩招有没有问题?当然有,但作为教师我们做得怎么样呢?我们是否在教学上做出了巨大的努力,这需要我们扪心自问。
学生不好好学,这也是事实!但也是表象,我们要思考他们为什么不好好学习?我们应该怎样才能让他们好好地学?作为老师,第一不能给学生划定考试范围,第二学生缺课要坚决扣分,如果做到这两点基本的要求,学生不好好学就制度处理,我想效果会有很大的改变。当然就业难的责任也不能完全推给老师,但老师们应该做到自己该做到的,因为家长都希望老师们对他们的子女严格要求,更迫切的需求就是让他们的子女学到真本事,他们肯定支持教师的行动。进入大三阶段则需要有选择地重点学习嵌入式操作系统原理与编程、嵌入式系统与FPGA的混合系统设计或者全力以赴钻研FPGA应用技术等技术方向,大四阶段就可以真刀真枪地完成一个漂亮的毕业设计,并能够写出一篇比硕士水平还要高的论文。
FPGA在目前应用领域非常,在目前的单板设计里面,几乎都可以看到它的身影。从简单的逻辑组合,到高端的图像、通信协议处理,从单片逻辑到复杂的ASIC原型验证,从小家电到航天器,都可以看到FPGA应用,它的优点在这里无庸赘述。从个人实用角度看,对于学生,掌握FPGA可以找到一份很好的工作,对于有经验的工作人员,使用fgpa可以让设计变得非常有灵活性。掌握了fpga的设计,单板硬件设计就非常容易(不是系统设计),特别是上大学时如同天书的逻辑时序图,看起来就非常亲切。但fpga的入门却有一定难度,因为它不像软件设计,只要有一台计算机,几乎就可以完成所有的设计。fpga的设计与硬件直接相关,需要实实在在的调试仪器,譬如示波器等。这些硬件设备一般比较昂贵,这就造成一定的入门门槛,新人在入门时遇到一点问题或者困难,由于没有调试设备,无法定位问题,最后可能就会放弃。其实这时如果有人稍微指点一下,这个门槛很容易就过去。
我用FPGA做设计很多年了,远达不到精通的境界,只是熟悉使用,在这里把我对fpga的学习步骤理解写出来,仅是作为一个参考,不对的地方,欢迎大家讨论和指正。
1、工欲善其事,必先利其器。
计算机必不可少。目前FPGA应用较多的是Altera和xilinx这两个公司,可以选择安装quartusII或者ISE软件。这是必备的软件环境。
硬件环境还需要下载器、目标板。虽然有人说没有下载器和目标板也可学习fpga,但那总是纸上谈兵。这就像谈女朋友,总是嘴上说说,通个电话,连个手都没牵,能说人家是你朋友?虽说搭建硬件环境需要花费,但想想,硬件环境至多几百元钱,你要真的掌握FPGA的设计,起薪比别人都不止高出这么多。这点花费算什么?
2、熟悉verilog语言或者vhdl语言,熟练使用quartusII或者ISE软件。
VHDL和verilog各有优点,选择一个,建议选择verilog。熟练使用设计软件,知道怎样编译、仿真、下载等过程。
起步阶段不希望报一些培训班,除非你有钱,或者运气好,碰到一个水平高、又想把自己的经验和别人共享的培训老师,不然的话,培训完后总会感觉自己是一个冤大头。入门阶段可以在利用网络资源完成。
3、设计一个小代码,下载到目标板看看结果
此时可以设计一个最简答的程序,譬如点灯。如果灯在闪烁了,表示基本入门了。如果此时能够下载到fpga外挂的flash,fpga程序能够从flash启动,表明fpga的最简单设计你已经成功,可以到下一步。
4、设计稍微复杂的代码,下载到目标板看看结果。
可以设计一个UART程序,网上有参考,你要懂RS232协议和fpga内置的逻辑分析仪。网上下载一个串口调试助手,调试一番,如果通信成功了,恭喜,水平有提高。进入下一步。
5、设计复杂的代码,下载到目标板看看结果。
譬如sdram的程序,网上也有参考,这个设计难度有点大。可用串口来调试sdram,把串口的数据存储到sdram,然后读回,如果成功,那你就比较熟悉fpga的设计饿了
6、设计高速接口,譬如ddr2或者高速串行接口
这要对fpga的物理特性非常了解,而且要懂得是时序约束等设计方法,要看大量的原厂文档,这部分成功了,那就对fpga的物理接口掌握很深,你就是设计高手了
7、设计一个复杂的协议
譬如USB、PCIexpress、图像编解码等,锻炼对系统的整体把握和逻辑划分。完成这些,你就是一个一流的高手、8、学习再学习
学习什么,我也不知道,我只知道“学无止境,山外有山”。
第四篇:如何学习fpga
如何学习FPGA
关键词:工作人员, 硬件, 设计, FPGA
掌握FPGA可以找到一份很好的工作,对于有经验的工作人员,使用FPGA可以让设计变得非常有灵活性。掌握了FPGA设计,单板硬件设计就非常容易(不是系统设计),特别是上大学时如同天书的逻辑时序图,看起来就非常亲切。但FPGA入门却有一定难度,因为它不像软件设计,只要有一台计算机,几乎就可以完成所有的设计。FPGA设计与硬件直接相关,需要实实在在的调试仪器,譬如示波器等。这些硬件设备一般比较昂贵,这就造成一定的入门门槛,新人在入门时遇到一点问题或者困难,由于没有调试设备,无法定位问题,最后可能就会放弃。其实这时如果有人稍微指点一下,这个门槛很容易就过去。我用FPGA做设计很多年了,远达不到精通的境界,只是熟悉使用,在这里把我对FPGA学习步骤理解写出来,仅是作为一个参考,不对的地方,欢迎大家讨论和指正。
FPGA学习步骤
1、工欲善其事,必先利其器。
计算机必不可少。目前FPGA应用较多的是Altera和xilinx这两个公司,可以选择安装quartusII或者ISE软件。这是必备的软件环境。
硬件环境还需要下载器、目标板。虽然有人说没有下载器和目标板也可学习fpga,但那总是纸上谈兵。这就像谈女朋友,总是嘴上说说,通个电话,连个手都没牵,能说人家是你朋友?虽说搭建硬件环境需要花费,但想想,硬件环境至多几百元钱,你要真的掌握FPGA的设计,起薪比别人都不止高出这么多。这点花费算什么?
FPGA学习步骤
2、熟悉verilog语言或者vhdl语言,熟练使用quartusII或者ISE软件。
VHDL和verilog各有优点,选择一个,建议选择verilog。熟练使用设计软件,知道怎样编译、仿真、下载等过程。
起步阶段不希望报一些培训班,除非你有钱,或者运气好,碰到一个水平高、又想把自己的经验和别人共享的培训老师,不然的话,培训完后总会感觉自己是一个冤大头。入门阶段可以在利用网络资源完成。
FPGA学习步骤
3、设计一个小代码,下载到目标板看看结果
此时可以设计一个最简答的程序,譬如点灯。如果灯在闪烁了,表示基本入门了。如果此时能够下载到FPGA外挂的flash,FPGA程序能够从flash启动,表明FPGA的最简单设计你已经成功,可以到下一步。
FPGA学习步骤
4、设计稍微复杂的代码,下载到目标板看看结果。
可以设计一个UART程序,网上有参考,你要懂RS232协议和FPGA内置的逻辑分析仪。网上下载一个串口调试助手,调试一番,如果通信成功了,恭喜,水平有提高。进入下一步。
FPGA学习步骤
5、设计复杂的代码,下载到目标板看看结果。
譬如sdram的程序,网上也有参考,这个设计难度有点大。可用串口来调试sdram,把串口的数据存储到sdram,然后读回,如果成功,那你就比较熟悉FPGA设计了
FPGA学习步骤
6、设计高速接口,譬如ddr2或者高速串行接口
这要对FPGA的物理特性非常了解,而且要懂得是时序约束等设计方法,要看大量的原厂文档,这部分成功了,那就对FPGA的物理接口掌握很深,你就是设计高手了
FPGA学习步骤
7、设计一个复杂的协议
譬如USB、PCIexpress、图像编解码等,锻炼对系统的整体把握和逻辑划分。完成这些,你就是一个一流的高手、FPGA学习步骤
8、学习再学习
学习什么,我也不知道,我只知道“学无止境,山外有山”。
现在很多FPGA工程师,没找到合适,我觉得很多人从开始的时候就误入歧途了,对新手学习FPGA设计我也说一点看法吧。我认为要从基础开始做,基础牢,才有成为高手的可能。
我觉得FPGA学习有以下几步必须要走:
第一步:学习了解FPGA结构,FPGA到底是什么东西,芯片里面有什么,不要开始就拿个开发板照着别人的东西去编程。很多开发板的程序写的很烂,我也做过一段时间的开发板设计,我觉得很大程度上,开发板在误人子弟。不过原厂提供的正品开发板,代码很优秀的,可以借鉴。只有了解了FPGA内部的结构才能明白为什么写Verilog和写C整体思路是不一样的。
第二步:掌握FPGA设计的流程。了解每一步在做什么,为什么要那么做。很多人都是不就是那几步吗,有什么奇怪的?呵呵,我想至少有一半以上的人不知道synthesize和traslate的区别吧。
了解了FPGA的结构和设计流程才有可能知道怎么去优化设计,提高速度,减少资源,不要急躁,不要去在为选择什么语言和选择哪个公司的芯片上下功夫。语言只是一个表达的方式,重要的是你的思维,没有一个好的指导思想,语言用得再好,不过是个懂语言的人。
第三步:开始学习代码了。我建议要学代码的人都去Altera或Xilinx的网站上下原厂工程师的代码学习。不要一开始就走入误区。
第四步:template很重要。能不能高效利用FPGA资源,一是了解fpga结构,二是了解欲实现的逻辑功能和基本机构,三是使用正确的模板。FPGA内部器件种类相对较单一,用好模板,你的逻辑才能被高效的综合成FPGA擅长表达的结构:)
做FPGA主要是要有电路的思想,作为初学者,往往对器件可能不是熟悉,那么应该对于数字电路的知识很熟悉吧,FPGA中是由触发器和查找表以及互联线等基本结构组成的,其实在我们在代码里面能够看到的就是与非门以及触发器,不要把verilog和c语言等同起来,根本就是不同的东西,没有什么可比性,在写一句程序的时候应该想到出来的是一个什么样的电路,计数
器 选择器 三态门等等,理解时序,逻辑是一拍一拍的东西,在设计初期想的不是很清楚的时候可以画画时序图,这样思路会更加的清晰,还有就是仿真很重要,不要写完程序就去往FPGA中去加载,首先要仿真,尤其是对比较大型一点的程序,想像自己是在做asic,是没有二次机会的,所以一定要把仿真做好,还有很多新手对于语言的学习不知道选vhdl好还是verilog好,个人偏好verilog,当然不是说vhdl不好,反正写出来的都是电路,那当然就不要在语言的语法上面花太多的功夫了,verilog 言简意赅assign always case if else 掌握这些几乎可以写出90%的电路了,上面是我对FPGA学习的一些愚见,希望对大家有所帮助。
第五篇:浅谈FPGA学习
为什么大量的人会觉得FPGA难学?一位高人决心开贴来详细讲一下菜鸟觉得FPGA难学的几大原因。
1、不熟悉FPGA的内部结构,不了解可编程逻辑器件的基本原理。
FPGA为什么是可以编程的?恐怕很多菜鸟不知道,他们也不想知道。因为他们觉得这是无关紧要的。他们潜意识的认为可编程嘛,肯定就是像写软件一样啦。软件编程的思想根深蒂固,看到Verilog或者VHDL就像看到C语言或者其它软件编程语言一样。一条条的读,一条条的分析。如果这些菜鸟们始终拒绝去了解为什么FPGA是可以编程的,不去了解FPGA的内部结构,要想学会FPGA恐怕是天方夜谭。虽然现在EDA软件已经非常先进,像写软件那样照猫画虎也能综合出点东西,但也许只有天知道EDA软件最后综合出来的到底是什么。也许点个灯,跑个马还行。这样就是为什么很多菜鸟学了N久以后依然是一个菜鸟的原因。那么FPGA为什么是可以“编程”的呢?首先来了解一下什么叫“程”。启示“程”只不过是一堆具有一定含义的01编码而已。编程,其实就是编写这些01编码。只不过我们现在有了很多开发工具,通常都不是直接编写这些01编码,而是以高级语言的形式来编写,最后由开发工具转换为这种01编码而已。对于软件编程而言,处理器会有一个专门的译码电路逐条把这些01编码翻译为各种控制信号,然后控制其内部的电路完成一个个的运算或者是其它操作。所以软件是一条一条的读,因为软件的操作是一步一步完成的。而FPGA的可编程,本质也是依靠这些01编码实现其功能的改变,但不同的是FPGA之所以可以完成不同的功能,不是依靠像软件那样将01编码翻译出来再去控制一个运算电路,FPGA里面没有这些东西。FPGA内部主要有三块:可编程的逻辑单元、可编程的连线和可编程的IO模块。可编程的逻辑单元是什么?其基本结构由某种存储器(SRAM、FLASH等)制成的4输入或6输入1输出地“真值表”加上一个D触发器构成。任何一个4输入1输出组合逻辑电路,都有一张对应的“真值表”,同样的如果用这么一个存储器制成的4输入1输出地“真值表”,只需要修改其“真值表”内部值就可以等效出任意4输入1输出的组合逻辑。这些“真值表”内部值是什么?就是那些01编码而已。如果要实现时序逻辑电路怎么办?这不又D触发器嘛,任何的时序逻辑都可以转换为组合逻辑+D触发器来完成。但这毕竟只实现了4输入1输出的逻辑电路而已,通常逻辑电路的规模那是相当的大哦。那怎么办呢?这个时候就需要用到可编程连线了。在这些连线上有很多用存储器控制的连接点,通过改写对应存储器的值就可以确定哪些线是连上的而哪些线是断开的。这就可以把很多可编程逻辑单元组合起来形成大型的逻辑电路。最后就是可编程的IO,这其实是FPGA作为芯片级使用必须要注意的。任何芯片都必然有输入引脚和输出引脚。有可编程的IO可以任意的定义某个非专用引脚(FPGA中有专门的非用户可使用的测试、下载用引脚)为输入还是输出,还可以对IO的电平标准进行设置。总归一句话,FPGA之所以可编程是因为可以通过特殊的01代码制作成一张张“真值表”,并将这些“真值表”组合起来以实现大规模的逻辑功能。不了解FPGA内部结构,就不能明白最终代码如何变到FPGA里面去的。也就无法深入的了解如何能够充分运用FPGA。现在的FPGA,不单单是有前面讲的那三块,还有很多专用的硬件功能单元,如何利用好这些单元实现复杂的逻辑电路设计,是从菜鸟迈向高手的路上必须要克服的障碍。而这一切,还是必须先从了解FPGA内部逻辑及其工作原理起。
2、错误理解HDL语言,怎么看都看不出硬件结构。
HDL语言的英语全称是:Hardware Description Language,注意这个单词Description,而不是Design。老外为什么要用Description这个词而不是Design呢?因为HDL确实不是用来设计硬件的,而仅仅是用来描述硬件的。描述这个词精确地反映了HDL语言的本质,HDL语言不过是已知硬件电路的文本表现形式而已,只是将以后的电路用文本的形式描述出来而已。而在编写语言之前,硬件电路应该已经被设计出来了。语言只不过是将这种设计转化为文字表达形式而已。但是很多人就不理解了,既然硬件都已经被设计出来了,直接拿去制作
部就完了,为什么还要转化为文字表达形式再通过EDA工具这些麻烦的流程呢?其实这就是很多菜鸟没有了解设计的抽象层次的问题,任何设计包括什么服装、机械、广告设计都有一个抽象层次的问题。就拿广告设计来说吧,最初的设计也许就是一个概念,设计出这个概念也是就是一个点子而已,离最终拍成广告还差得很远。硬件设计也是有不同的抽象层次,每一个层次都需要设计。最高的抽象层次为算法级、然后依次是体系结构级、寄存器传输级、门级、物理版图级。使用HDL的好处在于我们已经设计好了一个寄存器传输级的电路,那么用HDL描述以后转化为文本的形式,剩下的向更低层次的转换就可以让EDA工具去做了,这就大大的降低了工作量。这就是可综合的概念,也就是说在对这一抽象层次上硬件单元进行描述可以被EDA工具理解并转化为底层的门级电路或其他结构的电路。在FPGA设计中,就是在将这以抽象层级的意见描述成HDL语言,就可以通过FPGA开发软件转化为问题1中所述的FPGA内部逻辑功能实现形式。HDL也可以描述更高的抽象层级如算法级或者是体系结构级,但目前受限于EDA软件的发展,EDA软件还无法理解这么高的抽象层次,所以HDL描述这样抽象层级是无法被转化为较低的抽象层级的,这也就是所谓的不可综合。所以在阅读或编写HDL语言,尤其是可综合的HDL,不应该看到的是语言本身,而是要看到语言背后所对应的硬件电路结构。如果看到的HDL始终是一条条的代码,那么这种人永远摆脱不了菜鸟的宿命。假如哪一天看到的代码不再是一行行的代码而是一块一块的硬件模块,那么恭喜脱离了菜鸟的级别,进入不那么菜的鸟级别。
3、FPGA本身不算什么,一切皆在FPGA之外这一点恐怕也是很多学FPGA的菜鸟最难理解的地方。
FPGA是给谁用的?很多学校解释为给学微电子专业或者集成电路设计专业的学生用的,其实这不过是很多学校受资金限制,买不起专业的集成电路设计工具而用FPGA工具替代而已。其实FPGA是给设计电子系统的工程师使用的。这些工程师通常是使用已有的芯片搭配在一起完成一个电子设备,如基站、机顶盒、视频监控设备等。当现有芯片无法满足系统的需求时,就需要用FPGA来快速的定义一个能用的芯片。前面说了,FPGA里面无法就是一些“真值表”、触发器、各种连线以及一些硬件资源,电子系统工程师使用FPGA进行设计时无非就是考虑如何将这些以后资源组合起来实现一定的逻辑功能而已,而不必像IC设计工程师那样一直要关注到最后芯片是不是能够被制造出来。本质上和利用现有芯片组合成不同的电子系统没有区别,只是需要关注更底层的资源而已。要想把FPGA用起来还是简单的,因为无非就是那些资源,在理解了前面两点再搞个实验板,跑跑实验,做点简单的东西是可以的。而真正要把FPGA用好,那光懂点FPGA知识就远远不够了。因为最终要让FPGA里面的资源如何组合,实现何种功能才能满足系统的需要,那就需要懂得更多更广泛的知识。
目前FPGA的应用主要是三个方向:
第一个方向,也是传统方向主要用于通信设备的高速接口电路设计,这一方向主要是用FPGA处理高速接口的协议,并完成高速的数据收发和交换。这类应用通常要求采用具备高速收发接口的FPGA,同时要求设计者懂得高速接口电路设计和高速数字电路板级设计,具备EMC/EMI设计知识,以及较好的模拟电路基础,需要解决在高速收发过程中产生的信号完整性问题。FPGA最初以及到目前最广的应用就是在通信领域,一方面通信领域需要高速的通信协议处理方式,另一方面通信协议随时在修改,非常不适合做成专门的芯片。因此能够灵活改变功能的FPGA就成为首选。到目前为止FPGA的一半以上的应用也是在通信行业。
第二个方向,可以称为数字信号处理方向或者数学计算方向,因为很大程度上这一方向已经大大超出了信号处理的范畴。例如早就在2006年就听说老美将FPGA用于金融数据分析,后来又见到有将FPGA用于医学数据分析的案例。在这一方向要求FPGA设计者有一定的数学功底,能够理解并改进较为复杂的数学算法,并利用FPGA内部的各种资源使之能够变为实际的运算电路。目前真正投入实用的还是在通信领域的无线信号处理、信道编解码以及图像信号处理等领域,其它领域的研究正在开展中,之所以没有大量实用的主要原因还是因为学金融的、学医学的不了解这玩意。不过最近发现欧美有很多电子工程、计算机类的博士转入到金融行业,开展金融信号处理,相信随着转入的人增加,FPGA在其它领域的数学计算功能会更好的发挥出来,而我也有意做一些这些方面的研究。不过国内学金融的、学医的恐怕连数学都很少用到,就不用说用FPGA来帮助他们完成数学_运算了,这个问题只有再议了。
第三个方向,就是所谓的SOPC方向,其实严格意义上来说这个已经在FPGA设计的范畴之外,只不过是利用FPGA这个平台搭建的一个嵌入式系统的底层硬件环境,然后设计者主要是在上面进行嵌入式软件开发而已。设计对于FPGA本身来说是相当少的。但如果涉及到需要在FPGA做专门的算法加速,实际上需要用到第二个方向的知识,而如果需要设计专用的接口电路则需要用到第一个方向的知识。
就目前SOPC方向发展其实远不如第一和第二个方向,其主要原因是因为SOPC以FPGA为主,或者是在FPGA内部的资源实现一个“软”的处理器,或者是在FPGA内部嵌入一个处理器核。但大多数的嵌入式设计却是以软件为核心,以现有的硬件发展情况来看,多数情况下的接口都已经标准化,并不需要那么大的FPGA逻辑资源去设计太过复杂的接口。而且就目前看来SOPC相关的开发工具还非常的不完善,以ARM为代表的各类嵌入式处理器开发工具早已深入人心,大多数以ARM为核心的SOC芯片提供了大多数标准的接口,大量成系列的单片机/嵌入式处理器提供了相关行业所需要的硬件加速电路,需要专门定制硬件场合确实很少。通常是在一些特种行业才会在这方面有非常迫切的需求。即使目前Xilinx将ARM的硬核加入到FPGA里面,相信目前的情况不会有太大改观,不要忘了很多老掉牙的8位单片机还在嵌入式领域混呢,嵌入式主要不是靠硬件的差异而更多的是靠软件的差异来体现价值的。我曾经看好的是cypress的Psoc这一想法。和SOPC系列不同,Psoc的思想是在SOC芯片里面去嵌入那么一小块FPGA,那这样其实可以满足嵌入式的那些微小的硬件接口差异,比如某个运用需要4个USB,而通常的处理器不会提供那么多,就可以用这么一块FPGA来提供多的USB接口。而另一种运用需要6个UART,也可以用同样的方法完成。对于嵌入式设计公司来说他们只需要备货一种芯片,就可以满足这些设计中各种微小的差异变化。其主要的差异化仍然是通过软件来完成。但目前cypress过于封闭,如果其采用ARM作为处理器内核,借助其完整的工具链。同时开放IP合作,让大量的第三方为它提供IP设计,其实是很有希望的。但目前cypress的日子怕不太好过,Psoc的思想也不知道何时能够发光。
4、数字逻辑知识是根本。
无论是FPGA的哪个方向,都离不开数字逻辑知识的支撑。FPGA说白了是一种实现数
字逻辑的方式而已。如果连最基本的数字逻辑的知识都有问题,学习FPGA的愿望只是空中楼阁而已。而这,恰恰是很多菜鸟最不愿意去面对的问题。数字逻辑是任何电子电气类专业的专业基础知识,也是必须要学好的一门课。很多人无非是学习了,考个试,完了。如果不能将数字逻辑知识烂熟于心,养成良好的设计习惯,学FPGA到最后仍然是雾里看花水中望月,始终是一场空的。以上四条只是我目前总结菜鸟们在学习FPGA时所最容易跑偏的地方,FPGA的学习其实就像学习围棋一样,学会如何在棋盘上落子很容易,成为一位高手却是难上加难。