传统FPGA开发流程的9大步骤是哪些?

FPGA 的传统开发流程,通常被称为 "RTL 到比特流" 的设计流程,是 FPGA 开发中最基础、最核心的步骤。

整个流程可以分为以下几个主要阶段,下图清晰地展示了这一循序渐进的过程:

1、需求分析与方案制定

这是所有工作的起点,也是最容易,被忽视但至关重要的一步。

  • 目标: 明确设计要实现的功能、性能指标和接口要求。
  • 主要工作:
    • 需求分析: 理解系统需求,分析具体的功能。
    • 架构设计: 确定数据流、控制流和模块间的接口方式(如握手协议、FIFO等)。
    • 资源评估: 估算所需的逻辑单元、存储器、DSP块和I/O引脚数量,以选择合适的FPGA芯片。
    • 时钟规划: 设计时钟域,确定时钟频率和来源,处理跨时钟域问题。
  • 输出: 设计规格书、系统架构图、硬件设计方案。

2. 功能定义与模块划分

这一步设计具体的系统架构方案。

  • 主要工作: 采用"自顶向下"的设计方法,将整个系统划分为多个功能子模块(如时钟管理、数据采集、数据处理、协议封装等)。并明确定义每个模块的接口和功能。
  • 输出: 模块划分文档、接口定义文档。

3. HDL代码设计

将设计思路用硬件描述语言或原理图的形式表达出来。

  • 主要工作:
    • 编写HDL代码: 使用 Verilog 或 VHDL 编写各个模块的代码。这是最主流的方式。
    • 创建原理图: 对于一些简单的逻辑或使用厂商提供的IP核。可能会用到图形化的原理图输入方式,比如vivado的block design。
    • IP核集成: 调用FPGA厂商提供的IP核(如FIFO、PLL、DDR控制器、PCIe接口等),并对其进行配置。
  • 输入: 设计规格书、架构图。
  • 输出: Verilog/VHDL源文件、约束文件(初步)、IP核配置文件。
  • 常用工具: 任何文本编辑器(如VS Code、Sublime Text)、Vim,以及厂商IDE自带的编辑器。

4. 功能仿真

在代码编写完成后,进行逻辑功能的验证,确保代码的行为符合设计预期。

  • 主要工作:
    • 编写Testbench: 创建一个独立的仿真模块,为被测设计提供激励信号(如时钟、复位、输入数据),并检查其输出是否正确。
    • 运行仿真: 使用仿真工具执行Testbench,观察波形图。
    • 调试: 如果功能不正确,返回设计输入阶段修改代码,然后重新仿真,直到功能完全正确。
  • 输入: RTL代码、Testbench代码。
  • 输出: 仿真波形图、功能验证报告。
  • 常用工具:
    • Mentor Graphics (Siemens EDA): ModelSim/QuestaSim (行业标准)
    • Synopsys: VCS
    • Cadence: Xcelium
    • Aldec: Riviera-PRO / Active-HDL
    • 开源: Icarus Verilog, GHDL (配合GTKWave)

5. 综合

将RTL代码转换为FPGA底层的基本逻辑单元(如查找表LUT、触发器FF、布线资源等)构成的网表,

  • 主要工作:
    • 翻译: 将HDL代码解析为中间表示。
    • 优化: 对逻辑进行优化,如逻辑化简、状态机优化等。
    • 映射: 将优化后的逻辑映射到目标FPGA器件的特定硬件资源上(例如,一个4输入与门映射到一个LUT)。
  • 输入: 经过功能仿真的RTL代码、约束文件(包含时钟定义、I/O引脚分配等)。
  • 输出: 综合后的网表文件(通常是EDIF或NGC格式)。
  • 常用工具:
    • Xilinx (AMD): Vivado Synthesis
    • Intel (Altera): Quartus Prime Synthesis
    • 第三方: Synplify Pro (以其出色的优化效果而闻名)

6. 实现

将综合生成的网表"放置"到FPGA的物理位置上,并"连接"好它们之间的布线。

完成逻辑单元的布局和布线。生成可以下载到FPGA中的物理布局信息。

  • 主要工作:
    • 翻译: 将综合后的网表和约束文件转换为更底层的描述。
    • 映射: (在某些流程中,这一步与综合的映射合并或在此处细化)。
    • 布局: 确定每个逻辑单元在FPGA芯片上的具体物理位置。
    • 布线: 在逻辑单元之间建立物理连接通道。
  • 输入: 综合后的网表、约束文件。
  • 输出: 布局布线后的设计文件(包含详细的物理位置和延迟信息)。
  • 常用工具: 厂商IDE自带(Vivado Implementation, Quartus Prime Fitter)。

7. 时序分析

在布局布线完成后,对设计进行精确的时序验证,确保电路能在目标时钟频率下正常工作。

  • 目标: 验证设计是否满足所有的时序要求,特别是建立时间和保持时间。
  • 主要工作:
    • 静态时序分析: EDA工具会根据布局布线后得到的精确延迟信息,分析每一条路径的时序。
    • 检查报告: 查看时序报告,找出所有不满足时序要求的路径。
    • 迭代优化: 如果时序不满足,需要返回综合或实现阶段,通过修改约束、调整综合策略或修改RTL代码(如增加流水线)来重新优化,直到时序收敛。
  • 输入: 布局布线后的设计、时序约束文件。
  • 输出: 时序分析报告。
  • 常用工具: 厂商IDE内置的STA工具(Vivado Timing Report, Quartus Prime TimeQuest Analyzer)。

8. 生成比特文件

当时序和功能都满足要求后,生成可以下载到FPGA芯片中的比特流文件。

  • 目标: 将布局布线后的设计信息转换为FPGA可以识别的二进制配置文件。
  • 主要工作: 运行"生成比特流"工具。
  • 输入: 布局布线后且时序通过的设计。
  • 输出: 配置文件。
    • Xilinx: .bit 文件 (用于JTAG下载), .bin 文件 (用于Flash配置)
    • Intel: .sof 文件 (用于JTAG下载), .pof 文件 (用于Flash配置)

9. 下载与调试

将生成的配置文件下载到实际的FPGA硬件板上,并进行在线调试。

  • 目标: 在真实硬件上验证设计的最终功能。
  • 主要工作:
    • 硬件连接: 通过JTAG接口将PC和FPGA开发板连接起来。
    • 下载: 使用下载工具将.bit或.sof文件烧录到FPGA的SRAM中。
    • 在线调试: 如果出现问题,使用FPGA厂商提供的调试工具。
      • Xilinx: ChipScope (较老) / Vivado Logic Analyzer (集成在Vivado中)
      • Intel: SignalTap (集成在Quartus中)这些工具可以将FPGA内部的信号实时抓取出来,在PC上显示波形,类似于一个"硬件示波器"。
  • 输入: 配置文件、FPGA开发板。
  • 输出: 在硬件上运行的设计、调试波形。
  • 常用工具: Vivado Hardware Manager, Quartus Prime Programmer。

如果需要更多学习资料和源码,想要学习FPGA实战入门进阶,请阅读下面这篇文章:

FPGA实战入门真的难吗?看这里,少走弯路,少踩坑。

往期阅读:

《FPGA基础》系列教程汇总

Vivado常用使用技巧系列文章汇总

FPGA时序约束系列文章汇总

FPGA书籍系列文章汇总

FPGA进阶系列文章汇总

FPGA图像处理专栏系列文章汇总

FPGA笔试面试如何准备?(附面试题下载)

相关推荐
我爱C编程5 小时前
【硬件片内测试】基于FPGA的完整DQPSK链路测试,含频偏锁定,帧同步,定时点,Viterbi译码,信道,误码统计
fpga开发·帧同步·viterbi译码·dqpsk·频偏锁定·定时点
szxinmai主板定制专家6 小时前
【NI测试方案】基于ARM+FPGA的整车仿真与电池标定
arm开发·人工智能·yolo·fpga开发
爱吃汽的小橘20 小时前
基于ads1256的ADC控制实现
fpga开发
易享电子2 天前
基于单片机车窗环境监测控制系统Proteus仿真(含全部资料)
单片机·嵌入式硬件·fpga开发·51单片机·proteus
cycf2 天前
系统同步接口输入延迟(五)
fpga开发
cmc10282 天前
131.如何区分FPGA芯片型号是-2l还是-2方法
fpga开发
sz66cm2 天前
FPGA基础 -- 无毛刺时钟切换(glitch-free clock switching)
fpga开发
Blossom.1182 天前
把AI“绣”进丝绸:生成式刺绣神经网络让古装自带摄像头
人工智能·pytorch·python·深度学习·神经网络·机器学习·fpga开发
电子凉冰2 天前
FPGA强化-VGA显示设计与验证
fpga开发