FPGA学习经验总结

时间:2024.5.8

FPGA是什么?FPGA现状?怎样学习FPGA?

FPGA是什么?

FPGA是什么?FPGA现状?怎样学习FPGA?

FPGA是什么介绍

FPGA是现场可编程门阵列的简称,FPGA的应用领域最初为通信领域,但目前,随着信息产业和微电子技术的发展,可编程逻辑嵌入式系统设计技术已经成为信息产业最热门的技术之一,应用范围遍及航空航天、医疗、通讯、网络通讯、安防、广播、汽车电子、工业、消费类市场、测量测试等多个热门领域。并随着工艺的进步和技术的发展,向更多、更广泛的应用领域扩展。越来越多的设计也开始以ASIC转向FPGA, FPGA正以各种电子产品的形式进入了我们日常生活的各个角落。

FPGA人才需求

中国每年对于FPGA设计人才的需求缺口巨大,FPGA设计人才的薪水也是行业内最高的。目前,美国已有FPGA人才40多万,中国台湾地区也有7万多,而中国内地仅有1万左右,可见中国渴望有更多的FPGA人才涌现出来。

如何学习FPGA?

FPGA对我们如此重要,那么对于初学者来说,到底该如何学习FPGA呢?学习一门技术最好有合适的指导老师,这样对掌握FPGA技术更容易,可惜的是大部分的学校还未开设相关的课程,也缺少具有实践经验的老师,那么如何才能找到一种捷径帮助初学者快速学会如此具有竞争力的技术呢?

(1)掌握FPGA的编程语言

在学习一门技术之前我们往往从它的编程语言开始,如同学习单片机一样,我们从C语言开始入门,当掌握了C语言之后,开发单片机应用程序也就不是什么难事了。学习FPGA也是如此,FPGA的编程语言有两种:VHDL和Verilog,这两种语言都适合用于FPGA的编程,VHDL是由美国军方组织开发的,在19xx年就成为了IEEE的标准;而Verilog则是由一家民间企业的私有财产转移过来的,由于其优越性特别突出,于是在19xx年也成为了IEEE标准。VHDL在欧洲的应用较为广泛,而Verilog在中国、美国、日本、台湾等地应用较为广泛,作者比较推崇是Verilog,因为它非常易于学习,很类似于C语言,如果具有C语言基础的人,只需要花很少的时间便能迅速掌握Verilog,而VHDL则较为抽象,学习的时间较长。 作为在校大学生,学习Verilog的最好时期是在大学二年级开设《电子技术基础(数字部分)》时同步学习,不仅能够理解数字电路实现的方式,更能通过FPGA将数字电路得以实现。大三、大四的学生还可以进一步强化学习Verilog,建议以北京航天航空大学出版社出版的由夏宇闻教授编写的《Verilog数字系统设计教程(第二版)》作为蓝本,本书比较全面地、详细地介绍了Verilog的基本语法。如果是其他初学者,可以直接借助《Verilog数字系统设计教程(第二版)》和本书即能全面掌握Verilog的语法,这是学习FPGA的第一步,也是必不可少的一步。

(2)FPGA实验尤为重要

除了学习编程语言以外,更重要的是实践,将自己设计的程序能够在真正的FPGA里运行起来,这时我们需要选一块板子进行实验,一般的红色飓风的板子基本上可以满足大家的需求,大家感兴趣的不妨买一块做做实验。

(3)FPGA培训不可忽视

在有条件的情况下,参加FPGA的培训可以在短时间内大幅提升自己的水平,因为有老师带着可以省去了很多弯路。笔者在网上发现一个北京至芯科技FPGA培训班http://www.zxopen.com/ 感兴趣的朋友可以去看看,网上也有很多的视频资源,也可下下来看看.

我想只要大家想学FPGA,想从事FPGA工作,总会有办法找到适合自己的方法

如何学习FGPA

第一步:学习了解FPGA结构,FPGA到底是什么东西,芯片里面有什么,不要开始就拿个开发板照着别人的东西去编程。很多开发板的程序写的很烂,我也做过一段时间的开发板设计,我觉得很大程度上,开发板在误人子弟。不过原厂提供的正品开发板,代码很优秀的,可以借鉴。只有了解了FPGA内部的结构才能明白为什么写Verilog和写C整体思路是不一样的。

第二步:掌握FPGA设计的流程。了解每一步在做什么,为什么要那么做。很多人都是不就是那几步吗,有什么奇怪的?呵呵,我想至少有一半以上的人不知道synthesize和traslate的区别吧。

了解了FPGA的结构和设计流程才有可能知道怎么去优化设计,提高速度,减少资源,不要急躁,不要去在为选择什么语言和选择哪个公司的芯片上下功夫。语言只是一个表达的方式,重要的是你的思维,没有一个好的指导思想,语言用得再好,不过是个懂语言的人。

第三步:开始学习代码了。我建议要学代码的人都去Altera或Xilinx的网站上下原厂工程师的代码学习。不要一开始就走入误区

做fpga主要是要有电路的思想:

作为初学者,往往对器件可能不是熟悉,那么应该对于数字电路的知识很熟悉吧,fpga中是由触发器和查找表以及互联线等基本结构组成的,

其实在我们在代码里面能够看到的就是与非门以及触发器,不要把verilog和c语言等同起来,根本就是不同的东西,没有什么可比性,在写一句程序的时候应该想到出来的是一个什么样的电路,计数器 选择器 三态门等等,理解时序,逻辑是一拍一拍的东西,在设计初期想的不是很清楚的时候可以画画时序图,这样思路会更加的清晰,还有就是仿真很重要,不要写完程序就去往fpga中去加载,首先要仿真,尤其是对比较大型一点的程序,想象自己是在做asic,是没有二次机会的,所以一定要把仿真做好,还有很多新手对于语言的学习不知道选vhdl好还是verilog好,个人偏好verilog,当然不是说vhdl不好,反正写出来的都是电路,那当然就不要在语言的语法上面花太多的功夫了,verilog 言简意赅

assign always case if else 掌握这些几乎可以写出90%的电路了,

Verilog经验谈

规范很重要

工作过的朋友肯定知道,公司里是很强调规范的,特别是对于大的设计(无论软件还是硬件),不按照规范走几乎是不可实现的。逻辑设计也是这样:如果不按规范做的话,过一个月后调试时发现有错,回头再看自己写的代码,估计很多信号功能都忘了,更不要说检错了;如果一个项目做了一半一个人走了,接班的估计得从头开始设计;如果需要在原来的版本基础上增加新功能,很可能也得从头来过,很难做到设计的可重用性。在逻辑方面,我觉得比较重要的规范有这些:

1.设计必须文档化。要将设计思路,详细实现等写入文档,然后经过严格评审通过后才能进行下一步的工作。这样做乍看起来很花时间,但是从整个项目过程来看,绝对要比一上来就写代码要节约时间,且这种做法可以使项目处于可控、可实现的状态。

2.代码规范。

a.设计要参数化。比如一开始的设计时钟周期是30ns,复位周期是5个时钟周期,我

们可以这么写:

parameter CLK_PERIOD = 30;

parameter RST_MUL_TIME = 5;

parameter RST_TIME = RST_MUL_TIME * CLK_PERIOD;

...

rst_n = 1'b0;

# RST_TIME rst_n = 1'b1;

...

# CLK_PERIOD/2 clk <= ~clk;

如果在另一个设计中的时钟是40ns,复位周期不变,我们只需对CLK_PERIOD进行重新例化就行了,从而使得代码更加易于重用。

b.信号命名要规范化。

1) 信号名一律小写,参数用大写。

2) 对于低电平有效的信号结尾要用_n标记,如rst_n。

3) 端口信号排列要统一,一个信号只占一行,最好按输入输出及从哪个模块来到哪个模块去的关系排列,这样在后期仿真验证找错时后 方便很多。如: module a(

//input

clk,

rst_n, //globle signal

wren,

rden,

avalon_din, //related to avalon bus

sdi, //related to serial port input

//output

data_ready,

avalon_dout, //related to avalon bus

...

);

4) 一个模块尽量只用一个时钟,这里的一个模块是指一个module或者是一个entity。在多时钟域的设计中涉及到跨时钟域的设计中最好有专门一个模块做时钟域的隔离。这样做可以让综合器综合出更优的结果。

5) 尽量在底层模块上做逻辑,在高层尽量做例化,顶层模块只能做例化,禁止出现任何胶连逻辑(glue logic),哪怕仅仅是对某个信号取反。理由同上。

6) 在FPGA的设计上禁止用纯组合逻辑产生latch,带D触发器的latch的是允许的,比如配置寄存器就是这种类型。

7) 一般来说,进入FPGA的信号必须先同步,以提高系统工作频率(板级)。

8)所有模块的输出都要寄存器化,以提高工作频率,这对设计做到时序收敛也是极有好处的。

9) 除非是低功耗设计,不然不要用门控时钟--这会增加设计的不稳定性,在要用到门控时钟的地方,也要将门控信号用时钟的下降沿 打一拍再输出与时钟相与。

clk_gate_en -------- ----

-----------------|D Q |------------------| \ gate_clk

_out

| | ---------| )--------

-

------o|> | | | /

clk | -------- | ----

------------------------------------

10)禁止用计数器分频后的信号做其它模块的时钟,而要用改成时钟使能的方式,否则这种时钟满天飞的方式对设计的可靠性极为不利,也大大增加了静态时序分析的复杂性。如FPGA的输入时钟是25M的,现在系统内部要通过RS232与PC通信,要以rs232_1xclk的速率发送数据。不要这样做: always (posedge rs232_1xclk or negedge rst_n)

begin

...

end

而要这样做:

always (posedge clk_25m or negedge rst_n)

begin

...

else if ( rs232_1xclk == 1'b1 )

...

end

11)状态机要写成3段式的(这是最标准的写法),即

...

always @(posedge clk or negedge rst_n)

...

current_state <= next_state;

...

always @ (current_state ...)

...

case(current_state)

...

s1:

if ...

next_state = s2;

...

...

always @(posedge clk or negedge rst_n)

...

else

a <= 1'b0;

c <= 1'b0;

c <= 1'b0; //赋默认值

case(current_state)

s1:

a <= 1'b0; //由于上面赋了默认值,这里就不用再对b、c赋值了(b、c在该状态为0,不会产生锁存器,下同) s2:

b <= 1'b1;

s3:

c <= 1'b1;

default:

...

...

3.ALTERA参考设计准则

1) Ensure Clock, Preset, and Clear configurations are free of glitch

es.

2) Never use Clocks consisting of more than one level of combinatori

al logic.

3) Carefully calculate setup times and hold times for multi-Clock sy

stems.

4) Synchronize signals between flipflops in multi-Clock systems when

the setup and hold time requirements cannot be met.

5) Ensure that Preset and Clear signals do not contain race conditio

ns.

6) Ensure that no other internal race conditions exist.

7) Register all glitch-sensitive outputs.

Synchronize all asynchronous inputs.

9) Never rely on delay chains for pin-to-pin or internal delays.

10)Do not rely on Power-On Reset. Use a master Reset pin to clear al

l flipflops.

11)Remove any stuck states from state machines or synchronous logic.

其它方面的规范一时没有想到,想到了再写,也欢迎大家补充。

====================================================================================

时序是设计出来的

我的boss有在华为及峻龙工作的背景,自然就给我们讲了一些华为及altera做逻辑的一些东西,而我们的项目规范,也基本上是按华为的那一套去做。在工作这几个月中,给我感触最深的是华为的那句话:时序是设计出来的,不是仿出来的,更不是湊出来的。

更多相关推荐:
高中学习方法总结

1、课前预习,找出问题,听课时才能有重点的听。2、认真听讲:将老师将的精华抓住。课上一分钟,课下半天功。3、记笔记:基本概念不用记,而老师对概念的解释特别要记。老师讲例题时,将题抄好之后,就听老师分析、解题,最…

学生会学习部工作总结

学生会是学生自我管理自我约束的团体,它在学生的日常工作中起到了积极有效的作用,而作为学生会的重要组成部分的学习部的作用更是不可磨灭。学生的主要工作是学习,而我们学习部正是本着为大家的学习服务的原则在系党团总支的…

学习工作总结

半年的实习期即将结束了,这是我人生中弥足珍贵的一段经历,这半年时间,是我将理论知识应用到实践的第一阶段,也是公司对我能力的一次检验,更是我能否立足于这个充满挑战社会的一次考验。在各级领导及同事们特别是指导老师的…

年级会期中总结学习经验介绍发言稿

年级会期中总结学习经验介绍发言稿亲爱的老师、同学们:大家好!能在本次年级会上做学习方法介绍,我感到十分荣幸。下面请允许我将自己在如何提高学习效率方面所积累的经验方法介绍给大家。首先,要想从根本上提高学习效率,就…

学习经验交流会总结

学习经验交流会活动总结本学期的学习生活即将结束,每位同学对自己的学习,生活,就业,专业,考试,考研等方面都存在一定的问题和疑惑,为了帮助同学解决这些问题和疑惑,我们特举办此次学习经验交流会。数理学院学生会于20…

学习经验交流会总结

应111-2团支部开展“学习经验交流会”团日活动大一上学期对于我们新生来说注定是懵懂而紧张的一个学期。9月份,我们刚刚开学,紧接着是新课程的开始教授,同学们都找不到一个适合自己学习的节奏跟方式,但考试的紧迫任务…

我的英语学习经验总结

我的英语学习经验总结很高兴写下自己大学三年对英语学习的总结在这里我希望广大外语爱好者能够从我的总结与认识中更加了解英语同时也希望你们可根据自己所处学习阶段灵活调整学习方法也希望我的学习总结给你们一点帮助这是我大...

交流生学习经历总结

交流经历总结报告时光飞逝从我去年7月初离开济南到今年9月初重回济南转眼间已逾一年另两个月了就是说我已经完完全全的结束了我为期一年的交流生任务虽然失去了与我本班同学进一步相处加深感情与互相了解的机会但是这一年的外...

学习经验交流座谈会活动总结

学习经验交流座谈会活动总结我院学习部于本学期第七周周三10月13日下午230在大一新生各班组织开展了学习经验交流座谈会活动旨在使我院大一新生能以优良的心态适应从高中到大学的变化积极投入到我院学习氛围的建设当中为...

小组合作学习经验总结

小组合作学习经验总结莱芜市实验学校刘璐小组合作学习是新课程课堂教学中应用得最多的学习方式它是通过学生分工合作共同达到学习目标的学习方式其实质是让每一位学生都学会主动学习养成成良好的学习品质和行为习惯本学期在学校...

高一学习心得或者学习经验

总结高一学习方法有哪些学习效率这东西我也曾和很多人谈起过我们经常看到这样的情况某同学学习极其用功在学校学回家也学不时还熬熬夜题做得数不胜数但成绩却总上不去其实面对这样的情况我也是十分着急的本来有付出就应该有回报...

县卫生局开展学习推广“绥江经验”活动工作总结

县卫生局开展学习推广“绥江经验”活动工作总结为深化“四群”教育,提升卫生系统群众工作水平,全面学习推广“绥江经验”活动,现将我县卫生系统学习推广活动情况总结如下:一、领导重视,组织到位我局领导非常重视学习推广“…

学习经验总结范文(3篇)