FPGA设计基础_第1页
FPGA设计基础_第2页
FPGA设计基础_第3页
FPGA设计基础_第4页
FPGA设计基础_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、FPGA设计基础FPGA基本概念FPGA的发展和动向FPGA的应用领域FPGA工艺结构FPGA芯片厂家与代表产品硬件描述语言Verilog HDLFPGA编程与仿真FPGA调试FPGA在图像处理中的应用7.1 FPGA基本概念 FPGA(FieldProgrammable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点 。7.1 FPGA基本概念 FPGA采用了逻辑单元阵列LCA(Logic Cell

2、Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。 现场可编程门阵列(FPGA)是可编程器件。7.1 FPGA基本概念 与传统逻辑电路和门阵列(如PAL,GAL及CPLD器件)相比,FPGA具有不同的结构,FPGA利用小型查找表(161RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了即可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连

3、接或连接到I/O模块。7.1 FPGA基本概念 FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最终决定了FPGA所能实现的功能, FPGA允许无限次的编程 。CPLD内部结构CPLD实现逻辑功能原理f=(A+B)*C*(!D)=A*C*!D + B*C*!D FPGA查找表FPGA逻辑单元7.1 FPGA基本概念 可以毫不夸张的讲,可以毫不夸张的讲,FPGA能完成任何数字器件能完成任何数字器件的功能,上至高性能的功能,上至高性能CPU,下至简单的,下至简单的74电路,电路,都可以用都可以用F

4、PGA来实现。来实现。 FPGA如同一张白纸或如同一张白纸或是一堆积木,工程师可以通过传统的原理图输入是一堆积木,工程师可以通过传统的原理图输入法,或是硬件描述语言自由的设计一个数字系统。法,或是硬件描述语言自由的设计一个数字系统。通过软件仿真,我们可以事先验证设计的正确性。通过软件仿真,我们可以事先验证设计的正确性。7.1 FPGA基本概念 在在PCB完成以后,还可以利用完成以后,还可以利用FPGA/CPLD的在线修改能的在线修改能力,随时修改设计而不必改动硬件电路。力,随时修改设计而不必改动硬件电路。 使用使用FPGA来开来开发数字电路,可以大大缩短设计时间,减少发数字电路,可以大大缩短设

5、计时间,减少PCB面积,提面积,提高系统的可靠性。高系统的可靠性。 FPGA还可以做数字还可以做数字IC设计的前端验证,设计的前端验证,用这种方式可以很大程度上降低用这种方式可以很大程度上降低IC设计的成本。设计的成本。 FPGA的的这些优点使得这些优点使得FPGA技术在技术在90年代以后得到飞速的发展,年代以后得到飞速的发展,同时也大大推动了同时也大大推动了EDA软件和硬件描述语言(软件和硬件描述语言(HDL)的进)的进步。步。 7.2 FPGA的发展和动向 FPGA分为不同的应用,向着以下几个方向发展:分为不同的应用,向着以下几个方向发展: 更高的密度和速度(千万门以上,速度更高的密度和速

6、度(千万门以上,速度600MHz以上);以上); 更高的传输速度(更高的传输速度(10Gbps以上);以上); 更低的功耗、更低的成本(面向低成本应用);更低的功耗、更低的成本(面向低成本应用); 集成硬核处理器(双核集成硬核处理器(双核ARM Cortex A9,800M主频)。主频)。7.3 FPGA的应用领域 FPGA技术发展迅速,正在逐渐融合技术发展迅速,正在逐渐融合CPU和和DSP的功能;的功能; FPGA已经广泛应用在如无线基站、千兆网已经广泛应用在如无线基站、千兆网络路由器、智能手机、便携式产品、高端络路由器、智能手机、便携式产品、高端武器、视频处理、航空航天等方方面面。武器、视

7、频处理、航空航天等方方面面。 FPGA有逐步取代有逐步取代CPU和和DSP的趋势。的趋势。7.4 FPGA工艺结构 基于基于FLASH工艺(工艺(Actel) 基于基于PROM工艺(用于航天,工艺(用于航天,Actel) 基于基于SRAM工艺(最普遍,工艺(最普遍,Xilinx、Altera等)等)7.5 FPGA芯片厂家与代表产品 三大三大FPGA厂商及代表产品厂商及代表产品 Xilinx: 高端:高端:Virtex系列系列 中低端:中低端:Spartan系列系列 Altera: 高端:高端:Stratix系列系列 中端:中端:Arria GX系列系列 低端:低端:Cyclone系列系列 A

8、ctel: 低功耗:低功耗:IGLOO系列系列 混合信号:混合信号:SmartFusion 耐辐射:耐辐射:RTAX系列系列7.5 FPGA芯片厂家与代表产品 其他FPGA厂商: Lattice atmel FPGA开发流程7.6 硬件描述语言Verilog HDL HDL简介 设计举例术语定义(terms and definitions)硬件描述语言硬件描述语言HDL:描述电路硬件及时序的一种编程语言仿真器仿真器:读入HDL并进行解释及执行的一种软件抽象级抽象级:描述风格的详细程度,如行为级和门级ASIC:专用集成电路(Application Specific Integrated Circ

9、uit)ASIC Vender:芯片制造商,开发并提供单元库自下而上的设计流程自下而上的设计流程:一种先构建底层单元,然后由底层单元构造更大的系统的设计方法 。自顶向下的设计流程自顶向下的设计流程:一种设计方法,先用高抽象级构造系统,然后再设计下层单元RTL级级:寄存器传输级(Register Transfer Level),用于设计的可综合的一种抽象级Tcl:Tool command Language, 向交互程序输入命令的描述语言什么是硬件描述语言什么是硬件描述语言HDL 具有特殊结构能够对硬件逻辑电路的功能进行描述的具有特殊结构能够对硬件逻辑电路的功能进行描述的一种高级编程语言一种高级编

10、程语言 这种特殊结构能够:这种特殊结构能够: 描述电路的连接描述电路的连接 描述电路的功能描述电路的功能 在不同抽象级上描述电路在不同抽象级上描述电路 描述电路的时序描述电路的时序 表达具有并行性表达具有并行性 HDL主要有两种:主要有两种:Verilog和和VHDL Verilog起源于起源于C语言,因此非常类似于语言,因此非常类似于C语言,容易掌握语言,容易掌握 VHDL起源于起源于ADA语言,格式严谨,不易学习。语言,格式严谨,不易学习。 VHDL出现较晚,但标准化早。出现较晚,但标准化早。IEEE 1706-1985标准。标准。为什么使用为什么使用HDL 使用使用HDL描述设计具有下列

11、优点:描述设计具有下列优点: 设计在高层次进行,与具体实现无关设计在高层次进行,与具体实现无关 设计开发更加容易设计开发更加容易 早在设计期间就能发现问题早在设计期间就能发现问题 能够自动的将高级描述映射到具体工艺实现能够自动的将高级描述映射到具体工艺实现 在具体实现时才做出某些决定在具体实现时才做出某些决定 HDL具有更大的灵活性具有更大的灵活性 可重用可重用 可以选择工具及生产厂可以选择工具及生产厂 HDL能够利用先进的软件能够利用先进的软件 更快的输入更快的输入 易于管理易于管理Verilog的历史的历史Verilog HDL是在是在1983年由年由GDA(GateWay Design

12、Automation)公司公司的的Phil Moorby所创。所创。Phi MoorbyPhi Moorby后来成为后来成为Verilog-XLVerilog-XL的主要设计者和的主要设计者和CadenceCadence公司的第一个合伙人。公司的第一个合伙人。在在1984198519841985年间,年间,MoorbyMoorby设计出了第一个设计出了第一个Verilog-XLVerilog-XL的仿真器。的仿真器。19861986年,年,MoorbyMoorby提出了用于快速门级仿真的提出了用于快速门级仿真的XLXL算法。算法。19901990年,年,CadenceCadence公司收购了公

13、司收购了GDAGDA公司公司19911991年,年,CadenceCadence公司公开发表公司公开发表VerilogVerilog语言,成立了语言,成立了OVI(Open OVI(Open Verilog International)Verilog International)组织来负责组织来负责Verilog HDLVerilog HDL语言的发展。语言的发展。19951995年制定了年制定了Verilog HDLVerilog HDL的的IEEEIEEE标准,即标准,即IEEE1364IEEE1364。Verilog的用途的用途 Verilog的主要应用包括:的主要应用包括: ASICA

14、SIC和和FPGAFPGA工程师编写可综合的工程师编写可综合的RTLRTL代码代码 高抽象级系统仿真进行系统结构开发高抽象级系统仿真进行系统结构开发 测试工程师用于编写各种层次的测试程序测试工程师用于编写各种层次的测试程序 用于用于ASICASIC和和FPGAFPGA单元或更高层次的模块的模型开发单元或更高层次的模块的模型开发抽象级抽象级(Levels of Abstraction) VerilogVerilog既是一种行为描述的语言也是一种结构描述语既是一种行为描述的语言也是一种结构描述语言。言。VerilogVerilog模型可以是实际电路的不同级别的抽象。模型可以是实际电路的不同级别的抽

15、象。这些抽象的级别包括:这些抽象的级别包括:系统说明系统说明-设计文档设计文档/算法描述算法描述RTL/功能级功能级-Verilog门级门级/结构级结构级-Verilog版图版图/物理级物理级-几何图形几何图形行为综合行为综合综合前仿真综合前仿真逻辑综合逻辑综合综合后仿真综合后仿真版图版图抽象级抽象级(Levels of Abstraction) 在抽象级上需要进行折衷在抽象级上需要进行折衷系统说明系统说明-设计文档设计文档/算术描述算术描述RTL/功能级功能级-Verilog门级门级/结构级结构级-Verilog版图版图/物理级物理级-几何图形几何图形详细程度详细程度 低低 高高输入输入/仿

16、真速度仿真速度 高高 低低抽象级抽象级(Levels of Abstraction)VerilogVerilog可以在三种抽象级上进行描述可以在三种抽象级上进行描述行为级行为级 用功能块之间的数据流对系统进行描述用功能块之间的数据流对系统进行描述 在需要时在函数块之间进行调度赋值。在需要时在函数块之间进行调度赋值。RTL级级/功能级功能级用功能块内部或功能块之间的数据流和控制信号描述系统用功能块内部或功能块之间的数据流和控制信号描述系统基于一个已定义的时钟的周期来定义系统模型基于一个已定义的时钟的周期来定义系统模型结构级结构级/门级门级用基本单元用基本单元(primitive)或低层元件或低层

17、元件(component)的连接来描述系的连接来描述系统以得到更高的精确性,特别是时序方面。统以得到更高的精确性,特别是时序方面。在综合时用特定工艺和低层元件将在综合时用特定工艺和低层元件将RTL描述映射到门级网表描述映射到门级网表抽象级抽象级(Levels of Abstraction) 设计工程师在不同的设计阶段采用不同的抽象级设计工程师在不同的设计阶段采用不同的抽象级 首先在行为级描述各功能块,以降低描述难度,提高仿真速度。首先在行为级描述各功能块,以降低描述难度,提高仿真速度。 在综合前将各功能模块进行在综合前将各功能模块进行RTL级描述。级描述。 用于综合的库中的大多数单元采用结构级

18、描述。在本教程中的结用于综合的库中的大多数单元采用结构级描述。在本教程中的结构级描述部分将对结构级构级描述部分将对结构级(门级门级)描述进行更详细的说明。描述进行更详细的说明。 Verilog还有一定的晶体管级描述能力及算法级描述能力还有一定的晶体管级描述能力及算法级描述能力行为级和行为级和RTL级级MUX的行为可以描述为:只要信号的行为可以描述为:只要信号a或或b或或sel发生变化,如果发生变化,如果sel为为0则选择则选择a输出;否则选择输出;否则选择b输出。输出。module muxtwo (out, a, b, sel); input a, b, sel; output out; re

19、g out;always ( sel or a or b) if (! sel) out = a; else out = b;endmodule这个行为级这个行为级RTL描述不处理描述不处理X和和Z状态输入,并且没有延时。状态输入,并且没有延时。在行为级模型中,逻辑功能描述采用高级语言结构,如在行为级模型中,逻辑功能描述采用高级语言结构,如, while,wait,if, case。Testbench(test fixture)通常采用行为级描述。所有行为级结构在通常采用行为级描述。所有行为级结构在testbench描描述中都可以采用。述中都可以采用。RTL模型中数据流都是基于时钟的。任何时钟

20、元件在时钟沿处的行为都要精模型中数据流都是基于时钟的。任何时钟元件在时钟沿处的行为都要精确描述。确描述。RTL级描述是行为级级描述是行为级Verilog的子集。的子集。结构级描述结构级描述结构级结构级Verilog适合开发小规模元件,如适合开发小规模元件,如ASIC和和FPGA的单元的单元 Verilog内部带有描述基本逻辑功能的基本单元内部带有描述基本逻辑功能的基本单元(primitive),如,如and门。门。 用户可以定义自己的基本单元用户可以定义自己的基本单元UDP(User Defined Privitives) 综合产生的结果网表通常是结构级的。用户可以用结构级描述粘接综合产生的结

21、果网表通常是结构级的。用户可以用结构级描述粘接(glue)逻辑。逻辑。下面是下面是MUX的结构级描述,采用的结构级描述,采用Verilog基本单元基本单元(门门)描述。描述描述。描述中含有传输延时。中含有传输延时。module twomux (out, a, b, sl); input a, b, sl; output out; not u1 (nsl, sl ); and #1 u2 (sela, a, nsl); and #1 u3 (selb, b, sl); or #2 u4 (out, sela, selb);endmodule综合不综合不支持支持!仅需一种语言仅需一种语言Veril

22、og的一个主要特点是可应用于各种抽象级。建模时可采用门的一个主要特点是可应用于各种抽象级。建模时可采用门级和级和RTL级混合描述,在开发级混合描述,在开发testfixture时可以采用行为级描述。时可以采用行为级描述。语言的主要特点语言的主要特点module(模块模块)module能够表示:能够表示:物理块,如物理块,如IC或或ASIC单元单元逻辑块,如一个逻辑块,如一个CPU设计的设计的ALU部分部分整个系统整个系统每一个模块的描述从关键词每一个模块的描述从关键词module开始,有一个开始,有一个名称名称(如(如SN74LS74,DFF,ALU等等),由关键词等等),由关键词endmod

23、ule结束。结束。module是层是层次化设计的基次化设计的基本构件本构件逻辑描述放在逻辑描述放在module内部内部语言的主要特点语言的主要特点模块端口(module ports)端口在模块名字端口在模块名字后的括号中列出后的括号中列出端口可以说明为端口可以说明为input, output及及inout端口等价于硬件端口等价于硬件的引脚的引脚(pin)注意模块的名称DFF,端口列表及说明模块通过端口与外部通信语言的主要特点语言的主要特点模块实例化模块实例化(module instances)module DFF (d, clk, clr, q, qb); .endmodulemodule R

24、EG4( d, clk, clr, q, qb); output 3: 0 q, qb; input 3: 0 d; input clk, clr; DFF d0 (d 0, clk, clr, q 0, qb 0); DFF d1 (d 1, clk, clr, q 1, qb 1); DFF d2 (d 2, clk, clr, q 2, qb 2); DFF d3 (d 3, clk, clr, q 3, qb 3);endmodule语言的主要特点语言的主要特点可以将模块的实例通过端口连接起来构成一个大的系可以将模块的实例通过端口连接起来构成一个大的系统或元件。统或元件。在上面的例子中

25、,在上面的例子中,REG4有模块有模块DFF的四个实例。注的四个实例。注意,每个实例都有自己的名字意,每个实例都有自己的名字(d0, d1, d2, d3)。实例。实例名是每个对象唯一的标记,通过这个标记可以查看每名是每个对象唯一的标记,通过这个标记可以查看每个实例的内部。个实例的内部。实例中端口的次序与模块定义的次序相同。实例中端口的次序与模块定义的次序相同。模块实例化与调用程序不同。每个实例都是模块的一模块实例化与调用程序不同。每个实例都是模块的一个完全的拷贝,相互独立、并行。个完全的拷贝,相互独立、并行。模块实例化模块实例化(module instances)一个完整的简单例子一个完整的

26、简单例子 test fixture被测试器件被测试器件DUT是一个二选一多路器。测试装置是一个二选一多路器。测试装置(test fixture)提提供测试激励及验证机制。供测试激励及验证机制。Test fixture使用行为级描述,使用行为级描述,DUT采用门级描述。下面将给出采用门级描述。下面将给出Test fixture的描述、的描述、DUT的描述及如何进行混合仿真。的描述及如何进行混合仿真。DUT 被测器件 (device under test) module MUX2_1 (out, a, b, sel); / Port declarations output out; input a

27、, b, sel; wire out, a, b, sel; wire sel_, a1, b1; / The netlist not (sel_, sel); and (a1, a, sel_); and (b1, b, sel); or (out, a1, b1);endmodule注释行注释行已定义的已定义的 Verilog基基本单元的本单元的实例实例a, b, sel是输入端口,是输入端口,out是输出是输出端口。所有信号通过这些端口从模端口。所有信号通过这些端口从模块输入块输入/输出。输出。另一个模块可以通过模块名及端口另一个模块可以通过模块名及端口说明使用多路器。实例化多路器时说明

28、使用多路器。实例化多路器时不需要知道其实现细节。这正是自不需要知道其实现细节。这正是自上而下设计方法的一个重要特点。上而下设计方法的一个重要特点。模块的实现可以是行为级也可以是模块的实现可以是行为级也可以是门级,但并不影响高层次模块对它门级,但并不影响高层次模块对它的使用。的使用。多路器由关键多路器由关键词词module和和endmodule开始及结束。开始及结束。Test Fixture templatemodule testfixture; / Data type declaration / Instantiate modules / Apply stimulus / Display re

29、sultsendmodule为什么没为什么没有端口?有端口?由于由于testfixture是最顶层模是最顶层模块,不会被其它模块实例化。块,不会被其它模块实例化。因此不需要有端口。因此不需要有端口。Test Fixture 如何说明实例module testfixture; / Data type declaration / Instantiate modules MUX2_1 mux (out, a, b, sel); / Apply stimulus / Display resultsendmodule多路器实例化语句多路器实例化语句MUXMUX的实例化语句包括:的实例化语句包括: 模块名

30、字:与引用模块相同模块名字:与引用模块相同 实例名字:任意,但要符合标记命名规则实例名字:任意,但要符合标记命名规则 端口列表:与引用模块的次序相同端口列表:与引用模块的次序相同Test Fixture 过程(procedural block)所有过程在时间所有过程在时间0执行一次执行一次过程之间是并行执行的过程之间是并行执行的 过程语句有两种:过程语句有两种: initial :只执行一次:只执行一次 always :循环执行:循环执行Test Fixture 过程(procedural block)通常采用过程语句进行行为级描述。通常采用过程语句进行行为级描述。test fixture的激

31、的激励信号在一个过程语句中描述。励信号在一个过程语句中描述。过程语句的活动与执行是有差别的过程语句的活动与执行是有差别的所有过程在时间所有过程在时间0处于活动状态,并根据用户定义的条件等待处于活动状态,并根据用户定义的条件等待执行;执行;所有过程并行执行,以描述硬件内在的并行性;所有过程并行执行,以描述硬件内在的并行性;Test fixture 激励描述module testfixture; / Data type declaration reg a, b, sel; wire out; / MUX instance MUX2_1 mux (out, a, b, sel); / Apply s

32、timulus initial begin a = 0; b = 1; sel = 0; #5 b = 0; #5 b = 1; sel = 1; #5 a = 1; #5 $finish; end / Display resultsendmoduleTime Values a b sel0 0 1 05 0 0 010 0 1 115 1 1 1例子中,例子中,a, b, sela, b, sel说明为说明为regreg类数据。类数据。regreg类数据是寄存器类数据信号,在重新类数据是寄存器类数据信号,在重新赋值前一直保持当前数据。赋值前一直保持当前数据。#5 #5 用于指示等待用于指示等

33、待5 5个时间单位。个时间单位。$ $finishfinish是结束仿真的系统任务。是结束仿真的系统任务。Test Fixture 响应产生响应产生$time 系统函数,给出当前仿真时间$monitor 系统任务,若参数列表中的参数值发生变化,则在时间单位末显示参数值。 $monitor (“format_specifiers”, );例如: $monitor($time, o, in1, in2); $monitor($time, , out, , a, , b, , sel); $monitor($time, “%b %h %d %o”, sig1, sig2, sig3, sig4);V

34、erilog提供了一些系统任务和系统函数,包括:提供了一些系统任务和系统函数,包括:注意不能注意不能有空格有空格Test Fixture 响应产生响应产生$time$time是一个系统函数,返回当前返回仿真时间。时间是一个系统函数,返回当前返回仿真时间。时间用用6464位整数表示。位整数表示。$monitor $monitor 在在时间单位时间单位末,若参数列表中的参数值发生末,若参数列表中的参数值发生变化则显示所列参数的值。由变化则显示所列参数的值。由$time$time引起的变化不会显引起的变化不会显示。示。$monitor$monitor系统任务支持不同的数基。缺省数基是十进系统任务支持

35、不同的数基。缺省数基是十进制。支持的数基还有二进制、八进制、十进制。制。支持的数基还有二进制、八进制、十进制。完整的完整的Test Fixturemodule testfixture; / Data type declaration reg a, b, sel; wire out; / MUX instance MUX2_1 mux (out, a, b, sel); / Apply stimulus initial begin a = 0; b = 1; sel = 0; #5 b = 0; #5 b = 1; sel = 1; #5 a = 1; #5 $finish; end/ Disp

36、lay results initial $monitor($time, out=%b a=%b b=%b sel=%b, out, a, b, sel);endmodule0 out= 0 a= 0 b= 1 sel= 05 out= 0 a= 0 b= 0 sel= 010 out= 1 a= 0 b= 1 sel= 115 out= 1 a= 1 b= 1 sel= 1结果输出结果输出时间单位末的概念时间单位末的概念timescale 1ns/1ns module testfixture; / Data type declaration reg a, b, sel; wire out; / MUX instance MUX2_1 mux (out, a, b, sel); / Apply stimulus initia

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论