10年FPGA开发经验的工程师肺腑之言

合集下载

fpga学习心得体会

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设计来说,是一场无法弥补的灾难,是一个没有打好地基的大楼,崩溃是必然的。

具体一些的设计细则:1)尽可能采用单一时钟;2)如果有多个时钟域,一定要仔细划分,千万小心;3)跨时钟域的信号一定要做同步处理。

对于控制信号,可以采用双采样;对于数据信号,可以采用异步fifo。

需要注意的是,异步fifo不是万能的,一个异步fifo也只能解决一定范围内的频差问题。

4)尽可能将FPGA内部的PLL、DLL利用起来,这会给你的设计带来大量的好处。

5)对于特殊的IO接口,需要仔细计算Tsu、Tco、Th,并利用PLL、DLL、DDIO、管脚可设置的delay等多种工具来实现。

简单对管脚进行Tsu、Tco、Th的约束往往是不行的。

FPGA设计要点之二:FSM关于上期的时钟树,可能说的不是很确切。

这里的时钟树实际上泛指时钟方案,主要是时钟域和PLL等的规划,一般情况下不牵扯到走线时延的详细计算(一般都走全局时钟网络和局部时钟网络,时延固定),和ASIC中的时钟树不一样。

对于ASIC,就必须对时钟网络的设计、布线、时延计算进行仔细的分析计算才行。

FSM:有限状态机。

这个可以说时逻辑设计的基础。

几乎稍微大一点的逻辑设计,几乎都能看得到FSM。

FSM分为moore型和merly型,moore型的状态迁移和变量无关,merly型则有关。

实际使用中大部分都采用merly型。

FSM通常有2种写法:单进程、双进程。

初学者往往喜欢单进程写法,格式如下:always @( posedge clk or posedge rst )beginif ( rst == 1'b1 )FSM_status <= ......;elsecase ( FSM_status )......;endcaseend简单的说,单进程FSM就是把所有的同步、异步处理都放入一个always中。

从汇编、C语言到十年的FPGA开发设计,告诉你成长的经验

从汇编、C语言到十年的FPGA开发设计,告诉你成长的经验

从汇编、C语言到十年的FPGA开发设计,告诉你成长的经验大学时代第一次接触FPGA至今已有10多年的时间,至今记得当初第一次在EDA实验平台上完成数字秒表、抢答器、密码锁等实验时那个兴奋劲。

当时由于没有接触到HDL硬件描述语言,设计都是在MAX+plus II原理图环境下用74系列逻辑器件搭建起来的。

后来读研究生,工作陆陆续续也用过Quartus II、FoundaTIon、ISE、Libero,并且学习了verilogHDL语言,学习的过程中也慢慢体会到verilog的妙用,原来一小段语言就能完成复杂的原理图设计,而且语言的移植性可操作性比原理图设计强很多。

在学习一门技术之前我们往往从它的编程语言入手,比如学习单片机时,我们往往从汇编或者C语言入门。

所以不少开始接触FPGA的开发人员,往往是从VHDL或者Verilog开始入手学习的。

但我个人认为,若能先结合《数字电路基础》系统学习各种74系列逻辑电路,深刻理解逻辑功能,对于学习HDL语言大有裨益,往往会起到事半功倍的效果。

当然,任何编程语言的学习都不是一朝一夕的事,经验技巧的积累都是在点滴中完成,FPGA设计也无例外。

下面就以我的切身体会,谈谈FPGA设计的经验技巧。

我们先谈一下FPGA基本知识:1.硬件设计基本原则FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD 等可编程器件的基础上进一步发展的产物。

它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

速度与面积平衡和互换原则:一个设计如果时序余量较大,所能跑的频率远高于设计要求,能可以通过模块复用来减少整个设计消耗的芯片面积,这就是用速度优势换面积的节约;反之,如果一个设计的时序要求很高,普通方法达不到设计频率,那么可以通过数据流串并转换,并行复制多个操作模块,对整个设计采用“乒乓操作”和“串并转换”的思想进。

十年编程,无师自通--peter Novig

十年编程,无师自通--peter Novig
• 2001年,加盟google, “Google手 Google手 Google 里有大量数据也很有钱” 里有大量数据也很有钱
• Google的研究部主 • Google的安全质量 总监 • Lisp Guru • 著名的PAIP和 AIMA的作者
诺威格定理
当一个公司的市场占有率超 过 50% 后,就无法再使市 场占有率翻番了
开发心得分享: 开发心得分享:成功的处方
• 对编程感兴趣 兴趣,因为乐趣而去编程 兴趣 • 跟其他程序员交谈;阅读其他程序 其他程序员交谈; 其他程序员交谈 • 编程 编程。最好的学习是从实践 实践中学习 实践 • 花上大学四年或更多的时间取得入门的资格 • 跟别的程序员一起完成项目 程序员一起完成项目 • 接手别的程序员完成项目 • 学会至少半打编程语言
• 《Teach Yourself Java in 7 Days》
• 为什么每个人都急不可耐?
– 用pubdate: after 1992 and title: days and (title: learn or title: teach 78本是计算机书 yourself)在Amazon上搜索:得248个结果,前78本是计算机书 78 yourself 籍 – 将days换成hours,得到253本,其中前77本是计算机书籍 前77本是计算机书籍 – 头200本书中,有96%是计算机书籍 有96%是计算机书籍
– Google 从基于搜索的 Adwords 广告扩展到基 于内容的 Adsense 广告 – 微软从操作系统软件 Windows 扩展到应用软 件 Office – GE 从一个电器公司转型到一个传媒和金融 公司则是成功的转型。
开发心得分享:10年编程无师自通 开发心得分享:10年编程无师自通

fpga岗位工作总结

fpga岗位工作总结

fpga岗位工作总结
FPGA岗位工作总结。

作为一名FPGA工程师,我深知这一职位的重要性和挑战。

FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,能够在硬件级别上实现特定的
功能。

在当今的科技领域,FPGA技术被广泛应用于数字信号处理、通信、嵌入式
系统等领域,因此FPGA岗位的工作也变得越发重要。

在FPGA岗位工作中,我需要具备扎实的硬件设计和Verilog/VHDL编程能力。

我要能够理解数字电路原理,掌握FPGA芯片的架构和特性,熟练运用EDA工具
进行电路设计和仿真。

同时,我还要具备良好的团队合作能力,与软件工程师、硬件工程师和测试工程师紧密合作,共同完成项目的开发和测试工作。

在FPGA岗位工作中,我还需要具备良好的问题解决能力和创新意识。

由于FPGA技术的复杂性和变化性,我们经常会面临各种挑战和困难。

在这种情况下,
我需要能够迅速定位问题所在,并提出解决方案。

同时,我也要不断学习和探索新的技术,不断改进和优化我们的设计方案。

总的来说,FPGA岗位工作需要我们具备扎实的技术功底、良好的团队合作能
力和优秀的问题解决能力。

只有不断学习和提升自己,我们才能在这个领域中立于不败之地,为公司的发展做出更大的贡献。

希望在未来的工作中,我能够不断挑战自我,不断进步,成为一名优秀的FPGA工程师。

电子工程师十年成长路感悟

电子工程师十年成长路感悟

电子工程师十年成长路感悟来源:互联网作者:马延安标签:电子工程师(147)时间过得真快,转眼就做了十来年的技术。

从当初的初出茅庐,一步步地走到了今天。

在成长的路上,遇到了数个贵人,有过很多次的当头棒喝,也有过很多的徘徊、很多的无奈和很多的感悟。

很早就有写点文字的想法,于自己是个总结,于后来者是个参考。

因为工作上琐事缠身,一直没有机会落笔。

这次,很多在头脑中长期潜伏的想法,一股脑地倒了出来。

本想用流水账的方式,把自己的经历写下,但写好后又大段地删掉了。

因为我觉得,仅仅罗列自己的经历,能给自己什么帮助,又能给别人以什么启发呢?!最后斟酌决定,以自己在工程师路上的几点收获作为线索来动笔,这正是我最想与别人分享的。

我的收获可以总结成下面三句话:步步深入,水到渠成;举一反三,触类旁通;整合资源,提升自我。

步步深入,水到渠成很多的初学电子工程师在面对新技术的时候总希望找到登堂入室的捷径。

寻找捷径是人的本能,付出最小成本,换取最大的成就,这是无可厚非的。

但电子技术是门很严谨的科学,靠捷径和技巧最终都会是无果而返,折腾了半天又回到了起点。

说说我自己学USB的过程。

2001年的时候,公司的一个产品准备使用USB端口通信,我和几位同事自发开始学习USB的相关知识。

我好几次计划仔细把 USB协议从头看到尾,但每次都是看了前三章,就缺乏耐性,抑或因为其他专职工作的时间安排而中断。

自此之后,至少10次,我一次又一次启动学USB设计的计划,但每次都是从阅读USB协议开始,然后阅读到第三章就停掉了,甚至只看了十几页。

虽然花费了时间,但没有丝毫进展,所掌握的知识比当初从科普文章中得到的也没有增加多少。

直到2003年的一天,部门来了一位对USB小有所成的新同事。

一次偶尔的聊天中,他提到,“USB协议熟读第九章,再看些sample程序,就入门了”。

于是,找来Cypress的USB HID的例子程序,对照USB协议的第九章来学习。

那一周我不仅对USB开发入了门,而且顿悟了不少东西。

fpga岗位工作总结

fpga岗位工作总结

fpga岗位工作总结
FPGA岗位工作总结。

FPGA(Field-Programmable Gate Array)是一种灵活可编程的集成电路,具有
广泛的应用领域,包括数字信号处理、通信、图像处理等。

FPGA工程师在这个领
域扮演着重要的角色,他们负责设计、开发和测试FPGA芯片,以满足各种应用
的需求。

作为一名FPGA工程师,我在过去的工作中积累了丰富的经验和技能。

首先,
我熟练掌握了FPGA设计工具,包括Vivado、Quartus等,能够利用这些工具进行
逻辑设计、综合、布局布线和仿真。

在项目中,我能够根据需求选择合适的FPGA
芯片,并进行设计和验证,确保其性能和可靠性。

其次,我具备良好的Verilog和VHDL编程能力,能够编写高效、可靠的
FPGA代码。

在项目中,我经常与团队成员合作,共同完成FPGA设计和验证工作。

我注重团队合作,能够有效沟通和协调,确保项目进展顺利。

此外,我对FPGA应用领域有深入的了解,能够根据不同的应用需求进行FPGA系统设计和优化。

在数字信号处理领域,我设计了高性能的FPGA算法加速器;在通信领域,我设计了高可靠性的FPGA通信系统。

这些项目经验使我对FPGA应用有更深入的理解,能够为客户提供更好的解决方案。

总的来说,作为一名FPGA工程师,我具备扎实的专业知识和丰富的项目经验,能够胜任FPGA设计和开发工作。

我将继续不断学习和提升自己,为FPGA应用
领域的发展贡献自己的力量。

学习FPGA的几点心得五篇

学习FPGA的几点心得五篇

学习FPGA的几点心得五篇第一篇:学习FPGA的几点心得1、首先要明白的是软件设计和逻辑设计的不同,并理解什么是硬件意识。

软件代码的执行是一个顺序的过程,编绎以后的机器码放在存储器里,等着CPU一条一条的取指并执行;因此软件设计中经常会带有顺序处理的思维。

而逻辑设计则不同,我们设计的是数字电路,它是由很多很多的与非门及D触发器构成的,上电之后所有与非门和D触发器都同时工作,不会因为A触发器的代码描述在B触发器之前A触发器就是先工作,事实上,RTL级代码的代码先后顺序在综合成网表文件后这种顺序就消失了,取代的是基本逻辑电路之间的互联关系描述;因此逻辑设计需要的是一种并发的思维,我们也需要用并发的思维去考虑电路的设计。

当然,我们设计的电路功能一般都有先后顺序的关系,如果这种顺序不能通过代码的先后顺序来实现,那么要怎么完成这一功能呢?在逻辑设计中,我们所说的先后顺序都是基于时间轴来实现:它的承载体就是时序逻辑,也就是那些触发器。

2、其次就是要熟悉基本电路的设计。

基本的电路不是很多,也就是D触发器、计数器、移位寄存器、状态机、多路选择器、译码器等几种,所有复杂的电路都可由这些基本的电路构成。

高手水平高的体现并不是他能写出一些很奇特的电路,相反,水平高是体现在他们总能将复杂的电路用这些很朴素的基本电路去描述。

甚至,你会发现他们的代码基本上是由if...else、case这些语句构成的,朴素的让你觉得奇怪。

初学者在入门的时候,对于基本电路的设计应该固定化、标准化,每种电路该用什么样的代码描述,应该要固定、统一,尽量少一些花哨的东西。

说来这里我举个例子。

以前有几个朋友因为仿真有问题请我帮忙找问题。

他们的代码写的很乱,出现了很多种稀奇古怪的电路,一看头都大了,只好建议他们按照标准的电路重新写下代码。

结果过了半天,他们就和我说问题不见了。

所以,高手们喜欢用简单的代码是有道理的,电路的标准化和规范化可以减少许多稀奇古怪的问题,问题少了他们也就能在别人加班的时候回家多睡回觉,呵呵。

fpga转正工作总结

fpga转正工作总结

fpga转正工作总结FPGA转正工作总结。

在过去的一年里,我有幸作为一名FPGA工程师加入了这个团队,并且经过努力和学习,最终成功转正。

在这个过程中,我收获了很多经验和教训,也学到了很多宝贵的东西。

首先,作为一名FPGA工程师,我深刻理解了团队合作的重要性。

在项目中,我与其他工程师紧密合作,共同解决了许多技术难题。

通过与团队成员的交流和合作,我不仅学到了很多新知识,还提高了自己的解决问题的能力。

团队合作不仅让项目进展顺利,也让我在工作中感到更加愉快和充实。

其次,我在工作中学会了如何高效地解决问题。

在FPGA开发过程中,经常会遇到各种各样的问题,有时候甚至会让人感到很绝望。

但是通过不断地思考和尝试,我渐渐掌握了一些解决问题的技巧和方法。

我学会了如何快速定位问题,如何利用各种工具和资源来解决问题,也学会了如何在遇到困难时保持乐观的心态。

这些经验不仅帮助我顺利完成了项目,也让我在工作中更加得心应手。

最后,我意识到了持续学习的重要性。

FPGA技术日新月异,要想在这个领域保持竞争力,就必须不断地学习和进步。

在工作之余,我会利用各种资源来学习新的技术和知识,不断提高自己的专业能力。

我相信,只有不断学习和进步,才能在这个竞争激烈的行业中立于不败之地。

总的来说,FPGA转正工作对我来说是一次宝贵的经历。

在这个过程中,我学会了团队合作,学会了高效解决问题,也学会了持续学习。

我相信,这些经验和教训将会在我的未来工作中发挥重要的作用,让我能够更加成功地应对各种挑战。

我会继续努力,不断提高自己的能力,为团队的发展和进步贡献自己的力量。

一个FPGA工程师的个人工作经历总结

一个FPGA工程师的个人工作经历总结

一个FPGA工程师的个人工作经历总结★以下文章选自EETOP论坛,比较早的帖子了,里面所提到开发工具以及开发平台等很多都已有所过时。

但该文章的基本思想不过时,对初学者比较适合。

★很早之前就想对这几个月工作经历写的东西,一是作为自己的总结,二是自己也很想将自己这段时间的一些经历和大家分享一下,希望对初学者而言能使得他们能少走一些弯路。

只是公司里的事情很多,最近经常加班,所以一直拖到现在。

能来到这家公司应该是一种缘份--缘起NIOS。

当初三月份altera来我们学校建立SOPC实验室的时候自己还不知道NIOS是什么东西,只是想在altera的FAE讲完NIOS 后多问他几个时序约束的问题,然后拷一份PPT回去。

但是想不到因为那一份NIOS的培训资料,我认识了论坛里的cawan,他给我讲了很多NIOS的东西,之后是丁哥在SOC版帖了位NIOS大赛的通知,然后我和队友就去报了名,并去川大参加了NIOS的培训,认识了峻龙的FAE----也是我现在的boss。

在这里要谢谢cawan、丁哥、和我一起参加NIOS竞赛的队友刘科以及我的BOSS,是他们让我有了这一段的经历。

在公司里的几个月,做的项目其实不多,但是收获还是有一些,我觉得收获最大的是设计理念的改变,这也是我这段时间最想总结的,我会在后面逐渐阐述。

时序是设计出来的我的boss有在华为及峻龙工作的背景,自然就给我们讲了一些华为及altera做逻辑的一些东西,而我们的项目规范,也基本上是按华为的那一套去做。

在工作这几个月中,给我感触最深的是华为的那句话:时序是设计出来的,不是仿出来的,更不是湊出来的。

在我们公司,每一个项目都有很严格的评审,只有评审通过了,才能做下一步的工作。

以做逻辑为例,并不是一上来就开始写代码,而是要先写总体设计方案和逻辑详细设计方案,要等这些方案评审通过,认为可行了,才能进行编码,一般来说这部分工作所占的时间要远大于编码的时间。

总体方案主要是涉及模块划分,一级模块和二级模块的接口信号和时序(我们要求把接口信号的时序波形描述出来)以及将来如何测试设计。

学FPGA感想(五篇材料)

学FPGA感想(五篇材料)

学FPGA感想(五篇材料)第一篇:学FPGA感想回想起自己学FPGA,已经有一段时间了,从开始的茫然,到后来的疯狂看书,调电路,练习各种FPGA实例,到最后能独立完成项目,一路走来,感受颇多,拿出来和大家分享,顺便介绍下自己的一点经验所得,希望对初学者有所帮助。

废话不说了,下面进入正题,学习FPGA我主要经历了这么几个阶段:①、VHDL和Verilog语言的学习,熟悉VHDL和Verilog语言的各种语法。

②、FPGA的学习,熟悉QuartusII软件的各种功能,各种逻辑算法设计,接口模块(RS232,LCD,VGA,SPI,I2c,AD,DA等)的设计,时序分析,硬件优化等,大家可以先从简单的做起,复杂的电路一定要把芯片资料读懂,上面的时序分析一定要看明白,然后才能设计正确驱动。

③、NiosII的学习,熟悉NiosII的开发流程,熟悉开发软件(SOPC,NiosII IDE),了解NiosII的基本结构,编写NiosII C语言程序,调试板子各模块功能。

NiosII软件调试要很费时间,大家要耐的住厌烦,如果对软件不熟悉会出现很多问题,自己遇到问题和解决问题的过程,也就是大家进步的过程,大家可以把NiosII内嵌的各种功能调试一遍,最后再移植C8051、uCOSII操作系统和uCLinux操作系统,估计你已经很熟悉了NiosII了。

先来说说第一个阶段,现在主要的硬件描述语言有VHDL,Verilog两种,现在Verilog用的人越来越多,因为容易上手(与C语言语法比较类似),也更灵活,现在的IC设计基本都用Verilog。

但是VHDL也有自己的优点,VHDL语言设计的程序很长,因为他本身语言比较严谨,在欧美一些国家还是比较喜欢VHDL语言。

所以我希望大家对两种语言应该都比较熟悉。

我们的开发板上都尽量把这两种语言进行完善。

其中关于VHDL语言和Verilog HDL语言资料书很多,如果还没有入门的话,可以买一本相对通俗易懂和简单的书来看,书籍我们在这就不推荐了,因为市面上关于这两种语言的书很多。

fpga工程师年终总结

fpga工程师年终总结

fpga工程师年终总结篇一:FPGA研发牛人心得总结FPGA研发之道FPGA是个什么玩意? FPGA是个什么玩意?首先来说:FPGA是一种器件。

其英文名 feild programable gate arry 。

很长,但不通俗。

通俗来说,是一种功能强大似乎无所不能的器件。

通常用于通信、络、图像处理、工业控制等不同领域的器件。

就像ARM、DSP等嵌入式器件一样,成为无数码农码工们情感倾泻而出的代码真正获得生命的地方。

只不过,一样的编程,却是不一样的思想。

嵌入式软件人员看到的是C。

而FPGA工程师看到是硬件描述语言,verilog或VHDL。

软件看到是函数、对象、重构。

FPGA工程师则是模块、流水、复用。

从现象上看,都是代码到下载程序再到硬件上运行。

不能只看现象而忽略本质。

FPGA 开发本质上是设计一颗IC,“**的身子,丫鬟的命”不是所有verilog/VHDL代码,都能获得青睐去流片成为真正的芯片,而更多的则成为运行在FPGA器件上,成为完成相同功能的替代品。

其实现的功能却一点也不逊色于百万身价流片的近亲。

从而成为独树一帜的行业。

FPGA开发的流程,是通过verilog/VHDL等硬件描述语言通过EDA工具编译、综合、布局布线成为下载文件,最终加载到FPGA器件中去,完成所实现的功能。

那硬件描述语言描述的是什么?这里描述的就是组合逻辑电路和时序逻辑电路。

组合逻辑电路就是大家所熟知的与门、或门、非门。

时序逻辑电路则是触发器。

数字芯片上绝大部分逻辑都是这两种逻辑实现的。

也就是基本上每个电子行业的人所学过的数字电路。

顺便说一下,感谢香农大师,在其硕士毕业论文就奠定了数字电路的的根基。

只不过在FPGA中,与或非的操作变成了查找表的操作。

于是所有的数字电路变成了查找表和寄存器,这就构成了FPGA的基础。

查找表负责逻辑实现,寄存器存储电路状态。

二者配合,双剑合璧,天衣无缝。

这是最初的FPGA的雏形。

现代FPGA内部出了查找表和寄存器之外,还有RAM块,用于存储大量的数据块,这是因为RAM块较寄存器来存储大量数据更能节省芯片实现的面积。

一个成熟的FPGA不仅是熟悉FPGA就好

一个成熟的FPGA不仅是熟悉FPGA就好

一个成熟的FPGA不仅是熟悉FPGA就好
 我做FPGA开发9年多了,算是一个大龄工程师了。

期间接触过一些项目管理和技术支持之类的工作,不知道为什幺,脱离研发做这些工作我总觉得不踏实,也许天生就适合死磕技术。

 就是不知道继续这幺死磕下去会怎幺样,曾经也很迷茫,生怕随着年龄的增长,精力比不上年轻人,加班熬夜啥的心有余而力不足,会被逐渐淘汰。

迷茫啥的就不细谈了,好在我也想了很多,逐渐想明白了很多,这篇文章,我一定要给做FPGA的兄弟姐妹打打气。

 我现在最庆幸是事情就是从进入职场到现在一直是FPGA开发,我感觉,做FPGA开发这行经验也是很重要的,入门简单,想提升会越来越难。

做FPGA开发不只是会写写verilog和VHDL代码这幺简单,我记得刚学习verilog的时候,光是要搞明白哪些语句可以综合,哪些语句不可以综合,就花费了很长时间。

 硬件开发语言是要映射成数字逻辑电路的,随着做FPGA的时间长了,写代码的时候脑子里都是0/1的翻转,会逐渐映射出一个个与非门、触发器、存储器,以及他们之间的连线,并且时时刻刻考虑怎样设计才能保证面积最小或者延迟最低。

fpga心得体会

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至今已有10多年的时间,至今记得当初第一次在EDA实验平台上完成数字秒表、抢答器、密码锁等实验时那个兴奋劲。

当时由于没有接触到HDL硬件描述语言,设计都是在MAX+plus II原理图环境下用74系列逻辑器件搭建起来的。

后来读研究生,工作陆陆续续也用过Quartus II、FoundaTIon、ISE、Libero,并且学习了verilogHDL语言,学习的过程中也慢慢体会到verilog的妙用,原来一小段语言就能完成复杂的原理图设计,而且语言的移植性可操作性比原理图设计强很多。

在学习一门技术之前我们往往从它的编程语言入手,比如学习单片机时,我们往往从汇编或者C语言入门。

所以不少开始接触FPGA的开发人员,往往是从VHDL或者Verilog开始入手学习的。

但我个人认为,若能先结合《数字电路基础》系统学习各种74系列逻辑电路,深刻理解逻辑功能,对于学习HDL语言大有裨益,往往会起到事半功倍的效果。

当然,任何编程语言的学习都不是一朝一夕的事,经验技巧的积累都是在点滴中完成,FPGA设计也无例外。

下面就以我的切身体会,谈谈FPGA设计的经验技巧。

我们先谈一下FPGA基本知识:1.硬件设计基本原则FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD 等可编程器件的基础上进一步发展的产物。

它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

速度与面积平衡和互换原则:一个设计如果时序余量较大,所能跑的频率远高于设计要求,能可以通过模块复用来减少整个设计消耗的芯片面积,这就是用速度优势换面积的节约;反之,如果一个设计的时序要求很高,普通方法达不到设计频率,那么可以通过数据流串并转换,并行复制多个操作模块,对整个设计采用“乒乓操作”和“串并转换”的思想进行处理,在芯片输出模块处再对数据进行“并串转换”。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

10年FPGA开发经验的工程师肺腑之言
从大学时代第一次接触FPGA至今已有10多年的时间。

至今记得当初第一次在EDA实验平台上完成数字秒表,抢答器,密码锁等实验时,那个兴奋劲。

当时由于没有接触到HDL硬件描述语言,设计都是在MAX+plus II原理图环境下用74系列逻辑器件搭建起来的。

后来读研究生,工作陆陆续续也用过Quartus II,Foundation,ISE,Libero,并且学习了verilogHDL语言,学习的过程中也慢慢体会到verilog的妙用,原来一小段语言就能完成复杂的原理图设计,而且语言的移植性可操作性比原理图设计强很多。

在学习一门技术之前我们往往从它的编程语言入手,比如学习单片机时,我们往往从汇编或者C语言入门。

所以不少开始接触FPGA的开发人员,往往是从VHDL或者Verilog开始入手学习的。

但我个人认为,若能先结合《数字电路基础》系统学习各种74系列逻辑电路,深刻理解逻辑功能,对于学习HDL 语言大有裨益,往往会起到事半功倍的效果。

当然,任何编程语言的学习都不是一朝一夕的事,经验技巧的积累都是在点滴中完成,FPGA设计也无例外。

下面就以我的切身体会,谈谈FPGA设计的经验技巧。

1)看代码,建模型
只有在脑海中建立了一个个逻辑模型,理解FPGA内部逻辑结构实现的基础,才能明白为什么写Verilog和写C整体思路是不一样的,才能理解顺序执行语言和并行执行语言的设计方法上的差异。

在看到一段简单程序的时候应该想到是什么样的功能电路。

例如:
上面这段代码实现的功能就是一个带使能端的2选1数据选择器,如下图所示。

再例如:
上面这段always实现的是带同步清零端的串并转换移位寄存器,位宽为width,下图为8位电路模型
当你具备了一定的识代码能力之后,你会发现原来Verilog不是那么的枯燥,只不过是一个个电路模型的拼搭而已。

2)组合逻辑中的if...else...与case
对于多输入端的组合逻辑来说,如果不需要考虑优先级应该尽量采用case语句来描述,这样综合出来的电路并行度要大一些,如果采用if...else...结构,综合出来的电路都是串行的,增大了信号时延路径。

降低寄存器间组合路径的延迟是提高系统工作频率的主要手段,因此在完成相同功能的前提下应该尽量使用并行结构逻辑。

可以看出,并行模式比串行模式少了一级延时路径,随着输入端的增多,串行逻辑将比并行逻辑产生更多的延时路径。

3)用数学思维来简化设计逻辑
学习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的加法运算。

转换后的占用资源将会减少很多,有兴趣的童鞋,不妨综合一下看看,看看两者差多少。

4)时钟与触发器的关系
“时钟是时序电路的控制者”这句话太经典了,可以说是FPGA设计的圣言。

FPGA的设计主要是以时序电路为主,因为组合逻辑电路再怎么复杂也变不出太多花样,理解起来也不没太多困难。

但是时序电路就不同了,它的所有动作都是在时钟一拍一拍的节奏下转变触发,可以说时钟就是整个电路的控制者,控制不好,电路功能就会混乱。

打个比方,时钟就相当于人体的心脏,它每一次的跳动就是触发一个CLK,向身体的各个器官供血,维持着机体的正常运作,每一个器官体统正常工作少不了组织细胞的构成,那么触发器就可以比作基本单元组织细胞。

时序逻辑电路的时钟是控制时序逻辑电路状态转换的“发动机”,没有它时序逻辑电路就不能正常工作,因为时序逻辑电路主要是利用触发器存储电路的状态,而触发器状态变换需要时钟的上升或下降沿!由此可见时钟在时序电路中的核心作用!
5)关于IP核和乒乓操作的那点事
经验告诉我,能使用开发工具自带的IP核,就千万别去自己开发。

往往自己开发已有的IP核是吃力不讨好。

我曾经做过一个eMMC控制器烧写外部eMMC芯片的案子。

数据由上位机通过USB传给MCU,然后通过数据总线发到FPGA,在FPGA内部形成烧写eMMC 芯片的时序,烧写外部芯片。

框图如下:
最初的算法是通过数据总线发一个字节,再向芯片打一个字节,一个页的512字节的CRC16需要事先用软件计算好,但是这种方式烧写速度太慢。

后来我想到一种方案,先把512个字节传到FPGA内部存储起来,并且在FPGA内部计算好16个字节的CRC,然后用高速系统时钟一次性把整页528个字节传给芯片,这种方式烧写速度能提高很多。

一开始我想自己设计一个带CRC计算的RAM或者FIFO来存储528个字节的数据,可是无论怎么设计数据传输总是有问题,由于是一个人做,也没人指导,只得放弃这种方案,改用其他。

因为我用的Xilinx器件有现成的FIFO核可以调用,于是我就把CRC16的计算和存储512字节数据分开设计,在最后输出到芯片端再选通。

因为烧写eMMC一个页,需要有一定的等待POLLING时间,所以我想到了用两组FIFO,乒乓操作,A通道数据发送到芯片并且等待应答的时候,MCU端向B通道发送数据存储,B通道数据发送到芯片并且等待应答的时候,MCU端再向A通道发送数据存储,这样最大化的加速了烧写速度,当然最后的设计结果我也是相当满意的。

我想通过此例告诉大家的是,尽量用系统的IP核吧,省事又省心,因为这些都是前辈专家们设计出的经典。

还有就是利用一些设计技巧,比如乒乓操作,流水线操作可以让你的设计性能优化不少。

最后简单说一下体会吧,归结起来就多实践、多思考、多问。

实践出真知,看100遍别人的方案不如自己去实践一下。

实践的动力一方面来自兴趣,一方面来自压力,我个人觉得后者更重要。

有需求会容易形成压力,也就是说最好能在实际的项目开发中锻炼,而不是为了学习而学习。

在实践的过程中要多思考,多想想问题出现的原因,问题解决后要多问几个为什么,这也是经验积累的过程,如果有写项目日志的习惯更好,把问题及原因、解决的办法都写进去。

最后还要多问,遇到问题思索后还得不到解决就要问了,毕竟个人的力量是有限的,问同学同事,问搜索引擎,问网友,都可以,一篇文章、朋友们的点拨都可能帮助自己快速解决问题。

相关文档
最新文档