一位FPGA高人的文章
周立功高工的FPGA宝贵实战经验与FPGA编程规范
2
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;//赋默认值
如果在另一个设计中的时钟是 40ns,复位周期不变,我们只需对 CLK_PERIOD 进行 重新例化就行了,从而使得代码更加易于重用。
1.2.2 信号命名要规范化
1) 信号名一律小写,参数用大写。 2) 对于低电平有效的信号结尾要用_n 标记,如 rst_n。 3) 端口信号排列要统一,一个信号只占一行,最好按输入输出及从哪个模块来到哪 个模块去的关系排列,这样在后期仿真验证找错时后 方便很多。如:
11)状态机要写成 3 段式的(这是最标准的写法),即
... always @(posedge clk or negedge rst_n) ... current_state <= next_state; ...
工程技术笔记
©2010 Guangzhou ZHIYU AN Electronics CO., LTD.
case(current_state) s1: a <= 1'b0;//由于上面赋了默认值,这里就不用再对 b 、c 赋值了(b、c 在该状态为 0,不会产生锁存器,下同) s2: b <= 1'b1; s3: c <= 1'b1; default: ...
...
1.3 ALTERA 参考设计准则
fpga心得体会
fpga心得体会FPGA(Field Programmable Gate Array)是一种可编程逻辑设备,它具有强大的逻辑处理能力和灵活的可编程性,使得它在硬件设计领域得到广泛应用。
我在学习和使用FPGA的过程中收获了很多,下面就来分享一些我对FPGA的心得体会。
首先,FPGA具有极高的逻辑密度和计算性能,能够满足复杂的硬件设计需求。
相比于传统的固定功能芯片,FPGA具备了逻辑电路可编程的特性,使得它能够灵活地适应多种应用场景。
在我的项目中,我需要设计一个支持多种协议通信的嵌入式系统,而FPGA正是满足了这个需求。
通过在FPGA上编写逻辑代码,我成功实现了多个协议的处理和控制,大大提高了系统的灵活性和扩展性。
其次,FPGA具备了高度并行处理的能力,可以同时运行多个任务。
相比于单纯的软件实现,FPGA可以通过在不同的逻辑区域实现不同的功能模块,从而实现并行处理。
这对于需要高性能计算的应用非常有优势,如图像处理、音视频编码等。
在我的项目中,我利用了FPGA的并行处理能力,成功实现了一个高性能的图像处理算法,大大提高了系统的处理速度和效率。
第三,FPGA具备了较高的灵活性和可重构性,可以随时对逻辑进行修改和优化。
在硬件设计过程中,往往需要多次迭代和优化,而FPGA的可重构性使得这一过程变得更加高效。
通过修改逻辑代码和重新编程,我可以快速对设计进行调整和优化,并实时验证效果,减少了开发周期和成本。
另外,FPGA支持硬件和软件的协同设计,可以实现更灵活的系统架构。
在我的项目中,我采用了硬件和软件的结合,通过在FPGA上实现一些关键模块并通过软件控制,使系统具备了更高的通用性和扩展性。
FPGA还可以与其他处理器、外设等硬件组件进行连接,形成完整的系统。
这种协同设计方式使得我能够更好地解决具体的问题,并满足系统的要求。
最后,我发现学习和使用FPGA需要具备一定的硬件和软件知识,例如数字逻辑设计、Verilog/VHDL语言等。
fpga学习心得体会
fpga学习心得体会首先,所谓的并行思想就是,几个工作模块在同一个时钟的作用下动作,并且模块之间也有相互的联系,但彼此不影响,共同完成一项工程。
在FPGA中的延时和之前单片机中的延时,有异曲同工之妙,但两者之间却有着各自独特的韵味,首先,在fpga中,因为每个时钟脉冲都是有所记录的,并且会作用到每一个工作模块,每来一个脉冲整个电路就会跟着进行一次同步动作,因此很容易就可以控制某个动作的完成时间,比如之前做过的一个键盘,用到的扫描就是如此,设置好一个计数模块,计算好所需的时间,当一切都设置完后,在工作时,就可以很容易的实现精确延时,因为计数模块和键盘扫描模块是同时开始同时计脉冲数的,要想从第一排扫描进入第二排扫描就必须等待脉冲计数完毕,在这期间扫描模块就会不停地扫描第一行,第二排也是如此,这样每一次的扫描时间都是确定的,不仅实现延时,而且更加精确,而且也不会影响整个电路的运行时间。
而在单片机中实现延时,由于是串行思想,所以,延时就是多条空指令的累加,提前计算好运行一条空指令所需的时间,最后得出要想实现延时所需的指令条数,以实现延时的目的,这样的延时,在对整个程序时间要求不高的地方用起来很方便,而且执行性很高,但是这样的延时有一个最大的弊端,就是很浪费资源,因为在延时的这段时间里,什么都不能干,仅仅是执行一些空语句,一次在一些对整个系统工作时间要求很高的地方以及对资源要求充分利用的地方,更多的会去选择用并行。
还有就是通过之前与学长们的交流,改正了我之前的一个想法,把完成计划放在首位,但其实不然,在这个假期里,安排的那么多学习任务,其目的就是为了让我们更加熟练的应用EDA开发软件,以及通过对许多模块的上机操作,更加深入的了解FPGA的编写思想,比如,FPGA的并行思想、它的逻辑设计思想、它的逻辑硬件思想、能够深深地体会到现在用verilogHDL所编的不是像之前单片机中的程序,而是在用语言描述一个庞大的硬件电路,并通过这些电路来解决逻辑问题,实现逻辑思想。
fpga个人心得体会
fpga个人心得体会FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,它可以根据用户的需要重新进行编程,以实现不同的功能。
在我个人使用FPGA的过程中,我深刻地体会到了它的优势和魅力。
首先,FPGA具有灵活性和可重构性。
相较于传统的专用集成电路(ASIC),FPGA可以在设计完成后进行现场编程,而无需重新设计和制造芯片。
这意味着我可以根据具体的需求对FPGA进行修改和优化,使其更适合特定的应用场景。
无论是改变设计逻辑、增加新的功能,还是优化性能和功耗,FPGA都可以随时进行调整,极大地提高了开发的灵活性和效率。
其次,FPGA具有并行计算能力。
相对于传统的通用处理器,FPGA可以通过配置并行计算单元实现更高的运算速度。
这对于需要高性能计算的应用非常重要,例如图像处理、信号处理和机器学习等。
我曾经使用FPGA进行图像处理的项目,通过合理地设计硬件架构和并行计算的布局,显著提升了处理速度和实时性。
这使我意识到FPGA在数据密集型应用中的巨大潜力。
此外,FPGA还具有较低的功耗和高效能。
FPGA的逻辑元件采用可编程的查找表(Look-Up Table)实现,相对于ASIC的固定逻辑电路,FPGA能够根据具体的需求进行灵活布局,减少了功耗的浪费。
在一些对功耗要求较高的应用中,FPGA能够提供更好的性能-功耗比,降低了系统的能源消耗。
与此同时,FPGA的设计流程也给我提供了很多的挑战和机会。
由于FPGA的可编程特性,需要我充分理解硬件描述语言(HDL)和硬件设计流程,掌握相关的设计工具和开发环境。
在这个过程中,我不仅提高了自己的技术能力,还学到了如何进行良好的工程管理和调试。
这些宝贵的经验对于今后的工作和学习都将会带来很大的帮助。
然而,FPGA的使用也存在一些挑战和限制。
首先,相较于通用处理器,FPGA的开发成本较高。
设计FPGA的逻辑电路需要耗费大量的人力、时间和资源。
fpga高手心得
刚才开始接触逻辑设计很多人会觉得很简单:因为verilog的语法不多,半天就可以把书看完了。但是很快许多人就发现这个想法是错误的,他们经常埋怨综合器怎么和自己的想法差别这么大:它竟然连用for循环写的一个计数器都不认识! 相信上一段的经历大部分人都曾有,原因是做逻辑设计的思维和做软件的很不相同,我们需要从电路的角度去考虑问题。 在这个过程中首先要明白的是软件设计和逻辑设计的不同,并理解什么是硬件意识。 软件代码的执行是一个顺序的过程,编绎以后的机器码放在存储器里,等着CPU一条一条的取指并执行;因此软件设计中经常会带有顺序处理的思维。而逻辑设计则不同,我们设计的是数字电路,它是由很多很多的与非门及D触发器构成的,上电之后所有与非门和D触发器都同时工作,不会因为A触发器的代码描述在B触发器之前A触发器就是先工作,事实上,RTL级代码的代码先后顺序在综合成网表文件后这种顺序就消失了,取代的是基本逻辑电路之间的互联关系描述;因此逻辑设计需要的是一种并发的思维,我们也需要用并发的思维去考虑电路的设计。 当然,我们设计的电路功能一般都有先后顺序的关系,如果这种顺序不能通过代码的先后顺序来实现,那么要怎么完成这一功能呢?在逻辑设计中,我们所说的先后顺序都是基于时间轴来实现:它的承载体就是时序逻辑,也就是那些触发器。 硬件意识的东西网上谈论的已经很多,这里就不再多说了。 其次就是要熟悉基本电路的设计。 基本的电路不是很多,也就是D触发器、计数器、移位寄存器、状态机、多路选择器、译码器等几种,所有复杂的电路都可由这些基本的电路构成。高手水平高的体现并不是他能写出一些很奇特的电路,相反,水平高是体现在他们总能将复杂的电路用这些很朴素的基本电路去描述。甚至,你会发现他们的代码基本上是由if...else、case这些语句构成的,朴素的让你觉得奇怪。 我认为,初学者在入门的时候,对于基本电路的设计应该固定化、标准化,每种电路该用什么样的代码描述,应该要固定、统一,尽量少一些花哨的东西。说来这里我举个例子。 以前有几个朋友因为仿真有问题请我帮忙找问题。他们的代码写的很乱,出现了很多种稀奇古怪的电路,一看头都大了,只好建议他们按照标准的电路重新写下代码。结果过了半天,他们就和我说问题不见了。 所以,高手们喜欢用简单的代码是有道理的,电路的标准化和规范化可以减少许多稀奇古怪的问题,问题少了他们也就能在别人加班的时候回家多睡回觉,呵呵。总之,简单的、朴素的就是最好的。 最后是代码的规范化。 代码规范主要是代码书写、命名等规范。比如不能用TAB键空格、低电平有效信号命名时加_n(如rst_n等)、每行只能写一行代码等。这些东西网上也很多,这里只是强烈建议大家要严格遵守,像华为等公司如果代码不规范的话肯定是要打回去重写的。 入门 结合一两个小项目把上面所说的事情都做好后,差不多就可以进入入门的阶段了(要求稍微严格了一点点,呵呵)。 入门阶段要学的有:设计时序;理解约束的原理及如何加约束。
FPGA设计范文
FPGA设计范文FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,它允许工程师在硬件设计完成之后对其重新编程。
FPGA设计是指使用FPGA器件进行数字电路设计的过程。
FPGA设计相对于ASIC设计来说,具有更高的灵活性和可重构性。
在ASIC设计中,一旦芯片设计完成并制造出来,就无法进行修改。
而在FPGA设计中,工程师可以通过重新编程FPGA来修改电路功能,从而实现快速的原型设计和迭代开发。
FPGA设计的基本步骤包括需求分析、电路设计、验证和实现。
首先,工程师需要对设计的需求进行分析,明确所需的功能和性能。
然后,根据需求进行电路设计,包括选择适当的逻辑元件、设计电路结构和连接方式等。
设计完成后,需要对电路进行验证,确保其功能和性能的正确性。
最后,将设计转化为FPGA的配置文件,并将其加载到FPGA芯片中进行实现。
在FPGA设计中,工程师通常使用硬件描述语言(HDL)进行电路设计。
常用的HDL语言包括VHDL和Verilog。
HDL语言可以描述电路的结构和行为,方便工程师进行设计和验证。
FPGA设计可以应用于各种领域,包括通信、图像处理、嵌入式系统等。
在通信领域,FPGA可以用于协议处理、信号调制解调、信号编解码等。
在图像处理领域,FPGA可以用于图像滤波、边缘检测、图像压缩等。
在嵌入式系统领域,FPGA可以用于实现各种外设接口、处理器核等。
FPGA设计的优点包括灵活性、可重构性和高性能。
由于FPGA设计可以在硬件制造之前进行修改,可以快速实现原型设计和迭代开发。
同时,FPGA器件具有并行处理能力和可定制的硬件逻辑,可以实现高性能的计算和处理。
然而,FPGA设计也存在一些挑战。
首先,FPGA设计需要掌握复杂的硬件描述语言和设计方法。
其次,FPGA设计的成本相对较高,包括FPGA器件的价格和设计工具的许可费用。
此外,FPGA设计的性能受限于器件的资源和时钟频率。
FPGA 发展之路- 将功耗和价格降低一万倍
FPGA 发展之路: 将功耗和价格降低一万倍
作者:Steve Trimberger,赛灵思公司,美国电子电气工程师协会(IEEE) 研究员、美国计算机协会(ACM) 院士、美国国家工程院院士FPGA 器件自问世以来,已经经过了几个不同的发展阶段。
驱动每个阶段发展的因素都是工艺技术和应用需求。
正是这些驱动因素,导致器件的特性和
工具发生了明显的变化。
FPGA 经历了如下几个时代:
●发明时代;
●扩展时代;
●积累时代;
●系统时代。
赛灵思于1984 年发明了世界首款FPGA,那个时候还不叫FPGA,直到1988 年Actel 才让这个词流行起来。
接下来的30 年里,这种名为FPGA 的器件,在容量上提升了一万多倍,速度提升了一百倍,每单位功能的成本和能耗降低了一万多倍(见占位面积变得不再像发明时代时那么宝贵。
现在,占位面积可让位于性能、特性和易用性。
更大的FPGA 设计需要具有自动布局布线功能的综合工具。
到上世纪90 年代末,自动综合、布局和布线已经成为设计流程的必要步骤。
FPGA 公司的命运对EDA 工具的依赖程度不亚于对FPGA 功能的依赖程度。
最重要的是,实现容量翻番和片上FPGA 逻辑成本减半的最简单方法是采用新一代工艺技术节点,因此,尽早采用新的工艺节点意义非凡。
基于SRAM 的FPGA 在这个时期实现了明显的产品优势,因为它们率先采用了每种新工艺节点:基于SRAM 的器件可立即使用密度更高的新工艺,而反熔丝在新节点上的验证工作则额外需要数月甚至数年时间。
基于反熔丝的FPGA。
fpga心得体会
fpga心得体会
做了5年的FPGA了,做完一FPGA项目后的心得体会。
手中经过的项目也不在少数,就在此刻又一个FPGA项目宣告结题,好多感受趁着现在还新鲜着写出来和大家一起分享不对之处希望得到大家的指正另外1234并没有绝对顺序都是有感而发随性而写。
1.要和人配合以我们做硬件的工程师为例测试的时候一般都需要软件的配合一个对硬件来说无比复杂的工作可能在软件工程师看来就是几行简单的代码所以要和人配合:多听听别人的意见这样必然可以产生新的know-how从而加快测试和开发的速度退一步讲至少没有坏处。
2.测试还是要别人来做开发者看待自己的产品有如看待自己,大多是没有勇气去发现缺点的。
一是源自自尊心,二是为了避免额外的工作。
所以就算有问题如果不严重就藏着掖着但是这对项目来说是不行的,所以测试verification,一定要旁人来做。
3.多点时间思考。
出现问题后不要急着修改,要思考推测可能的原因,想清楚后把这些可能的原因都用debug pin或者chipscope引出来。
4.注意复用已有的debug pin很多时候在测试过程中产生了大堆测试信号但是时间一长就忘了复用。
实际上,当一个问题产生的时候通过反复观察已有的debug pin或许足以发现问题根源而无需再引出新的Pin,并浪费时间去综合和PAB。
Altera资料_玩转FPGA
玩转FPGA作者信息:Dylan Wang(王欣) is the Senior Applications Engineer from Altera focus on the DSP field. After graduated from Fudan University, he started to work as the ASIC designer, and gained several years of design experience. Then went to the State University of New York for the further research work, major based on the DSP algorithm design and implement.He joined Altera in 2005, focused on the DSP field. As the applications engineer, provides the technical support to the customer on web. With the experience on both of algorithm and implementation, Dylan Wang is familiar with the advanced DSP design solution to implement the algorithm into hardware.原文分为多个部分1 前言一直以来都想写点什么,关于FPGA设计,因为有点不太服气。
为什么同样是设计,有些人可以好像玩一样的摆弄,photoshop,很时尚,很跩。
有些人可以用所谓的广告创意玩弄人们的智商。
而硬件工程师则一律的被人以为呆板没有创意。
我是说,为什么我们不可以享受设计本身的乐趣,发挥我们自己的创意,为什么就不可以很随心所欲的摆弄我们手里的那些玩具到处炫耀,让美女们看着我们的眼睛都发光?难道一定就是那些冷冰冰的Datasheet, 死板的Schedule, 老板的猪肝脸?所以我写这些东西的目的,就是想让大家可以和我一起起来,玩转FPGA。
一个牛人对FPGA的理解--太可怕了!
一个牛人对FPGA的理解--太可怕了!看到的一个牛人对FPGA的理解,看来FPGA太厉害了!FPGA多数情况下相比ASIC而言,芯片成本大概是100倍的关系,最大的浪费在LUT这里,做出一个LUT-4需要16位存储单元,再加一个4-16译码器,以及其它的连线资源,做成一个LUT-4,至少需要16&TImes;6+8个晶体管。
那么做一个4输入逻辑,设计的好的话如果用晶体管来做最多使用不超过8个晶体管。
假设用LUT来做,相当于用了13倍的晶体管来做同样一件事。
MUXF和MUXCY占的晶体管反而少很多,用这些部件速度会快很多。
LUT本质上是一个16bit存储器,FD是1bit存储器,FPGA本质上大量的存储器,当把FPGA的LUT和FD尽量用于存储器时,资源利用率就高。
FPGA的优势就在存储带宽上,想想普通一个spartan-3A,20k个lut,每个运行到200MHz,相当于4000Gb/s的带宽,一个先进的CPU的一级缓存的带宽都比这差得远。
现在最先进的FPGA,性能相当于这个性能的200倍,想想看这是怎么一个BT的野兽。
我的思想是,做同一个设计,尽量把逻辑转化为分布式存储器操作。
在一个最优化的逻辑设计里,把逻辑转化为存储器操作后,资源利用率差不多还可以可以提升10倍。
当然这个转化过程就要靠悟了。
一直以来我强调要学好内功,就是在这些转化过程中体现价值。
另外,那个存储的事情,由于公司政策和职务的关系,现在不能做出来,这不是技术问题,技术方案3年前就有了,但已经销毁,再等时机。
顺便提一下,这个存储的基本思想是大家都知道的,类似LZW压缩,但是样本不是64k而是非常大,大到2的64次方,检索过程复杂度极大,我只是把复杂度最大的检索过程转移到最另一个问题的解决上去了。
检索过程的思想是解决搜索引擎问题的,做存储只是把检索过程用在LZW压缩上。
最近验证了这个思想,资源利用率一下子提升了8倍,我都觉得很恐怖,在spartan-3A中,2000个silices相当于20万门可以实现16个带PLBDMA和PTP的以太网控制器MAC,以前最优化设计只能做2个,xilinx官方的只能做0.5个.第一次思想进步,资源利用率提高了4倍,第二次进步,又提高了8倍.思想这武器太强大了,我都觉得可怕.下一步将利用这个思想做一些BT的东西.。
我与赛灵思FPGA的故事ZYNQ使用总结概述
我与赛灵思FPGA的故事ZYNQ使用总结概述作为一种强大的可编程逻辑器件(FPGA),赛灵思(Xilinx)的ZYNQ系列芯片成功地将FPGA和嵌入式处理器相结合,为嵌入式系统设计带来了许多优势。
在过去的几年里,我有幸与赛灵思的ZYNQ系列芯片一起工作,并积累了很多宝贵的经验。
在这篇文章中,我将总结并概述我与赛灵思FPGA的故事,分享我在使用ZYNQ芯片时的心得体会。
首先,我要赞扬ZYNQ芯片在嵌入式系统设计中的灵活性和可扩展性。
由于其结合了硬件和软件的能力,ZYNQ芯片可以通过硬件描述语言(HDL)来实现各种复杂的功能模块,并通过嵌入式处理器来编写软件驱动程序。
这使得设计人员可以使用FPGA的灵活性来实现高度定制化的硬件功能,并通过嵌入式处理器来实现软件控制和处理能力,从而满足不同应用的需求。
其次,ZYNQ芯片的可编程性使得开发过程更加高效和灵活。
相比于传统的ASIC设计过程,FPGA可以通过重新编程来修改设计,并且具有快速原型开发和在线修改的能力。
这为我在项目开发过程中提供了很大的灵活性,可以根据需求做出及时的修改和优化。
此外,赛灵思还提供了丰富的开发工具和支持资源,如Vivado开发套件和技术支持论坛,使得开发者可以更快速地上手并解决问题。
在实际的项目开发中,我发现ZYNQ芯片在图像和信号处理应用中具有很大的潜力。
通过将图像处理算法实现在FPGA中,可以实现高性能的实时图像处理,如边缘检测、目标检测和图像滤波等。
而且,由于ZYNQ芯片集成了处理器核心,可以实现图像算法与其他处理任务的协同工作,如图像传输、数据存储和通信等。
这为实现全面的图像处理系统提供了很大的便利。
最后,我也遇到了一些挑战和限制。
首先,ZYNQ芯片的学习曲线相对较陡峭,特别是对于没有FPGA经验的人来说,可能需要花费一些时间来学习和理解FPGA的基本原理和开发流程。
其次,ZYNQ芯片的资源有限,特别是片上存储器和算法实现的计算资源。
一个成熟的FPGA不仅是熟悉FPGA就好
一个成熟的FPGA不仅是熟悉FPGA就好
我做FPGA开发9年多了,算是一个大龄工程师了。
期间接触过一些项目管理和技术支持之类的工作,不知道为什幺,脱离研发做这些工作我总觉得不踏实,也许天生就适合死磕技术。
就是不知道继续这幺死磕下去会怎幺样,曾经也很迷茫,生怕随着年龄的增长,精力比不上年轻人,加班熬夜啥的心有余而力不足,会被逐渐淘汰。
迷茫啥的就不细谈了,好在我也想了很多,逐渐想明白了很多,这篇文章,我一定要给做FPGA的兄弟姐妹打打气。
我现在最庆幸是事情就是从进入职场到现在一直是FPGA开发,我感觉,做FPGA开发这行经验也是很重要的,入门简单,想提升会越来越难。
做FPGA开发不只是会写写verilog和VHDL代码这幺简单,我记得刚学习verilog的时候,光是要搞明白哪些语句可以综合,哪些语句不可以综合,就花费了很长时间。
硬件开发语言是要映射成数字逻辑电路的,随着做FPGA的时间长了,写代码的时候脑子里都是0/1的翻转,会逐渐映射出一个个与非门、触发器、存储器,以及他们之间的连线,并且时时刻刻考虑怎样设计才能保证面积最小或者延迟最低。
FPGA:22年从配角到主角
FPGA:22年从配角到主角bjxiong 发表于 - 2007-8-23 15:42:00我相信,以后的天下,必将是FPGA的!任何一个从事后看来很成功的新事物从诞生到发展壮大都不可避免地经历过艰难的历程并可能成为被研究的案例,FPGA也不例外。
1985年,当全球首款FPGA产品——XC2064诞生时,注定要使用大量芯片的PC 机刚刚走出硅谷的实验室进入商业市场,因特网只是科学家和政府机构通信的神秘链路,无线电话笨重得像砖头,日后大红大紫的Bill Gates正在为生计而奋斗,创新的可编程产品似乎并没有什么用武之地。
事实也的确如此。
最初,FPGA只是用于胶合逻辑,从胶合逻辑到算法逻辑再到数字信号处理、高速串行收发器和嵌入式处理器,FPGA真正地从配角变成了主角。
在以闪电般速度发展的半导体产业里,22年足够改变一切。
“在未来十年内每一个电子设备都将有一个可编程逻辑芯片”的理想正成为现实。
从2μm到65nm1985年,Xilinx公司推出的全球第一款FPGA产品XC2064怎么看都像是一只“丑小鸭”——采用2μm工艺,包含64个逻辑模块和85000个晶体管,门数量不超过1000个。
22年后的2007年,FPGA业界双雄Xilinx和Altera公司纷纷推出了采用最新65nm工艺的FPGA产品,其门数量已经达到千万级,晶体管个数更是超过10亿个。
一路走来,FPGA在不断地紧跟并推动着半导体工艺的进步——2001年采用150nm 工艺、2002年采用130nm工艺,2003年采用90nm工艺,2006年采用65nm工艺。
在上世纪80年代中期,可编程器件从任何意义上来讲都不是当时的主流,虽然其并不是一个新的概念。
可编程逻辑阵列(PLA)在1970年左右就出现了,但是一直被认为速度慢,难以使用。
1980年之后,可配置可编程逻辑阵列(PAL)开始出现,可以使用原始的软件工具提供有限的触发器和查找表实现能力。
FPGA感悟
FPGA感悟自从接触和认识FPGA以后,自由电子科技坚定的选择了FPGA 器件作为我们创新和实现自身价值的承载平台,对此,我想从以下几个方面介绍一下。
1. 对FPGA的认识,为什么要选择FPGA现在的FPGA器件在电子行业中是一颗明星,这是一种正在不断采用新的半导体制造工艺,逻辑容量不断增加,应用领域不断拓展,器件成本不断下降的器件,FPGA厂商激烈的竞争使开发软件和方法不断的进步,是一个正在盘古开天时期的事物。
很多人对此的解释是FPGA拥有很大的灵活性,在半导体制造工艺的NRE不断增加、应用需求不断变更、品种要求多而数量要求少的现实情况下,FPGA是一个最佳选择,这正是现在FPGA厂商们宣传时耳目能详的陈词。
我们认为,FPGA在电子产业和信息产业上的地位并不是这么简单。
实际上如果通过我们对计算机发展的历史、软件发展历史的认识,可以推断FPGA器件是一方向性的创新,几千年以前我国的祖先们感悟了蕴涵在简单的阴、阳中的事理有了太极,阴阳可以生万物。
一百多年前的布尔代数使我们从数学上有了坚实的基础,从机械计算机到电子计算机的演变中,我们得到了冯.诺依曼型的程序存储类的计算机体系,并在当代发展为及至,极大的推动了人类社会的前进。
冯.诺依曼计算机体系是在CPU硬件的基础上加上千变万化的软件,软件的灵活性使计算机渗透到各行各业,在20世纪后半页演绎了气势恢弘的发展过程,造就了象比尔.盖茨那样的天才和巨富。
但我们要认识到在这个体系中,由一部分人从事低层硬件,CPU架构体系的设计,大部分应用工程师在相对固定的硬件系统上从事开发,这种模式在现在依然拥有无与伦比的活力和现实作用,在这里我提醒一点,在这个体系中,对大部分工程师来说,一半固定,硬件CPU是不可编程的,另一半灵活是可编程的(软件),很自然我们会想联想到如果两个部分都是可编程的那会是怎么一种情况呢?很好,现在有一种器件来了,这就是FPGA,它代表的就是硬件的编程。
FPGA夏宇闻Verilog学习笔记1
V erilog 数字系统设计教程 学习笔记1FPGA 学习由于工作上的需要,现在又开始学习新的芯片,估计以后会在FPGA 和DSP 这两个方向有发展,以前学的ARM 现在可以待业休息了等待新的起点。
虽然大学的时候学习过《EDA 技术与VHDL 》这门课程,但是我至今才知道VHDL 语言是FPGA 的设计语言之一。
有一个好的指导老师是非常重要的,进入公司后由于实行的是导师制,指导我的导师就让我看《V erilog 数字系统设计教程》,学习一样东西有一本好书是非常重要的,就如同学习C 语言看谭浩强老师的教程,同样学习FPGA 看夏宇闻老师的书一样,确实学到了很多东西,而且会一直研读。
不管学习单片机,ARM ,DSP 还是FPGA 上机练习是非常重要的,所以在学习夏宇闻老师的教程时我就把书中的上机练习题自己练习一遍,并做简要的记录。
设计平台:Quartus II 11.1sp2 Web Edition 仿真平台:ModelSin10.0c Starter Editon上机练习一 简单的组合逻辑设计由于是第一个练习,我会将具体的软件使用过程都列出来,方便同我一样的学习者学习。
1、建立一个新的工程弹出对话框,直接Next设置工程目录F:/FPGA V erilog test/lesson1,工程名compare,顶层设计模块名compare如果你已经有一些要加入工程的文件,可以再该步将文件加入到工程中,没有则直接Next这一步是选择你需要的设计芯片,由于我们只学习V erilog语言,所以芯片选择随意V erilog 数字系统设计教程 学习笔记3选择仿真语言和综合工具最后显示我们选择的信息,确认填写是否正确2、一些参数的设置设置未使用引脚属性,选择Device and Pin OptionsV erilog 数字系统设计教程 学习笔记5设置为输入三态3、这里我们可以编写测试程序选择V erilog HDL File编写测试程序保存到工程目录下V erilog 数字系统设计教程学习笔记4、进行程序的编译和综合编译结果75、进行testbench的设计,运行这样就在F:\FPGA V erilog test\lesson1\simulation\modelsim文件夹下生成一个compare.vt的文件,我们打开该文件,并进行内容修改修改前V erilog 数字系统设计教程学习笔记全部覆盖,写入自己的测试代码6、testbench的相关设置9编译testbench设置Test Benches…V erilog 数字系统设计教程学习笔记新建Ok,设置完成7、进行仿真测试11直接启动ModelSim,得到仿真结果放大V erilog 数字系统设计教程学习笔记由波形图可以知道,我们编写的比较器是正确的。
时间与空间的艺术——走近神秘的FPGA工程师
时间与空间的艺术——走近神秘的FPGA工程师[作者:Mallon]无论是产品的设计研发阶段,还是在生产测试环节,很多人对FPGA都不会感到陌生,可以说我们公司几乎所有的产品中都有FPGA的身影,然而即使是在研发体系,我相信也没有多少人真正的了解FPGA,哪怕是仅限于这个名词的含义,至于其背后的那群FPGA工程师就显得更加神秘了。
大家神秘归神秘,但是共识确实有的,那就是FPGA开发部作为公司研发体系的核心成员之一,为公司产品研发能力的持续提升做出了不可替代的贡献。
今天让我们一起走近这个神秘群体,去了解他们为何能够创造一个又一个产品奇迹。
正如标题所述,FPGA是一门时间与空间的艺术,这与我们比较熟悉的纯软件开发有着相似之处,却有着本质的不同。
在特定的软件程序开发中,工程师时常会用灵活多变的内存空间换取更加高效目标程序指令以提高程序运行的时间效率,这像是一种软件层面的舞蹈艺术,而FPGA的编程之美不仅仅在于它本身就提供了这种空间与时间相互转换的艺术舞台,更在于它极大地丰富和拓展了设计之中的空间与时间之间的精妙关系,使设计者可以定制自己的所需的硬件平台,非常灵活地完成软件与硬件之间的设计转化。
通过将指令驱动的目标程序变成由硬线电路驱动或者软硬件协同驱动的高效系统,为产品功能和性能的可持续提升创造出更多的可能。
简而言之,FPGA就是一个既可以设计硬件也可以设计软件的神器!FPGA工程师手握如此神器,要驾驭好它可不是一件容易的事情,仅仅一大堆设计所需开发工具要掌握就会吓退一大批慕名而来者,即使熟练掌握了工具,要想在这茫茫的逻辑阵列中构筑起可靠的数字电路系统,还要面临大量繁冗的逻辑设计、仿真、调试等琐碎工作。
可能一个时钟的错位,就要重新做流水设计,可能一个控制信号的增减,就会给原有的电路系统造成状态混乱。
因此FPGA工程师必须要花大量的时间对设计需求进行论证,严格遵循设计规范,做到对每一个时钟过后,内部电路的各个部分会处于何种状态要了然于胸。
给你一个选择FPGA的理由——FPGA就像是一张精密的画布
给你一个选择FPGA的理由——FPGA就像是一张精密的画布FPGA 就像一张精密的画布,想象力才是您的上限。
作者:Hanson He ( 何鑫),赛灵思公司 DSP 专家应用工程师FPGA 对绝大多数的人来说相对有些陌生。
经常有朋友问我,你们成天搞的这个 FPGA 到底是什么东西?我想很难用一两句通俗易懂的语言解释什么是 FPGA,因为当今的 FPGA 已经是一个非常复杂的系统了。
打个比喻来说,对于热爱乐高的人来说 FPGA 设计就像搭积木,对于爱涂鸦的我来说 FPGA 就像是一张精密的画布。
借助赛灵思这样的 FPGA 厂商提供给设计师的易用的“画笔”,有创意的设计师就能根据需求创作自己心仪的作品。
那么这张画布有什么好处呢?易用性对“画家”来说,FPGA 令人生畏的地方,就是只有“硬件工程师使用”的硬件可编程模式。
硬件描述语言虽然硬件发展了30多年,但是由于 HDL 是一种用形式化的语言描述极其复杂的数字系统的,抽象级别较低,因而大大提高了编程难度,限制了FPGA 的推广和普及。
其次随着系统级 FPGA 和片上系统(SoC)的出现和迅速发展,FPGA 开发已不再单单只是一个模块的“编程”工作。
系统设计,软硬件协同设计变得越来越重要,这也大大提高了“准入”门槛。
然而,“山穷水复疑无路,柳暗花明又一村”,觊觎FPGA 的优势又苦于不会使用的软件工程师和系统工程师们,现在可以再次把FPGA 开发提到日程上来了,因为赛灵思在解决“易用性”问题上已经迈出了几大步,其中包括:•赛灵思 2012 年就发布了 Vivado 设计套件集成环境,大大简化了 FPGA 的开发流程,使画家的画笔更好用更易用。
•HLS (High level Synthesis,高层次综合)工具给“画家”提供了新的画笔——可以直接用抽象级别更高的c/c++进行硬件编程。
•SDSoC(Software Defined SoC)顾名思义,软件定义的SoC。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一位FPGA高人的文章我常年担任多个有关FPGA学习研讨的QQ群管理员,长期以来很多新入群的菜鸟们总是在重复的问一些非常简单但是又让新手困惑不解的问题。
作为管理员经常要给这些菜鸟们普及基础知识,但是非常不幸的是很多菜鸟怀着一种浮躁的心态来学习FPGA,总是急于求成。
再加上国内大量有关FPGA的垃圾教材的误导,所以很多菜鸟始终无法入门。
为什么大量的人会觉得FPGA难学?作为著名FPGA提供商Altera授权的金牌培训师,本管理员决心开贴来详细讲一下菜鸟觉得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、错误理解HDL语言,怎么看都看不出硬件结构。
HDL语言的英语全称是:Hardware Deion Language,注意这个单词Deion,而不是Design。
老外为什么要用Deion这个词而不是Design呢?因为HDL确实不是用用来设计硬件的,而仅仅是用来描述硬件的。
描述这个词精确地反映了HDL语言的本质,HDL语言不过是已知硬件电路的文本表现形式而已,只是将以后的电路用文本的形式描述出来而已。
而在编写语言之前,硬件电路应该已经被设计出来了。
语言只不过是将这种设计转化为文字表达形式而已。
但是很多人就不理解了,既然硬件都已经被设计出来了,直接拿去制作部就完了,为什么还要转化为文字表达形式再通过EDA工具这些麻烦的流程呢?其实这就是很多菜鸟没有了解设计的抽象层次的问题,任何设计包括什么服装、机械、广告设计都有一个抽象层次的问题。
就拿广告设计来说吧,最初的设计也许就是一个概念,设计出这个概念也是就是一个点子而已,离最终拍成广告还差得很远。
硬件设计也是有不同的抽象层次,每一个层次都需要设计。
最高的抽象层次为算法级、然后依次是体系结构级、寄存器传输级、门级、物理版图级。
使用HDL的好处在于我们已经设计好了一个寄存器传输级的电路,那么用HDL描述以后转化为文本的形式,剩下的向更低层次的转换就可以让EDA工具去做了,这就大大的降低了工作量。
这就是可综合的概念,也就是说在对这一抽象层次上硬件单元进行描述可以被EDA工具理解并转化为底层的门级电路或其他结构的电路。
在FPGA设计中,就是在将这以抽象层级的意见描述成HDL语言,就可以通过FPGA开发软件转化为问题1中所述的FPGA内部逻辑功能实现形式。
HDL也可以描述更高的抽象层级如算法级或者是体系结构级,但目前受限于EDA软件的发展,EDA软件还无法理解这么高的抽象层次,所以HDL描述这样抽象层级是无法被转化为较低的抽象层级的,这也就是所谓的不可综合。
所以在阅读或编写HDL语言,尤其是可综合的HDL,不应该看到的是语言本身,而是要看到语言背后所对应的硬件电路结构。
如果看到的HDL始终是一条条的代码,那么这种人永远摆脱不了菜鸟的宿命。
假如哪一天看到的代码不再是一行行的代码而是一块一块的硬件模块,那么恭喜脱离了菜鸟的级别,进入不那么菜的鸟级别。
3、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位单片机还在嵌入式领域混呢,嵌入式主要不是靠硬件的差异而更多的是靠软件的差异来体现价值的。