FPGA笔试必会知识点2—FPGA器件

FPGA

综合工具并不一定保证能够充分利用芯片结构特点以达到最优目的而且工具本身也不一定非常智能,因为设计本身是复杂多样的且一直在变化,问题总会越来越多,因此在这种情况下,我们必须了解我们的器件结构了解我们的设计是如何实现的它是否充分利用到了FPGA里面的特有资源:如进位链shift register IOB中的register等。如果没有,则应当想办法充分利用,如修改代码,以适合FPGA结构特性或者采用coregen生成的module等。这在许多场合是一个非常行之有效的手段。

FPGA芯片基本结构

参考《Altera FPGA/CPLD 设计基础篇》

FPGA笔试必会知识点2—FPGA器件

FPGA芯片基本由6个部分组成:

  • IOB可编程输入输出单元;
  • CLB基本可编程逻辑单元;
  • 嵌入式RAM;
  • 丰富的布线资源;
  • 底层嵌入式功能单元:PLL/DCM/CPU/DSP/乘法器等;
  • 内嵌专用硬核:SERDES等;
  1. IOB可编程输入输出单元

完成不同电气特性下对输入/输出信号的驱动与匹配需求,可以设置IO的匹配阻抗特性、上下拉电阻、驱动电流大小等;

  1. CLB基本可编程逻辑单元

Altera的FPGA一般是基于SRAM工艺的,基本可编程单元几乎由查找表LUT和寄存器组成。查找表LUT一般为4输入,完成纯组合逻辑功能,寄存器可以配置为带同步/异步复位或置位,时钟使能的触发器(Flip flop),也可以配置成锁存器,完成同步逻辑设计;

Altera:可编程逻辑单元LE

LE由一个LUT和一个寄存器构成,大多数FPGA将10个LE构成1个LAB(逻辑阵列块),LAB包含LE间的进位链、LAB控制信号、局部连线资源、LUT级联链,寄存器级联链。

Xilinx:可编程逻辑单元slice

一个slice由上下连个部分组成,每个部分称为LC(logic cell),每个LC由一个寄存器和一个LUT构成,两个LC之间包含一些公用的逻辑,完成LC之间的级联和配合;

  1. 嵌入式RAM

    单口RAM、双口RAM、伪双端口RAM、FIFO等

    Altera:M9K、M144K;

    Xilinx:4kbit、18kbit;

    简单双口ram:两个端口,一个只能读,一个只能写操作;

    真正的双口ram:两个端口,都可以用不同的时钟进行读写操作;

  2. 丰富的布线资源

全局布线资源:全局时钟、全局复位/置位的布线;

长线资源:Bank(分区)间的高速信号,第二全局时钟信号(low skew和小的jitter);

短线资源:基本逻辑单元之间的逻辑互连与布线;

基本逻辑单元内部连线:布线资源,专用时钟、复位等控制信号线;

FPGA笔试必会知识点2—FPGA器件

Stratix:全局时钟网络可以由专用的时钟引脚、芯片内部的PLL进行驱动;

区域时钟网络:每个区域都有区域时钟网络rclk,可以在改区域内提供更少的时钟延迟和时钟偏斜skew;

一个PLL可以驱动两个全局时钟网络和一个IO引脚;

PLL的反馈模式:

  1. 正常反馈模式:由时钟网络末端反馈至PLL反馈时钟输入端;
  2. 0延迟反馈模式;
  3. 无补偿模式;
    1. 底层嵌入式功能单元:PLL/DCM/CPU/DSP/乘法器等
    2. 内嵌专用硬核:SERDES等

FPGA设计流程

参考《华为静态时序分析与逻辑设计》

FPGA笔试必会知识点2—FPGA器件

设计输入

常用的方法有硬件描述语言(HDL)和原理图输入方法等。

功能仿真

FPGA过程中的仿真有三种:行为仿真、逻辑仿真、时序仿真。

常用的工具有ModelTech公司的ModelSim、Sysnopsys公司的VCS和Cadence公司的NC-Verilog以及NC-VHDL等软件。

综合:Synthesis

所谓综合就是将较高级抽像层次的硬件语言描述转化成较低层次的描述。综合优化根据目标与要求优化所生成的逻辑连接,使层次设计平面化,供FPGA布局布线软件进行实现。综合优化(Synthesis)是指将设计输入编译成由与门、或门、非门、RAM、触发器等基本逻辑单元组成的逻辑连接网表(Netlist Writer),而并非真实的门级电路。

综合过程的输入可以是设计源文件(.v/.vhd/.tdf/.bdf 等),也可以是第三方综合工具的输出文件,如 Synplify 综合工具输出的综合结果.edf/.vqm 文件。综合后形成工程数据库文件,用于后续的布局布线流程。

常用的综合工具有Synplicity公司的Synplify/SynplifyPro软件以及各个FPGA厂家自己推出的综合开发工具。

综合后仿真

综合后仿真检查综合结果是否和原设计一致。在仿真时,把综合生成的标准延时文件反标注到综合仿真模型中去,可估计门延时带来的影响。但这一步骤不能估计线延时,因此和布线后的实际情况还有一定的差距,并不十分准确。目前的综合工具较为成熟,对于一般的设计可以省略这一步。

布局布线place and route

布局布线:可理解为利用实现工具把逻辑连接网表映射(MAP)到目标器件结构的资源中,决定逻辑的最佳布局,选择逻辑与输入输出功能链接的布线通道进行连线,并产生相应文件(如配置文件与相关报告),实现(implementation)是将综合生成的逻辑网表配置到具体的FPGA芯片上,布局布线是其中最重要的过程。

布局将逻辑网表中的硬件原语和底层单元合理地配置到芯片内部的固有硬件结构上,并且往往需要在速度最优和面积最优之间做出选择。布线根据布局的拓扑结构,利用芯片内部的各种连线资源,合理正确地连接各个元件。

目前,FPGA的结构非常复杂,特别是在有时序约束条件时,需要利用时序驱动的引擎进行布局布线。

布局布线后,产生标准网表文件(.vo) 以及标准延时(.sdo)文件,用于对设计进行时序仿真(后仿真)。

时序仿真

时序仿真,也称为后仿真,是指将布局布线的延时信息反标注到设计网表中来检测有无时序违规(即不满足时序约束条件或器件固有的时序规则,如建立时间、保持时间等)现像。

时序仿真包含的延迟信息最全,也最精确,能较好地反映芯片的实际工作情况。由于不同芯片的内部延时不一样,不同的布局布线方案也给延时带来不同的影响。因此在布局布线后,通过对系统和各个模块进行时序仿真,分析其时序关系,估计系统性能,以及检查和消除竞争冒险是非常有必要的。

作为xilinx,第三方的综合工具可以提供EDIF或者NCF文件,自带的XST综合工具输出的是NGC,与此同时,我们可能还会用到xilinx的 core,core文件主要以edn形式存在;有了这些文件我们就进入implementation阶段,这个阶段分translate,Map,PAR 三大部分,translate是把综合得到网表和core的网表文件转化为NGD文件,作为Map的输入,Map是把网表文件映射到Xilinx中的基本元件中,如slice,blockram等等,最后PAR也就是place and route,最后就可以生成bit文件了。

FPGA笔试必会知识点2—FPGA器件

asic设计前后端是如何分的呢?asic设计的前后端就如FPGA设计的Implementation之前之后(Xilinx)的区分,前端负责综合网表之前的所有事情,而后端负责Netlist到GDSII(一种时序提供格式,用于掩膜)的过程。

FPGA设计技巧(可编程逻辑设计—设计常用技巧)

FPGA器件选型

参考《Altera FPGA/CPLD 设计高级篇》

  1. Register、LUT数量;
  2. 综合性问题、设计需求、成本压力、规模、速度等级、时钟资源、I/O数量与特性、封装、专用功能模块;

FPGA单板设计与调试

参考《Altera FPGA/CPLD 设计高级篇》

FPGA配置的可靠性

  1. 配置过程的CRC校验

配置过程CRC校验有错误,nSTATUS信号拉低;

  1. 掉电重配置保护

当FPGA的VCC出现低电压的时候,信号停止工作,同时将nSTATUS拉低来指示操作错误,需要重新配置芯片。当外部检测到FPGA的nSTATUS信号为低后,将nCONFIG拉高,开始配置FPGA。

  1. Configration RAM数据的CRC校验

FPGA内部有CRC校验计算电路,对FPGA内部配置RAM中的数据不断地进行CRC校验,若有错误,将通过CRC_ERROR指示出来。

配置电路设计

  1. DCLK,TCLK

PCB设计时,DCLK、TCLK信号需要当做高速时钟信号来处理,因为DCLK、TCLK的上冲和下冲、振铃或其他的噪声都可以造成配置数据的错误。

  1. 多片配置信号处理

多片同时配置时,建议将nSTAUTS、DCLK、DATA0、nCONFIG和CONF_DONE等信号连接在一起,以保证所有器件同时开始和结束配置。

配置芯片延时

配置芯片在配置完成FPGA后,会检测nCS引脚上的电平(nCS引脚连接在FPGA的CONFIG_DONE)。增强型配置芯片会在最后一个配置bit送出后的64个时钟周期开始检测CONFIG_DONE信号,而EPC2将等待16个DCLK时钟周期。如果配置芯片没有按时接收到CONFIG_DONE信号,则会将nSTATUS拉低,指示配置出错。由此,配置芯片nCS到FPGA的CONFIG_DONE引脚之间的连线不要太长,不然容易造成容性延时,以致CONFIG_DONE信号上升时间过长。

INIT_DONE信号

INIT_DONE信号用于指示FPGA芯片是否开始接收数据,INIT_DONE是一个可选配置引脚,漏极开路输出,需要上拉电阻。使能INIT_DONE的bit位送入FPGA后,INIT_DONE出现下降,标志FPGA开始接受配置。

上一篇:Flutter - 弹出底部菜单Show Modal Bottom Sheet


下一篇:C/C++实践笔记 008