FPGA

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

FPGA芯片基本结构

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

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);

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

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

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

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

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

PLL的反馈模式:

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

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文件了。

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开始接受配置。

FPGA笔试必会知识点2—FPGA器件的更多相关文章

  1. FPGA笔试必会知识点1--数字电路基本知识

    组合逻辑与时序逻辑 组合逻辑电路:任意时刻电路输出的逻辑状态仅仅取决于当时输入的逻辑状态,而与电路过去的工作状态无关. 时序逻辑电路:任意时刻电路输出的逻辑状态不仅取决于当时输入的逻辑状态,而与电路过 ...

  2. 我的 FPGA 学习历程(01)—— FPGA 基础知识和 Quartus 的安装

    高级的嵌入式市场主要分为以下三类:ARM.DSP 和 FPGA. 其中 ARM 是行业内的佼佼者,目前几乎所有的安卓智能手机都使用 ARM 授权的 CPU架构:而 DSP(数字信号处理器) 早年就被大 ...

  3. [新手必备]Python 基础入门必学知识点笔记

    Python 作为近几年越来越流行的语言,吸引了大量的学员开始学习,为了方便新手小白在学习过程中,更加快捷方便的查漏补缺.根据网上各种乱七八糟的资料以及实验楼的 Python 基础内容整理了一份极度适 ...

  4. java数据库学习路线和必学知识点!

    java数据库必学知识点! 分享一下数据库的学习路线和必学的知识点! 掌握mysql,Oracle在各个平台上的安装及使用 Mysql数据库基础 mysql概述.优点.运行原理及内存结构 mysql数 ...

  5. 大疆2019校招FPGA笔试总结

    1.对于同步fifo,每100个cycle可以写入80个数据,每10个cycle可以读出8个数据,fifo的深度至少为? 写时钟频率 w_clk, 读时钟频率 r_clk, 写时钟周期里,每B个时钟周 ...

  6. EDA技术与ASIC设计和FPGA开发有什么关系?FPGA在ASIC设计中有什么用途?

    利用EDA技术进行电子系统设计的最后目标是完成专用集成电路ASIC的设计和实现:FPGA和CPLD是实现这一途径的主流器件.FPGA和CPLD通常也被称为可编程专用IC,或可编程ASIC.FPGA和C ...

  7. [FPGA] 1、Artix-7 35T Arty FPGA 评估套件学习 + SiFive risc-v 指令集芯片验证

    目录 1.简介 2.深入 3.DEMO 4.SiFive基于risc-v指令集的芯片验证 LINKS 时间 作者 版本 备注 2018-10-09 08:38 beautifulzzzz v1.0 到 ...

  8. 【FPGA篇章一】FPGA工作原理:详细介绍FPGA实现编程逻辑的机理

    欢迎大家关注我的微信公众账号,支持程序媛写出更多优秀的文章 FPGA(Field Programmable Gate Array),即现场可编程逻辑门阵列,它是作为专用集成电路(ASIC)领域中一种半 ...

  9. 实验箱FPGA部分测试报告及A8与FPGA链接测试报告

    其实,我一开始还以为实验箱不会有什么问题只是让我们多学习东西才做这个测试的,结果发现还真的有不少问题. 1.实验准备部分 安装驱动时,win10系统无法正确安装usb-blaster Windows ...

随机推荐

  1. ZJOI2018 D1T2 历史(毕竟我菜,所以题解十分易懂。。)

    我定睛一看,上一篇博客居然是去年省选写的...emmm我果然很懒.. 又是一年省选季,临死前订正一下去年的题吧.. 作为第一天30pts的滚粗选手,我去年并没有怎么思考这题.. 题意概括好麻烦,来来来 ...

  2. Linux第三节课学习笔记

    常见执行Linux命令的格式:命令名称 [命令参数] [命令对象]. 命令参数分长格式与短格式,短格式之间可合并. echo命令用于在终端输出字符串或变量提取后的值,格式为“echo [字符串 | $ ...

  3. java基础-arrayList

      ArrayList: 结构之钱了解了,ArrayList()会构造出一个初始容量=10的空的列表: ArrayList()的增加和删除都是拷贝数组到新的数组(如果当前数组容量不足的话),把数组内的 ...

  4. tomcat之jsp连接mysql数据库

    一.下载并部署mysql连接类 首先下载mysql连接类,下载地址https://dev.mysql.com/downloads/connector/j 如图所示,选择第一个箭头所指的平台无关版本,然 ...

  5. 雨燕apply项目总结

    1,数据库默认值的问题 数据库尽量是非空的,然后不设置默认值,默认值由程序来设计 因为如果程序中设计有错误,应该是空值的地方没有没有处理掉,那插入数据库的时候应该报错,但如果你设置了默认值,排查将会变 ...

  6. devC++代码格式化对齐的快捷键

    devC++代码格式化对齐的快捷键是ctrl + shift + a ctrl + 左右键可以使光标移动一个单词的距离 shirt + 左右键可以选中光标左右的一个字符

  7. YOLO理解

    一.YOLO v1 1.网络结构 (1)最后一层使用线性激活函数: (2)其他各层使用leaky ReLU的激活函数: 2.Training (1) 将原图划分为SxS的网格.如果一个目标的中心落入某 ...

  8. 工控随笔_06_西门子_Step7归档项目无法备份的解决方法

    在一次备份Step7项目时,突然发现无法进行备份而是报错,具体的报错内容如下所示: 图 step7 归档程序时报pkzipc.exe 应用程序错误  内存不能为"read" 一.s ...

  9. DOM 核心

    继承在DOM中的重要性: 1. Node 对象 2. Element 对象 3. Document 对象

  10. 开源在线分析诊断工具Arthas(阿尔萨斯)--总结

    阿里重磅开源在线分析诊断工具Arthas(阿尔萨斯) arthas用法 启动demo java -jar arthas-demo.jar 启动 java -jar arthas-boot.jar at ...