当前位置:首页 > 新闻资讯 > FPGA之家动态 >

FPGA技术教程(通俗易懂)PPT课件

时间:2026-03-20      来源:FPGA_UCY 关于我们 0

FPGA技术

第二章CPLD/FPGA概述

第一章可编程逻辑器件发展历程

第三章硬件描述语言VHDL/VerilogHDL简介

第四章QuartusII的VerilogHDL建模与仿真

第一章可编程逻辑器件的发展历程

一、可编程逻辑器件的发展历程

二、可编程逻辑器件的分类

早期

FPGA

现在

一、可编程器件大致的发展过程如下:

1)20世纪70年代,出现了熔丝编程的PROM和PLA器件。70年代末,AMD公司对PLA进行了改进,推出了PAL器件。

2)20世纪80年代初,Lattice(莱迪思)公司发明了电可擦写的,比PAL更灵活的GAL通用阵列逻辑器件。

3)20世纪80年代中期,Xilinx公司提出现场可编程概念,生产出了世界上第一片FPGA器件。FPGA是改变内部连接的布线来编程。

4)20世纪80年代末,Lattice公司又提出在系统可编程概念(ISP),并推出了一系列具有在系统可编程能力的CPLD器件。CPLD的设计是修改具有固定内部连接电路的逻辑功能来编程。

5)20世纪90年代后期,可编程集成电路技术飞速发展,器件的可用逻辑门数超过了百万门,并出现了内嵌复杂功能模块(如加法器,乘法器,RAM,CPU核,DSP核等)的SOPC。

二、可编程器件的分类

1.按集成度来划分,分为高密度和低密度PLD器件。

1)集成度小于1000门/每片的LDPLD,又称简单PLD。

PROM(可编程只读存储器)

PLA(可编程逻辑阵列,ProgrammableLogicArray)

PAL(可编程阵列逻辑,ProgrammableArrayLogic)

GAL(通用阵列逻辑,GenericArrayLogic)

2)集成度大于1000门/每片的HDPLD

FPGA(FieldProgrammableGateArray)

CPLD(ComplexProgrammableLogicDevice)

2.从结构上可分为:

1)乘积项结构器件:为“与—或”阵列结构,大部分简单PLD和

CPLD都属于这个范畴;

2)查找表结构器件:由查找表组成可编程门,再构成阵列形式,

FPGA属于此类器件。

3.从编程工艺上分为:

1)熔丝(Fuse)型器件:编程过程就是根据设计的熔丝图文件来烧断对应的熔丝,来达到编程的目的。编程后即使系统断电,它们中存储的编程信息不会丢失。

2)反熔丝(Antifuse)型器件:由Actel公司推出,在编程处通过击穿漏层使得两点之间获得导通。反熔丝PLD抗辐射,耐高低温,功耗低,速度快,在军品和宇航上有较大优势。前两种都属OTP器件。

3)EPROM型:紫外线擦除电可编程逻辑器件,它用较高的编程电压进行编程,当需要再次编程时,用紫外线擦除。前三种较少使用。

4)EEPROM型:电可擦除可编程逻辑器件。CPLD采用此编程工艺。

5)SRAM型:SRAM查找表结构的器件,大部分的FPGA采用此编程工艺。断电后编程信息会丢失,每次上电时,需从器件外部存储器将编程数据重新写入SRAM中。允许无限次编程。

6)Flash(Fastflash)型:即闪存技术,由Actel公司推出。采用此编程工艺的器件,可以实现多次可编程,也可以做到掉电后不需要重新配置。CPLD采用此编程工艺。

第二章CPLD/FPGA概述

一、简单的PLD结构

二、FPGA/CPLD的结构

三、FPGA/CPLD的基本原理

四、FPGA的设计方法

五、FPGA设计流程

二维的逻辑块阵列,构成了PLD器件的逻辑组成核心。

输入/输出块:·连接逻辑块的互连资源

连线资源:由各种长度的连线线段组成,其中也有一些可编程的连接开关,它们用于逻辑块之间、逻辑块输入/输出块之间的连接

一.简单PLD的结构

任何组合函数都可以表示为与-或表达式:如F=AB+BCD。PLD由“与门阵列”和“或门阵列”加上输入输出电路构成。早期的PLD有些是“与”阵列可编程,有些是“或”阵列可编程,还有些是“与”和“或”阵列都可编程。

1.输入缓冲器2.PLD的互补输入3.PLD中与阵列表示

4.PLD中或阵列的表示5.阵列线连接表示

编程前编程后

6.PROM的PLD阵列图

二、FPGA/CPLD的结构

FPGA/CPLD的结构各有其特点和长处,但概括起来,它们是由三大部分组成的:

1.逻辑阵列块LAB(LogicArrayBlock)或CLB(ConfigurableLogicBlock),构成了PLD器件的逻辑组成核心。

2.输入/输出块IOB(I/OBlock)

3.连接逻辑块的可编程连线阵列PIA(ProgrammableInterconnectArray)或互连资源IR(InterconnectResources).它由各种长度的连线线段组成,也有一些可编程的连接开关,用于逻辑块之间、逻辑块与输入/输出块之间的连接。

规模大,能够完成任何数字逻辑的功能,实现系统集成

在投片前验证设计的正确性,开发成本低

修改设计而不用改动硬件电路,开发周期短

减少PCB面积,提高系统可靠性

PLD(CPLD/FPGA)的优点:

CPLD和FPGA的区别

制造工艺不同

实现功能不同

FPGA:查找表技术,SRAM工艺

CPLD:乘积项技术,Flash/EEPROM工艺

FPGA:时序逻辑电路

CPLD:组合逻辑电路

三、CPLD/FPGA基本原理

基于查找表的PLD的基本结构及逻辑实现原理

基于乘积项的PLD的基本结构及逻辑实现原理

基于乘积项的PLD的基本结构及逻辑实现原理

这种FPGA的结构可分为三块:宏单元(Macrocell)、可编程连线(PIA)和I/O控制块。宏单元是器件的基本结构,由它来实现基本的逻辑功能;可编程连线负责信号传递,连接所有的宏单元;I/O控制块负责输入输出的电气特性控制,比如可以设定集电极开路输出,摆率控制,三态输出等。

INPUT/GCLK1,INPUT/GCLRn,INPUT/OE1,INPUT/OE2是全局时钟、清零和输出使能信号,这几个信号有专用连线与器件中每个宏单元相连,信号到每个宏单元的延时相同并且延时最短。

宏单元具体结构

乘积项结构的逻辑实现原理

f=f1+f2=A*C*!D+B*C*!D

查找表(Look-Up-Table)的原理和结构

查找表LUT实质上是一个RAM,n位地址线可以配置为n×1的RAM。当用户描述了一个逻辑电路后,软件会计算所有可能的结果,并写入RAM。每一个信号进行逻辑运算,就等于输入一个地址进行查表,找出地址对应的内容,输出结果

Xilinx Spartan-II内部结构

Altera的FLEX/ACEX等芯片的内部结构

查找表结构的逻辑实现原理

f=(A+B)*C*!D=A*C*!D+B*C*!D

选择FPGA还是CPLD?

CPLD组合逻辑的功能很强,一个宏单元就可以分解十几个甚至20-30多个组合逻辑输入。而FPGA的一个LUT只能处理4输入的组合逻辑,因此,CPLD适合用于设计译码等复杂组合逻辑。 但FPGA的制造工艺确定了FPGA芯片中包含的LUT和触发器的数量非常多,往往都是几千上万,CPLD一般只能做到512个逻辑单元,而且如果用芯片价格除以逻辑单元数量,FPGA的平均逻辑单元成本大大低于CPLD。

四、FPGA的设计方法

FPGA的常用设计方法包括“自顶向下”和“自下而上”,目前大规模FPGA设计一般选择“自顶向下”的设计方法。

所谓“自顶向下”设计方法, 简单地说,就是采用可完全独立于芯片厂商及其产品结构的描述语言,在功能级对设计产品进行定义, 并结合功能仿真技术,以确保设计的正确性,在功能定义完成后,利用逻辑综合技术,把功能描述转换成某一具体结构芯片的网表文件,输出给厂商的布局布线器进行布局布线。布局布线结果还可反标回同一仿真器, 进行包括功能和时序的后验证,以保证布局布线所带来的门延时和线延时不会影响设计的性能。

自顶向下设计方法学

顶层模块

子模块1

子模块2

子模块3

叶单元

叶单元

叶单元

叶单元

叶单元

叶单元

五、FPGA设计流程

(1)设计定义

(2)设计输入

布尔等式设计,原理图设计,HDL语言设计

(3)功能仿真

RTL代码中引用的由厂家提供的宏模块/IP

(4)逻辑综合

(5)前仿真

(6)布局布线

(7)后仿真

(8)静态时序分析

(9)在系统测试

第三章 Verilog HDL语言

一、Verilog HDL设计模块的基本结构

二、Verilog HDL词法构成

三、Verilog HDL的语句

四、Verilog HDL描述方式

五、Verilog HDL设计流程

六、用Verilog HDL描述数字电路的实例

硬件描述语言(HDL)就是可以描述硬件电路的功能、信号连接关系及定时(时序)关系的语言,也是一种用形式化方法来描述数字电路和设计数字系统的。

常用的硬件描述语言有VHDL、Verilog HDL,已成为IEEE的工业标准硬件描述语言,得到了众多EDA公司的支持。

VHDL

VHDL主要用于描述数字系统的结构、行为、功能和接口。

Verilog HDL

Verilog HDL是在C语言的基础上发展而来的硬件描述语言,具有简洁、高效、易用的特点。

Verilog HDL语言简介

能力

设计的行为特性、设计的数据流特性、设计的结构组成以及

包含响应 监控和设计验证方面的时延和波形产生机制。提供

了编程语言接口,通过该接口可以在模拟、验证期间从设计

外部访问设计,包括模拟的具体控制和运行。

主要功能

基本逻辑门,例如and 、or 和nand 等都内置在语言中

开关级基本结构模型,例如pmos 和nmos 等也被内置在语言中

可采用三种不同方式或混合方式对设计建模

两类数据类型

能够描述层次设计,可使用模块实例结构描述任何层次

能够使用门和模块实例化语句在结构级进行结构描述

一、 Verilog HDL设计模块的基本结构

Verilog HDL程序设计由模块(module)构成的, 设计模块的基本结构如图,一个完整的Verilog HDL设计模块包括端口定义、I/O声明、信号类型声明和功能描述4个部分。

1 模块端口的定义

模块端口定义用来声明电路设计模块

的输入/输出端口,端口定义格式如下:

module 模块名 (端口1,端口2,端口3,…);

在端口定义的括号中,是设计电路模块与外界联系的全部输入/输出端口信号或引脚,是设计实体对外的一个通信界面,是外界可以看到的部分(不包含电源和接地端),多个端口之间用“,”分隔。例如1位全加器adder模块的端口定义为module adder (S, CO, A, B, CI); 模块名adder

2 信号类型声明

信号类型声明是声明设计电路的功能描述中所用的信号的数据类型和函数。信号的数据类型主要有连线(wire)、寄存器(reg)、整型(integer)、实型(real)、和时间(time)等。

信号声明格式如下:

wire 端口1,端口2,端口3,…;

reg 端口1,端口2,端口3,…;

3 功能描述

功能描述是Verilog HDL程序设计中最主要的部分,用来描述设计模块的内部结构和模块端口间的逻辑关系,在电路上相当于器件的内部电路结构。功能描述可以用assign语句、元件例化(instantiate)方式、always块语句、initial块语句等方法来实现,通常将设计模块描述的方法称为建模。

①用assign语句建模

用assign语句建模的方法很简单,只需要在“assign”后面再加一个表达式。assign语句一般适合对组合逻辑进行赋值,称为连续赋值方式。

例1 一位全加器的设计

1位全加器的逻辑符号:

S是全加器的和输出端,

CO是进位输出端,A和B是两个加数输入端,

CI是低位进位输入端。

全加器的Verilog HDL源程序如下:

module adder1 (S, CO, A, B, CI);

input A, B, CI;

output S, CO;

wire S, CO, A, B, CI;

assign {CO, S} = A+B+CI;

endmodule

“assign {CO, S} = A+B+CI;”语句实现1位全加器的进位输出CO与和输出S的建模。

在语句表达式中,用拼接运算符“{}”将CO、S这两个1位操作数拼接为一个2位操作数。

②用元件例化(instantiate)方式建模

元件例化方式建模是利用Verilog HDL提供的元件库实现的。例如,用与门例化元件定义一个三输入端与门可以写为

and myand3(y,a,b,c); and是Verilog HDL元件库中与门元件名,myand3是例化出的三输入端与门名,y是与门输出端,a、b、c是输入端。

③用always块语句建模

always块语句可以产生各种逻辑,常用于时序逻辑的功能描述。一个程序设计模块中,可以包含一个或多个always语句。程序运行中,在某种条件满足时,就重复执行一遍always结构中的语句。

例2 8位二进制加法计数器的设计

8位二进制加法计数器的逻辑符号如图。

OUT是8位二进制计数器的输出端(8位向量);

COUT是进位输出端(1位);

DATA是并行数据输入端(8位向量);

LOAD是计数器的预置控制输入端,

当LOAD=1时,OUT=DATA;

CLK是时钟控制输入端,上升沿为有效边沿;

CLR是同步复位输入端,当CLK的上升沿到来时且CLR=1,则计数器被复位,OUT=00000000。

(逻辑符号图是由计算机对计数器电路的Verilog HDL源代码编译后产生的元件符号,图中的输入/输出标识符自动被改为大写,而源程序中的标识符都是小写。)

8位二进制加法计数器的Verilog HDL 源程序如下:

module cnt8 (out, cout,data,load,cin,clk, clr);

input data;

input load, cin, clk, clr

output out;

output cout;

reg out;

always @(posedge clk)

begin

if (load) out=data;

else if(clr) out=’b00000000;

else out=out+1;


注明:本内容来源网络,不用于商业使用,禁止转载,如有侵权,请来信到邮箱:429562386ⓐqq.com 或联系本站客服处理,感谢配合!

用户登陆

    未注册用户登录后会自动为您创建账号

提交留言