FPGA 的详细开发流程就是利用 EDA 开发工具对 FPGA 芯片进行开发的过程,所以 FPGA 芯片开发流程讲的并不是芯片的制造流程,区分于 IC 设计制造流程哟(芯片制造流程多麻烦,要好几十亿的费用呢,而且国内也貌似没有哪家像样的 Foundry 厂,除了台湾的 TSMC 在世界有立足之地,Fabless 的 IC 设计公司倒是挺强的如 Hisilicon,这也是它为什么会被 USA 针对的原因)。
例如,基于标准单元与基于 FPGA 的 APR 自动布局布线的区别在于:FPGA 内部的逻辑单元以及走线资源都是固定的,布局布线工具只是完成如何使用这些资源以使得整个设计收敛;而基于标准单元的 APR 的标准单元位置以及走线资源都是自己设计调整的,所以灵活性更大,更加容易使得整个设计收敛。
如下所示,主要包括电路设计、设计输入、综合(优化)、布局布线(实现与优化)、编程配置五大步骤,其中,还有功能仿真、静态仿真、时序仿真三大仿真,以及综合约束、布局布线约束(包括位置约束和时序约束)两大约束等等。
FPGA 的详细开发流程
Before FPGA Design:在电路设计之前,首先要进行的是算法的设计与验证、方案论证、架构设计和 FPGA 芯片选型等等准备工作;算法工程师可以在 Python 或 Matlab 设计中完成,而至于算法是怎么来的,通常是根据市场需求来开发的,这个就不在本次讨论之中了。系统工程师根据任务要求,如系统的指标和复杂度、成本、功能性和稳定性、性能、对工作速度(延时和工作频率)和芯片本身的各种资源、功耗等等方面进行权衡(红色加粗部分也是数字电子系统的五大设计目标),选择合理的设计方案(浮点定点、设计优化)和合适的 FPGA 器件类型(如 Cylone、Spartan、Artix、Virtex、Kintex、还是 Zynq 或者是 Zynq UltraScale + 等等)。
FPGA Design:电路设计方法分为自底向上和自顶向下的设计方法;通常都采用自顶向下的设计方法:从系统设计开始,逐渐向子系统设计、模块设计、器件设计、版图设计等等更加物理的层次推进,直到可以直接使用 EDA 元件库为止,能够先勾勒出来电路了,才开始 Coding(记住,Coding Style 也很重要哟)。
电路设计流程
设计输入指的是将设计者所涉及的电路以开发软件要求的某种形式表达出来,并输入到相应的软件中的过程。最常见的设计输入的表达方式为 IP 核、原理图(Schematic)和 HDL 文本输入。
这里的 IP 按照来源的不同可以分为三类,第一种是来自前一个设计创建的模块(Design by Yourself),第二种是 FPGA 厂家,第三种就是来自 IP 厂商。而按照产品交付的形式,IP 核又分为软核(HDL 或 Netlist 形式的功能块,如 MicroBlaze 软核)、硬核(版图形式,提供设计的最终阶段产品,即掩膜,如 Zedboard 的 ARM Cortex-A9)、固核(Netlist 形式,完成了综合与布局布线的功能块,只能基于特定芯片的 IP 核)。
FPGA 厂家和 IP 厂商可以在 FPGA 开发的不同时期提供给我们不同的 IP,我们暂且知道他们分别是未加密的 RTL 级 IP、加密的 RTL 级 IP、未经布局布线的网表级 IP、布局布线后的网表级 IP。
无论是什么样的设计输入,最终都要通过综合,生成统一的网表形式,从而与 FPGA 硬件资源互相匹配。例如,FPGA 是基于 LUT 结构的,那么就综合出一个基于 LUT 的门级网表文件(不同于 IC 的综合)。
IC 综合指的是将高级抽象层次的设计描述自动转化为较低层次描述的过程,或者说,综合器就是能够将 Schematic 或者 HDL 文本语言描述的电路,编译成由与或阵列、RAM、触发器、寄存器等逻辑单元组成的电路结构的门级网表文件的工具,即 RTL - to - Netlist。
综合包括编译、映射和优化,编译就是 HDL → 门级网表,映射就是门级网表 → LUT,优化就是优化设计。
在 Altera 的开发流程中,编译和映射的过程叫做综合,而在 Xilinx 的开发流程中,由设计输入得到门级网表的过程叫做综合。
综合的形式如下所示:
数字系统设计器件如下所示:
谈及布局布线之前,首先要谈到实现(Implementation)。实现就是将综合生成的门级网表配置到具体的 FPGA 芯片上,而布局布线就是其中最重要的过程。Vivado 中的实现具体如下所示,分为设计初始化(Design Initialization)、优化设计(Opt Design)、功耗优化设计(Power Opt Design)、布局设计(Place Design)、后布局功耗优化设计(Post-Place Power Opt Design)、后布局物理优化设计(Post-Place Phys Opt Design)、布线设计(Route Design)、后布线物理优化设计(Post-Route Phys Opt Design)、生成比特流(Write Bitstream)。
布局布线流程
布局布线指的是将综合生成的电路门级网表映射到具体的目标器件中实现,并产生最终的可下载文件的过程。
布局布线完成之后将产生如下一些重要的文件:
约束分为综合约束(一级约束)和布局布线约束(二级约束),综合约束如资源共享约束(不同的约束将会导致生成不同性能的电路),布局布线约束又可以分为位置约束、时序约束。
约束,就是对这些操作环节定制规则,定制条件,比如引脚约束和时序约束;一般开发环境会对这些约束有个默认,这些默认的设置对大部分情况下还是适用的,但是通常布局布线约束中的 I/O 约束是我们每一个工程都必须给定的。
仿真指的是对所设计电路功能的验证。仿真包括(功能)RTL 仿真、(门级)静态仿真和时序仿真。
从验证完整性而言,前端仿真和后端仿真均需要在项目中实施,而它们侧重的目标也有不同。前端仿真是为了检测出功能逻辑的缺陷,而后端仿真是为了检测出实际门级电路中由于延时问题可能导致采样失败进而产生的功能缺陷。
编程配置就是生成比特流并载入 FPGA 芯片中的一个过程。
全部0条评论
快来发表一下你的评论吧 !