如何学习FPGA
原地址:http://www.cnblogs.com/jacob1934/p/6811974.html
本人也入门不久,希望我不会误人子弟哈。
1.不必着急买开发板。
2.在学习FPGA之前,先去学习一下数字电路,不要求精通,最起码要有基本的电平标准、单端/差分、时钟、触发器、门电路概念。
3.了解FPGA。
【3.1】FPGA的内部以查找表为主,辅助以PLL、高速触发器、静态存储器等。
数字电路在一定的输入下,会有确定的输出;当所有的输入输出对应关系都被计算出来,并且通过查找这种对应关系,而在一定输入下产生对应的输出,基本可以认为我们在一定性能下近似等价地实现了该数字电路。 查找表就是这样的电路,当一个查找表单元不够实现目标数字电路时,可以使用多个查找表联合,以及使用FPGA上的其他资源。
查找表其实就是有地址线的存储器,一般是SRAM或者NOR FLASH,一般是每个查找表单元4到6输入(地址线),一个输出。
FPGA配置文件包括各个查找表的内容、内部连线等等。
SRAM的FPGA在掉电后配置消失,需要在每次上电时从外部的SPI FLASH等加载配置文件;
NOR FLASH的FPGA,在掉电后不会丢失配置数据,上电后很迅速的进入工作状态。
主要的FPGA厂家有xilinx、altera(现属于intel)、actel(现属于microsim)、lattice。这四家公司全是美国的,国内也有几家,但现在还远远比不上国外。前两家的销量最大,xilinx目前的主流低端产品是spartan6,altera的主流低端产品是cyclone IV。spartan6和cyclone IV都是SRAM架构的FPGA,altera的max 10是NOR FLASH架构的FPGA(也被altera定义为CPLD)。
【3.2】CPLD主要以宏单元和乘积项为基本结构,也就是通过改变逻辑门和触发器等的连线的方式(简化理解)实现数字电路,容量一般做不大。一般都是使用芯片内EEPROM或NOR FLASH保存配置信息。
【3.3】相比之下,FPGA更适合时序逻辑,CPLD更适合组合逻辑。CPLD的信号延时较为固定、可预测,而FPGA的延时抖动较大。FPGA的容量较大、价格较高。
【4】学习一种硬件描述语言(HDL)的基本语法。
HDL是对数字电路的描述,通过编译器synthesize(综合)成网表(各种基本寄存器和门电路等之间的连接等),再implement(translate----map----place&route),最后生成对应器件的配置文件。
常见的HDL是verilog和VHDL,我个人用verilog。
到网上找一篇语法教程,通读2、3遍即可。
对于verilog初学者,有几点常见注意点:
【4.1】每个寄存器都只能在一个always里被赋值。
【4.2】时序逻辑,例如
module demo_add
(
input clk,
input [7:0] a,
input [7:0] b,
output reg [7:0] c
); always @(posedge clk) begin c <= a + b; end
endmodule
中,只使用<=(也叫非阻塞赋值)。
实际上,上面这个例子里包含了一个组合逻辑a+b。
【4.3】组合逻辑,例如
module demo_add
(
input [7:0] a,
input [7:0] b,
output reg [7:0] c
); always @(*) begin c = a + b; end
endmodule
只使用=(也叫阻塞赋值)。组合逻辑中,虽然定义了输出为reg,也必须定义成reg,但会在综合的时候被优化成wire。
【4.4】always里的语句实际上都是“并行执行”的,除了testbench。
其实说并行执行也不全对,GPU里几千个核同时运算,也叫并行执行。FPGA里所有的查找表都是只管自己的输入的,把testbench外的verilog看成数字电路的描述即可(本来就是HDL)。
【5】FPGA型号基本了解。
我推荐新手先从spartan6或cyclone IV开始,这两个系列都有QFP144封装,容易焊接、成本低(便宜的只有二十元)、结构相对高端型号较为简单。
查阅官网,简单了解器件的基本特性,比如容量、封装、IO电压、速度等级、工作温度等等。
网上也有对各厂家和系列的对比文章,可以看一下。
以便稍后选择相应的开发环境和器件。
【6】通过功能仿真进一步学习HDL。
仿真的工具可以是modelsim等,也可以是FPGA厂家的开发环境中自带的。我推荐先用后者。
xilinx的低端开发工具是ISE 14.7(最高版本,不再更新),高端开发工具是vivado。
altera的开发工具是quartus II。
其他厂家的产品我个人没有使用过。
X和A的开发环境都有web版,高端功能和器件受限,免费。网上有完整版的破解(就是X和A的代理发出来的……)。
我是先用ISE 14.7自带的ISIM仿真的,ISIM的功能比modelsim弱,但对新手和小项目足够了。ISIM包含在ISE中,可以更早、更快的熟悉开发环境。另外,对新手而言,modelsim有点复杂。
使用ISE、quartus等仿真,需要选择具体FPGA型号,选择较小的型号即可,比如XC6SLX9-2TQG144C和EP4CE6E22C8n,因为这阶段的代码量都很小,而且一般跟具体硬件无关。
有很多的实例书籍和教程,对照着实现并仿真。
仿真要写testbench,就是向你写的verilog模块给测试信号的代码。verilog中有一些语句是只能用在仿真中的!比如$display、event。for可综合但不推荐在initial / generate 或 testbench 外使用。
暂时忘掉C/C++等语言。大多数人在学习HDL之前就已经学习了C/C++等等运行在CPU上的编程语言,然后在学习HDL的时候会不自觉的将C/C++等语言的语法、习惯、理念带入到HDL中,而且有时候根深蒂固。请记住:HDL是对硬件的描述。
在编写HDL时,要想着这段语句会被综合成什么样的等效逻辑电路,每次编写完后都要看看综合出的RTL图和预期的有多少差距,查看综合报告给出的最高运行速度是否满足需求,然后再仿真看下时序是否符合预期,有差别当然要改喽。
在仿真中,会出现很多warning和error,一定要通过搜索引擎弄明白warning和error出现的原因和解决办法,尝试将所有warning都去掉。
尝试同一个功能的不同实现方式----要更高的运行速度,还是更少的面积(逻辑占用量)?
【7】HDL进阶。
比如verilog 2001。
比如两段式、三段式状态机的写法。
【8】FPGA进阶了解
了解更多的FPGA知识,开拓下知识面,看到琳琅满目的开发板也能知道如何选择。
ip core,具体芯片和开发环境下都有哪些IP core,如何使用。
比如 什么是软核、固核、硬核。比如所有BGA封装的spartan6都带DDR3硬核(片子上的实际电路),-3等级的可以跑到DDR3-800;而cyclone IV系列都只有DDR3软核。网上发布的IP核,软核(源代码)较多,固核(网表)较少。硬核是包含在芯片里面的模块。
比如 X和A的各种原语,比如xilinx的serdes原语可以实现1gbit/s的串并转换。
比如 spartan6的LVDS输出只能在BANK0和BANK2(官方手册有写)。
比如FPGA的特殊管脚,GCLK、VREF、差分对、VCCIO。使用各种电平标准时的VCCIO和VREF需求(官网有文档)。
比如主动配置和被动配置。
spartan6带T的和CYCLONE IV的GX型号都可以用来做什么,PCIE、SATA等等。
如何通过JTAG下载配置文件。
xilinx的chipscope、altera的signaltap。
【9】买开发板或自己打板
对于新手,买便宜的甚至是二手的开发板就行了,一般100-300元就够了。可以买核心板+外设子板,也可以是一整块板。
买开发板的好处,一是电路设计出错的可能很小,二是附带的教程。
不过如果你有足够的阅读量和画板能力的话,我推荐自己画板。QFP144封装(x和a都有)的FPGA价格还是挺便宜的,低速应用只要2层板就能搞定,比买同样配置的开发板还要省钱,而且也容易焊接。
根据开发板的教程学习实践,或者给自己定个小的项目做做。
【10】更多进阶
比如 时序仿真 (后仿真)。
比如PCIE、DDR3内存。
如何开发自己的ip core。
比如软核CPU。
比如ZYNQ系列、cyclone V soc系列。
【11】学习TCL脚本
FPGA的编译和仿真中,一般都会使用预定义的tcl脚本来完成任务,学习TCL脚本可以在一定程度上提高工作效率。
【12】相关技能和行业知识
比如PC上的软件、python之类的脚本语言、matlab、Linux、单片机、高速PCB的设计、各种仪器仪表和焊接工具的使用,看你的需求和兴趣。
实际的FPGA应用都是在具体行业具体的项目里的,比如数字信号处理、图像处理等等,初学者可以给自己定一个方向,然后多多学习相关技能。
浙公网安备 33010602011771号