1.我是文本 红色red
2.我是文本 蓝色
3.我是文本 粉红
4.我是文本 紫色
5.我是文本 黑色
6.我是文本 橙色
7.我是文本 Navy
8.我是文本 绿色
9.我是文本 DarkTurquoise
10.我是文本 Lime
一、FPGA基础
1、FPGA基本结构
FPGA(Field Programmable Gate Array,现场可编程门阵列):一种可以通过编程来修改其逻辑功能的数字集成电路(芯片)。通过编程,用户可以随时改变它的应用场景,它可以模拟 CPU、GPU 等硬件的各种并行运算。通过与目标硬件的高速接口互联,FPGA 可以完成目标硬件运行效率比较低的部分, 从而在系统层面实现加速。
目前主流 FPGA 都采用了 SRAM 工艺的查找表(LUT)结构,LUT 本质上就是一个 RAM。FPAG 内部组成部分主要有:可编程输入/输出单元(IOB)、可编程逻辑单元(CLB,Configurable Logic Block)、底层内嵌功能单元、嵌入式块 RAM(BRAM,Block RAM)、 丰富的布线资源、内嵌专用硬核资源。
(1)可编程输入/输出单元(IOB)
输入/输出(Input/Ouput)单元简称 I/O 单元,它们是芯片与外界电路的接口部分,完成不同电气特性下 对输入/输出信号的驱动与匹配需求。
为了便于管理和适应多种电器标准,FPGA 的 IOB 被划分为若干个组(bank),每个 bank 的接口标准由其接口电压 VCCO 决定,一个 bank 只能有一种 VCCO, 但不同 bank 的 VCCO 可以不同。只有相同电气标准的端口才能连接在一起,VCCO 电压相同是接口标准的基本条件。
(2)可编程逻辑单元(CLB,Configurable Logic Block)
基本可编程逻辑单元是可编程逻辑的主体,可以根据设计灵活地改变其内部连接与配置,完成不同的逻辑功能。FPGA 一般是基于 SRAM 工艺的,其基本可编程逻辑单元几乎都是由查找表(LUT,Look Up Table)和寄存器(Register)组成。Xilinx 7 系列 FPGA 内部查找表为 4 输入,查找表一般完成纯组合逻辑功能。FPGA 内部寄存器结构相当灵活,可以配置为带同步/异步复位或置位,时钟使能的触发器,也可以配置成锁存器,FPGA 依赖寄存器完成同步时序逻辑设计。
Xilinx 7 系列 FPGA 中的可编程逻辑单元叫 CLB(Configurable Logic Block,可配置逻辑块),每个 CLB 里包含两个逻辑片(Slice)。每个 Slice 由 4 个查找表、8 个触发器和其他一些逻辑所组成的。CLB 示意图如下所示:
(3)底层内嵌功能单元
一般指的是通用程度较高的嵌入式功能模块,比如 PLL(Phase Locked Loop)、DLL(Delay Locked Loop)、DSP、CPU 等软处理核(Soft Core)。
Xilinx 7 系列器件中的时钟资源包含了时钟管理单元 CMT(Clock Management Tile,即时钟管理单 元),每个 CMT 由一个 MMCM(Mixed-Mode Clock Manager,即混合模式时钟管理)和一个 PLL(Phase Locked Loop,即锁相环)组成,xc7z020 芯片内部有 4 个 CMT,xc7z010 芯片内部有 2 个 CMT, 为设备提供强大的系统时钟管理以及高速 I/O 通信的能力。
(4)嵌入式块 RAM(BRAM,Block RAM)
RAM 可被配置为单端口 RAM、双端口 RAM、内容地址存储器(CAM)以及 FIFO 等常用存储结构。 Block RAM 由一定数量固定大小的存储块构成,使用 BRAM 不占用额外逻辑资源,并且速度快。
(5)丰富的布线资源
布线资源连通 FPGA 内部的所有单元,而连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。FPGA 芯片内部有着丰富的布线资源,这些布线资源根据工艺、长度、宽度和分布位置的不同而划分为 4 类不同的类别:全局布线资源、长线资源、短线资源、 分布式布线资源。
- 第一类全局布线资源,用于芯片内部全局时钟和全局复位/置位的布线;
- 第二类长线资源,用以完成芯片 Bank 间的高速信号和第二全局时钟信号的布线;
- 第三类短线资源,用于完成基本逻辑单元之间的逻辑互连和布线;
- 第四类分布式布线资源,用于专有时钟、复位等控制信号线。
(6)内嵌专用硬核资源
内嵌的专用硬核是相对底层嵌入的软核而言的,指 FPGA 处理能力强大的硬核(Hard Core),等效于 ASIC 电路。主要有乘法器、串并收发器、PCI-E、以太网控制器等。
2、FPGA设计流程
1、项目系统规划:在 FPGA 设计项目开始之前,首先要进行的是方案论证、系统设计和FPGA芯片选择等准备工作。系统工程师根据任务要求,如系统的指标和复杂度,对工作速度和芯片本身的各种资源、成本等方面进行权衡,选择合理的设计方案和合适的器件类型。一般都采用自顶向下的设计方法,把系统分成若干个基本单元,然后再把每个基本单元划分为下一层次的基本单元,一直这样做下去,直到可以直接使用EDA元件库为止。主要完成如下工作:
- 需求分析:首先需要对项目需求进行详细分析,提取项目需求需要实现什么功能;
- 系统设计:根据项目需求就可以进行系统架构设计,架构设计主要是采用自顶向下的方法将系统由大的模块划分为各个小的模块;
- 硬件选型:根据系统架构分析结果,就可以来选择合适规模和性能的 FPGA 芯片,这个工作称为 FPGA 器件选型;
- 绘制系统框图:确定系统内各个子模块的结构层次,梳理系统对外的输入、输出信号和子模块之间的 交互信号;
- 绘制波形图:根据各个模块的功能并且结合芯片的数据手册或者接口协议,确定模块接口信号的时序 关系,然后使用绘图软件绘制各个模块的时序波形图。
2、编写RTL代码:按照上述分析工作将所设计的系统或电路以RTL软件代码的形式表示出来,并输入给EDA工具的过程。
- RTL(Register Transfer Level,寄存器转换级),主要描述各级寄存器(时序逻辑中的寄存器),以及寄存器之间的信号的是如何转换的(时序逻辑中的组合逻辑)。
- 通俗来讲,RTL 的输入一般为两种,使用硬件描述语言 Verilog HDL/VHDL 进行编写或者原理图输入。原理图就是比较老的做法了,通过门电路的拖拽连接起来设计系统,所以现在基本都是用语言工具来描述了。
3、功能(行为)仿真:功能(行为)仿真,也称为前仿真,是在编译之前对用户所设计的电路进行逻辑功能验证,此时的仿真没有延迟信息,仅对初步的功能进行检测。
- 具体做法是:按照第二步中 RTL 代码的输入激励需求,编写对应的仿真代码,然后使用仿真工具对编写的 RTL 代码进行仿真,根据仿真工具的提示信息进行代码修改,直至达到输出要求的波形为止。
4、综合:所谓综合就是将较高级抽象层次的描述转化成较低级层次的描述。
- 就目前的层次来看,综合优化是指将设计输入编译成由与门、或门、非门、RAM、触发器等基本逻辑单元组成的逻辑连接网表,而并非真实的门级电路。
- 真实具体的门级电路需要利用 FPGA 制造商的布局布线功能,根据综合后生成的标准门级结构网表来产生。
- 为了能转换成标准的门级结构网表,HDL程序的编写必须符合特定综合器所要求的风格。由于门级结构、RTL级的HDL程序的综合是很成熟的技术,所有的综合器都可以支持这一级别的综合。
5、综合后仿真:综合后仿真检查综合结果是否与原设计一致。在仿真时,把综合生成的标准延时文件反标注到综合仿真模型中,可估计门延时带来的影响,但是不能估计线延时,因此估计结果和布线后的实际情况还有一定的差距,并不十分准确。
- 目前的综合工具较为成熟,一般的设计可以省略这一步,但如果在布局布线后发现电路结构和设计意图不符,则需要回溯到综合后仿真来确认问题所在。在功能仿真中使用的软件工具一般都支持综合后仿真。
6、设计实现与布局布线:实现是将综合生成的逻辑网表配置到具体的 FPGA 芯片上,布局布线是其中最重要的过程。
- 布局是指将逻辑网表中的硬件原语和底层单元合理地配置到芯片内部的固有硬件结构上,这往往需要在速度最优和面积最优之间进行选择。
- 布线是指根据布局的拓扑结构,利用芯片内部的各种连线资源,合理正确地连接各个元件。
7、时序仿真(后仿真):时序仿真,也称为后仿真,是指将布局布线的延时信息反标注到设计网表中来检测有无时序违规(即不满足时序约束条件或器件固有的时序规则,如建立时间、保持时间等)现象。
- 时序仿真包含的延迟信息最全,也最精确,能较好地反映芯片的实际工作情况。
- 由于不同芯片的内部延时不一样,不同的布局布线方案也给延时带来不同的影响。因此在布局布线后,通过对系统和各个模块进行时序仿真,分析其时序关系,估计系统性能,以及检查和消除竞争-冒险是非常有必要的。
8、板级调试:将生成的数据流文件(bitstream,比特流文件)下载到 FPGA 芯片中,测试实际运行结果。
- 最好的方式是外接逻辑分析仪查看,但这样需要占用一些 IO 接口,而且一般人手头没有逻辑分析仪器。比较实用的方法是使用内嵌的逻辑分析仪 ILA。
9、程序固化:将生成的数据流文件固化到项目的非易失性存储器当中,这样每次上电FPGA运行的就是设计的这个工程了。