总结 fpga难学 的几大原因 (amobbs 阿莫电子论坛)
fpga学习心得体会
fpga学习心得体会求教FPGA学习体会一定要写同步逻辑,根据FPGA内部特点来写逻辑,如全局时钟的布线等我想学习FPGA,但怎样学比较好你提到的先复习加深数电基础在学习语言,最后上板调试,这样先理论后实践会很枯燥并且打消你学习的积极性。
对于硬件电路的学习我认为是边实践边学习。
走通了一遍,最后查漏补缺的学习理论会有更深的印象。
altera还是xilinx都可以,开发工具和环境不同罢了。
开发板当然买大众的,学习资料全的,有技术支持的。
我也是初学者,有什么学习fpga的还建议,搭车同求大神赐教学习FPGA用哪种硬件描述语言比较好HDL概述随着EDA技术的发展,使用硬件语言设计PLD\/FPGA成为一种趋势。
目前最主要的硬件描述语言是VHDL和Verilog HDL。
VHDL发展的较早,语法严格,而Verilog HDL是在C语言的基础上发展起来的一种硬件描述语言,语法较自由。
VHDL和Verilog HDL两者相比,VHDL的书写规则比Verilog烦琐一些,但verilog自由的语法也容易让少数初学者出错。
国外电子专业很多会在本科阶段教授VHDL,在研究生阶段教授verilog。
从国内来看,VHDL的参考书很多,便于查找资料,而Verilog HDL的参考书相对较少,这给学习Verilog HDL带来一些困难。
从EDA技术的发展上看,已出现用于CPLD\/FPGA设计的硬件C 语言编译软件,虽然还不成熟,应用极少,但它有可能会成为继VHDL和Verilog之后,设计大规模CPLD\/FPGA的又一种手段。
VHDL简介 VHDL实例VerilogHDL简介 verilog实例其它HDL简介:ABELAHDL硬件C语言System verilog语言选择VHDL还是verilog HDL这是一个初学者最常见的问题。
其实两种语言的差别并不大,他们的描述能力也是类似的。
掌握其中一种语言以后,可以通过短期的学习,较快的学会另一种语言。
fpga课程心得体会
fpga课程心得体会在进行FPGA课程学习的过程中,我不仅仅是学到了课堂上的知识,更重要的是获得了宝贵的心得体会。
通过这门课程,我深刻认识到了FPGA技术的重要性和应用广泛性,同时也明白了学习这门课程的困难和挑战。
在下面的文章中,我将分享我的FPGA课程心得体会。
一、FPGA技术的重要性FPGA是可编程逻辑器件,它具有灵活性、可重构性和高度并行性的特点。
在当今数字电子领域,FPGA被广泛应用于各种领域,如通信、医疗、军事等。
学习FPGA课程让我深刻认识到了FPGA技术对于解决实际问题的重要性。
二、FPGA课程的学习过程在学习FPGA课程的过程中,我首先学习了FPGA的基础知识,包括FPGA器件、FPGA实现原理以及FPGA的编程语言。
这些基础知识为后续的学习打下了坚实的基础。
接着,我学习了FPGA的开发工具,掌握了Vivado、Quartus等软件的使用方法。
这些开发工具提供了强大的设计和仿真功能,使得我们能够更加方便地进行FPGA设计和实现。
在学习过程中,我还进行了一系列的实验和项目实践。
通过这些实践,我深入理解了FPGA的原理和设计方法。
我在实验中遇到了很多问题和挑战,但通过努力和团队合作,我逐渐解决了这些问题,并获得了实际操作的经验。
三、挑战与收获学习FPGA课程并不是一件容易的事情,它需要我们具备扎实的电子学、数字逻辑和计算机编程知识。
在学习过程中,我遇到了许多困难和挑战,但正是这些困难和挑战让我得到了更多的成长和收获。
首先,FPGA课程对于电子学和数字逻辑的要求较高,需要我们具备良好的数学和逻辑思维能力。
在学习过程中,我不断加强了自己的学习方法和思维能力,提高了自己的解决问题的能力。
其次,FPGA课程还需要我们具备一定的计算机编程能力,熟练掌握Verilog或VHDL等编程语言。
在学习过程中,我通过编写代码、调试程序来实现各种功能,不断提高了自己的编程能力。
最后,FPGA课程的学习还需要我们具备团队合作和沟通能力。
【参考文档】FPGA学习心得大报告 (3500字)word版本 (3页)
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==FPGA学习心得大报告 (3500字)《FPGA技术基础》学习报告--课程内容学习心得姓名:学号:年级专业:指导教师:瞿麟 201X10401128 自动化101 薛小军摘要从开始学FPGA到现在粗略算来的话,已经有3个多月了,就目前而言,我并不确定自己算不算高手们所说的入门了,FPGA学习总结。
但是不管现在的水平如何,现在就总结一下自己学习它的感受或一些认识吧。
关键词FPGA DE2板 QuartusII软件 Verilog语言引言FPGA是什么?FPGA现状?怎样学习FPGA?FPGA是现场可编程门阵列的简称,FPGA的应用领域最初为通信领域,但目前,随着信息产业和微电子技术的发展,可编程逻辑嵌入式系统设计技术已经成为信息产业最热门的技术之一,应用范围遍及航空航天、医疗、通讯、网络通讯、安防、广播、汽车电子、工业、消费类市场、测量测试等多个热门领域。
并随着工艺的进步和技术的发展,向更多、更广泛的应用领域扩展。
越来越多的设计也开始以ASIC转向FPGA, FPGA正以各种电子产品的形式进入了我们日常生活的各个角落。
正文(1)掌握FPGA的编程语言在学习一门技术之前我们往往从它的编程语言开始,如同学习单片机一样,我们从C语言开始入门,当掌握了C语言之后,开发单片机应用程序也就不是什么难事了。
学习FPGA也是如此,FPGA的编程语言有两种:VHDL和Verilog,这两种语言都适合用于FPGA的编程。
(2)FPGA实验尤为重要除了学习编程语言以外,更重要的是实践,将自己设计的程序能够在真正的FPGA里运行起来,这时我们需要选一块板子进行实验,我们选择使用DE2板才进行试验。
初识DE2开发板DE2的资源DE2的资源非常丰富,包括1. 核心的FPGA芯片-Cyclone II 2C35 F672C6,从名称可以看出,它包含有35千个LE,在Altera的芯片系列中,不算最多,但也绝对够用。
FPGA学习总结
FPGA学习总结FPGA(现场可编程门阵列)是一种数字电路开发和实现的工具,它提供了一种灵活的方式来设计和实现各种数字电路。
在我的FPGA学习过程中,我经历了以下几个方面的学习和实践:1.FPGA基础知识:在学习FPGA之前,我首先了解了FPGA的基本概念和原理。
我学习了FPGA的架构、时序和时钟设计、数字电路设计和综合等方面的知识。
这些基础知识为我深入学习和实践FPGA打下了坚实的基础。
2. FPGA开发工具的使用:我使用了常见的FPGA开发工具,如Vivado和Quartus。
这些工具提供了一种直观而强大的方式来设计和实现FPGA。
我学习了如何创建项目、添加模块、定义信号、综合和布局布线等操作。
通过不断的实践和尝试,我逐渐掌握了这些工具的使用。
3. Verilog和VHDL的学习:Verilog和VHDL是FPGA开发中常用的硬件描述语言。
通过学习这两种语言,我能够使用它们来描述和设计各种数字电路。
我掌握了如何使用这些语言来描述寄存器、组合逻辑、状态机等部件,并能够将它们综合成FPGA可实现的电路。
4.FPGA的应用实践:在学习了FPGA的基础知识和工具使用之后,我开始进行一些实际的应用实践。
我使用FPGA设计和实现了一些简单的电路,如计数器、加法器、乘法器等。
通过实践,我加深了对FPGA的理解,并增强了自己的设计和调试能力。
5.FPGA高级特性的学习:除了基础知识和工具使用外,我还学习了一些FPGA的高级特性,如时序分析、时钟域划分、并行数据传输和高速串行数据传输等。
这些特性在设计和实现一些高性能和复杂的电路时非常重要,我通过学习和实践,学会了如何正确地使用这些特性。
总结起来,FPGA学习是一个既有理论基础又注重实践和应用的过程。
通过学习FPGA,我更好地理解了数字电路的原理和设计,增强了自己的工程能力。
我学会了使用FPGA开发工具,掌握了Verilog和VHDL等硬件描述语言,实践了FPGA的设计和实现,并学习了一些高级特性。
fpga课程心得体会
fpga课程心得体会导言FPGA(Field-Programmable Gate Array,现场可编程门阵列)是一种重要的数字电路设计和嵌入式系统开发工具,它具有灵活性高、性能好、可重新配置等特点,被广泛应用于各种领域。
在参加FPGA课程的学习过程中,我收获了许多知识和经验,并对FPGA的应用和发展有了更深入的了解。
在本文中,我将分享我在FPGA课程中的心得体会,并探讨FPGA的优势与前景。
一、FPGA的基本原理和特点FPGA,作为一种现场可编程器件,具有以下几个基本特点:1. 灵活性高:FPGA可以根据需求进行现场编程,实现不同的逻辑功能。
通过编程语言,我们可以控制FPGA中的门阵列、开关和触发器,从而实现我们所需要的电路功能。
2. 性能优良:由于FPGA的硬件实现,其性能通常优于软件实现。
通过FPGA的并行计算能力,我们可以有效地提高电路的运行速度和效率。
3. 可重新配置性:与ASIC(专用集成电路)相比,FPGA具有可重用、可重构的特点。
在设计中,我们可以多次重复使用FPGA,避免了重复设计的时间和成本。
4. 开发周期短:由于FPGA的可编程性,我们可以快速地进行电路设计和验证。
这大大缩短了开发周期,提高了产品的上市速度。
通过学习FPGA的基本原理和特点,我深刻认识到了它在数字电路设计和嵌入式系统开发中的重要性和价值。
二、FPGA在数字电路设计中的应用1. 逻辑电路设计:FPGA可以实现各种逻辑门和组合逻辑电路的设计。
通过使用FPGA进行逻辑电路设计,我们可以最大程度地提高电路的运算速度和准确性。
2. 时序电路设计:FPGA不仅可以实现逻辑电路的设计,还可以用于时序电路的设计。
通过使用FPGA的触发器和计数器等功能模块,我们可以方便地进行时序电路的建模和验证。
3. 通信电路设计:FPGA在通信电路设计中也有广泛的应用。
例如,我们可以使用FPGA实现数字信号处理(DSP)算法,用于音频和视频信号的处理和传输。
三个月的FPGA学习总结
三个月的FPGA学习总结"不管ARM性能多么好,始终只能按照它的逻辑走。
不管FPGA 性能如何,它能够按照你的设计走"开头第一篇就介绍我为FPGA疯狂,对FPGA产生浓厚的兴趣,不知不觉,我学习FPGA有三个月的时间了,谈不上精通,也不可能达到精通的地位,毕竟,技术类的东西,没有时间的积累,无法保证你对这领域的深入理解。
只能说上了大概的了解,对FPGA还是一知半解的状态,但是我有决心把TA学好。
先说一下感谢吧,首先感谢北航的夏宇闻老师,算是启蒙老师吧,虽然没有面对面的教过我,但是能从他的视频,文章里感受到他的个人魅力,他对FPGA的理解,以及那种大度从容的气魄。
在他那里,我学会了verilog语言(主要是可综合的),基本的FPGA设计方法,FPGA设计流程,以及FPGA大致的发展方向。
其次要感谢特权同学,认识特权同学之前,我是从阿毛的FPGA 教学课程里面无意中发现的,这里没有比较,也没有说阿毛的教程不好,只是觉得特权同学对FPGA的理解比较合乎于我,比较让我更容易的掌握,我也知道特权同学被网友封为“牛人”,以至于我一向都不夸张别人的厉害的人(暗中还是会羡慕,只是不说出口),都不得不佩服特权同学,我敢说,如果没有他,我对FPGA的理解还是初始状态,这个你们能感受得到吗?一种原地踏步的状况对于一个20多岁的年轻人来说是一件多么可悲的事,我都无法想象了。
好了,讲了那么多,还是要回到题目的重点,对FPGA学习的总结。
个人觉得啦,FPGA发展的大致方向主要有两个,一个是高速接口(例如:通信方面的连接),一个是算法的处理(例如:图像处理)。
好,知道了FPGA的两个方向,就可以开始着手这方面的学习,当然啦!基本的东西还是要提前做好,俗话说:经济基础决定上层建筑。
没有数字电路的基础,没有verilog(或者VHDL)硬件描述语言的基础,没有上千甚至于上万行的代码的历练,没有小项目的积累(FPGA的小项目),就开始做那两个方面的东西,谈何容易啊?不能一步登天,只要脚踏实地,还是会学会你想要的东西。
学习FPGA的几点心得五篇
学习FPGA的几点心得五篇第一篇:学习FPGA的几点心得1、首先要明白的是软件设计和逻辑设计的不同,并理解什么是硬件意识。
软件代码的执行是一个顺序的过程,编绎以后的机器码放在存储器里,等着CPU一条一条的取指并执行;因此软件设计中经常会带有顺序处理的思维。
而逻辑设计则不同,我们设计的是数字电路,它是由很多很多的与非门及D触发器构成的,上电之后所有与非门和D触发器都同时工作,不会因为A触发器的代码描述在B触发器之前A触发器就是先工作,事实上,RTL级代码的代码先后顺序在综合成网表文件后这种顺序就消失了,取代的是基本逻辑电路之间的互联关系描述;因此逻辑设计需要的是一种并发的思维,我们也需要用并发的思维去考虑电路的设计。
当然,我们设计的电路功能一般都有先后顺序的关系,如果这种顺序不能通过代码的先后顺序来实现,那么要怎么完成这一功能呢?在逻辑设计中,我们所说的先后顺序都是基于时间轴来实现:它的承载体就是时序逻辑,也就是那些触发器。
2、其次就是要熟悉基本电路的设计。
基本的电路不是很多,也就是D触发器、计数器、移位寄存器、状态机、多路选择器、译码器等几种,所有复杂的电路都可由这些基本的电路构成。
高手水平高的体现并不是他能写出一些很奇特的电路,相反,水平高是体现在他们总能将复杂的电路用这些很朴素的基本电路去描述。
甚至,你会发现他们的代码基本上是由if...else、case这些语句构成的,朴素的让你觉得奇怪。
初学者在入门的时候,对于基本电路的设计应该固定化、标准化,每种电路该用什么样的代码描述,应该要固定、统一,尽量少一些花哨的东西。
说来这里我举个例子。
以前有几个朋友因为仿真有问题请我帮忙找问题。
他们的代码写的很乱,出现了很多种稀奇古怪的电路,一看头都大了,只好建议他们按照标准的电路重新写下代码。
结果过了半天,他们就和我说问题不见了。
所以,高手们喜欢用简单的代码是有道理的,电路的标准化和规范化可以减少许多稀奇古怪的问题,问题少了他们也就能在别人加班的时候回家多睡回觉,呵呵。
FPGA学习总结
首先,先说一下自己的在学习中所发现自己的不足之处:
1. 不会总结。
2. 记录警告,分析原因
3. 记录经典代码,算法,以及要注意的细节,重点知识
4.了解FPGA内部逻辑及其工作原理
5.下载不了,这是一个新手经常遇到的问题。
一般来说,大多数人会去检查下载电路的原理图,如果发现和正确的原理图没有区别就没办法了,开始怀疑芯片是不是坏了,焊接是不是有问题,是不是哪里有干扰啊等等。
而有的细心一些的人,就会仔细的看看下载的原理,信号的时序,用示波器看看板上信号的时序,一步一步的找原因。
如果没有找到,就会仔细检查FPGA的电路,从电源设计,到去耦电容摆放等等方面去动手查找原因。
如果觉得那里有问题,就动手改一看看,测一侧有没有改变,而不是坐着想哪里出问题。
可能最后就是芯片坏了,或者没有焊接好,但是后者确在这个过程中学到了很多东西,至少对f pga下载的原理了解的十分清楚。
6.如果电路工作不正常,那么99%的原因是和设计有关的,是可以找到确定的原因的,而不是偶然的,即使是噪声或者干扰。
FPGA学习总结
FPGA学习总结首先,先说一下自己的在学习中所发现自己的缺乏之处:1. 不会总结。
2. 学习的良好习惯没养成。
在写FPGA的根本模块时,遇到的问题有许多,譬如,写代码时的警告,特别是一些不能无视的警告,每次遇到时,总是还要检查一会儿才能改正来,或者有的警告已经出现了几次,但是就是解决不掉。
每次在学一个模块时,只要是看懂了,它的一些重点就没有及时的记录在本子上,只有个别的想起来时,才会做笔记。
每做完一个模块,没有及时记录下自己从这个模块中学到了什么。
上面的缺乏,都是在写模块的过程中,自己逐渐暴露出来的。
我很庆幸自己的一些问题能及时的被发现,虽然年前的学习将暂告一段落,但是,在年后的学习中,我一定会时刻记得自己以前在学习上出现了怎样的缺乏,防止类似的事情再次发生。
像遇到警告时,都要记录下来,通过改正后,要注释,写下警告的原因,定期看一下。
每次写模块的时候,都要记下重点知识,即使是自己懂得的,好记性都是比不过烂笔头的。
其次,就谈一下自己在学习FPGA中,截止目前,学到了什么,认识到那些。
FPGA简单的说,就是现场可编程逻辑阵列。
它的内部是逻辑单元,它们之间可以用线连接,至于以怎样的形式相连,那么可以根据应用者写入的逻辑决定。
每次布线都会重新组合逻辑单元,从而可以任意的编写不同的逻辑。
当然,前提是定义的逻辑块不超出它可读写的最大值。
可能自己说的术语并不专业,又或者是理解或表达的不透彻,但随着学习的加深,一定会有更加透彻的理解吧。
学习FPGA ,虽然资料很多,但是看的资料并不是很多,除了看夏宇闻编写的语法书外,看的最多的就是特权同学的,一个年轻的电子工程师,他就是通过自己的努力和坚持不懈有了现在的水平,虽然不能说是最好的工程师,但是,他在这条路上的成长历程,却代表着更广阔的青年的奋斗轨迹。
他的《深入浅出玩转FPGA》这本书,以前只听网友说不错,等到自己开始看后,发现里面的内容确实是值得学习,不仅是学习的层次性,同时里面的方法也是很不错的。
FPGA个人学习总结1
FPGA个人学习总结11.综合方面1)经综合后:普通的数据单端输入都会加一个ibuf缓冲器;数据单端输出有个obuf缓存器;时钟输入口会加bufgp缓冲器;对于4选1的mux,if结构和case结构都只需要一个slice,由muxf5控制两个lut下图为8选一case结构,muxf6控制两个muxf5,以两个slices实现8选1,用if结构实现的结构也是一样的注意一点:使用viewtechnologyschematic,来查看最底层的实现形式,即fpga 中的lut、muxf5等使用但有的综合后rtlschematic相同,technoligyschematic不同,而有的又相反(如onebit相加,加括号前后例子),那么我们应该以哪种为最优呢?如下图:图上下分别为加括号前和加括号后rtl:只有根据实际需要来选择,如信号的先后顺序等等2.lut的名字后_数字,那个数字代表什么意思?luta_b:a代表所有输入数据位宽,即输入数据的个数,切勿将位宽理解为“每个输入端口的数据宽度(因每个输入端口是单bit输入);b代表lut被初始化的状态3.比较器位宽大小对综合结构的影响当比较的位宽高于一定位数时,综合会采用进位链结构,如下图:4.在调用dcm核时,clkfx_out为输出引脚,并且locked_out必须勾上,否则波形无法输出,具体步骤参考本文件夹下“dcm核设置”5.如何判断pcb板上的复位芯片是低复位还是高复位?将复位芯片的输出连接至led等,若正常工作后是亮(前提是led另一端是接地),表示正常工作是高,说明之前是低,即为低复位,不亮则为高复位6.两种不同下载接口的比较<具体还可参考项23>1每个fpga都有两组下载接口jtag和spi;○2jtag 中tms为模式选择,tck为时钟,tdi和tdo分别为输入输出数据;○3spi中ss(有的为stb)为片选信号,sck为时钟信号,另外两根为数据信号;○4通过jtag下载程序到fpga:编程管脚跳针要拔掉,掉电后程序也会丢失,即下次上○电工作后需要重新下载程序5通过spi 下载程序到fpga:先将编程引脚prog 接地,○spi接口断开与fpga通信,而与flash通信,程序下载到外挂flash中,然后将prog跳针拔掉,flash中程序下载到fpga中6外部flash 不单是一个裸存储器,○它还有spi接口,图中的spi接口就是从flash的spi接口中引出来的引脚7spi接口是串行同步通信,串口uart 是串行异步通信○7.关于示波器当配置芯片相应寄存器后,观察输出的波形频率时,若出现频率跳动,可以检查示波器上的采样电平是否在波形的中间位置8.关于复位信号与寄存器声明寄存器在声明时最好给个初始值,即加载时的值,例如:reg[1:0]a=2’b00或直接写0;复位信号不要列在敏感列表中,直接使用if (rst),使rst成为控制信号9.如何看出接口读取数据所用的时钟沿上图可以看出,时钟的下降沿对准数据中心,说明该芯片的此接口是用时钟的下降沿来读取数据的上图可以看出,时钟的上升沿对准数据中心,说明该芯片的此接口是用时钟的上升沿来读取数据的故:如果芯片ab之间有走线延迟的话,那么我们在芯片a要用相反的时钟沿送出数据,经过走线延迟后,芯片b对应接口读取数据的时钟沿正好对准到达芯片b的数据的保持时间,即使最大延迟半个周期,也正好对准数据的中心10.fpga内部寄存器都是高复位,综合时综合工具会自动为复位信号反相,若外部芯片为低复位,则可在fpga设计时,先将复位信号反相,然后使用if (rst)11.当控制信号高于slice的供应时,可将控制信号转化为数据信号,例如:if(a)q<=b;q<=(a&b)|(!a&q);elseq<=q;12.毛刺问题概念:由于延迟的作用,多个信号到达终点的时间有先有后,形成了竞争,由竞争产生的错误输出就是毛刺产生条件:在同一时刻有多个信号输入发生改变出现时间:由于冒险多出现在信号发生电平跳变的时刻,即在输出信号的建立时间内会产生毛刺,而在保持时间内不会出现,13.调用ram在建立ram的ip核时,关于是否选择输出寄存器,根据需要!选择一个寄存器,数据则在采到地址后,延迟一个时钟周期,才会输出14.综合后的寄存器fd为普通的寄存器;fdr为带复位端的寄存器;fdre为带复位端和使能端得寄存器15.寄存器地址注重参数化设计可以先用define定义相关寄存器的地址参数,然后在运用中使用该参数,如下:`definereset_addr4b1101;always@(posedgeclk32mornegedgerst)beginif(!rst)beginspi_en<=8b0010_0000;ctl[7:1]<=7b1111_101;reset<=8b1101_0000;endelseif(wr_reg==2b01)case(addr)`spi_en_addr:spi_en[7:0]<=data[7:0];`reset_addr:reset[7:0]<=data[7:0];……….则当给寄存器的赋值是某一固定值时,为只读寄存器16.综合问题将一输入端口赋值给一个寄存器,再将该寄存器赋值给一个wire型输出端口,则在综合后,输入不会赋值给输出,注意上面的输入输出指的是整个工程的输入输出解决办法:给输入添加一个ibuf,或者给输出添加一个obuf有时不必延迟一个时钟周期,而直接将输入赋值给输出17.时序约束问题1寄存器到寄存器:过周期约束来设置,一般为实际时钟频率的110%;○2输入管脚到寄存器:通过offsetin来设置,一般为半个时钟周期;○由于上游芯片的数据输出和该fpga的数据输入使用的是同一个时钟,故如果上游芯片的数据输出采用下降沿,那么fpga的offsetin就需采用上升沿;上游芯片的输出到fpga寄存器之间的延迟可能不到半个周期;3寄存器到输出管脚:参考○2○18.系统同步接口和源同步接口的区别1系统同步接口:上游芯片发送数据的时钟和fpga接收数据的时钟均为系统时钟,或者○fpga发送数据的时钟和下游芯片接收数据的时钟均为系统时钟;2源同步接口:上游芯片发送数据给fpga的同时,也发送接收时钟给fpga,或者fpga○发送数据给下游芯片的同时,也发送接收时钟给下游芯片。
FPGA学习心得大报告
FPGA学习心得大报告FPGA是一种现场可编程门阵列,可以实现硬件级别的并行计算,在数字信号处理、加密解密、嵌入式系统等领域有较为广泛的应用。
FPGA的学习难度较高,需要掌握一定的硬件电路设计和编程知识。
以下是我的一些心得体验:一、选择合适的开发板FPGA开发板是FPGA学习的重要工具,选择适合自己的开发板可以提高学习效率。
一般来说,初学者可以选择一些功能较为简单、价格适中的开发板,比如ALTERA的DE2-115,该板子提供了比较完整的FPGA学习环境,同时还带有很多通用的接口,可以连接其它设备进行扩展。
此外,开发板的文档和样例代码也十分重要,可以帮助学习者更快地掌握FPGA 编程。
二、学习基础电路知识FPGA的编程离不开对基础电路知识的掌握,如数字逻辑、计算机组成原理等。
学习者需要了解基本的门电路、时序电路等概念,了解电路元器件的作用和特点,并掌握数字电路设计中的原理和方法。
这些知识将为后面FPGA的学习打下坚实的基础。
三、掌握Verilog或VHDL语言Verilog和VHDL是FPGA编程中比较常用的两种硬件描述语言。
学习者需要熟悉Verilog或VHDL语言的基本语法,理解其在FPGA电路设计中的应用。
对于初学者来说,可以通过自学或参加专业机构的课程来掌握。
四、进行实验练习对于FPGA学习者来说,实验练习是一种非常有效的学习方法。
学习者可以结合开发板的样例代码进行实验,逐步加深理解。
从最简单的闪灯实验开始,逐渐掌握FPGA电路设计和编程的过程,最终完成一些比较实用的应用。
总之,学习FPGA需要耐心和恒心,需要不断的实践和探索。
只有掌握了相关的电路设计和编程知识,才能真正发挥FPGA在各领域的优势。
希望我的经验能对大家有所启发。
在FPGA的编程语言里,这是你最容易犯的错误
在FPGA的编程语言里,这是你最容易犯的错误
我知道,我对与电子有关的所有事情都很着迷,但不论从哪个角度看,今天的现场可编程门阵列(FPGA),都显得“鹤立鸡群”,真是非常棒的器件。
如果在这个智能时代,在这个领域,想拥有一技之长的你还没有关注FPGA,那
么世界将抛弃你,时代将抛弃你。
本公众号作者ALIFPGA,多年FPGA开发
经验,所有文章皆为多年学习和工作经验之总结。
逻辑写多了,有时候一些基本的错误忘了避免了。
昨天设计逻辑的时候就不小心触雷了,有个信号有激励没响应,后来看了时序报告,有这么一句话。
这是什么呢?锁存器啊!
最容易产生的是在always(*)语句中,最后一定是所有分支条件都要描述并赋值。
状态机中,同样如此,不但需要有default的状态,每个状态的都要有所
有的分支都要赋值。
如果设计很大,不容易查的话,可以打开综合报告,搜索“LATCH”关键词,查看是否有锁存器的产生,有就赶紧更改设计。
而时序逻辑综合结果必然是触发器,因此不用检查时序逻辑的分支条件。
所以还是那句话,能用时序逻辑,就尽量别用组合逻辑。
当然如果是老鸟,这句话可忽略。
阻塞和非阻塞,这件事情百分之九十九点九九是笔误,没见过开发者没事非要冒险试一下“=”跟“小于=”的区别。
很多人说这两个没啥区别,这两个符号啊,没出事就好,出事了查起来就烦了。
FPGA经验经典谈:做逻辑的难点在于系统结构设计和仿真验证
FPGA经验经典谈:做逻辑的难点在于系统结构设计和仿真验证FPGA经验经典谈:做逻辑的难点在于系统结构设计和仿真验证看到论坛没有,感觉很经典,与大家共享一下:刚去公司的时候BOSS就和我讲,做逻辑的难点不在于RTL级代码的设计,而在于系统结构设计和仿真验证方面。
目前国内对可综合的设计强调的比较多,而对系统结构设计和仿真验证方面似乎还没有什么资料,这或许也从一个侧面反映了国内目前的设计水平还比较低下吧。
以前在学校的时候,总是觉得将RTL级代码做好就行了,仿真验证只是形式而已,所以对HDL的行为描述方面的语法不屑一顾,对testbench也一直不愿意去学--因为觉得画波形图方便;对于系统结构设计更是一点都不懂了。
到了公司接触了些东西才发现完全不是这样。
其实在国外,花在仿真验证上的时间和人力大概是花在RTL级代码上的两倍,现在仿真验证才是百万门级芯片设计的关键路径。
仿真验证的难点主要在于怎么建模才能完全和准确地去验证设计的正确性(主要是提高代码覆盖),在这过程中,验证速度也是很重要的。
验证说白了也就是怎么产生足够覆盖率的激励源,然后怎么去检测错误。
我个人认为,在仿真验证中,最基本就是要做到验证的自动化。
这也是为什么我们要写testbench的原因。
在我现在的一个设计中,每次跑仿真都要一个小时左右(这其实算小设计)。
由于画波形图无法做到验证自动化,如果用通过画波形图来仿真的话,一是画波形会画死(特别是对于算法复杂的、输入呈统计分布的设计),二是看波形图要看死,三是检错率几乎为零。
那么怎么做到自动化呢?我个人的水平还很有限,只能简单地谈下BFM(bus function model,总线功能模型)。
以做一个MAC的core为例(背板是PCI总线),那么我们需要一个MAC_BFM和PCI_BFM及PCI_BM(PCI behavior model)。
MAC_BFM的主要功能是产生以太网帧(激励源),随机的长度和帧头,内容也是随机的,在发送的同时也将其复制一份到PCI_BM中;PCI_BFM的功能则是仿PCI总线的行为,比如被测收到了一个正确帧后会向PCI总线发送一个请求,PCI_BFM则会去响应它,并将数据收进来;PCI_BM的主要功能是将MAC_BFM发送出来的东西与PCI_BFM接收到的东西做比较,由于它具有了MAC_BFM的发送信息和PCI_BFM的接收信息,只要设计合理,它总是可以自动地、完全地去测试被测是否工作正常,从而实现自动检测。
fpga心得体会
fpga心得体会
做了5年的FPGA了,做完一FPGA项目后的心得体会。
手中经过的项目也不在少数,就在此刻又一个FPGA项目宣告结题,好多感受趁着现在还新鲜着写出来和大家一起分享不对之处希望得到大家的指正另外1234并没有绝对顺序都是有感而发随性而写。
1.要和人配合以我们做硬件的工程师为例测试的时候一般都需要软件的配合一个对硬件来说无比复杂的工作可能在软件工程师看来就是几行简单的代码所以要和人配合:多听听别人的意见这样必然可以产生新的know-how从而加快测试和开发的速度退一步讲至少没有坏处。
2.测试还是要别人来做开发者看待自己的产品有如看待自己,大多是没有勇气去发现缺点的。
一是源自自尊心,二是为了避免额外的工作。
所以就算有问题如果不严重就藏着掖着但是这对项目来说是不行的,所以测试verification,一定要旁人来做。
3.多点时间思考。
出现问题后不要急着修改,要思考推测可能的原因,想清楚后把这些可能的原因都用debug pin或者chipscope引出来。
4.注意复用已有的debug pin很多时候在测试过程中产生了大堆测试信号但是时间一长就忘了复用。
实际上,当一个问题产生的时候通过反复观察已有的debug pin或许足以发现问题根源而无需再引出新的Pin,并浪费时间去综合和PAB。
FPGA学习总结
FPGA学习总结FPGA学习总结FPGA全称为Field-Programmable Gate Array,即现场可编程门阵列。
FPGA作为数字电路设计领域的重要组成部分,已经广泛应用于计算机、通信、汽车等各个领域。
作为一个FPGA初学者,经过几个月的学习和实践,我感受到了FPGA学习的重要性和挑战性。
在这里,我想总结一下我在FPGA学习中的经验和体会。
1.学习FPGA需要具备的基础知识FPGA作为数字电路设计的一种工具,其涉及的知识领域非常广泛。
对于初学者来说,需要掌握一定的电子技术和计算机科学知识。
具体来说,需要掌握数字电路的基础知识、硬件描述语言(HDL)的基本语法和应用、计算机组成原理等。
2.学习FPGA的方法2.1.理论学习FPGA的学习需要理论和实践相结合。
在理论学习方面,需要认真学习数字电路的基础知识,比如布尔代数、逻辑门、时序电路等内容。
此外,了解硬件描述语言的语法和应用,比如Verilog和VHDL 等。
2.2.实践操作在实践方面,可以通过一些开源的FPGA开发板进行实验。
通过实验,可以了解FPGA的基本原理和设计方法,掌握数字电路设计的技巧。
同时,通过实验可以加深对HDL语言的理解和掌握。
2.3.项目实践项目实践也是学习FPGA的一种好方法。
在实践中,需要尝试完成一些简单的项目设计,如LED灯闪烁、数码管显示、流水灯等。
这些项目虽然简单,但对于初学者来说却是很大的挑战。
通过项目实践,可以加深对FPGA的理解和掌握,并且培养实际操作能力。
3.学习FPGA需要注意的问题3.1.理论与实践相结合FPGA的学习需要理论和实践相结合,不能只看理论而忽略实践,也不能只做实践而忽略理论。
3.2.选择适合的开发板初学者在选择开发板时应该根据自己的学习需要和经济实力选择适合自己的开发板。
同时也需要了解不同开发板的优缺点和适用场景,选择适合自己的开发板。
3.3.认真备课在开始FPGA的学习之前,需要认真备课,将学习内容和方法分解为具体的步骤。
fpga学习心得体会
fpga学习心得体会FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,其功能可以通过编程来定制。
近年来,FPGA在许多领域得到了广泛应用,例如通信、图像处理、工业控制等。
本文将分享我在学习FPGA过程中的心得体会。
1.基础知识储备学习FPGA需要一定的基础知识储备,包括数字电路设计、逻辑设计、编程语言等方面的知识。
对于初学者来说,首先要了解FPGA的基本结构和工作原理,以及常用的编程语言,例如VHDL和Verilog。
此外,还需要了解数字电路设计的基本原理和常用的电路元件,例如门电路、触发器、寄存器等。
2.实践操作能力学习FPGA不仅需要理论知识储备,还需要实践操作能力。
通过实践操作,可以深入了解FPGA的特性和应用,掌握FPGA的开发工具和设计流程。
实践操作包括硬件设计和软件编程两个方面。
在硬件设计方面,需要掌握FPGA的开发板、EDA 工具等的使用方法;在软件编程方面,需要掌握FPGA的编程语言和常用的算法。
3.深入学习与探索在学习FPGA的过程中,需要不断深入学习和探索。
可以通过阅读相关的技术文档、参加技术交流会议、与同行交流等方式来扩展自己的知识面和加深对FPGA 的理解。
此外,还可以参加相关的培训课程或自学资料,例如FPGA设计教程、开发板使用手册等。
4.培养问题解决能力学习FPGA的过程中会遇到各种各样的问题,例如硬件故障、软件错误等。
培养问题解决能力是非常重要的,可以通过分析问题的原因、尝试不同的解决方法、查阅相关资料等方式来解决问题。
在问题解决过程中,需要保持耐心和冷静,不要轻易放弃。
5.结合实际应用学习FPGA的最终目的是为了应用。
结合实际应用可以更好地理解FPGA的特性和应用场景,同时也可以提高自己的实践能力和经验。
可以尝试一些实际的项目或案例,例如通信系统中的基带处理、图像处理中的滤波器设计等。
通过实际应用可以发现自己的不足之处,并加以改进和提高。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
总结FPGA难学的几大原因(转)(amoBBS 阿莫电子论坛)为什么很多菜鸟始终无法入门?为什么大量的人会觉得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、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的思想也不知道何时能够发光。
3、错误理解HDL语言,怎么看都看不出硬件结构。
HDL语言的英语全称是:Hardware Description Language,注意这个单词Description,而不是Design。
老外为什么要用Description这个词而不是Design呢?因为HDL确实不是用用来设计硬件的,而仅仅是用来描述硬件的。
描述这个词精确地反映了HDL语言的本质,HDL语言不过是已知硬件电路的文本表现形式而已,只是将以后的电路用文本的形式描述出来而已。
而在编写语言之前,硬件电路应该已经被设计出来了。
语言只不过是将这种设计转化为文字表达形式而已。
但是很多人就不理解了,既然硬件都已经被设计出来了,直接拿去制作部就完了,为什么还要转化为文字表达形式再通过EDA工具这些麻烦的流程呢?其实这就是很多菜鸟没有了解设计的抽象层次的问题,任何设计包括什么服装、机械、广告设计都有一个抽象层次的问题。
就拿广告设计来说吧,最初的设计也许就是一个概念,设计出这个概念也是就是一个点子而已,离最终拍成广告还差得很远。
硬件设计也是有不同的抽象层次,每一个层次都需要设计。
最高的抽象层次为算法级、然后依次是体系结构级、寄存器传输级、门级、物理版图级。
使用HDL的好处在于我们已经设计好了一个寄存器传输级的电路,那么用HDL描述以后转化为文本的形式,剩下的向更低层次的转换就可以让EDA工具去做了,这就大大的降低了工作量。
这就是可综合的概念,也就是说在对这一抽象层次上硬件单元进行描述可以被EDA工具理解并转化为底层的门级电路或其他结构的电路。
在FPGA设计中,就是在将这以抽象层级的意见描述成HDL语言,就可以通过FPGA开发软件转化为问题1中所述的FPGA内部逻辑功能实现形式。