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这些语句构成的,朴素的让你觉得奇怪。

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

说来这里我举个例子。

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

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

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

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

  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遍别人的方案不如自己去实践一下。

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

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

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

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

相关文档
最新文档