最佳答案
如果你只是想做算法而不是做应用,只需要了解fpga的优势和实现原理,10-30天学习fpga基础语法,这部分跟c比较相似应该能很快入门,这时候你差不多就了解fpga跟cpu的区别和优势了,然后把重点放在算法研究上。根据算法复杂度研究时间不定。
比如图像处理,fpga的优势在于可以一个时钟周期处理多个点或者矩阵,这时候你的算法就要偏向于怎么让不同点或者矩阵之间的运算尽量独立没有前后相关性。速度上4ghz的cpu一次处理16个点速度就是64g点每秒,fpga看资源如果一次可以处理1000点,200mhz的速度就是200g点每秒,这图像处理速度的优势就出来了。而且cpu可能还要跑系统还有宕机风险,fpga说多快就多快,稳定高效能长时间运行。
之前我们做4k视频的采集和预处理,fpga很轻松就实现了。设计的时候最好找个高手听一下你的设计方案,帮忙做一下时序约束和pipeline规划,这样保证你的算法尽量稳定,或者干脆点你算法完成直接找人给你写代码,你把代码看懂之后再慢慢调参数就行了。
直接根据自己需求买个成品板卡,这样上面的外接器件什么的都有现成example可以使用,比如ddr控制、视频输入输出、引脚约束这之类的,你可以直接用板卡资料,不需要浪费时间去自己调试,专心做算法。
其他答案共有8条回答
-
无聊的翅膀
学习这种东西,最好是在公司或者研究所里的项目。首先明确一点,就ic分宏观的设计和微观的设计,比如说我们做一个宏观的项目,设计一个简单的秒表,那么你可以用fpga来实现,这东西就属于ic的范畴,但不是说你会这么点东西就可以说自己是搞ic的了。ic设计千万别说是搞ic的,因为它真的是太难了,如果真的想学,我推荐你去智芯融上他们的fpga&ic设计培训,会让你跟着老师进行系统学习,然后快速的掌握技术要领!
-
暴躁的香水
首先祝贺你选择了一个很有前景的专业,我本科是电子的,读研时控制(也就是自动化),我感受到了这电子信息发展的速度之快,前景之广阔,那么把我自己的一些经验给你分享一下:
一,以后想做一个出色的电子工程师,首先要打好基础,虽然只掌握单片机是远远不够的,但它对于新手入门来说是不错的,它的结构相对不是那么复杂。掌握了它的基本原理,操作过程,对于以后学习复杂的dsp是很有帮助的,所以要重视!至于学到什么程度,当然是越透彻越好,呵呵,对于c语言,也是工具,给单片机编程现在基本都是用它了,所以这两个是相辅相成的!
二,对于fpga,可以不用着急,不要什么都急着学,但什么都不精通,fpga说白了就是数字电路设计,所以你要有数字电路的基础,fpga设计无非就是组合电路和时序电路设计,有了好的数电基础,才能深刻理解你所设计的电路。而且你要学会一门硬件语言,像vhdl 或者verilog,建议学习后者,因为有了c语言的基础,verilog上手很快,由此可见c语言的重要性哦!
三,由此可见,fpga最好是你先掌握好了前者,有了数电的基础之后在学,不要什么都学,什么都不精,记住,学一门就弄懂一门!我得建议是fpga不用着急,因为不论是单片机还是fpga都需要实践,通过做大量的实验,遇到各种问题,通过解决问题来提升自己!一个优秀的工程师必须有出色的解决问题的能力!
最后,你有自己的规划,努力去做,相信你会学有所成的,最后希望我牺牲休息时间给你的答复能够帮助你!
-
愤怒的天空
想快速,那就学verilog语言,会c语言的话学起来就很快了,一个月就可以掌握全部语法和简单应用了。必须买一块fpga开发板,钱不多就买个二手的吧。推荐altera的fpga, 主流。教材市面上很多,看到有人推荐夏宇闻的,那个也好,以前学fpga就夏宇闻那一本书,现在书多了,而且都不错的,可以自己挑一本,最好边看书边实践,写代码,从简单到难,从门电路到状态机,最后到niios……如果用的是altera的fpga,那就下载quartus ,这个软件入门挺难的,最好有人带你,没人带就去网上下载视频看。学习fpga多去edn等论坛看看。
学会了语法,会代码编写,软件仿真、编译、下载、调试这就算是可以了,用的时候具体问题具体分析,学习相关的协议算法等等等。。。。
祝你成功。。。
-
明亮的大雁
fpga入门:
第一步:了解fpga基本硬件知识,例如:fpga的含义及内部结构,现有的fpga芯片种类,以及如何区分fpga芯片。
第二步:了解掌握fpga的硬件设计语言,从vhdl开始,也可以从其他开始,
第三步:熟悉vhdl语言编译环境maxblus ii或者quartus ii,
第四步:购买开发板(这可以在一开始就买好),建议初期购买一个一般的就行,像flex10k系列等等,价钱大约100左右,
(如果需要开发板我这代理的开发中flex10k系列有现货)
-
美丽的白开水
我建议你边学边理解边练习。
首先,verilog语言本身并不难,跟c语言非常的类似。你要做的工作就是比较verilog和c的相同点和不同点,注意并总结,加深印象,同时要注意verilog是硬件描述语言,所以编程的时候要结合数字电路的基本原理来编程。
学完verilog,首先遍一些简单的组合或者时序电路来加深对verilog语言的掌握,同时多看实例多积累经验。
像初学者刚学完verilog,编个计数器,时钟什么的,(时钟可以用数码管显示,这个简单)都是可以的,不要太复杂,算是练练手。
也可以纯粹的在软件上仿真即可。
开始的时候,推荐先在软件上仿真,然后再进行硬件仿真,这样的顺序比较合理。
其次,学习fpga不建议用笔记本,因为工程量大的时候,运行起来是非常费时的!建议电脑配置至少采用“奔腾双核 512m独显 2g内存”的模式,这个配置现在对笔记本也不算太高,但是真正做项目的时候,估计配置还是得提高。
-
清爽的衬衫
这是我在博客里写的一篇日志 希望对你有所启发
另外我的博客有几篇这方面的文章 有空来看
http://hi.baidu.com/publiclass/blog/category/������������(����ãȼ������)
着手学习fpga快两个月了,记录一下我的学习例程,对自己一个勉励,也希望有缘如果有无从下手的新人看到的话会有所方向.
二月末开始接触verilog语法,磨了好久,而后有幸认识一名硕导,经过指点,要求我三天学会verilog语法(汗...),
个人建议不要看教科书那类,进度慢而且理解不透,过于全面,有些基本上用不到教材却用了大篇幅,网上有实例教程,看着实例的语句学语法,网上夏宇闻的一个ppt挺好的.建议先把可综合语句学完,以后仿真的时候再学不可综合语句.
初学者可以买一块基本功能的开发板(我的才花了200多,用着很好),只需学会基本的重点语句,(当然要学会quartus软件使用,网上有视频,不多,仔细找啊,找啊)找到了,好开始上机编程,编个简单的发光二极管什么的吧.三天按时完成.搞定~我终于明白压力产生动力啊!
入门的时候脑筋是有点转啊,晕啊,可能fpga这个东西跟以前接触的51,arm不一样,要时刻切记:我们做的是电路,而不是在cpu上编程!举个例子:for(a=0a<ma ),这用c语言在cpu上可以运行,但fpga不行,verilog语句是要生成电路的,m是未知数,你自己都不知道要生成几条电路,fpga更不知道.把m限定位数就可以综合了.因为这时电路是有限的了.
走马灯做好了,基本的语法(最简单的哈)会写了,不扎实,按老师要求做一个交通灯,要求每隔几秒灯换一个,每换一次蜂鸣器响一下.这个实验是学会对时序电路的掌握,包括分频,计数器等.我更加明白了学东西时,要学一点做出来一点,切不可全学完了再回头做.学不透不深.这个难度跟第一个差不多,所以很快做出来了
之后老师让我做一个数字跑表,这个上了些难度了.用数码管显示时分秒(下一位叫啥?),用按键控制暂停,继续,复位.保存(最后我也没做出来保存).由于fpga做除法比较困难,显示上遇到困难,学了学除法器,逼得没招也做出来了,用了1个星期.
给老师看后,接着又下任务了:做一个等精度频率计,这已经是一个成型的小产品难度了.当时我都没听过这个东西,回去开始查,借了本书里面有这个例子,介绍原理,也给了电路图和程序.但是,貌似我看不懂别人的程序,那一大片电路图更是不知所云,只是根据原理推断了一下等精度频率计的功能,到这儿已经过了好几天了,比较郁闷,没招儿,已经太久了,不会也得做了,开始做....憋呀憋....还行,我本身喜欢编程,加上以前做单片机的经验,也算作出来个频率计(貌似是等精度的,不是等精度的我还不知道咋做了...)自己在fpga内部做了个低频率,测频,把数值用数码管显示出来...哈哈,很开心. 我也发现个问题,我实际编程 调试,只用了不到两天,而之前犯愁怎么做却用了好几天,其实事情不是那么难解决的,只要我们用心做,不要还没做就被吓到了,事情往往没有我们想的那么难.
整个任务下来,代码将近300行,不多,但是我发现我自身的缺陷,不会分模块,不会设计电路,去找老师倾诉,老师告诉我回去把每个语句生成的电路单独做一下,每个小模块也做一下,做做小模块的调用,回去做了,发现这时在做基础理论时就可以理解的相当透彻,可以明白这些理论用在哪里.
为了检验一下自己学习成果,用功能电路设计了一个可以通过蜂鸣器播放音乐,一排led小灯随着音乐跳动.自我感觉不错哈~可惜同学们都说没听出调儿~~~
新的任务继续着.做一个叫做dds的东东,写这句话的时候我还没查她是个什么东东呢.听朋友说是个信号发生器.到底怎么回事再查吧,我相信我会完成任务的.
做完这个,在做a/d,d/a,才能开始做nios软核,老师的用意,乖乖听话还是.
近期有个比赛,我打算把我下半年的经历花在那上面....
只是只是...可怜的我...四级都还没有过...
-
灵巧的灯泡
最好数字逻辑电路和语言同步学,你对整个数字逻辑电路有大概的了解之后,试着写点简单的代码,vhdl和 verilog依你周围人使用的多少选一个,先就在pc上仿真,工具软件ise和quartusii选一个。主要是多练,没事就去写点代码,刚开始不会写就抄,乱七八糟各种类型的,什么都抄,抄多了自然就有感觉了。如果你有钱的话,可以买一个开发板玩玩,这样学的更快更有意思,我以前网购一块不错,还送很多实用例子。初学者建议买个cpld就行了,便宜也够用。然后多在图书馆去借这方面书来看。推荐入门书籍。一本国外的《数字逻辑设计(vhdl)基础》弗拉内希奇著,不行就找西电侯伯亨出版的《vhdl硬件描述语言与数字逻辑电路设计(第3版)》 太久没有看不知道记错没有。数字逻辑设计是基础,先把这个学好再说。
-
犹豫的电话
fpga学习重点
1. 看代码,建模型
只有在脑海中建立了一个个逻辑模型,理解fpga内部逻辑结构实现的基础,才能明白为什么写verilog和写c整体思路是不一样的,才能理解顺序执行语言和并行执行语言的设计方法上的差异。在看到一段简单程序的时候应该想到是什么样的功能电路。
2. 用数学思维来简化设计逻辑
学习fpga不仅逻辑思维很重要,好的数学思维也能让你的设计化繁为简,所以啊,那些看见高数就头疼的童鞋需要重视一下这门课哦。举个简单的例子,比如有两个32bit的数据x[31:0]与y[31:0]相乘。当然,无论altera还是xilinx都有现成的乘法器ip核可以调用,这也是最简单的方法,但是两个32bit的乘法器将耗费大量的资源。那么有没有节省资源,又不太复杂的方式来实现呢?我们可以稍做修改:
将x[31:0]拆成两部分x1[15:0]和x2[15:0],令x1[15:0]=x[31:16],x2[15:0]=x[15:0],则x1左移16位后与x2相加可以得到x;同样将y[31:0]拆成两部分y1[15:0]和y2[15:0],令 y1[15:0]=y[31:16],y2[15:0]=y[15:0],则y1左移16位后与y2相加可以得到y,则x与y的相乘可以转化为x1和x2 分别与y1和y2相乘,这样一个32bit*32bit的乘法运算转换成了四个16bit*16bit的乘法运算和三个32bit的加法运算。转换后的占用资源将会减少很多,有兴趣的童鞋,不妨综合一下看看,看看两者差多少。
3. 时钟与触发器的关系
“时钟是时序电路的控制者”这句话太经典了,可以说是fpga设计的圣言。fpga的设计主要是以时序电路为主,因为组合逻辑电路再怎么复杂也变不出太多花样,理解起来也不没太多困难。但是时序电路就不同了,它的所有动作都是在时钟一拍一拍的节奏下转变触发,可以说时钟就是整个电路的控制者,控制不好,电路功能就会混乱。
打个比方,时钟就相当于人体的心脏,它每一次的跳动就是触发一个 clk,向身体的各个器官供血,维持着机体的正常运作,每一个器官体统正常工作少不了组织细胞的构成,那么触发器就可以比作基本单元组织细胞。
时序逻辑电路的时钟是控制时序逻辑电路状态转换的“发动机”,没有它时序逻辑电路就不能正常工作。因为时序逻辑电路主要是利用触发器存储电路的状态,而触发器状态变换需要时钟的上升或下降沿,由此可见时钟在时序电路中的核心作用。
最后简单说一下体会吧,归结起来就是多实践、多思考、多问。实践出真知,看100遍别人的方案不如自己去实践一下。实践的动力一方面来自兴趣,一方面来自压力。有需求会容易形成压力,也就是说最好能在实际的项目开发中锻炼,而不是为了学习而学习。
为什么你会觉得fpga难学?
1. 不熟悉fpga的内部结构
fpga为什么是可以编程的?恐怕很多初学者不知道,他们也不想知道。因为他们觉得这是无关紧要的。他们潜意识的认为可编程嘛,肯定就是像写软件一样啦。软件编程的思想根深蒂固,看到verilog或者vhdl就像看到c语言或者其它软件编程语言一样。一条条的读,一条条的分析。
拒绝去了解为什么fpga是可以编程的,不去了解fpga的内部结构,要想学会fpga 恐怕是天方夜谭。那么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触发器来完成。但这毕竟只实现了4输入1输出的逻辑电路而已,通常逻辑电路的规模那是相当的大。
可编程连线
那怎么办呢?这个时候就需要用到可编程连线了。在这些连线上有很多用存储器控制的链接点,通过改写对应存储器的值就可以确定哪些线是连上的而哪些线是断开的。这就可以把很多可编程逻辑单元组合起来形成大型的逻辑电路。
可编程的io
任何芯片都必然有输入引脚和输出引脚。有可编程的io可以任意的定义某个非专用引脚(fpga中有专门的非用户可使用的测试、下载用引脚)为输入还是输出,还可以对io的电平标准进行设置。
总归一句话,fpga之所以可编程是因为可以通过特殊的01代码制作成一张张 “真值表”,并将这些“真值表”组合起来以实现大规模的逻辑功能。
不了解fpga内部结构,就不能明白最终代码如何变到fpga里面去的,也就无法深入的了解如何能够充分运用fpga。现在的fpga,不单单是有前面讲的那三块,还有很多专用的硬件功能单元,如何利用好这些单元实现复杂的逻辑电路设计,是从菜鸟迈向高手的路上必须要克服的障碍。而这一切,还是必须先从了解fpga内部逻辑及其工作原理做起。
2. 错误理解hdl语言,怎么看都看不出硬件结构
hdl语言的英语全称是:hardware deion language,注意这个单词deion,而不是design。老外为什么要用deion这个词而不是design呢?因为hdl确实不是用用来设计硬件的,而仅仅是用来描述硬件的。
描述这个词精确地反映了hdl语言的本质,hdl语言不过是已知硬件电路的文本表现形式而已,只是将以后的电路用文本的形式描述出来而已。而在编写语言之前,硬件电路应该已经被设计出来了。语言只不过是将这种设计转化为文字表达形式而已。
硬件设计也是有不同的抽象层次,每一个层次都需要设计。最高的抽象层次为算法级、然后依次是体系结构级、寄存器传输级、门级、物理版图级。
使用hdl的好处在于我们已经设计好了一个寄存器传输级的电路,那么用hdl描述以后转化为文本的形式,剩下的向更低层次的转换就可以让eda工具去做了,这就大大的降低了工作量。这就是可综合的概念,也就是说在对这一抽象层次上硬件单元进行描述可以被eda工具理解并转化为底层的门级电路或其他结构的电路。
在fpga设计中,就是在将这以抽象层级的意见描述成hdl语言,就可以通过fpga开发软件转化为上一点中所述的fpga内部逻辑功能实现形式。hdl也可以描述更高的抽象层级如算法级或者是体系结构级,但目前受限于eda软件的发展,eda软件还无法理解这么高的抽象层次,所以hdl描述这样抽象层级是无法被转化为较低的抽象层级的,这也就是所谓的不可综合。
所以在阅读或编写hdl语言,尤其是可综合的hdl,不应该看到的是语言本身,而是要看到语言背后所对应的硬件电路结构。
3. fpga本身不算什么,一切皆在fpga之外
fpga是给谁用的?很多学校是为给学微电子专业或者集成电路设计专业的学生用的,其实这不过是很多学校受资金限制,买不起专业的集成电路设计工具而用fpga工具替代而已。其实fpga是给设计电子系统的工程师使用的。这些工程师通常是使用已有的芯片搭配在一起完成一个电子设备,如基站、机顶盒、视频监控设备等。当现有芯片无法满足系统的需求时,就需要用fpga来快速的定义一个能用的芯片。
前面说了,fpga里面无法就是一些“真值表”、触发器、各种连线以及一些硬件资源,电子系统工程师使用fpga进行设计时无非就是考虑如何将这些以后资源组合起来实现一定的逻辑功能而已,而不必像ic设计工程师那样一直要关注到最后芯片是不是能够被制造出来。
本质上和利用现有芯片组合成不同的电子系统没有区别,只是需要关注更底层的资源而已。要想把fpga用起来还是简单的,因为无非就是那些资源,在理解了前面两点再搞个实验板,跑跑实验,做点简单的东西是可以的。而真正要把fpga用好,那光懂点fpga知识就远远不够了。因为最终要让fpga里面的资源如何组合,实现何种功能才能满足系统的需要,那就需要懂得更多更广泛的知识。
4. 数字逻辑知识是根本
无论是fpga的哪个方向,都离不开数字逻辑知识的支撑。fpga说白了是一种实现数字逻辑的方式而已。如果连最基本的数字逻辑的知识都有问题,学习fpga的愿望只是空中楼阁而已。数字逻辑是任何电子电气类专业的专业基础知识,也是必须要学好的一门课。
如果不能将数字逻辑知识烂熟于心,养成良好的设计习惯,学fpga到最后仍然是雾里看花水中望月,始终是一场空的。以上四条只是我目前总结菜鸟们在学习fpga时所最容易跑偏的地方,fpga的学习其实就像学习围棋一样,学会如何在棋盘上落子很容易,成为一位高手却是难上加难。要真成为李昌镐那样的神一般的选手,除了靠刻苦专研,恐怕还确实得要一点天赋。
荐读
1. 入门首先要掌握hdl(hdl=verilog vhdl)
第一句话是:还没学数电的先学数电。然后你可以选择verilog或者vhdl,有c语言基础的,建议选择vhdl。因为verilog太像c了,很容易混淆,最后你会发现,你花了大量时间去区分这两种语言,而不是在学习如何使用它。当然,你思维能转得过来,也可以选verilog,毕竟在国内verilog用得比较多。
接下来,首先找本实例抄代码。抄代码的意义在于熟悉语法规则和编译器(这里的编译器是硅编译器又叫综合器,常用的编译器有:quartus、ise、vivado、design compiler 、synopsys的vcs、iverilog、lattice的diamond、microsemi/actel的libero、synplify pro),然后再模仿着写,最后不看书也能写出来。编译完代码,就打开rtl图,看一下综合出来是什么样的电路。
hdl是硬件描述语言,突出硬件这一特点,所以要用数电的思维去思考hdl,而不是用c语言或者其它高级语言,如果不能理解这句话的,可以看《什么是硬件以及什么是软件》。在这一阶段,推荐的教材是《verilog传奇》、《verilog hdl高级数字设计》或者是《用于逻辑综合的vhdl》。不看书也能写出个三段式状态机就可以进入下一阶段了。
此外,你手上必须准备verilog或者vhdl的官方文档,《verilog_ieee官方标准手册-2005_ieee_p1364》、《ieee standard vhdl language_2008》,以便遇到一些语法问题的时候能查一下。
2. 独立完成中小规模的数字电路设计
现在,你可以设计一些数字电路了,像交通灯、电子琴、dds等等,推荐的教材是夏老《verilog 数字系统设计教程》(第三版)。在这一阶段,你要做到的是:给你一个指标要求或者时序图,你能用hdl设计电路去实现它。这里你需要一块开发板,可以选altera的cyclone iv系列,或者xilinx的spantan 6。
还没掌握hdl之前千万不要买开发板,因为你买回来也没用。这里你没必要每次编译通过就下载代码,咱们用modelsim仿真(此外还有questasim、nc verilog、diamond的active-hdl、vcs、debussy/verdi等仿真工具),如果仿真都不能通过那就不用下载了,肯定不行的。在这里先掌握简单的testbench就可以了。推荐的教材是《writing testbenches functional verification of hdl models》。
3. 掌握设计方法和设计原则
你可能发现你综合出来的电路尽管没错,但有很多警告。这个时候,你得学会同步设计原则、优化电路,是速度优先还是面积优先,时钟树应该怎样设计,怎样同步两个异频时钟等等。
推荐的教材是《fpga权威指南》、《ip核芯志-数字逻辑设计思想》、《altera fpga/cpld设计》第二版的基础篇和高级篇两本。学会加快编译速度(增量式编译、logiclock),静态时序分析(timequest),嵌入式逻辑分析仪(signaltap)就算是通关了。如果有不懂的地方可以暂时跳过,因为这部分还需要足量的实践,才能有较深刻的理解。
4. 学会提高开发效率
因为quartus和ise的编辑器功能太弱,影响了开发效率。所以建议使用sublime text编辑器中代码片段的功能,以减少重复性劳动。modelsim也是常用的仿真工具,学会tcl/tk以编写适合自己的do文件,使得仿真变得自动化,推荐的教材是《tcl/tk入门经典》。
你可能会手动备份代码,但是专业人士都是用版本控制器的,所以,为了提高工作效率,必须掌握git。文件比较器beyond compare也是个比较常用的工具。此外,你也可以使用system verilog来替代testbench,这样效率会更高一些。如果你是做ic验证的,就必须掌握system verilog和验证方法学(uvm)。推荐的教材是《writing testbenches using systemverilog》、《the uvm primer》、《system verilog1800-2012语法手册》。
掌握了tcl/tk之后,可以学习虚拟jtag(ise也有类似的工具)制作属于自己的调试工具,此外,有时间的话,最好再学个python。脚本,意味着一劳永逸。
5. 增强理论基础
这个时候,你已经会使用fpga了,但是还有很多事情做不了(比如,fir滤波器、pid算法、ofdm等),因为理论没学好。我大概地分几个方向供大家参考,后面跟的是要掌握的理论课。
信号处理 —— 信号与系统、数字信号处理、数字图像处理、现代数字信号处理、盲信号处理、自适应滤波器原理、雷达信号处理
接口应用 —— 如:uart、spi、iic、usb、can、pcie、rapid io、ddr、tcp/ip、spi4.2(10g以太网接口)、sata、光纤、displayport
无线通信 —— 信号与系统、数字信号处理、通信原理、移动通信基础、随机过程、信息论与编码
cpu设计 —— 计算机组成原理、单片机、计算机体系结构、编译原理
仪器仪表 —— 模拟电子技术、高频电子线路、电子测量技术、智能仪器原理及应用
控制系统 —— 自动控制原理、现代控制理论、过程控制工程、模糊控制器理论与应用
压缩、编码、加密 —— 数论、抽象代数、现代编码技术、信息论与编码、数据压缩导论、应用密码学、音频信息处理技术、数字视频编码技术原理
现在你发现,原来fpga会涉及到那么多知识,你可以选一个感兴趣的方向,但是工作中很有可能用到其中几个方向的知识,所以理论还是学得越多越好。如果你要更上一层,数学和英语是不可避免的。
6. 学会使用matlab仿真
设计fpga算法的时候,多多少少都会用到matlab,比如crc的系数矩阵、数字滤波器系数、各种表格和文本处理等。此外,matlab还能用于调试hdl(用matlab的计算结果跟用hdl算出来的一步步对照,可以知道哪里出问题)。推荐的教材是《matlab宝典》和杜勇的《数字滤波器的matlab与fpga实现》。
7. 图像处理
photoshop
花一、两周的时间学习ps,对图像处理有个大概的了解,知道各种图片格式、直方图、色相、通道、滤镜、拼接等基本概念,并能使用它。这部分是0基础,目的让大家对图像处理有个感性的认识,而不是一上来就各种各样的公式推导。推荐《photoshop cs6完全自学教程》。
基于matlab或opencv的图像处理
有c/c 基础的可以学习opencv,否则的话,建议学matlab。这个阶段下,只要学会简单的调用函数即可,暂时不用深究实现的细节。推荐《数字图像处理matlab版》、《学习opencv》。
图像处理的基础理论
这部分的理论是需要高数、复变、线性代数、信号与系统、数字信号处理等基础,基础不好的话,建议先补补基础再来。看不懂的理论也可以暂时先放下,或许学到后面就自然而然地开窍了。推荐《数字图像处理》。
基于fpga的图像处理
把前面学到的理论运用到fpga上面,如果这时你有前面第七个阶段的水平,你将轻松地独立完成图像算法设计(图像处理是离不开接口的,上面第五个阶段有讲)。推荐《基于fpga的嵌入式图像处理系统设计》、《基于fpga的数字图像处理原理及应用》。
进一步钻研数学。要在算法上更上一层,必然需要更多的数学,所以这里建议学习实分析、泛涵分析、小波分析等。
热门文章
- 南昌绿地主管岗待遇怎么样
- 放弃华尔街高薪回国守门,她的背后原来藏着一个神秘家族
- 橡胶英才网上有哪些江苏橡胶公司在招聘
- 主题酒店加盟哪个好
- 融资租赁租金及利息计算
- 果果的鞋加盟费多少钱
- 诗和远方一一一中建五局南康家居小镇城市客厅项目建设心语
- 怎么打开微信
- 肯德基的经营模式
- 广东诚泰交通科技发展有限公司怎么样
- 酸菜太酸了,怎么可以去酸
- 美味又下饭的酸菜粉丝,如何才能烹饪出一流的味道
- 炖豆腐的家常做法是怎样的
- 炖猪脚怎么做好吃
- 瘦肉汤怎么做有哪些
- 瘦肉汤的做法,瘦肉汤怎么做好吃,瘦肉汤的家常做法
- 炖肉怎么做好吃又烂
- 冬瓜炖肉怎么炒最好吃
- 炖肉的家常做法
- 怎么炖肉好吃又烂
- 胆机怎么使用
- 功放没声音怎么修
- ads1293怎么用
- 信捷的plc和keyence基恩士的plc哪个好啊
- 健伍汽车cd怎么进入调eq功能
- 西门子s7-200 smart plc用pls命令控制步进电机的简单程序中的eni是什么意思
- 大众波罗音响怎么解码
- vk3234 怎么样
- 西门子plc的atch中断指令使用
- 单片机怎么设置otp位