产品研发中心应用产品组蒋伟2012年2月FPGA内部技术培训目录2什么是FPGA?1VerilogHDL语言基础3如何使用ISE开发环境4FPGA开发实践1、什么是FPGA?1.1可编程逻辑器件基础1、什么是FPGA?1.1可编程逻辑器件基础18x18bitEmbeddedPipelinedMultipliersforefficientDSPConfigurable18KBlockRAMs+DistributedRAM4I/OBanks,SupportforallI/OStandardsincludingPCI™,DDR333,RSDS,mini-LVDSGuaranteedDensityMigrationNumerouspartsinthesamepackageUptoeighton-chipDigitalClockManagerstosupportmultiplesystemclocksBank0Bank1Bank2Bank31.1可编程逻辑器件基础可编程逻辑器件(ProgrammableLogicDevice,PLD)顾名思义,完全由用户通过软件进行配置和编程,从而完成某种特定的功能,而且可以反复擦写的器件。PLD产品PROM编程只读存储器FPLA现场可编程逻辑阵列PAL可编程阵列逻辑GAL通用阵列逻辑EPLA可擦除的可编程逻辑阵列CPLD复杂可编程逻辑器件FPGA(FieldProgrammableArray)现场可编程门阵列,属于可编程逻辑器件的一种。通过可编程互连连接的可配置逻辑块(CLB)矩阵构成的可编程半导体器件。1、什么是FPGA?1.1可编程逻辑器件基础准确地将用户设计转换为电路模块能够高效地利用器件资源能够快速地完成编译和综合提供丰富的IP核资源用户界面友好,操作简单PLD开发软件优秀的PLD开发软件Xilinx公司的ISEAltera公司的QuartusII、MaxplusII1、什么是FPGA?1.1可编程逻辑器件基础1.2FPGA工作原理四输入一输出的电路模块??ABZCD1、什么是FPGA?1.2FPGA工作原理查找表(Look-Up-Table)LUTLUT本质就是一个RAM。FPGA多使用4输入一输出的LUT,一个LUT等效于为一个有4位地址线的16×1的RAM。将真值表写入RAM后,每输入一个信号进行逻辑运算,就等于输入一个地址进行查表,找出地址对应的内容后输出即可。4-inputlogicfunctionLUT=CDZABInputs(ABCD)Output(Z)00000000100010100110……..1110111111TruthTable图1-1LUT原理示意图1、什么是FPGA?1.2FPGA工作原理FPGA工作原理的实质FPGA的工作状态实质是由片内RAM(LUT)决定的,所以通过对片内RAM进行编程(配置LUT,更新真值表),就能完成某种特定功能。1、什么是FPGA?1.2FPGA工作原理FPGA芯片结构FPGA主要由6个部分组成:IOB(可配置输入输块)CLB(可配置逻辑块)DCM(时钟管理单元)BRAM(嵌入式块RAM)WIRE(布线资源)IP核(内嵌底层功能单元和专用硬件模块)1.3FPGA芯片结构1、什么是FPGA?1.2FPGA工作原理CLBCLBCLBCLBBRAMBRAMCLBCLBIOBIOBDCMIOBIOBIOBIOBIOBIOBIOBIOBIOBIOBIOBIOBIOBIOBIOBIOB图1-2FPGA芯片的内部结构1、什么是FPGA?1.2FPGA工作原理定义:芯片与外界电路的接口部分。功能:匹配不同的电气特性、I/O标准、I/O物理特性。比如调整驱动电流的大小、上下拉电阻、频率、TTL、LVDS。IOB(可编程输入输出块)WIRE(布线资源)布线资源用于连通FPGA内部的所有单元。第一类:全局布线资源,用于芯片内部全局时钟和全局复位布线。第二类:长线资源,用于BANK间的高速信号。第三类:短线资源,用于基本逻辑单元间的互连和布线。第四类:分布式资源,用于专用时钟、复位等控制信号。1、什么是FPGA?1.2FPGA工作原理BRAM(嵌入式块RAM)4096x4Dual-PortDOA[3:0]DOB[3:0]WEAENARSTAADDRA[11:0]CLKADIA[3:0]WEBENBRSTBADDRB[11:0]CLKBDIB[3:0]1、什么是FPGA?1.2FPGA工作原理BRAM(嵌入式块RAM)1、什么是FPGA?1.2FPGA工作原理DCM(时钟管理单元)1、什么是FPGA?1.2FPGA工作原理DCM(时钟管理单元)DCMDCMDCMDCM1、什么是FPGA?1.2FPGA工作原理CLB是FPGA内部基本的逻辑单元。CLB包含:一个可配置的开关矩阵、一些选型电路(多路复用器)和触发器组成。CLB(可配置逻辑块)XILINX的CLBCLB=SwitchMatrix+4Slice+附加逻辑。(开关矩阵)(2SLICEM+2SLICEL)Slice是XILINX定义的基本逻辑单位。由2个4/6输入的查找表、进位逻辑、算数逻辑、存储逻辑、复用器组成。1、什么是FPGA?1.2FPGA工作原理CINSwitchMatrixCOUTCOUTSLICEMS0X0Y0SLICEMS1X0Y1SLICELS2X1Y0SLICELS3X1Y1CINSHIFTCLB示意图CLB(可配置逻辑块)1、什么是FPGA?1.2FPGA工作原理IP核:具有知识产权的集成电路芯核总称。分为软核、固核、硬核。IP核(内嵌底层功能单元和专用硬件模块)软核:对电路的硬件语言描述,包括逻辑描述、网表和帮助文档等,以用HDL文本形式提交给用户。固核:IP固核的设计程度则是介于软核和硬核之间,除了完成软核所有的设计外,还完成了门级电路综合和时序仿真等设计环节。一般以门级电路网表的形式提供给用户。硬核:基于半导体工艺的物理设计,布局和工艺固定、经过前端和后端验证的设计,设计人员不能对其修改。其提供给用户的形式是电路物理结构掩模版图和全套工艺文件,是可以拿来就用的全套技术。1、什么是FPGA?1.2FPGA工作原理1、什么是FPGA?1.3FPGA开发流程1.3FPGA开发流程FPGA设计方法硬件设计包括:FPGA芯片电路、存储器、输入\输出接口电路以及其他设备。软件设计思想:自顶向下顶层系统2级模块A2级模块B2级模块C3级模块A33级模块A23级模块A13级模块C23级模块C11、什么是FPGA?1.3FPGA开发流程软件设计流程SourceCodeSourceCodeDeveloperSourceLevelSimulationSynthesisToolSynthesisConstraintsNet-ListDeveloperTranslationImplementationConstraintsMapingPlacementandRoutingBitstreamGenerationTimingSimulation.xcf.edf,.edif,.ngd.vhd,.v.ucf.bitmergednetlistpost-mapstatictimingreportpost-place&routestatictimingreportpost-synthesisstatictimingreport“implementation”verifybehaviorverifybehavior&performanceTextEditorConstraintsEditorPinAheadPlanAheadNet-ListDeveloper1、什么是FPGA?1.4XILINX公司FPGA简介1.4XILINX公司FPGA简介XILINX公司目前有两大类FPGA产品:Spartan类和Virtex类。前者面向低成本的中低端应用。后者面向高端应用。两者的差异仅限于芯片的规模和专用模块上。1、什么是FPGA?1.4XILINX公司FPGA简介1.4XILINX公司FPGA简介2、VerilogHDL语言基础2.1VerilogHDL简介HDL:具有特殊结构能够对硬件逻辑电路的功能进行描述的一种高级编程语言。这种特殊结构能够:–描述电路的连接–描述电路的功能–在不同抽象级上描述电路–描述电路的时序–表达具有并行性HDL主要有两种:Verilog和VHDL。Verilog起源于C语言,因此非常类似于C语言,容易掌握什么是硬件描述语言HDL2、VerilogHDL语言基础2.1VerilogHDL简介•VerilogHDL是在1983年由GDA(GateWayDesignAutomation)公司的PhilMoorby所创。PhiMoorby后来成为Verilog-XL的主要设计者和Cadence公司的第一个合伙人。•在1984~1985年间,Moorby设计出了第一个Verilog-XL的仿真器。•1986年,Moorby提出了用于快速门级仿真的XL算法。•1990年,Cadence公司收购了GDA公司•1991年,Cadence公司公开发表Verilog语言,成立了OVI(OpenVerilogInternational)组织来负责VerilogHDL语言的发展。•1995年制定了VerilogHDL的IEEE标准,即IEEE1364。VerilogHDL的历史2、VerilogHDL语言基础2.1VerilogHDL简介二选一选择器的实现:modulemuxtwo(out,a,b,sel);inputa,b,sel;outputout;regout;always@(seloraorb)if(!sel)out=a;elseout=b;endmoduleVerilogHDL的基本程序结构2、VerilogHDL语言基础2.2基本概念词法约定空白符:空格、换行、制表TAB。除了字符串中的空白符,空白符仅仅用于分辨标识符,编译的时候忽略。注释:单行注释//,多行注释/**/操作符:单目、双目、三目操作符数字声明:声明位数和不声明位数(默认十进制),建议声明位数。不确定值X,高阻值Z。8’b0x11_00z1,12’habc,16’d255,25,’o25,-6’d3字符串:”hello”标识符:字母、数字、_、$组成,区分大小写,第一个字符必须是字母或者下划线。关键字:特殊标识符,全小写。2、VerilogHDL语言基础2.2基本概念数据类型(表示数字电路硬件中的数据存储和传送元素)四值逻辑:0、1、X、Z主要包含:wire型、reg型、memory型和parameter型,共19种wire型硬件单元之间的连接,连线。wirea,b,c=1’b1,d;wiree[7:0];//位宽为8的wire信号,向量2、VerilogHDL语言基础2.2基本概念reg型存储元件,保持原有数字,直到被改写。数据存储单元的抽象。rega,b,c=1’b1,d;//位宽为1的寄存器rege[7:0];//位宽为8的寄存器memory型对reg变量建立数组来对存储器建模,描述RAM、ROMrega[0,1024];//1K的1位寄存器reg[7:0]e[0:1024];//1K的8位寄存器,宽度和深度2、VerilogHDL语言基础2.2基本概念parameter型定义常量,提高可读性和可维护性parameter∏=3.1415926;parameter[3:0]S0=4’h0,S1=4’h1,S2=4’h2,S3=4’h3;2、VerilogHDL语言基础2.2基本概念integer、real、time、字符串型通用的寄存器数据类型,用于对数量进行操作。integercounter;integercounter[0:7];realdelay;timedelaytime;real[8*3-1,0]string;string=