原出处:OpenFPGA
作者:碎碎思
绪论
FPGA编译流程是指将一个FPGA设计从普通RTL描述转换为比特流所需要的一系列步骤。编译流程的顺序会有所不同,这取决于所使用的工具。然而,任何Xilinx FPGA的编译都将包含8个基本步骤:预编译(prebuild)、综合、转换(ngdbuild)、映射(map)、布局布线、静态时序分析、比特流生成(bitgen)和编译后(postbuild)。
转换、映射、布局布线和比特流生成4个阶段通常称为FPGA的物理实现,它们与特定的FPGA结构有关。Xilinx提供了两种IDE工具来设计FPGA,即ISE(Vivado)、PlanAhead,还有其他一些第三方的IDE工具可以进行FPGA设计,如Synopsys、Synplify、Aldec Riviera、Mentor Graphics Precision等。
图1是XilinxFPGA的编译流程。
预编译
预编译很大程度上取决于项目的复杂度和编译流程。需要准备的任务:主要包括:
•从源代码控制库中获取最新的项目和RTL文件
•组成(assembling)项目文件列表
•为综合和物理实现工具设置环境变量
•获取工具软件的许可证
•增加RTL代码中的版本号(build number或revision number)
•替换RTL代码中的宏和定义
综合
简单来说,综合就是将硬件描述语言 (HDL)编写的设计转换为网表的过程。Xilinx 综合工具( Xilinx Synthesis Technology, XST)产生专用的 NGC 格式的网表,其中包含逻辑设计数据和约束。其他综合工具产生工业标准 EDIF 格式的网表。
下面是一个调用 Xilinx XST 的例子:
$ xst -intstyle ise -ifn "/proj/crc.xstf" -ofn "/proj/crc.syr"
XST 包含一百多个不同的选项,为了简洁,这些内容都不在本文讨论。XST 完整的选项列表请参阅 Xilinx XST 用户指南。
转换
Xilinx NGDBUILD 工具将网表转换为 Xilinx 本地通用数据库 (Xilinx Native Generic Data-base, NGD)文件, 其中包含与基本逻辑元件有关的设计描述。所需的 NGDBUILD 参数是设计名称,可选参数是 UCF 格式的用户约束文件、目标目录、FPGA 器件型号等。
以下是调用 NGDBUILD 的例子:
$ ngdbuild -dd _ngo -nt timestamp -uc /ucf/crc.ucf –p xc6slx9-csg225-3 crc.ngc crc.ngd
映射
Xilinx MAP 工具将逻辑设计映射到 Xilinx FPGA 中。MAP 工具的输出是本地电路描述( Native Circuit Description , NCD ) 文件,这是映射到特定 Xilinx FPGA 器件的设计物理描述。MAP 有 30 多个在用户指南命令行工具中描述的选项。最常用的一些如-P( 器件型号)、-ol(整体努力水平)、-t(布局成本表)。MAP 工具有几个用于时序约束、 面积和性能优化的选项,将在其他部分加以详细描述。
下面是一个调用 MAP 工具的例子:
map -p xc6slx9-csg225-3 –w -ol high -t 1 -xt 0 -global_opt off -lc off -o crc map.ncd crc.ngd crc.pcf
布局布线(PAR)
使用 Xilinx 的 PAR 工具对设计进行布局布线。PAR 工具输出 NCD 文件,其中包含关于设计的完整布局布线信息。请注意,文件类型与 MAP 工具产生的类型相同。最常见的PAR 工具的一些选项是-P( 器件型号)、-ol( 整体努力水平)和- t( 布局成本表)。命令行工具用户指南描述了 PAR 选项。
下面是一个调用 PAR 工具的例子:
par -w -ol high crc_map.ncd crc.ncd crc.pcf
静态时序分析
使用 Xilinx TRCE 工具可进行静态时序分析。
比特流生成绪论
BITGEN 是 Xilinx 用于创建 FPGA 配置比特流的工具。以下是调用 BITGEN 的最简单:
例子:
$ bitgen 一f crc.ut crc.ncd
BITGEN 有一百多个命令行选项,能执行不同的 FPGA 配置, 这些选项在命令行工具用户指南中描述。
编译后
在 FPGA 比特流生成后,编译流程可能还会包含以下任务:
•解析编译报告以确定编译是否成功
•复制并归档比特流及中间的编译文件
相关文章推荐
更多FPGA技术干货请关注FPGA的逻辑技术专栏。