FPGA学习方法

更新时间:2023-10-05 11:23:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1.基础问题

fpga的基础就是数字电路和hdl语言,想学好fpga的人,建议床头都有一本数字电路

的书,不管是那个版本的,这个是基础,多了解也有助于形成硬件设计的思想。 在语言方面,建议初学者学习verilog语言,vhdl语言语法规范严格,调试起来很慢,

verilog语言容易上手,而且,一般大型企业都是用verilog语言。 2.eda工具问题 熟悉几个常用的就可以的,开发环境quartusii ,或ise 就可以了,这两个基本是相通的,会了哪一个,另外的那个也就很easy了。功能仿真建议使用modelsim ,如果你是做芯片的,就可以学学别的仿真工具,做fpga的,modelsim就足够了。综合工具一般用synplify,

初学先不用太关心这个,用quartus综合就ok了 3.硬件设计思想问题 对于初学者,特别是从软件转过来的,设计的程序既费资源又速度慢,而且很有可能综合不了,这就要求我们熟悉一些固定模块的写法,可综合的模块很多书上都有,语言介绍上

都有,不要想当然的用软件的思想去写硬件。 4.学习习惯问题 fpga学习要多练习,多仿真,signaltapii是很好的工具,可以看到每个信号的真实值,

建议初学者一定要自己多动手,光看书是没用的。 关于英文文档问题,如果要学会quartus ii的所有功能,只要看它的 handbook就可以了,很详细,对于it行业的人,大部分知识来源都是英文文档,一定

要耐心看,会从中收获很多的。 5.算法问题 做fpga的工程师,最后一般都是专攻算法了,这些基础知识都是顺手捏来的,如果你没

有做好搞理论的准备,学fpga始终只能停留在初级阶段上。 对于初学者,数字信号处理是基础,应该好好理解,往更深的方向,不用什么都学,根据你以后从事的方向,比如说通信、图像处理,雷达、声纳、导航定位等。篇二:fpga应该

学什么 回答 : 甲:怎么不学verilog呢,要比vhdl好学多了.还要学fpga,cpld的软件开发环境,搞一

块简单的开发板是必需的.要想学游泳,要跳到水里去. 乙:

第一步:学习语言,最好是verilog,国内基本上都是用verilog的; 第二步:弄个fpga开发板,不管是altera的还是xilinx的; 第三步:根据开发板,如果是altera的就学习quartusii软件,如果是xilinx的就学习一下ise了;

第四步:学习仿真软件,modelsim比较方便一些,呵呵; 第五步:根据开发板和上面的软件工具,就可以进行fpga开发和学习了。 丙:

看好actel的fpga,cpld,在性能价格上看上去有竞争力,我看楼上推荐得挺好,虽然我以

前没用过.初学宜用较简易的板子,再加一个下载线就够了.(有的板子将下载线做在一起). 丁:

fpga只是一个实现数字电路的方法,内容更为重要,同时也要打好基础。 你是成电的学生,如果读研的主攻方向是信号处理等的话,应该花更多的精力在数字信

号处理适合用fpga来实现的算法上。 语言上,verilog hdl比vhdl更流行,建议学习verilog hdl。由于通信类信号处理的

逻辑规模相对较大,仿真工具建议用nc-verilog(前身为verilog xl),比modelsim虽然使

用起来要复杂些,但是当逻辑规模很大的情况下,仿真速度上很有优势。 综合工具可以选用synplify pro,至于quartus ii和ise,建议只用它们来做后端,你

的核心设计不应该严重依赖于是xilinx的芯片还是altera的芯片。 另外,对于用fpga来做通信系统的信号处理来说,你除了要会verilog hdl,会用nc-verilog仿真外,还应该会用matlab来进行算法模拟,agilent公司的systemvue也是一

个比较好的系统模拟软件。篇三:fpga学习必看 fpga设计基本原则,设计思想,结构 1、硬件设计基本原则 (1)、速度与面积平衡和互换原则:一个设计如果时序余量较大,所能跑的频率远高于设计要求,能可以通过模块复用来减少整个设计消耗的芯片面积,这就是用速度优势换面积的节约;反之,如果一个设计的时序要求很高,普通方法达不到设计频率,那么可以通过数据流串并转换,并行复制多个操作模块,对整个设计采用“乒乓操作”和“串并转换”的思想进行处理,在芯片输出模块处再对数据进行“并串转换”。从而实现了用面积复制换取速度的

提高。 (2)、硬件原则:理解hdl本质 (3)、系统原则:整体把握 (4)、同步设计原则:设计时序稳定的基本原则 2、verilog作为一种hdl语言,对系统行为的建模方式是分层次的。比较重要的层次有系统级(system)、算法级(algorithm)、寄存器传输级(rtl)、逻辑级(logic)、门级(gate)、电路开关级(switch)。 3、实际工作中,除了描述仿真测试激励(testbench)时使用for循环语句外,极少在rtl级编码中使用for循环,这是因为for循环会被综合器展开为所有变量情况的执行语句,每个变量独立占用寄存器资源,不能有效的复用硬件逻辑资源,造成巨大的浪费。一般常用

case语句代替。 4、if?else?和case在嵌套描述时是有很大区别的,if?else?是有优先级的,一般来说,第一个if的优先级最高,最后一个else的优先级最低。而case语句是平行语句,它是没有优先级的,而建立优先级结构需要耗费大量的逻辑资源,所以能用case的地方就不要用if?else?语句。

补充:1.也可以用if?; if?; if?;描述不带优先级的“平行”语句。 5、fpga一般触发器资源比较丰富,而cpld组合逻辑资源更丰富。 6、fpga和cpld的组成: fpga基本有可编程i/o单元、基本可编程逻辑单元、嵌入式块ram、丰富的布线资源、

底层嵌入功能单元和内嵌专用硬核等6部分组成。 cpld的结构相对比较简单,主要由可编程i/o单元、基本逻辑单元、布线池和其他辅助

功能模块组成。 7、block ram: 3种块ram结构,m512 ram(512bit)、m4k ram(4kbit)、m-ram(64kbit). m512 ram:适合做一些小的buffer、fifo、dpram、spram、rom等; m4k ram: 适用于一般的需求 m-ram: 适合做大块数据的缓冲区。 xlinx 和 lattice fpga的lut可以灵活配置成小的ram、rom、fifo等存储结构,这种

技术被称为分布式ram。 补充:但是在一般的设计中,不提倡用fpga/cpld的片内资源配置成大量的存储器,这

是处于成本的考虑。所以尽量采用外接存储器。 8、善用芯片内部的pll或dll资源完成时钟的分频、倍频率、移相等操作,不仅简化了

设计,并且能有效地提高系统的精度和工作稳定性。 9、异步电路和同步时序电路的区别 异步电路: 电路核心逻辑有用组合电路实现; 异步时序电路的最大缺点是容易产生毛刺; 不利于器件移植; 不利于静态时序分析(sta)、验证设计时序性能。 同步时序电路: 电路核心逻辑是用各种触发器实现; 电路主要信号、输出信号等都是在某个时钟沿驱动触发器产生的; 同步时序电路可以很好的避免毛刺; 利于器件移植; 利于静态时序分析(sta)、验证设计时序性能。 10、同步设计中,稳定可靠的数据采样必须遵从以下两个基本原则: (1)、在有效时钟沿到达前,数据输入至少已经稳定了采样寄存器的setup时间之久,这

条原则简称满足setup时间原则; (2)、在有效时钟沿到达后,数据输入至少还将稳定保持采样寄存器的hold时钟之久,

这条原则简称满足hold时间原则。 11、同步时序设计注意事项: 异步时钟域的数据转换。 组合逻辑电路的设计方法。 同步时序电路的时钟设计。 同步时序电路的延迟。同步时序电路的延迟最常用的设计方法是用分频或者倍频的时钟或者同步计数器完成所需的延迟,对比较大的和特殊定时要求的延时,一般用高速时钟产生一个计数器,根据计数产生延迟;对于比较小的延迟,可以用d触发器打一下,这样不仅可以使信号延时了一个时钟周期,而且完成了信号与时钟的初次同步。在输入信号采样和增加时序约束余量中使用。另外,还有用行为级方法描述延迟,如“#5 a<=4’0101;”这种常

用于仿真测试激励,但是在电路综合时会被忽略,并不能起到延迟作用。 verilog 定义的reg型,不一定综合成寄存器。在verilog代码中最常用的两种数据类型是wire和reg型,一般来说,wire型指定的数据和网线通过组合逻辑实现,而reg型指

定的数据不一定就是用寄存器实现。 12、常用设计思想与技巧 (1)、乒乓操作; (2)、串并转换; (3)、流水线操作; (4)、异步时钟域数据同步。是指如何在两个时钟不同步的数据域之间可靠地进行数据交

换的问题。数据时钟域不同步主要有两种情况: 两个域的时钟频率相同,但是相差不固定,或者相差固定但是不可测,简称为同频异相问题。

两个时钟频率根本不同,简称异频问题。 两种不推荐的异步时钟域操作方法:一种是通过增加buffer或者其他门延时来调整采样;

另一种是盲目使用时钟正负沿调整数据采样。

13、模块划分基本原则: (1)、对每个同步时序设计的子模块的输出使用寄存器(用寄存器分割同步时序模块原则)。 (2)、将相关逻辑和可以复用的逻辑划分在同一模块内(呼应系统原则)。 (3)、将不同优化目标的逻辑分开。 (4)、将送约束的逻辑归到同一模块。 (5)、将存储逻辑独立划分成模块。 (6)、合适的模块规模。 (7)、顶层模块最好不进行逻辑设计。篇四:如何学习fpga 学习fpga注意事项

作者:陈斌,全国大学生电子竞赛a题国家级一等奖获得者,分工:fpga设计。 1.1 理解fpga与硬件描述语言的关系 fpga的简称现场可编程门阵列,门阵列是代表fpga是一种数字器件,数字器件少不了要跟与门、非门和寄存器打交道。由于现代数字电路的规模越来越大,单纯的用与门、非门和寄存器去画图来搭建一个数字电路变得不可能。硬件描述语言的出现顺利的解决了这个问题,硬件描述语言可以描述数字电路的构成,也就是硬件的构成。我们知道,c语言描述处理器的工作过程,然后经过编译器之后转换成机器代码,机器代码在处理器中按c语言描述的工作过程工作,以此达到你的目的。而硬件描述语言是描述数字电路,数字电路按照描述的工作方式工作。硬件描述语言理论上可以描述所有的c语言的工作过程,因为你使用的处

理器就可以用硬件描述语言描述。 上面说到了fpga和硬件描述语言,硬件描述语言是用来描述数字电路构成的,而fpga是可编程逻辑器件(可以通过编程实现数字电路功能的器件)。而开发工具把这两者结合起来,你用硬件描述语言描述数字电路经过开发工作的各步骤后变成了适应fpga的编程文件。一块没有下载任何程序的fpga相当于一张白纸,当你把编程文件下载下去之后,fpga立即变成一个数字器件,它包含整个你在硬件描述语言里面描述出来的数字电路。总之,fpga是数字电路实现的一个载体,而硬件描述语言是描述数字电路的,两者没有必然的关系,你也可以通过画原理图的方式来生成可供fpga编程的文件,但是这样在大规模的数字电路设计中变得不可能。硬件描述语言可以用人们容易理解的方式来描述数字电路,所以它在fpga开发中硬

件描述语言的地位举足轻重。 1.2 学习硬件描述语言的过程 硬件描述语言是描述数字电路的,所以你首先应该对数字电路有一定的了解,至少要知道寄存器、各逻辑门的概念和特性。如果你数字电路学的太差劲,建议你回去看看书再学硬件描述语言,这样在以后的学习中可以达到较高的深度。个人认为第二个具备的条件最好是

有一定的数字电路的实践,比如单片机等,但是这个不是必要条件。 学习verillog硬件描述语言的基本过程如图 1所示,开始应该要看书去学习硬件描述

语言,包括语法、表达方式等,花一段时间基本了解书上的语言之后就可以开始实 践了。实践可以从简单的逻辑电路开始吧,一个简单的与门都行,体念第一次实践的乐趣,并要相信“今天描述一个与门,几年之后你就可以描述一个处理器了”。不要以为小的进

步而不是进步,慢慢积累,多多思考,不要放弃,总会成功的。 图 1学习硬件描述语言的过程 实践一段时间之后你总要总结的,与硬件描述语言一起总结吧,多看看rtl级的电路,与你的硬件描述语言作对照,这样你就会知道你描述的硬件电路究竟是怎么样的,久而久之

就知道了其中的猫腻。 到后来学到一段时间时候,发现使用的模块越来越多,这就需要自己根据设计去划分模块,而且那时候硬件描述语言应该掌握的很熟悉了。程序编写变成了一种基本技能,这时候

你就要去培养自己的总体把握能力,在较复杂的设计中,模块划分是否合适关系到项目的成败。所以设计前期一定要把模块划分清楚,不要求做到各模块的接口明晰,但是至少要做到

知道每个模块要完成的功能。 1.3 关于调试 程序编写完后难免会有这样那样的错误,就算程序综合通过,程序还是有可能存在功能上的错误。代码的语法错误的排除需要经验,首先看英文提示,并双击发现出现错误的行,一般错误都显示在下面一行,所以你得去看看上面的几行。功能调试就altera的器件而言,提供在线的调试功能,但是这需要在设计中加入相关的测试值,然后与原来的设计综合,下

载然后在软件中可以看到相关信号的变化值,找到关键点排除错误。 另外,仿真也是很重要的,仿真一般用到的有前仿真和后仿真,前仿真就是功能仿真它不包括延时信息,后仿真是布线布局后的仿真,仿真基本上是硬件电路工作时的状态,要是

后仿真能够很全面的通过,那么一般情况下运行起来是没什么问题的了。仿真 在quartus ii里面有波形编辑器,只要把输入的信号编辑,然后仿真就可以看到对应输入的输出。另外业界用的较多的是modelsim,它仿真起来比较快,而且仿真比较严格,modelsim仿真很重要的一个方面是测试文件的编写,测试文件编写夏雨闻的那本verilog教

程有相关的例程,可以去研究下。 1.4 组合逻辑和时序逻辑举例 首先来看看二进制到格雷码的转换,描述的电路如图所示,可见它是一个组合逻辑。输入的信号在经过组合逻辑的延时后立即输出,前仿真中这个逻辑延时被忽略,输出没有延时

的随桌输入改变而改变。

程序清单 1 二进制到格雷码转换的组合逻辑描述 module grayandbin( input [3:0] bin_input; output [3:0] gray_output; output [3:0] bin_output; /*由二进制码到格雷码的转换*/ assign gray_output[2:0]=bin_input[3:1]^bin_input[2:0];

//gray[i]=bin[i+1]^bin[i] assign gray_output[3]=bin_input[3]; endmodule bin_input, gray_output, bin_output ); 图 2 格雷码组合逻辑 我们用时序的方式来描述二进制到格雷码的转换,时序逻辑是包括时钟clk的,时序电路必须有一个初始值,初始值用复位信号reset来实现。描述的程序如程序清单 2所示,描述的电路如图 3所示,对比图 2和图 3发现描述仅仅多了一级d触发器,这就是组合逻辑

和时序逻辑描述的不同。每次的输入要等待到下一个时钟沿才会输出。 程序清单 2 二进制到格雷码转换的时序逻辑描述 module grayandbin1( reset,

clk, bin_input, gray_output ); input reset; input clk;

input [3:0] bin_input; output [3:0] gray_output; reg [3:0] gray_output; always @(posedge reset or posedge clk) begin

本文来源:https://www.bwwdw.com/article/sfrd.html

Top